Linux Audio

Check our new training course

Loading...
v4.6
 
    1/*
    2 * Copyright (C) 2007 Oracle.  All rights reserved.
    3 *
    4 * This program is free software; you can redistribute it and/or
    5 * modify it under the terms of the GNU General Public
    6 * License v2 as published by the Free Software Foundation.
    7 *
    8 * This program is distributed in the hope that it will be useful,
    9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
   10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   11 * General Public License for more details.
   12 *
   13 * You should have received a copy of the GNU General Public
   14 * License along with this program; if not, write to the
   15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   16 * Boston, MA 021110-1307, USA.
   17 */
 
   18#include <linux/sched.h>
 
   19#include <linux/pagemap.h>
   20#include <linux/writeback.h>
   21#include <linux/blkdev.h>
   22#include <linux/sort.h>
   23#include <linux/rcupdate.h>
   24#include <linux/kthread.h>
   25#include <linux/slab.h>
   26#include <linux/ratelimit.h>
   27#include <linux/percpu_counter.h>
   28#include "hash.h"
   29#include "tree-log.h"
 
 
 
   30#include "disk-io.h"
   31#include "print-tree.h"
   32#include "volumes.h"
   33#include "raid56.h"
   34#include "locking.h"
   35#include "free-space-cache.h"
   36#include "free-space-tree.h"
   37#include "math.h"
   38#include "sysfs.h"
   39#include "qgroup.h"
 
 
 
 
 
 
 
 
 
 
 
 
 
   40
   41#undef SCRAMBLE_DELAYED_REFS
   42
   43/*
   44 * control flags for do_chunk_alloc's force field
   45 * CHUNK_ALLOC_NO_FORCE means to only allocate a chunk
   46 * if we really need one.
   47 *
   48 * CHUNK_ALLOC_LIMITED means to only try and allocate one
   49 * if we have very few chunks already allocated.  This is
   50 * used as part of the clustering code to help make sure
   51 * we have a good pool of storage to cluster in, without
   52 * filling the FS with empty chunks
   53 *
   54 * CHUNK_ALLOC_FORCE means it must try to allocate one
   55 *
   56 */
   57enum {
   58	CHUNK_ALLOC_NO_FORCE = 0,
   59	CHUNK_ALLOC_LIMITED = 1,
   60	CHUNK_ALLOC_FORCE = 2,
   61};
   62
   63/*
   64 * Control how reservations are dealt with.
   65 *
   66 * RESERVE_FREE - freeing a reservation.
   67 * RESERVE_ALLOC - allocating space and we need to update bytes_may_use for
   68 *   ENOSPC accounting
   69 * RESERVE_ALLOC_NO_ACCOUNT - allocating space and we should not update
   70 *   bytes_may_use as the ENOSPC accounting is done elsewhere
   71 */
   72enum {
   73	RESERVE_FREE = 0,
   74	RESERVE_ALLOC = 1,
   75	RESERVE_ALLOC_NO_ACCOUNT = 2,
   76};
   77
   78static int update_block_group(struct btrfs_trans_handle *trans,
   79			      struct btrfs_root *root, u64 bytenr,
   80			      u64 num_bytes, int alloc);
   81static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
   82				struct btrfs_root *root,
   83				struct btrfs_delayed_ref_node *node, u64 parent,
   84				u64 root_objectid, u64 owner_objectid,
   85				u64 owner_offset, int refs_to_drop,
   86				struct btrfs_delayed_extent_op *extra_op);
   87static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
   88				    struct extent_buffer *leaf,
   89				    struct btrfs_extent_item *ei);
   90static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
   91				      struct btrfs_root *root,
   92				      u64 parent, u64 root_objectid,
   93				      u64 flags, u64 owner, u64 offset,
   94				      struct btrfs_key *ins, int ref_mod);
   95static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
   96				     struct btrfs_root *root,
   97				     u64 parent, u64 root_objectid,
   98				     u64 flags, struct btrfs_disk_key *key,
   99				     int level, struct btrfs_key *ins);
  100static int do_chunk_alloc(struct btrfs_trans_handle *trans,
  101			  struct btrfs_root *extent_root, u64 flags,
  102			  int force);
  103static int find_next_key(struct btrfs_path *path, int level,
  104			 struct btrfs_key *key);
  105static void dump_space_info(struct btrfs_space_info *info, u64 bytes,
  106			    int dump_block_groups);
  107static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
  108				       u64 num_bytes, int reserve,
  109				       int delalloc);
  110static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
  111			       u64 num_bytes);
  112int btrfs_pin_extent(struct btrfs_root *root,
  113		     u64 bytenr, u64 num_bytes, int reserved);
  114
  115static noinline int
  116block_group_cache_done(struct btrfs_block_group_cache *cache)
  117{
  118	smp_mb();
  119	return cache->cached == BTRFS_CACHE_FINISHED ||
  120		cache->cached == BTRFS_CACHE_ERROR;
  121}
  122
  123static int block_group_bits(struct btrfs_block_group_cache *cache, u64 bits)
  124{
  125	return (cache->flags & bits) == bits;
  126}
  127
  128void btrfs_get_block_group(struct btrfs_block_group_cache *cache)
  129{
  130	atomic_inc(&cache->count);
  131}
  132
  133void btrfs_put_block_group(struct btrfs_block_group_cache *cache)
  134{
  135	if (atomic_dec_and_test(&cache->count)) {
  136		WARN_ON(cache->pinned > 0);
  137		WARN_ON(cache->reserved > 0);
  138		kfree(cache->free_space_ctl);
  139		kfree(cache);
  140	}
  141}
  142
  143/*
  144 * this adds the block group to the fs_info rb tree for the block group
  145 * cache
  146 */
  147static int btrfs_add_block_group_cache(struct btrfs_fs_info *info,
  148				struct btrfs_block_group_cache *block_group)
  149{
  150	struct rb_node **p;
  151	struct rb_node *parent = NULL;
  152	struct btrfs_block_group_cache *cache;
  153
  154	spin_lock(&info->block_group_cache_lock);
  155	p = &info->block_group_cache_tree.rb_node;
  156
  157	while (*p) {
  158		parent = *p;
  159		cache = rb_entry(parent, struct btrfs_block_group_cache,
  160				 cache_node);
  161		if (block_group->key.objectid < cache->key.objectid) {
  162			p = &(*p)->rb_left;
  163		} else if (block_group->key.objectid > cache->key.objectid) {
  164			p = &(*p)->rb_right;
  165		} else {
  166			spin_unlock(&info->block_group_cache_lock);
  167			return -EEXIST;
  168		}
  169	}
  170
  171	rb_link_node(&block_group->cache_node, parent, p);
  172	rb_insert_color(&block_group->cache_node,
  173			&info->block_group_cache_tree);
  174
  175	if (info->first_logical_byte > block_group->key.objectid)
  176		info->first_logical_byte = block_group->key.objectid;
  177
  178	spin_unlock(&info->block_group_cache_lock);
  179
  180	return 0;
  181}
  182
  183/*
  184 * This will return the block group at or after bytenr if contains is 0, else
  185 * it will return the block group that contains the bytenr
  186 */
  187static struct btrfs_block_group_cache *
  188block_group_cache_tree_search(struct btrfs_fs_info *info, u64 bytenr,
  189			      int contains)
  190{
  191	struct btrfs_block_group_cache *cache, *ret = NULL;
  192	struct rb_node *n;
  193	u64 end, start;
  194
  195	spin_lock(&info->block_group_cache_lock);
  196	n = info->block_group_cache_tree.rb_node;
  197
  198	while (n) {
  199		cache = rb_entry(n, struct btrfs_block_group_cache,
  200				 cache_node);
  201		end = cache->key.objectid + cache->key.offset - 1;
  202		start = cache->key.objectid;
  203
  204		if (bytenr < start) {
  205			if (!contains && (!ret || start < ret->key.objectid))
  206				ret = cache;
  207			n = n->rb_left;
  208		} else if (bytenr > start) {
  209			if (contains && bytenr <= end) {
  210				ret = cache;
  211				break;
  212			}
  213			n = n->rb_right;
  214		} else {
  215			ret = cache;
  216			break;
  217		}
  218	}
  219	if (ret) {
  220		btrfs_get_block_group(ret);
  221		if (bytenr == 0 && info->first_logical_byte > ret->key.objectid)
  222			info->first_logical_byte = ret->key.objectid;
  223	}
  224	spin_unlock(&info->block_group_cache_lock);
  225
  226	return ret;
  227}
  228
  229static int add_excluded_extent(struct btrfs_root *root,
  230			       u64 start, u64 num_bytes)
  231{
  232	u64 end = start + num_bytes - 1;
  233	set_extent_bits(&root->fs_info->freed_extents[0],
  234			start, end, EXTENT_UPTODATE, GFP_NOFS);
  235	set_extent_bits(&root->fs_info->freed_extents[1],
  236			start, end, EXTENT_UPTODATE, GFP_NOFS);
  237	return 0;
  238}
  239
  240static void free_excluded_extents(struct btrfs_root *root,
  241				  struct btrfs_block_group_cache *cache)
  242{
  243	u64 start, end;
  244
  245	start = cache->key.objectid;
  246	end = start + cache->key.offset - 1;
  247
  248	clear_extent_bits(&root->fs_info->freed_extents[0],
  249			  start, end, EXTENT_UPTODATE, GFP_NOFS);
  250	clear_extent_bits(&root->fs_info->freed_extents[1],
  251			  start, end, EXTENT_UPTODATE, GFP_NOFS);
  252}
  253
  254static int exclude_super_stripes(struct btrfs_root *root,
  255				 struct btrfs_block_group_cache *cache)
  256{
  257	u64 bytenr;
  258	u64 *logical;
  259	int stripe_len;
  260	int i, nr, ret;
  261
  262	if (cache->key.objectid < BTRFS_SUPER_INFO_OFFSET) {
  263		stripe_len = BTRFS_SUPER_INFO_OFFSET - cache->key.objectid;
  264		cache->bytes_super += stripe_len;
  265		ret = add_excluded_extent(root, cache->key.objectid,
  266					  stripe_len);
  267		if (ret)
  268			return ret;
  269	}
  270
  271	for (i = 0; i < BTRFS_SUPER_MIRROR_MAX; i++) {
  272		bytenr = btrfs_sb_offset(i);
  273		ret = btrfs_rmap_block(&root->fs_info->mapping_tree,
  274				       cache->key.objectid, bytenr,
  275				       0, &logical, &nr, &stripe_len);
  276		if (ret)
  277			return ret;
  278
  279		while (nr--) {
  280			u64 start, len;
  281
  282			if (logical[nr] > cache->key.objectid +
  283			    cache->key.offset)
  284				continue;
  285
  286			if (logical[nr] + stripe_len <= cache->key.objectid)
  287				continue;
  288
  289			start = logical[nr];
  290			if (start < cache->key.objectid) {
  291				start = cache->key.objectid;
  292				len = (logical[nr] + stripe_len) - start;
  293			} else {
  294				len = min_t(u64, stripe_len,
  295					    cache->key.objectid +
  296					    cache->key.offset - start);
  297			}
  298
  299			cache->bytes_super += len;
  300			ret = add_excluded_extent(root, start, len);
  301			if (ret) {
  302				kfree(logical);
  303				return ret;
  304			}
  305		}
  306
  307		kfree(logical);
  308	}
  309	return 0;
  310}
  311
  312static struct btrfs_caching_control *
  313get_caching_control(struct btrfs_block_group_cache *cache)
  314{
  315	struct btrfs_caching_control *ctl;
  316
  317	spin_lock(&cache->lock);
  318	if (!cache->caching_ctl) {
  319		spin_unlock(&cache->lock);
  320		return NULL;
  321	}
  322
  323	ctl = cache->caching_ctl;
  324	atomic_inc(&ctl->count);
  325	spin_unlock(&cache->lock);
  326	return ctl;
  327}
  328
  329static void put_caching_control(struct btrfs_caching_control *ctl)
  330{
  331	if (atomic_dec_and_test(&ctl->count))
  332		kfree(ctl);
  333}
  334
  335#ifdef CONFIG_BTRFS_DEBUG
  336static void fragment_free_space(struct btrfs_root *root,
  337				struct btrfs_block_group_cache *block_group)
  338{
  339	u64 start = block_group->key.objectid;
  340	u64 len = block_group->key.offset;
  341	u64 chunk = block_group->flags & BTRFS_BLOCK_GROUP_METADATA ?
  342		root->nodesize : root->sectorsize;
  343	u64 step = chunk << 1;
  344
  345	while (len > chunk) {
  346		btrfs_remove_free_space(block_group, start, chunk);
  347		start += step;
  348		if (len < step)
  349			len = 0;
  350		else
  351			len -= step;
  352	}
  353}
  354#endif
  355
  356/*
  357 * this is only called by cache_block_group, since we could have freed extents
  358 * we need to check the pinned_extents for any extents that can't be used yet
  359 * since their free space will be released as soon as the transaction commits.
  360 */
  361u64 add_new_free_space(struct btrfs_block_group_cache *block_group,
  362		       struct btrfs_fs_info *info, u64 start, u64 end)
  363{
  364	u64 extent_start, extent_end, size, total_added = 0;
  365	int ret;
  366
  367	while (start < end) {
  368		ret = find_first_extent_bit(info->pinned_extents, start,
  369					    &extent_start, &extent_end,
  370					    EXTENT_DIRTY | EXTENT_UPTODATE,
  371					    NULL);
  372		if (ret)
  373			break;
  374
  375		if (extent_start <= start) {
  376			start = extent_end + 1;
  377		} else if (extent_start > start && extent_start < end) {
  378			size = extent_start - start;
  379			total_added += size;
  380			ret = btrfs_add_free_space(block_group, start,
  381						   size);
  382			BUG_ON(ret); /* -ENOMEM or logic error */
  383			start = extent_end + 1;
  384		} else {
  385			break;
  386		}
  387	}
  388
  389	if (start < end) {
  390		size = end - start;
  391		total_added += size;
  392		ret = btrfs_add_free_space(block_group, start, size);
  393		BUG_ON(ret); /* -ENOMEM or logic error */
  394	}
  395
  396	return total_added;
  397}
  398
  399static int load_extent_tree_free(struct btrfs_caching_control *caching_ctl)
  400{
  401	struct btrfs_block_group_cache *block_group;
  402	struct btrfs_fs_info *fs_info;
  403	struct btrfs_root *extent_root;
  404	struct btrfs_path *path;
  405	struct extent_buffer *leaf;
  406	struct btrfs_key key;
  407	u64 total_found = 0;
  408	u64 last = 0;
  409	u32 nritems;
  410	int ret;
  411	bool wakeup = true;
  412
  413	block_group = caching_ctl->block_group;
  414	fs_info = block_group->fs_info;
  415	extent_root = fs_info->extent_root;
  416
  417	path = btrfs_alloc_path();
  418	if (!path)
  419		return -ENOMEM;
  420
  421	last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET);
  422
  423#ifdef CONFIG_BTRFS_DEBUG
  424	/*
  425	 * If we're fragmenting we don't want to make anybody think we can
  426	 * allocate from this block group until we've had a chance to fragment
  427	 * the free space.
  428	 */
  429	if (btrfs_should_fragment_free_space(extent_root, block_group))
  430		wakeup = false;
  431#endif
  432	/*
  433	 * We don't want to deadlock with somebody trying to allocate a new
  434	 * extent for the extent root while also trying to search the extent
  435	 * root to add free space.  So we skip locking and search the commit
  436	 * root, since its read-only
  437	 */
  438	path->skip_locking = 1;
  439	path->search_commit_root = 1;
  440	path->reada = READA_FORWARD;
  441
  442	key.objectid = last;
  443	key.offset = 0;
  444	key.type = BTRFS_EXTENT_ITEM_KEY;
  445
  446next:
  447	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
  448	if (ret < 0)
  449		goto out;
  450
  451	leaf = path->nodes[0];
  452	nritems = btrfs_header_nritems(leaf);
  453
  454	while (1) {
  455		if (btrfs_fs_closing(fs_info) > 1) {
  456			last = (u64)-1;
  457			break;
  458		}
  459
  460		if (path->slots[0] < nritems) {
  461			btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
  462		} else {
  463			ret = find_next_key(path, 0, &key);
  464			if (ret)
  465				break;
  466
  467			if (need_resched() ||
  468			    rwsem_is_contended(&fs_info->commit_root_sem)) {
  469				if (wakeup)
  470					caching_ctl->progress = last;
  471				btrfs_release_path(path);
  472				up_read(&fs_info->commit_root_sem);
  473				mutex_unlock(&caching_ctl->mutex);
  474				cond_resched();
  475				mutex_lock(&caching_ctl->mutex);
  476				down_read(&fs_info->commit_root_sem);
  477				goto next;
  478			}
  479
  480			ret = btrfs_next_leaf(extent_root, path);
  481			if (ret < 0)
  482				goto out;
  483			if (ret)
  484				break;
  485			leaf = path->nodes[0];
  486			nritems = btrfs_header_nritems(leaf);
  487			continue;
  488		}
  489
  490		if (key.objectid < last) {
  491			key.objectid = last;
  492			key.offset = 0;
  493			key.type = BTRFS_EXTENT_ITEM_KEY;
  494
  495			if (wakeup)
  496				caching_ctl->progress = last;
  497			btrfs_release_path(path);
  498			goto next;
  499		}
  500
  501		if (key.objectid < block_group->key.objectid) {
  502			path->slots[0]++;
  503			continue;
  504		}
  505
  506		if (key.objectid >= block_group->key.objectid +
  507		    block_group->key.offset)
  508			break;
  509
  510		if (key.type == BTRFS_EXTENT_ITEM_KEY ||
  511		    key.type == BTRFS_METADATA_ITEM_KEY) {
  512			total_found += add_new_free_space(block_group,
  513							  fs_info, last,
  514							  key.objectid);
  515			if (key.type == BTRFS_METADATA_ITEM_KEY)
  516				last = key.objectid +
  517					fs_info->tree_root->nodesize;
  518			else
  519				last = key.objectid + key.offset;
  520
  521			if (total_found > CACHING_CTL_WAKE_UP) {
  522				total_found = 0;
  523				if (wakeup)
  524					wake_up(&caching_ctl->wait);
  525			}
  526		}
  527		path->slots[0]++;
  528	}
  529	ret = 0;
  530
  531	total_found += add_new_free_space(block_group, fs_info, last,
  532					  block_group->key.objectid +
  533					  block_group->key.offset);
  534	caching_ctl->progress = (u64)-1;
  535
  536out:
  537	btrfs_free_path(path);
  538	return ret;
  539}
  540
  541static noinline void caching_thread(struct btrfs_work *work)
  542{
  543	struct btrfs_block_group_cache *block_group;
  544	struct btrfs_fs_info *fs_info;
  545	struct btrfs_caching_control *caching_ctl;
  546	struct btrfs_root *extent_root;
  547	int ret;
  548
  549	caching_ctl = container_of(work, struct btrfs_caching_control, work);
  550	block_group = caching_ctl->block_group;
  551	fs_info = block_group->fs_info;
  552	extent_root = fs_info->extent_root;
  553
  554	mutex_lock(&caching_ctl->mutex);
  555	down_read(&fs_info->commit_root_sem);
  556
  557	if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE))
  558		ret = load_free_space_tree(caching_ctl);
  559	else
  560		ret = load_extent_tree_free(caching_ctl);
  561
  562	spin_lock(&block_group->lock);
  563	block_group->caching_ctl = NULL;
  564	block_group->cached = ret ? BTRFS_CACHE_ERROR : BTRFS_CACHE_FINISHED;
  565	spin_unlock(&block_group->lock);
  566
  567#ifdef CONFIG_BTRFS_DEBUG
  568	if (btrfs_should_fragment_free_space(extent_root, block_group)) {
  569		u64 bytes_used;
  570
  571		spin_lock(&block_group->space_info->lock);
  572		spin_lock(&block_group->lock);
  573		bytes_used = block_group->key.offset -
  574			btrfs_block_group_used(&block_group->item);
  575		block_group->space_info->bytes_used += bytes_used >> 1;
  576		spin_unlock(&block_group->lock);
  577		spin_unlock(&block_group->space_info->lock);
  578		fragment_free_space(extent_root, block_group);
  579	}
  580#endif
  581
  582	caching_ctl->progress = (u64)-1;
  583
  584	up_read(&fs_info->commit_root_sem);
  585	free_excluded_extents(fs_info->extent_root, block_group);
  586	mutex_unlock(&caching_ctl->mutex);
  587
  588	wake_up(&caching_ctl->wait);
  589
  590	put_caching_control(caching_ctl);
  591	btrfs_put_block_group(block_group);
  592}
  593
  594static int cache_block_group(struct btrfs_block_group_cache *cache,
  595			     int load_cache_only)
  596{
  597	DEFINE_WAIT(wait);
  598	struct btrfs_fs_info *fs_info = cache->fs_info;
  599	struct btrfs_caching_control *caching_ctl;
  600	int ret = 0;
  601
  602	caching_ctl = kzalloc(sizeof(*caching_ctl), GFP_NOFS);
  603	if (!caching_ctl)
  604		return -ENOMEM;
  605
  606	INIT_LIST_HEAD(&caching_ctl->list);
  607	mutex_init(&caching_ctl->mutex);
  608	init_waitqueue_head(&caching_ctl->wait);
  609	caching_ctl->block_group = cache;
  610	caching_ctl->progress = cache->key.objectid;
  611	atomic_set(&caching_ctl->count, 1);
  612	btrfs_init_work(&caching_ctl->work, btrfs_cache_helper,
  613			caching_thread, NULL, NULL);
  614
  615	spin_lock(&cache->lock);
  616	/*
  617	 * This should be a rare occasion, but this could happen I think in the
  618	 * case where one thread starts to load the space cache info, and then
  619	 * some other thread starts a transaction commit which tries to do an
  620	 * allocation while the other thread is still loading the space cache
  621	 * info.  The previous loop should have kept us from choosing this block
  622	 * group, but if we've moved to the state where we will wait on caching
  623	 * block groups we need to first check if we're doing a fast load here,
  624	 * so we can wait for it to finish, otherwise we could end up allocating
  625	 * from a block group who's cache gets evicted for one reason or
  626	 * another.
  627	 */
  628	while (cache->cached == BTRFS_CACHE_FAST) {
  629		struct btrfs_caching_control *ctl;
  630
  631		ctl = cache->caching_ctl;
  632		atomic_inc(&ctl->count);
  633		prepare_to_wait(&ctl->wait, &wait, TASK_UNINTERRUPTIBLE);
  634		spin_unlock(&cache->lock);
  635
  636		schedule();
  637
  638		finish_wait(&ctl->wait, &wait);
  639		put_caching_control(ctl);
  640		spin_lock(&cache->lock);
  641	}
  642
  643	if (cache->cached != BTRFS_CACHE_NO) {
  644		spin_unlock(&cache->lock);
  645		kfree(caching_ctl);
  646		return 0;
  647	}
  648	WARN_ON(cache->caching_ctl);
  649	cache->caching_ctl = caching_ctl;
  650	cache->cached = BTRFS_CACHE_FAST;
  651	spin_unlock(&cache->lock);
  652
  653	if (fs_info->mount_opt & BTRFS_MOUNT_SPACE_CACHE) {
  654		mutex_lock(&caching_ctl->mutex);
  655		ret = load_free_space_cache(fs_info, cache);
  656
  657		spin_lock(&cache->lock);
  658		if (ret == 1) {
  659			cache->caching_ctl = NULL;
  660			cache->cached = BTRFS_CACHE_FINISHED;
  661			cache->last_byte_to_unpin = (u64)-1;
  662			caching_ctl->progress = (u64)-1;
  663		} else {
  664			if (load_cache_only) {
  665				cache->caching_ctl = NULL;
  666				cache->cached = BTRFS_CACHE_NO;
  667			} else {
  668				cache->cached = BTRFS_CACHE_STARTED;
  669				cache->has_caching_ctl = 1;
  670			}
  671		}
  672		spin_unlock(&cache->lock);
  673#ifdef CONFIG_BTRFS_DEBUG
  674		if (ret == 1 &&
  675		    btrfs_should_fragment_free_space(fs_info->extent_root,
  676						     cache)) {
  677			u64 bytes_used;
  678
  679			spin_lock(&cache->space_info->lock);
  680			spin_lock(&cache->lock);
  681			bytes_used = cache->key.offset -
  682				btrfs_block_group_used(&cache->item);
  683			cache->space_info->bytes_used += bytes_used >> 1;
  684			spin_unlock(&cache->lock);
  685			spin_unlock(&cache->space_info->lock);
  686			fragment_free_space(fs_info->extent_root, cache);
  687		}
  688#endif
  689		mutex_unlock(&caching_ctl->mutex);
  690
  691		wake_up(&caching_ctl->wait);
  692		if (ret == 1) {
  693			put_caching_control(caching_ctl);
  694			free_excluded_extents(fs_info->extent_root, cache);
  695			return 0;
  696		}
  697	} else {
  698		/*
  699		 * We're either using the free space tree or no caching at all.
  700		 * Set cached to the appropriate value and wakeup any waiters.
  701		 */
  702		spin_lock(&cache->lock);
  703		if (load_cache_only) {
  704			cache->caching_ctl = NULL;
  705			cache->cached = BTRFS_CACHE_NO;
  706		} else {
  707			cache->cached = BTRFS_CACHE_STARTED;
  708			cache->has_caching_ctl = 1;
  709		}
  710		spin_unlock(&cache->lock);
  711		wake_up(&caching_ctl->wait);
  712	}
  713
  714	if (load_cache_only) {
  715		put_caching_control(caching_ctl);
  716		return 0;
  717	}
  718
  719	down_write(&fs_info->commit_root_sem);
  720	atomic_inc(&caching_ctl->count);
  721	list_add_tail(&caching_ctl->list, &fs_info->caching_block_groups);
  722	up_write(&fs_info->commit_root_sem);
  723
  724	btrfs_get_block_group(cache);
  725
  726	btrfs_queue_work(fs_info->caching_workers, &caching_ctl->work);
  727
  728	return ret;
  729}
  730
  731/*
  732 * return the block group that starts at or after bytenr
  733 */
  734static struct btrfs_block_group_cache *
  735btrfs_lookup_first_block_group(struct btrfs_fs_info *info, u64 bytenr)
  736{
  737	struct btrfs_block_group_cache *cache;
  738
  739	cache = block_group_cache_tree_search(info, bytenr, 0);
  740
  741	return cache;
  742}
  743
  744/*
  745 * return the block group that contains the given bytenr
  746 */
  747struct btrfs_block_group_cache *btrfs_lookup_block_group(
  748						 struct btrfs_fs_info *info,
  749						 u64 bytenr)
  750{
  751	struct btrfs_block_group_cache *cache;
  752
  753	cache = block_group_cache_tree_search(info, bytenr, 1);
  754
  755	return cache;
  756}
  757
  758static struct btrfs_space_info *__find_space_info(struct btrfs_fs_info *info,
  759						  u64 flags)
  760{
  761	struct list_head *head = &info->space_info;
  762	struct btrfs_space_info *found;
  763
  764	flags &= BTRFS_BLOCK_GROUP_TYPE_MASK;
  765
  766	rcu_read_lock();
  767	list_for_each_entry_rcu(found, head, list) {
  768		if (found->flags & flags) {
  769			rcu_read_unlock();
  770			return found;
  771		}
  772	}
  773	rcu_read_unlock();
  774	return NULL;
  775}
  776
  777/*
  778 * after adding space to the filesystem, we need to clear the full flags
  779 * on all the space infos.
  780 */
  781void btrfs_clear_space_info_full(struct btrfs_fs_info *info)
  782{
  783	struct list_head *head = &info->space_info;
  784	struct btrfs_space_info *found;
  785
  786	rcu_read_lock();
  787	list_for_each_entry_rcu(found, head, list)
  788		found->full = 0;
  789	rcu_read_unlock();
  790}
  791
  792/* simple helper to search for an existing data extent at a given offset */
  793int btrfs_lookup_data_extent(struct btrfs_root *root, u64 start, u64 len)
  794{
 
  795	int ret;
  796	struct btrfs_key key;
  797	struct btrfs_path *path;
  798
  799	path = btrfs_alloc_path();
  800	if (!path)
  801		return -ENOMEM;
  802
  803	key.objectid = start;
  804	key.offset = len;
  805	key.type = BTRFS_EXTENT_ITEM_KEY;
  806	ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path,
  807				0, 0);
  808	btrfs_free_path(path);
  809	return ret;
  810}
  811
  812/*
  813 * helper function to lookup reference count and flags of a tree block.
  814 *
  815 * the head node for delayed ref is used to store the sum of all the
  816 * reference count modifications queued up in the rbtree. the head
  817 * node may also store the extent flags to set. This way you can check
  818 * to see what the reference count and extent flags would be if all of
  819 * the delayed refs are not processed.
  820 */
  821int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
  822			     struct btrfs_root *root, u64 bytenr,
  823			     u64 offset, int metadata, u64 *refs, u64 *flags)
 
  824{
 
  825	struct btrfs_delayed_ref_head *head;
  826	struct btrfs_delayed_ref_root *delayed_refs;
  827	struct btrfs_path *path;
  828	struct btrfs_extent_item *ei;
  829	struct extent_buffer *leaf;
  830	struct btrfs_key key;
  831	u32 item_size;
  832	u64 num_refs;
  833	u64 extent_flags;
 
  834	int ret;
  835
  836	/*
  837	 * If we don't have skinny metadata, don't bother doing anything
  838	 * different
  839	 */
  840	if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA)) {
  841		offset = root->nodesize;
  842		metadata = 0;
  843	}
  844
  845	path = btrfs_alloc_path();
  846	if (!path)
  847		return -ENOMEM;
  848
  849	if (!trans) {
  850		path->skip_locking = 1;
  851		path->search_commit_root = 1;
  852	}
  853
  854search_again:
  855	key.objectid = bytenr;
  856	key.offset = offset;
  857	if (metadata)
  858		key.type = BTRFS_METADATA_ITEM_KEY;
  859	else
  860		key.type = BTRFS_EXTENT_ITEM_KEY;
  861
  862	ret = btrfs_search_slot(trans, root->fs_info->extent_root,
  863				&key, path, 0, 0);
  864	if (ret < 0)
  865		goto out_free;
  866
  867	if (ret > 0 && metadata && key.type == BTRFS_METADATA_ITEM_KEY) {
  868		if (path->slots[0]) {
  869			path->slots[0]--;
  870			btrfs_item_key_to_cpu(path->nodes[0], &key,
  871					      path->slots[0]);
  872			if (key.objectid == bytenr &&
  873			    key.type == BTRFS_EXTENT_ITEM_KEY &&
  874			    key.offset == root->nodesize)
  875				ret = 0;
  876		}
  877	}
  878
  879	if (ret == 0) {
  880		leaf = path->nodes[0];
  881		item_size = btrfs_item_size_nr(leaf, path->slots[0]);
  882		if (item_size >= sizeof(*ei)) {
  883			ei = btrfs_item_ptr(leaf, path->slots[0],
  884					    struct btrfs_extent_item);
  885			num_refs = btrfs_extent_refs(leaf, ei);
  886			extent_flags = btrfs_extent_flags(leaf, ei);
  887		} else {
  888#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
  889			struct btrfs_extent_item_v0 *ei0;
  890			BUG_ON(item_size != sizeof(*ei0));
  891			ei0 = btrfs_item_ptr(leaf, path->slots[0],
  892					     struct btrfs_extent_item_v0);
  893			num_refs = btrfs_extent_refs_v0(leaf, ei0);
  894			/* FIXME: this isn't correct for data */
  895			extent_flags = BTRFS_BLOCK_FLAG_FULL_BACKREF;
  896#else
  897			BUG();
  898#endif
 
 
 
  899		}
  900		BUG_ON(num_refs == 0);
 
  901	} else {
  902		num_refs = 0;
  903		extent_flags = 0;
  904		ret = 0;
  905	}
  906
  907	if (!trans)
  908		goto out;
  909
  910	delayed_refs = &trans->transaction->delayed_refs;
  911	spin_lock(&delayed_refs->lock);
  912	head = btrfs_find_delayed_ref_head(trans, bytenr);
  913	if (head) {
  914		if (!mutex_trylock(&head->mutex)) {
  915			atomic_inc(&head->node.refs);
  916			spin_unlock(&delayed_refs->lock);
  917
  918			btrfs_release_path(path);
  919
  920			/*
  921			 * Mutex was contended, block until it's released and try
  922			 * again
  923			 */
  924			mutex_lock(&head->mutex);
  925			mutex_unlock(&head->mutex);
  926			btrfs_put_delayed_ref(&head->node);
  927			goto search_again;
  928		}
  929		spin_lock(&head->lock);
  930		if (head->extent_op && head->extent_op->update_flags)
  931			extent_flags |= head->extent_op->flags_to_set;
  932		else
  933			BUG_ON(num_refs == 0);
  934
  935		num_refs += head->node.ref_mod;
  936		spin_unlock(&head->lock);
  937		mutex_unlock(&head->mutex);
  938	}
  939	spin_unlock(&delayed_refs->lock);
  940out:
  941	WARN_ON(num_refs == 0);
  942	if (refs)
  943		*refs = num_refs;
  944	if (flags)
  945		*flags = extent_flags;
 
 
  946out_free:
  947	btrfs_free_path(path);
  948	return ret;
  949}
  950
  951/*
  952 * Back reference rules.  Back refs have three main goals:
  953 *
  954 * 1) differentiate between all holders of references to an extent so that
  955 *    when a reference is dropped we can make sure it was a valid reference
  956 *    before freeing the extent.
  957 *
  958 * 2) Provide enough information to quickly find the holders of an extent
  959 *    if we notice a given block is corrupted or bad.
  960 *
  961 * 3) Make it easy to migrate blocks for FS shrinking or storage pool
  962 *    maintenance.  This is actually the same as #2, but with a slightly
  963 *    different use case.
  964 *
  965 * There are two kinds of back refs. The implicit back refs is optimized
  966 * for pointers in non-shared tree blocks. For a given pointer in a block,
  967 * back refs of this kind provide information about the block's owner tree
  968 * and the pointer's key. These information allow us to find the block by
  969 * b-tree searching. The full back refs is for pointers in tree blocks not
  970 * referenced by their owner trees. The location of tree block is recorded
  971 * in the back refs. Actually the full back refs is generic, and can be
  972 * used in all cases the implicit back refs is used. The major shortcoming
  973 * of the full back refs is its overhead. Every time a tree block gets
  974 * COWed, we have to update back refs entry for all pointers in it.
  975 *
  976 * For a newly allocated tree block, we use implicit back refs for
  977 * pointers in it. This means most tree related operations only involve
  978 * implicit back refs. For a tree block created in old transaction, the
  979 * only way to drop a reference to it is COW it. So we can detect the
  980 * event that tree block loses its owner tree's reference and do the
  981 * back refs conversion.
  982 *
  983 * When a tree block is COW'd through a tree, there are four cases:
  984 *
  985 * The reference count of the block is one and the tree is the block's
  986 * owner tree. Nothing to do in this case.
  987 *
  988 * The reference count of the block is one and the tree is not the
  989 * block's owner tree. In this case, full back refs is used for pointers
  990 * in the block. Remove these full back refs, add implicit back refs for
  991 * every pointers in the new block.
  992 *
  993 * The reference count of the block is greater than one and the tree is
  994 * the block's owner tree. In this case, implicit back refs is used for
  995 * pointers in the block. Add full back refs for every pointers in the
  996 * block, increase lower level extents' reference counts. The original
  997 * implicit back refs are entailed to the new block.
  998 *
  999 * The reference count of the block is greater than one and the tree is
 1000 * not the block's owner tree. Add implicit back refs for every pointer in
 1001 * the new block, increase lower level extents' reference count.
 1002 *
 1003 * Back Reference Key composing:
 1004 *
 1005 * The key objectid corresponds to the first byte in the extent,
 1006 * The key type is used to differentiate between types of back refs.
 1007 * There are different meanings of the key offset for different types
 1008 * of back refs.
 1009 *
 1010 * File extents can be referenced by:
 1011 *
 1012 * - multiple snapshots, subvolumes, or different generations in one subvol
 1013 * - different files inside a single subvolume
 1014 * - different offsets inside a file (bookend extents in file.c)
 1015 *
 1016 * The extent ref structure for the implicit back refs has fields for:
 1017 *
 1018 * - Objectid of the subvolume root
 1019 * - objectid of the file holding the reference
 1020 * - original offset in the file
 1021 * - how many bookend extents
 1022 *
 1023 * The key offset for the implicit back refs is hash of the first
 1024 * three fields.
 1025 *
 1026 * The extent ref structure for the full back refs has field for:
 1027 *
 1028 * - number of pointers in the tree leaf
 1029 *
 1030 * The key offset for the implicit back refs is the first byte of
 1031 * the tree leaf
 1032 *
 1033 * When a file extent is allocated, The implicit back refs is used.
 1034 * the fields are filled in:
 1035 *
 1036 *     (root_key.objectid, inode objectid, offset in file, 1)
 1037 *
 1038 * When a file extent is removed file truncation, we find the
 1039 * corresponding implicit back refs and check the following fields:
 1040 *
 1041 *     (btrfs_header_owner(leaf), inode objectid, offset in file)
 1042 *
 1043 * Btree extents can be referenced by:
 1044 *
 1045 * - Different subvolumes
 1046 *
 1047 * Both the implicit back refs and the full back refs for tree blocks
 1048 * only consist of key. The key offset for the implicit back refs is
 1049 * objectid of block's owner tree. The key offset for the full back refs
 1050 * is the first byte of parent block.
 1051 *
 1052 * When implicit back refs is used, information about the lowest key and
 1053 * level of the tree block are required. These information are stored in
 1054 * tree block info structure.
 1055 */
 1056
 1057#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1058static int convert_extent_item_v0(struct btrfs_trans_handle *trans,
 1059				  struct btrfs_root *root,
 1060				  struct btrfs_path *path,
 1061				  u64 owner, u32 extra_size)
 1062{
 1063	struct btrfs_extent_item *item;
 1064	struct btrfs_extent_item_v0 *ei0;
 1065	struct btrfs_extent_ref_v0 *ref0;
 1066	struct btrfs_tree_block_info *bi;
 1067	struct extent_buffer *leaf;
 1068	struct btrfs_key key;
 1069	struct btrfs_key found_key;
 1070	u32 new_size = sizeof(*item);
 1071	u64 refs;
 1072	int ret;
 1073
 1074	leaf = path->nodes[0];
 1075	BUG_ON(btrfs_item_size_nr(leaf, path->slots[0]) != sizeof(*ei0));
 1076
 1077	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 1078	ei0 = btrfs_item_ptr(leaf, path->slots[0],
 1079			     struct btrfs_extent_item_v0);
 1080	refs = btrfs_extent_refs_v0(leaf, ei0);
 1081
 1082	if (owner == (u64)-1) {
 1083		while (1) {
 1084			if (path->slots[0] >= btrfs_header_nritems(leaf)) {
 1085				ret = btrfs_next_leaf(root, path);
 1086				if (ret < 0)
 1087					return ret;
 1088				BUG_ON(ret > 0); /* Corruption */
 1089				leaf = path->nodes[0];
 1090			}
 1091			btrfs_item_key_to_cpu(leaf, &found_key,
 1092					      path->slots[0]);
 1093			BUG_ON(key.objectid != found_key.objectid);
 1094			if (found_key.type != BTRFS_EXTENT_REF_V0_KEY) {
 1095				path->slots[0]++;
 1096				continue;
 
 
 
 
 
 
 1097			}
 1098			ref0 = btrfs_item_ptr(leaf, path->slots[0],
 1099					      struct btrfs_extent_ref_v0);
 1100			owner = btrfs_ref_objectid_v0(leaf, ref0);
 1101			break;
 1102		}
 1103	}
 1104	btrfs_release_path(path);
 1105
 1106	if (owner < BTRFS_FIRST_FREE_OBJECTID)
 1107		new_size += sizeof(*bi);
 
 
 
 1108
 1109	new_size -= sizeof(*ei0);
 1110	ret = btrfs_search_slot(trans, root, &key, path,
 1111				new_size + extra_size, 1);
 1112	if (ret < 0)
 1113		return ret;
 1114	BUG_ON(ret); /* Corruption */
 1115
 1116	btrfs_extend_item(root, path, new_size);
 1117
 1118	leaf = path->nodes[0];
 1119	item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 1120	btrfs_set_extent_refs(leaf, item, refs);
 1121	/* FIXME: get real generation */
 1122	btrfs_set_extent_generation(leaf, item, 0);
 1123	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 1124		btrfs_set_extent_flags(leaf, item,
 1125				       BTRFS_EXTENT_FLAG_TREE_BLOCK |
 1126				       BTRFS_BLOCK_FLAG_FULL_BACKREF);
 1127		bi = (struct btrfs_tree_block_info *)(item + 1);
 1128		/* FIXME: get first key of the block */
 1129		memset_extent_buffer(leaf, 0, (unsigned long)bi, sizeof(*bi));
 1130		btrfs_set_tree_block_level(leaf, bi, (int)owner);
 1131	} else {
 1132		btrfs_set_extent_flags(leaf, item, BTRFS_EXTENT_FLAG_DATA);
 1133	}
 1134	btrfs_mark_buffer_dirty(leaf);
 1135	return 0;
 1136}
 1137#endif
 1138
 1139static u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset)
 1140{
 1141	u32 high_crc = ~(u32)0;
 1142	u32 low_crc = ~(u32)0;
 1143	__le64 lenum;
 1144
 1145	lenum = cpu_to_le64(root_objectid);
 1146	high_crc = btrfs_crc32c(high_crc, &lenum, sizeof(lenum));
 1147	lenum = cpu_to_le64(owner);
 1148	low_crc = btrfs_crc32c(low_crc, &lenum, sizeof(lenum));
 1149	lenum = cpu_to_le64(offset);
 1150	low_crc = btrfs_crc32c(low_crc, &lenum, sizeof(lenum));
 1151
 1152	return ((u64)high_crc << 31) ^ (u64)low_crc;
 1153}
 1154
 1155static u64 hash_extent_data_ref_item(struct extent_buffer *leaf,
 1156				     struct btrfs_extent_data_ref *ref)
 1157{
 1158	return hash_extent_data_ref(btrfs_extent_data_ref_root(leaf, ref),
 1159				    btrfs_extent_data_ref_objectid(leaf, ref),
 1160				    btrfs_extent_data_ref_offset(leaf, ref));
 1161}
 1162
 1163static int match_extent_data_ref(struct extent_buffer *leaf,
 1164				 struct btrfs_extent_data_ref *ref,
 1165				 u64 root_objectid, u64 owner, u64 offset)
 1166{
 1167	if (btrfs_extent_data_ref_root(leaf, ref) != root_objectid ||
 1168	    btrfs_extent_data_ref_objectid(leaf, ref) != owner ||
 1169	    btrfs_extent_data_ref_offset(leaf, ref) != offset)
 1170		return 0;
 1171	return 1;
 1172}
 1173
 1174static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
 1175					   struct btrfs_root *root,
 1176					   struct btrfs_path *path,
 1177					   u64 bytenr, u64 parent,
 1178					   u64 root_objectid,
 1179					   u64 owner, u64 offset)
 1180{
 
 1181	struct btrfs_key key;
 1182	struct btrfs_extent_data_ref *ref;
 1183	struct extent_buffer *leaf;
 1184	u32 nritems;
 1185	int ret;
 1186	int recow;
 1187	int err = -ENOENT;
 1188
 1189	key.objectid = bytenr;
 1190	if (parent) {
 1191		key.type = BTRFS_SHARED_DATA_REF_KEY;
 1192		key.offset = parent;
 1193	} else {
 1194		key.type = BTRFS_EXTENT_DATA_REF_KEY;
 1195		key.offset = hash_extent_data_ref(root_objectid,
 1196						  owner, offset);
 1197	}
 1198again:
 1199	recow = 0;
 1200	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 1201	if (ret < 0) {
 1202		err = ret;
 1203		goto fail;
 1204	}
 1205
 1206	if (parent) {
 1207		if (!ret)
 1208			return 0;
 1209#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1210		key.type = BTRFS_EXTENT_REF_V0_KEY;
 1211		btrfs_release_path(path);
 1212		ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 1213		if (ret < 0) {
 1214			err = ret;
 1215			goto fail;
 1216		}
 1217		if (!ret)
 1218			return 0;
 1219#endif
 1220		goto fail;
 1221	}
 1222
 
 1223	leaf = path->nodes[0];
 1224	nritems = btrfs_header_nritems(leaf);
 1225	while (1) {
 1226		if (path->slots[0] >= nritems) {
 1227			ret = btrfs_next_leaf(root, path);
 1228			if (ret < 0)
 1229				err = ret;
 1230			if (ret)
 1231				goto fail;
 
 1232
 1233			leaf = path->nodes[0];
 1234			nritems = btrfs_header_nritems(leaf);
 1235			recow = 1;
 1236		}
 1237
 1238		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 1239		if (key.objectid != bytenr ||
 1240		    key.type != BTRFS_EXTENT_DATA_REF_KEY)
 1241			goto fail;
 1242
 1243		ref = btrfs_item_ptr(leaf, path->slots[0],
 1244				     struct btrfs_extent_data_ref);
 1245
 1246		if (match_extent_data_ref(leaf, ref, root_objectid,
 1247					  owner, offset)) {
 1248			if (recow) {
 1249				btrfs_release_path(path);
 1250				goto again;
 1251			}
 1252			err = 0;
 1253			break;
 1254		}
 1255		path->slots[0]++;
 1256	}
 1257fail:
 1258	return err;
 1259}
 1260
 1261static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
 1262					   struct btrfs_root *root,
 1263					   struct btrfs_path *path,
 1264					   u64 bytenr, u64 parent,
 1265					   u64 root_objectid, u64 owner,
 1266					   u64 offset, int refs_to_add)
 1267{
 
 1268	struct btrfs_key key;
 1269	struct extent_buffer *leaf;
 
 
 1270	u32 size;
 1271	u32 num_refs;
 1272	int ret;
 1273
 1274	key.objectid = bytenr;
 1275	if (parent) {
 1276		key.type = BTRFS_SHARED_DATA_REF_KEY;
 1277		key.offset = parent;
 1278		size = sizeof(struct btrfs_shared_data_ref);
 1279	} else {
 1280		key.type = BTRFS_EXTENT_DATA_REF_KEY;
 1281		key.offset = hash_extent_data_ref(root_objectid,
 1282						  owner, offset);
 1283		size = sizeof(struct btrfs_extent_data_ref);
 1284	}
 1285
 1286	ret = btrfs_insert_empty_item(trans, root, path, &key, size);
 1287	if (ret && ret != -EEXIST)
 1288		goto fail;
 1289
 1290	leaf = path->nodes[0];
 1291	if (parent) {
 1292		struct btrfs_shared_data_ref *ref;
 1293		ref = btrfs_item_ptr(leaf, path->slots[0],
 1294				     struct btrfs_shared_data_ref);
 1295		if (ret == 0) {
 1296			btrfs_set_shared_data_ref_count(leaf, ref, refs_to_add);
 1297		} else {
 1298			num_refs = btrfs_shared_data_ref_count(leaf, ref);
 1299			num_refs += refs_to_add;
 1300			btrfs_set_shared_data_ref_count(leaf, ref, num_refs);
 1301		}
 1302	} else {
 1303		struct btrfs_extent_data_ref *ref;
 1304		while (ret == -EEXIST) {
 1305			ref = btrfs_item_ptr(leaf, path->slots[0],
 1306					     struct btrfs_extent_data_ref);
 1307			if (match_extent_data_ref(leaf, ref, root_objectid,
 1308						  owner, offset))
 1309				break;
 1310			btrfs_release_path(path);
 1311			key.offset++;
 1312			ret = btrfs_insert_empty_item(trans, root, path, &key,
 1313						      size);
 1314			if (ret && ret != -EEXIST)
 1315				goto fail;
 1316
 1317			leaf = path->nodes[0];
 1318		}
 1319		ref = btrfs_item_ptr(leaf, path->slots[0],
 1320				     struct btrfs_extent_data_ref);
 1321		if (ret == 0) {
 1322			btrfs_set_extent_data_ref_root(leaf, ref,
 1323						       root_objectid);
 1324			btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
 1325			btrfs_set_extent_data_ref_offset(leaf, ref, offset);
 1326			btrfs_set_extent_data_ref_count(leaf, ref, refs_to_add);
 1327		} else {
 1328			num_refs = btrfs_extent_data_ref_count(leaf, ref);
 1329			num_refs += refs_to_add;
 1330			btrfs_set_extent_data_ref_count(leaf, ref, num_refs);
 1331		}
 1332	}
 1333	btrfs_mark_buffer_dirty(leaf);
 1334	ret = 0;
 1335fail:
 1336	btrfs_release_path(path);
 1337	return ret;
 1338}
 1339
 1340static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
 1341					   struct btrfs_root *root,
 1342					   struct btrfs_path *path,
 1343					   int refs_to_drop, int *last_ref)
 1344{
 1345	struct btrfs_key key;
 1346	struct btrfs_extent_data_ref *ref1 = NULL;
 1347	struct btrfs_shared_data_ref *ref2 = NULL;
 1348	struct extent_buffer *leaf;
 1349	u32 num_refs = 0;
 1350	int ret = 0;
 1351
 1352	leaf = path->nodes[0];
 1353	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 1354
 1355	if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
 1356		ref1 = btrfs_item_ptr(leaf, path->slots[0],
 1357				      struct btrfs_extent_data_ref);
 1358		num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 1359	} else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
 1360		ref2 = btrfs_item_ptr(leaf, path->slots[0],
 1361				      struct btrfs_shared_data_ref);
 1362		num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 1363#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1364	} else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
 1365		struct btrfs_extent_ref_v0 *ref0;
 1366		ref0 = btrfs_item_ptr(leaf, path->slots[0],
 1367				      struct btrfs_extent_ref_v0);
 1368		num_refs = btrfs_ref_count_v0(leaf, ref0);
 1369#endif
 1370	} else {
 1371		BUG();
 
 
 
 
 1372	}
 1373
 1374	BUG_ON(num_refs < refs_to_drop);
 1375	num_refs -= refs_to_drop;
 1376
 1377	if (num_refs == 0) {
 1378		ret = btrfs_del_item(trans, root, path);
 1379		*last_ref = 1;
 1380	} else {
 1381		if (key.type == BTRFS_EXTENT_DATA_REF_KEY)
 1382			btrfs_set_extent_data_ref_count(leaf, ref1, num_refs);
 1383		else if (key.type == BTRFS_SHARED_DATA_REF_KEY)
 1384			btrfs_set_shared_data_ref_count(leaf, ref2, num_refs);
 1385#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1386		else {
 1387			struct btrfs_extent_ref_v0 *ref0;
 1388			ref0 = btrfs_item_ptr(leaf, path->slots[0],
 1389					struct btrfs_extent_ref_v0);
 1390			btrfs_set_ref_count_v0(leaf, ref0, num_refs);
 1391		}
 1392#endif
 1393		btrfs_mark_buffer_dirty(leaf);
 1394	}
 1395	return ret;
 1396}
 1397
 1398static noinline u32 extent_data_ref_count(struct btrfs_path *path,
 1399					  struct btrfs_extent_inline_ref *iref)
 1400{
 1401	struct btrfs_key key;
 1402	struct extent_buffer *leaf;
 1403	struct btrfs_extent_data_ref *ref1;
 1404	struct btrfs_shared_data_ref *ref2;
 1405	u32 num_refs = 0;
 
 1406
 1407	leaf = path->nodes[0];
 1408	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 
 1409	if (iref) {
 1410		if (btrfs_extent_inline_ref_type(leaf, iref) ==
 1411		    BTRFS_EXTENT_DATA_REF_KEY) {
 
 
 
 
 
 1412			ref1 = (struct btrfs_extent_data_ref *)(&iref->offset);
 1413			num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 1414		} else {
 1415			ref2 = (struct btrfs_shared_data_ref *)(iref + 1);
 1416			num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 1417		}
 1418	} else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
 1419		ref1 = btrfs_item_ptr(leaf, path->slots[0],
 1420				      struct btrfs_extent_data_ref);
 1421		num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 1422	} else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
 1423		ref2 = btrfs_item_ptr(leaf, path->slots[0],
 1424				      struct btrfs_shared_data_ref);
 1425		num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 1426#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1427	} else if (key.type == BTRFS_EXTENT_REF_V0_KEY) {
 1428		struct btrfs_extent_ref_v0 *ref0;
 1429		ref0 = btrfs_item_ptr(leaf, path->slots[0],
 1430				      struct btrfs_extent_ref_v0);
 1431		num_refs = btrfs_ref_count_v0(leaf, ref0);
 1432#endif
 1433	} else {
 1434		WARN_ON(1);
 1435	}
 1436	return num_refs;
 1437}
 1438
 1439static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
 1440					  struct btrfs_root *root,
 1441					  struct btrfs_path *path,
 1442					  u64 bytenr, u64 parent,
 1443					  u64 root_objectid)
 1444{
 
 1445	struct btrfs_key key;
 1446	int ret;
 1447
 1448	key.objectid = bytenr;
 1449	if (parent) {
 1450		key.type = BTRFS_SHARED_BLOCK_REF_KEY;
 1451		key.offset = parent;
 1452	} else {
 1453		key.type = BTRFS_TREE_BLOCK_REF_KEY;
 1454		key.offset = root_objectid;
 1455	}
 1456
 1457	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 1458	if (ret > 0)
 1459		ret = -ENOENT;
 1460#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1461	if (ret == -ENOENT && parent) {
 1462		btrfs_release_path(path);
 1463		key.type = BTRFS_EXTENT_REF_V0_KEY;
 1464		ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 1465		if (ret > 0)
 1466			ret = -ENOENT;
 1467	}
 1468#endif
 1469	return ret;
 1470}
 1471
 1472static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
 1473					  struct btrfs_root *root,
 1474					  struct btrfs_path *path,
 1475					  u64 bytenr, u64 parent,
 1476					  u64 root_objectid)
 1477{
 
 1478	struct btrfs_key key;
 1479	int ret;
 1480
 1481	key.objectid = bytenr;
 1482	if (parent) {
 1483		key.type = BTRFS_SHARED_BLOCK_REF_KEY;
 1484		key.offset = parent;
 1485	} else {
 1486		key.type = BTRFS_TREE_BLOCK_REF_KEY;
 1487		key.offset = root_objectid;
 1488	}
 1489
 1490	ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
 1491	btrfs_release_path(path);
 1492	return ret;
 1493}
 1494
 1495static inline int extent_ref_type(u64 parent, u64 owner)
 1496{
 1497	int type;
 1498	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 1499		if (parent > 0)
 1500			type = BTRFS_SHARED_BLOCK_REF_KEY;
 1501		else
 1502			type = BTRFS_TREE_BLOCK_REF_KEY;
 1503	} else {
 1504		if (parent > 0)
 1505			type = BTRFS_SHARED_DATA_REF_KEY;
 1506		else
 1507			type = BTRFS_EXTENT_DATA_REF_KEY;
 1508	}
 1509	return type;
 1510}
 1511
 1512static int find_next_key(struct btrfs_path *path, int level,
 1513			 struct btrfs_key *key)
 1514
 1515{
 1516	for (; level < BTRFS_MAX_LEVEL; level++) {
 1517		if (!path->nodes[level])
 1518			break;
 1519		if (path->slots[level] + 1 >=
 1520		    btrfs_header_nritems(path->nodes[level]))
 1521			continue;
 1522		if (level == 0)
 1523			btrfs_item_key_to_cpu(path->nodes[level], key,
 1524					      path->slots[level] + 1);
 1525		else
 1526			btrfs_node_key_to_cpu(path->nodes[level], key,
 1527					      path->slots[level] + 1);
 1528		return 0;
 1529	}
 1530	return 1;
 1531}
 1532
 1533/*
 1534 * look for inline back ref. if back ref is found, *ref_ret is set
 1535 * to the address of inline back ref, and 0 is returned.
 1536 *
 1537 * if back ref isn't found, *ref_ret is set to the address where it
 1538 * should be inserted, and -ENOENT is returned.
 1539 *
 1540 * if insert is true and there are too many inline back refs, the path
 1541 * points to the extent item, and -EAGAIN is returned.
 1542 *
 1543 * NOTE: inline back refs are ordered in the same way that back ref
 1544 *	 items in the tree are ordered.
 1545 */
 1546static noinline_for_stack
 1547int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
 1548				 struct btrfs_root *root,
 1549				 struct btrfs_path *path,
 1550				 struct btrfs_extent_inline_ref **ref_ret,
 1551				 u64 bytenr, u64 num_bytes,
 1552				 u64 parent, u64 root_objectid,
 1553				 u64 owner, u64 offset, int insert)
 1554{
 
 
 1555	struct btrfs_key key;
 1556	struct extent_buffer *leaf;
 1557	struct btrfs_extent_item *ei;
 1558	struct btrfs_extent_inline_ref *iref;
 1559	u64 flags;
 1560	u64 item_size;
 1561	unsigned long ptr;
 1562	unsigned long end;
 1563	int extra_size;
 1564	int type;
 1565	int want;
 1566	int ret;
 1567	int err = 0;
 1568	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
 1569						 SKINNY_METADATA);
 1570
 1571	key.objectid = bytenr;
 1572	key.type = BTRFS_EXTENT_ITEM_KEY;
 1573	key.offset = num_bytes;
 1574
 1575	want = extent_ref_type(parent, owner);
 1576	if (insert) {
 1577		extra_size = btrfs_extent_inline_ref_size(want);
 1578		path->keep_locks = 1;
 1579	} else
 1580		extra_size = -1;
 1581
 1582	/*
 1583	 * Owner is our parent level, so we can just add one to get the level
 1584	 * for the block we are interested in.
 1585	 */
 1586	if (skinny_metadata && owner < BTRFS_FIRST_FREE_OBJECTID) {
 1587		key.type = BTRFS_METADATA_ITEM_KEY;
 1588		key.offset = owner;
 1589	}
 1590
 1591again:
 1592	ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
 1593	if (ret < 0) {
 1594		err = ret;
 1595		goto out;
 1596	}
 1597
 1598	/*
 1599	 * We may be a newly converted file system which still has the old fat
 1600	 * extent entries for metadata, so try and see if we have one of those.
 1601	 */
 1602	if (ret > 0 && skinny_metadata) {
 1603		skinny_metadata = false;
 1604		if (path->slots[0]) {
 1605			path->slots[0]--;
 1606			btrfs_item_key_to_cpu(path->nodes[0], &key,
 1607					      path->slots[0]);
 1608			if (key.objectid == bytenr &&
 1609			    key.type == BTRFS_EXTENT_ITEM_KEY &&
 1610			    key.offset == num_bytes)
 1611				ret = 0;
 1612		}
 1613		if (ret) {
 1614			key.objectid = bytenr;
 1615			key.type = BTRFS_EXTENT_ITEM_KEY;
 1616			key.offset = num_bytes;
 1617			btrfs_release_path(path);
 1618			goto again;
 1619		}
 1620	}
 1621
 1622	if (ret && !insert) {
 1623		err = -ENOENT;
 1624		goto out;
 1625	} else if (WARN_ON(ret)) {
 1626		err = -EIO;
 
 
 
 
 
 1627		goto out;
 1628	}
 1629
 1630	leaf = path->nodes[0];
 1631	item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 1632#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 1633	if (item_size < sizeof(*ei)) {
 1634		if (!insert) {
 1635			err = -ENOENT;
 1636			goto out;
 1637		}
 1638		ret = convert_extent_item_v0(trans, root, path, owner,
 1639					     extra_size);
 1640		if (ret < 0) {
 1641			err = ret;
 1642			goto out;
 1643		}
 1644		leaf = path->nodes[0];
 1645		item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 1646	}
 1647#endif
 1648	BUG_ON(item_size < sizeof(*ei));
 1649
 1650	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 1651	flags = btrfs_extent_flags(leaf, ei);
 1652
 1653	ptr = (unsigned long)(ei + 1);
 1654	end = (unsigned long)ei + item_size;
 1655
 1656	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK && !skinny_metadata) {
 1657		ptr += sizeof(struct btrfs_tree_block_info);
 1658		BUG_ON(ptr > end);
 1659	}
 1660
 1661	err = -ENOENT;
 1662	while (1) {
 1663		if (ptr >= end) {
 1664			WARN_ON(ptr > end);
 1665			break;
 1666		}
 
 1667		iref = (struct btrfs_extent_inline_ref *)ptr;
 1668		type = btrfs_extent_inline_ref_type(leaf, iref);
 
 
 
 
 
 
 
 
 
 
 1669		if (want < type)
 1670			break;
 1671		if (want > type) {
 1672			ptr += btrfs_extent_inline_ref_size(type);
 1673			continue;
 1674		}
 1675
 1676		if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 1677			struct btrfs_extent_data_ref *dref;
 1678			dref = (struct btrfs_extent_data_ref *)(&iref->offset);
 1679			if (match_extent_data_ref(leaf, dref, root_objectid,
 1680						  owner, offset)) {
 1681				err = 0;
 1682				break;
 1683			}
 1684			if (hash_extent_data_ref_item(leaf, dref) <
 1685			    hash_extent_data_ref(root_objectid, owner, offset))
 1686				break;
 1687		} else {
 1688			u64 ref_offset;
 1689			ref_offset = btrfs_extent_inline_ref_offset(leaf, iref);
 1690			if (parent > 0) {
 1691				if (parent == ref_offset) {
 1692					err = 0;
 1693					break;
 1694				}
 1695				if (ref_offset < parent)
 1696					break;
 1697			} else {
 1698				if (root_objectid == ref_offset) {
 1699					err = 0;
 1700					break;
 1701				}
 1702				if (ref_offset < root_objectid)
 1703					break;
 1704			}
 1705		}
 1706		ptr += btrfs_extent_inline_ref_size(type);
 1707	}
 1708	if (err == -ENOENT && insert) {
 
 
 
 
 
 
 
 
 
 
 1709		if (item_size + extra_size >=
 1710		    BTRFS_MAX_EXTENT_ITEM_SIZE(root)) {
 1711			err = -EAGAIN;
 1712			goto out;
 1713		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1714		/*
 1715		 * To add new inline back ref, we have to make sure
 1716		 * there is no corresponding back ref item.
 1717		 * For simplicity, we just do not add new inline back
 1718		 * ref if there is any kind of item for this block
 1719		 */
 1720		if (find_next_key(path, 0, &key) == 0 &&
 1721		    key.objectid == bytenr &&
 1722		    key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
 1723			err = -EAGAIN;
 1724			goto out;
 1725		}
 1726	}
 
 1727	*ref_ret = (struct btrfs_extent_inline_ref *)ptr;
 1728out:
 1729	if (insert) {
 1730		path->keep_locks = 0;
 1731		btrfs_unlock_up_safe(path, 1);
 1732	}
 1733	return err;
 
 
 1734}
 1735
 1736/*
 1737 * helper to add new inline back ref
 1738 */
 1739static noinline_for_stack
 1740void setup_inline_extent_backref(struct btrfs_root *root,
 1741				 struct btrfs_path *path,
 1742				 struct btrfs_extent_inline_ref *iref,
 1743				 u64 parent, u64 root_objectid,
 1744				 u64 owner, u64 offset, int refs_to_add,
 1745				 struct btrfs_delayed_extent_op *extent_op)
 1746{
 1747	struct extent_buffer *leaf;
 1748	struct btrfs_extent_item *ei;
 1749	unsigned long ptr;
 1750	unsigned long end;
 1751	unsigned long item_offset;
 1752	u64 refs;
 1753	int size;
 1754	int type;
 1755
 1756	leaf = path->nodes[0];
 1757	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 1758	item_offset = (unsigned long)iref - (unsigned long)ei;
 1759
 1760	type = extent_ref_type(parent, owner);
 1761	size = btrfs_extent_inline_ref_size(type);
 1762
 1763	btrfs_extend_item(root, path, size);
 1764
 1765	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 1766	refs = btrfs_extent_refs(leaf, ei);
 1767	refs += refs_to_add;
 1768	btrfs_set_extent_refs(leaf, ei, refs);
 1769	if (extent_op)
 1770		__run_delayed_extent_op(extent_op, leaf, ei);
 1771
 1772	ptr = (unsigned long)ei + item_offset;
 1773	end = (unsigned long)ei + btrfs_item_size_nr(leaf, path->slots[0]);
 1774	if (ptr < end - size)
 1775		memmove_extent_buffer(leaf, ptr + size, ptr,
 1776				      end - size - ptr);
 1777
 1778	iref = (struct btrfs_extent_inline_ref *)ptr;
 1779	btrfs_set_extent_inline_ref_type(leaf, iref, type);
 1780	if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 1781		struct btrfs_extent_data_ref *dref;
 1782		dref = (struct btrfs_extent_data_ref *)(&iref->offset);
 1783		btrfs_set_extent_data_ref_root(leaf, dref, root_objectid);
 1784		btrfs_set_extent_data_ref_objectid(leaf, dref, owner);
 1785		btrfs_set_extent_data_ref_offset(leaf, dref, offset);
 1786		btrfs_set_extent_data_ref_count(leaf, dref, refs_to_add);
 1787	} else if (type == BTRFS_SHARED_DATA_REF_KEY) {
 1788		struct btrfs_shared_data_ref *sref;
 1789		sref = (struct btrfs_shared_data_ref *)(iref + 1);
 1790		btrfs_set_shared_data_ref_count(leaf, sref, refs_to_add);
 1791		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
 1792	} else if (type == BTRFS_SHARED_BLOCK_REF_KEY) {
 1793		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
 1794	} else {
 1795		btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
 1796	}
 1797	btrfs_mark_buffer_dirty(leaf);
 1798}
 1799
 1800static int lookup_extent_backref(struct btrfs_trans_handle *trans,
 1801				 struct btrfs_root *root,
 1802				 struct btrfs_path *path,
 1803				 struct btrfs_extent_inline_ref **ref_ret,
 1804				 u64 bytenr, u64 num_bytes, u64 parent,
 1805				 u64 root_objectid, u64 owner, u64 offset)
 1806{
 1807	int ret;
 1808
 1809	ret = lookup_inline_extent_backref(trans, root, path, ref_ret,
 1810					   bytenr, num_bytes, parent,
 1811					   root_objectid, owner, offset, 0);
 1812	if (ret != -ENOENT)
 1813		return ret;
 1814
 1815	btrfs_release_path(path);
 1816	*ref_ret = NULL;
 1817
 1818	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 1819		ret = lookup_tree_block_ref(trans, root, path, bytenr, parent,
 1820					    root_objectid);
 1821	} else {
 1822		ret = lookup_extent_data_ref(trans, root, path, bytenr, parent,
 1823					     root_objectid, owner, offset);
 1824	}
 1825	return ret;
 1826}
 1827
 1828/*
 1829 * helper to update/remove inline back ref
 1830 */
 1831static noinline_for_stack
 1832void update_inline_extent_backref(struct btrfs_root *root,
 1833				  struct btrfs_path *path,
 1834				  struct btrfs_extent_inline_ref *iref,
 1835				  int refs_to_mod,
 1836				  struct btrfs_delayed_extent_op *extent_op,
 1837				  int *last_ref)
 1838{
 1839	struct extent_buffer *leaf;
 
 1840	struct btrfs_extent_item *ei;
 1841	struct btrfs_extent_data_ref *dref = NULL;
 1842	struct btrfs_shared_data_ref *sref = NULL;
 1843	unsigned long ptr;
 1844	unsigned long end;
 1845	u32 item_size;
 1846	int size;
 1847	int type;
 1848	u64 refs;
 1849
 1850	leaf = path->nodes[0];
 1851	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 1852	refs = btrfs_extent_refs(leaf, ei);
 1853	WARN_ON(refs_to_mod < 0 && refs + refs_to_mod <= 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1854	refs += refs_to_mod;
 1855	btrfs_set_extent_refs(leaf, ei, refs);
 1856	if (extent_op)
 1857		__run_delayed_extent_op(extent_op, leaf, ei);
 1858
 1859	type = btrfs_extent_inline_ref_type(leaf, iref);
 
 
 
 
 
 
 1860
 1861	if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 1862		dref = (struct btrfs_extent_data_ref *)(&iref->offset);
 1863		refs = btrfs_extent_data_ref_count(leaf, dref);
 1864	} else if (type == BTRFS_SHARED_DATA_REF_KEY) {
 1865		sref = (struct btrfs_shared_data_ref *)(iref + 1);
 1866		refs = btrfs_shared_data_ref_count(leaf, sref);
 1867	} else {
 1868		refs = 1;
 1869		BUG_ON(refs_to_mod != -1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1870	}
 1871
 1872	BUG_ON(refs_to_mod < 0 && refs < -refs_to_mod);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1873	refs += refs_to_mod;
 1874
 1875	if (refs > 0) {
 1876		if (type == BTRFS_EXTENT_DATA_REF_KEY)
 1877			btrfs_set_extent_data_ref_count(leaf, dref, refs);
 1878		else
 1879			btrfs_set_shared_data_ref_count(leaf, sref, refs);
 1880	} else {
 1881		*last_ref = 1;
 1882		size =  btrfs_extent_inline_ref_size(type);
 1883		item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 1884		ptr = (unsigned long)iref;
 1885		end = (unsigned long)ei + item_size;
 1886		if (ptr + size < end)
 1887			memmove_extent_buffer(leaf, ptr, ptr + size,
 1888					      end - ptr - size);
 1889		item_size -= size;
 1890		btrfs_truncate_item(root, path, item_size, 1);
 1891	}
 1892	btrfs_mark_buffer_dirty(leaf);
 
 1893}
 1894
 1895static noinline_for_stack
 1896int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
 1897				 struct btrfs_root *root,
 1898				 struct btrfs_path *path,
 1899				 u64 bytenr, u64 num_bytes, u64 parent,
 1900				 u64 root_objectid, u64 owner,
 1901				 u64 offset, int refs_to_add,
 1902				 struct btrfs_delayed_extent_op *extent_op)
 1903{
 1904	struct btrfs_extent_inline_ref *iref;
 1905	int ret;
 1906
 1907	ret = lookup_inline_extent_backref(trans, root, path, &iref,
 1908					   bytenr, num_bytes, parent,
 1909					   root_objectid, owner, offset, 1);
 1910	if (ret == 0) {
 1911		BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID);
 1912		update_inline_extent_backref(root, path, iref,
 1913					     refs_to_add, extent_op, NULL);
 
 
 
 
 
 
 
 
 
 
 1914	} else if (ret == -ENOENT) {
 1915		setup_inline_extent_backref(root, path, iref, parent,
 1916					    root_objectid, owner, offset,
 1917					    refs_to_add, extent_op);
 1918		ret = 0;
 1919	}
 1920	return ret;
 1921}
 1922
 1923static int insert_extent_backref(struct btrfs_trans_handle *trans,
 1924				 struct btrfs_root *root,
 1925				 struct btrfs_path *path,
 1926				 u64 bytenr, u64 parent, u64 root_objectid,
 1927				 u64 owner, u64 offset, int refs_to_add)
 1928{
 1929	int ret;
 1930	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 1931		BUG_ON(refs_to_add != 1);
 1932		ret = insert_tree_block_ref(trans, root, path, bytenr,
 1933					    parent, root_objectid);
 1934	} else {
 1935		ret = insert_extent_data_ref(trans, root, path, bytenr,
 1936					     parent, root_objectid,
 1937					     owner, offset, refs_to_add);
 1938	}
 1939	return ret;
 1940}
 1941
 1942static int remove_extent_backref(struct btrfs_trans_handle *trans,
 1943				 struct btrfs_root *root,
 1944				 struct btrfs_path *path,
 1945				 struct btrfs_extent_inline_ref *iref,
 1946				 int refs_to_drop, int is_data, int *last_ref)
 1947{
 1948	int ret = 0;
 1949
 1950	BUG_ON(!is_data && refs_to_drop != 1);
 1951	if (iref) {
 1952		update_inline_extent_backref(root, path, iref,
 1953					     -refs_to_drop, NULL, last_ref);
 1954	} else if (is_data) {
 1955		ret = remove_extent_data_ref(trans, root, path, refs_to_drop,
 1956					     last_ref);
 1957	} else {
 1958		*last_ref = 1;
 1959		ret = btrfs_del_item(trans, root, path);
 1960	}
 1961	return ret;
 1962}
 1963
 1964#define in_range(b, first, len)        ((b) >= (first) && (b) < (first) + (len))
 1965static int btrfs_issue_discard(struct block_device *bdev, u64 start, u64 len,
 1966			       u64 *discarded_bytes)
 1967{
 1968	int j, ret = 0;
 1969	u64 bytes_left, end;
 1970	u64 aligned_start = ALIGN(start, 1 << 9);
 1971
 1972	if (WARN_ON(start != aligned_start)) {
 
 1973		len -= aligned_start - start;
 1974		len = round_down(len, 1 << 9);
 1975		start = aligned_start;
 1976	}
 1977
 1978	*discarded_bytes = 0;
 1979
 1980	if (!len)
 1981		return 0;
 1982
 1983	end = start + len;
 1984	bytes_left = len;
 1985
 1986	/* Skip any superblocks on this device. */
 1987	for (j = 0; j < BTRFS_SUPER_MIRROR_MAX; j++) {
 1988		u64 sb_start = btrfs_sb_offset(j);
 1989		u64 sb_end = sb_start + BTRFS_SUPER_INFO_SIZE;
 1990		u64 size = sb_start - start;
 1991
 1992		if (!in_range(sb_start, start, bytes_left) &&
 1993		    !in_range(sb_end, start, bytes_left) &&
 1994		    !in_range(start, sb_start, BTRFS_SUPER_INFO_SIZE))
 1995			continue;
 1996
 1997		/*
 1998		 * Superblock spans beginning of range.  Adjust start and
 1999		 * try again.
 2000		 */
 2001		if (sb_start <= start) {
 2002			start += sb_end - start;
 2003			if (start > end) {
 2004				bytes_left = 0;
 2005				break;
 2006			}
 2007			bytes_left = end - start;
 2008			continue;
 2009		}
 2010
 2011		if (size) {
 2012			ret = blkdev_issue_discard(bdev, start >> 9, size >> 9,
 2013						   GFP_NOFS, 0);
 
 2014			if (!ret)
 2015				*discarded_bytes += size;
 2016			else if (ret != -EOPNOTSUPP)
 2017				return ret;
 2018		}
 2019
 2020		start = sb_end;
 2021		if (start > end) {
 2022			bytes_left = 0;
 2023			break;
 2024		}
 2025		bytes_left = end - start;
 2026	}
 2027
 2028	if (bytes_left) {
 2029		ret = blkdev_issue_discard(bdev, start >> 9, bytes_left >> 9,
 2030					   GFP_NOFS, 0);
 2031		if (!ret)
 2032			*discarded_bytes += bytes_left;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2033	}
 
 
 
 2034	return ret;
 2035}
 2036
 2037int btrfs_discard_extent(struct btrfs_root *root, u64 bytenr,
 2038			 u64 num_bytes, u64 *actual_bytes)
 2039{
 2040	int ret;
 2041	u64 discarded_bytes = 0;
 2042	struct btrfs_bio *bbio = NULL;
 
 2043
 2044
 2045	/* Tell the block device(s) that the sectors can be discarded */
 2046	ret = btrfs_map_block(root->fs_info, REQ_DISCARD,
 2047			      bytenr, &num_bytes, &bbio, 0);
 2048	/* Error condition is -ENOMEM */
 2049	if (!ret) {
 2050		struct btrfs_bio_stripe *stripe = bbio->stripes;
 
 2051		int i;
 2052
 
 
 
 
 
 
 
 
 2053
 2054		for (i = 0; i < bbio->num_stripes; i++, stripe++) {
 
 2055			u64 bytes;
 2056			if (!stripe->dev->can_discard)
 
 
 2057				continue;
 
 2058
 2059			ret = btrfs_issue_discard(stripe->dev->bdev,
 2060						  stripe->physical,
 2061						  stripe->length,
 2062						  &bytes);
 2063			if (!ret)
 2064				discarded_bytes += bytes;
 2065			else if (ret != -EOPNOTSUPP)
 2066				break; /* Logic errors or -ENOMEM, or -EIO but I don't know how that could happen JDM */
 2067
 2068			/*
 2069			 * Just in case we get back EOPNOTSUPP for some reason,
 2070			 * just ignore the return value so we don't screw up
 2071			 * people calling discard_extent.
 2072			 */
 2073			ret = 0;
 
 
 
 
 
 
 2074		}
 2075		btrfs_put_bbio(bbio);
 
 
 
 2076	}
 2077
 2078	if (actual_bytes)
 2079		*actual_bytes = discarded_bytes;
 2080
 2081
 2082	if (ret == -EOPNOTSUPP)
 2083		ret = 0;
 2084	return ret;
 2085}
 2086
 2087/* Can return -ENOMEM */
 2088int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
 2089			 struct btrfs_root *root,
 2090			 u64 bytenr, u64 num_bytes, u64 parent,
 2091			 u64 root_objectid, u64 owner, u64 offset)
 2092{
 
 2093	int ret;
 2094	struct btrfs_fs_info *fs_info = root->fs_info;
 2095
 2096	BUG_ON(owner < BTRFS_FIRST_FREE_OBJECTID &&
 2097	       root_objectid == BTRFS_TREE_LOG_OBJECTID);
 
 
 
 
 
 
 
 
 
 2098
 2099	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 2100		ret = btrfs_add_delayed_tree_ref(fs_info, trans, bytenr,
 2101					num_bytes,
 2102					parent, root_objectid, (int)owner,
 2103					BTRFS_ADD_DELAYED_REF, NULL);
 2104	} else {
 2105		ret = btrfs_add_delayed_data_ref(fs_info, trans, bytenr,
 2106					num_bytes, parent, root_objectid,
 2107					owner, offset, 0,
 2108					BTRFS_ADD_DELAYED_REF, NULL);
 2109	}
 2110	return ret;
 2111}
 2112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2113static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
 2114				  struct btrfs_root *root,
 2115				  struct btrfs_delayed_ref_node *node,
 2116				  u64 parent, u64 root_objectid,
 2117				  u64 owner, u64 offset, int refs_to_add,
 2118				  struct btrfs_delayed_extent_op *extent_op)
 2119{
 2120	struct btrfs_fs_info *fs_info = root->fs_info;
 2121	struct btrfs_path *path;
 2122	struct extent_buffer *leaf;
 2123	struct btrfs_extent_item *item;
 2124	struct btrfs_key key;
 2125	u64 bytenr = node->bytenr;
 2126	u64 num_bytes = node->num_bytes;
 
 
 2127	u64 refs;
 
 2128	int ret;
 2129
 2130	path = btrfs_alloc_path();
 2131	if (!path)
 2132		return -ENOMEM;
 2133
 2134	path->reada = READA_FORWARD;
 2135	path->leave_spinning = 1;
 2136	/* this will setup the path even if it fails to insert the back ref */
 2137	ret = insert_inline_extent_backref(trans, fs_info->extent_root, path,
 2138					   bytenr, num_bytes, parent,
 2139					   root_objectid, owner, offset,
 2140					   refs_to_add, extent_op);
 2141	if ((ret < 0 && ret != -EAGAIN) || !ret)
 2142		goto out;
 2143
 2144	/*
 2145	 * Ok we had -EAGAIN which means we didn't have space to insert and
 2146	 * inline extent ref, so just update the reference count and add a
 2147	 * normal backref.
 2148	 */
 2149	leaf = path->nodes[0];
 2150	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 2151	item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 2152	refs = btrfs_extent_refs(leaf, item);
 2153	btrfs_set_extent_refs(leaf, item, refs + refs_to_add);
 2154	if (extent_op)
 2155		__run_delayed_extent_op(extent_op, leaf, item);
 2156
 2157	btrfs_mark_buffer_dirty(leaf);
 2158	btrfs_release_path(path);
 2159
 2160	path->reada = READA_FORWARD;
 2161	path->leave_spinning = 1;
 2162	/* now insert the actual backref */
 2163	ret = insert_extent_backref(trans, root->fs_info->extent_root,
 2164				    path, bytenr, parent, root_objectid,
 2165				    owner, offset, refs_to_add);
 
 
 2166	if (ret)
 2167		btrfs_abort_transaction(trans, root, ret);
 2168out:
 2169	btrfs_free_path(path);
 2170	return ret;
 2171}
 2172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2173static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
 2174				struct btrfs_root *root,
 2175				struct btrfs_delayed_ref_node *node,
 2176				struct btrfs_delayed_extent_op *extent_op,
 2177				int insert_reserved)
 2178{
 2179	int ret = 0;
 2180	struct btrfs_delayed_data_ref *ref;
 2181	struct btrfs_key ins;
 2182	u64 parent = 0;
 2183	u64 ref_root = 0;
 2184	u64 flags = 0;
 2185
 2186	ins.objectid = node->bytenr;
 2187	ins.offset = node->num_bytes;
 2188	ins.type = BTRFS_EXTENT_ITEM_KEY;
 2189
 2190	ref = btrfs_delayed_node_to_data_ref(node);
 2191	trace_run_delayed_data_ref(node, ref, node->action);
 2192
 2193	if (node->type == BTRFS_SHARED_DATA_REF_KEY)
 2194		parent = ref->parent;
 2195	ref_root = ref->root;
 2196
 2197	if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
 
 
 
 
 
 
 
 
 
 
 
 2198		if (extent_op)
 2199			flags |= extent_op->flags_to_set;
 2200		ret = alloc_reserved_file_extent(trans, root,
 2201						 parent, ref_root, flags,
 2202						 ref->objectid, ref->offset,
 2203						 &ins, node->ref_mod);
 
 
 
 
 
 
 
 
 2204	} else if (node->action == BTRFS_ADD_DELAYED_REF) {
 2205		ret = __btrfs_inc_extent_ref(trans, root, node, parent,
 2206					     ref_root, ref->objectid,
 2207					     ref->offset, node->ref_mod,
 2208					     extent_op);
 2209	} else if (node->action == BTRFS_DROP_DELAYED_REF) {
 2210		ret = __btrfs_free_extent(trans, root, node, parent,
 2211					  ref_root, ref->objectid,
 2212					  ref->offset, node->ref_mod,
 2213					  extent_op);
 2214	} else {
 2215		BUG();
 2216	}
 2217	return ret;
 2218}
 2219
 2220static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
 2221				    struct extent_buffer *leaf,
 2222				    struct btrfs_extent_item *ei)
 2223{
 2224	u64 flags = btrfs_extent_flags(leaf, ei);
 2225	if (extent_op->update_flags) {
 2226		flags |= extent_op->flags_to_set;
 2227		btrfs_set_extent_flags(leaf, ei, flags);
 2228	}
 2229
 2230	if (extent_op->update_key) {
 2231		struct btrfs_tree_block_info *bi;
 2232		BUG_ON(!(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK));
 2233		bi = (struct btrfs_tree_block_info *)(ei + 1);
 2234		btrfs_set_tree_block_key(leaf, bi, &extent_op->key);
 2235	}
 2236}
 2237
 2238static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
 2239				 struct btrfs_root *root,
 2240				 struct btrfs_delayed_ref_node *node,
 2241				 struct btrfs_delayed_extent_op *extent_op)
 2242{
 
 
 2243	struct btrfs_key key;
 2244	struct btrfs_path *path;
 2245	struct btrfs_extent_item *ei;
 2246	struct extent_buffer *leaf;
 2247	u32 item_size;
 2248	int ret;
 2249	int err = 0;
 2250	int metadata = !extent_op->is_data;
 2251
 2252	if (trans->aborted)
 2253		return 0;
 2254
 2255	if (metadata && !btrfs_fs_incompat(root->fs_info, SKINNY_METADATA))
 2256		metadata = 0;
 2257
 2258	path = btrfs_alloc_path();
 2259	if (!path)
 2260		return -ENOMEM;
 2261
 2262	key.objectid = node->bytenr;
 2263
 2264	if (metadata) {
 2265		key.type = BTRFS_METADATA_ITEM_KEY;
 2266		key.offset = extent_op->level;
 2267	} else {
 2268		key.type = BTRFS_EXTENT_ITEM_KEY;
 2269		key.offset = node->num_bytes;
 2270	}
 2271
 
 2272again:
 2273	path->reada = READA_FORWARD;
 2274	path->leave_spinning = 1;
 2275	ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key,
 2276				path, 0, 1);
 2277	if (ret < 0) {
 2278		err = ret;
 2279		goto out;
 2280	}
 2281	if (ret > 0) {
 2282		if (metadata) {
 2283			if (path->slots[0] > 0) {
 2284				path->slots[0]--;
 2285				btrfs_item_key_to_cpu(path->nodes[0], &key,
 2286						      path->slots[0]);
 2287				if (key.objectid == node->bytenr &&
 2288				    key.type == BTRFS_EXTENT_ITEM_KEY &&
 2289				    key.offset == node->num_bytes)
 2290					ret = 0;
 2291			}
 2292			if (ret > 0) {
 2293				btrfs_release_path(path);
 2294				metadata = 0;
 2295
 2296				key.objectid = node->bytenr;
 2297				key.offset = node->num_bytes;
 2298				key.type = BTRFS_EXTENT_ITEM_KEY;
 2299				goto again;
 2300			}
 2301		} else {
 2302			err = -EIO;
 
 
 
 2303			goto out;
 2304		}
 2305	}
 2306
 2307	leaf = path->nodes[0];
 2308	item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 2309#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 2310	if (item_size < sizeof(*ei)) {
 2311		ret = convert_extent_item_v0(trans, root->fs_info->extent_root,
 2312					     path, (u64)-1, 0);
 2313		if (ret < 0) {
 2314			err = ret;
 2315			goto out;
 2316		}
 2317		leaf = path->nodes[0];
 2318		item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 2319	}
 2320#endif
 2321	BUG_ON(item_size < sizeof(*ei));
 2322	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 2323	__run_delayed_extent_op(extent_op, leaf, ei);
 2324
 2325	btrfs_mark_buffer_dirty(leaf);
 2326out:
 2327	btrfs_free_path(path);
 2328	return err;
 2329}
 2330
 2331static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
 2332				struct btrfs_root *root,
 2333				struct btrfs_delayed_ref_node *node,
 2334				struct btrfs_delayed_extent_op *extent_op,
 2335				int insert_reserved)
 2336{
 2337	int ret = 0;
 2338	struct btrfs_delayed_tree_ref *ref;
 2339	struct btrfs_key ins;
 2340	u64 parent = 0;
 2341	u64 ref_root = 0;
 2342	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
 2343						 SKINNY_METADATA);
 2344
 2345	ref = btrfs_delayed_node_to_tree_ref(node);
 2346	trace_run_delayed_tree_ref(node, ref, node->action);
 2347
 2348	if (node->type == BTRFS_SHARED_BLOCK_REF_KEY)
 2349		parent = ref->parent;
 2350	ref_root = ref->root;
 2351
 2352	ins.objectid = node->bytenr;
 2353	if (skinny_metadata) {
 2354		ins.offset = ref->level;
 2355		ins.type = BTRFS_METADATA_ITEM_KEY;
 2356	} else {
 2357		ins.offset = node->num_bytes;
 2358		ins.type = BTRFS_EXTENT_ITEM_KEY;
 2359	}
 2360
 2361	BUG_ON(node->ref_mod != 1);
 2362	if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
 2363		BUG_ON(!extent_op || !extent_op->update_flags);
 2364		ret = alloc_reserved_tree_block(trans, root,
 2365						parent, ref_root,
 2366						extent_op->flags_to_set,
 2367						&extent_op->key,
 2368						ref->level, &ins);
 
 
 
 
 
 2369	} else if (node->action == BTRFS_ADD_DELAYED_REF) {
 2370		ret = __btrfs_inc_extent_ref(trans, root, node,
 2371					     parent, ref_root,
 2372					     ref->level, 0, 1,
 2373					     extent_op);
 2374	} else if (node->action == BTRFS_DROP_DELAYED_REF) {
 2375		ret = __btrfs_free_extent(trans, root, node,
 2376					  parent, ref_root,
 2377					  ref->level, 0, 1, extent_op);
 2378	} else {
 2379		BUG();
 2380	}
 2381	return ret;
 2382}
 2383
 2384/* helper function to actually process a single delayed ref entry */
 2385static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
 2386			       struct btrfs_root *root,
 2387			       struct btrfs_delayed_ref_node *node,
 2388			       struct btrfs_delayed_extent_op *extent_op,
 2389			       int insert_reserved)
 2390{
 2391	int ret = 0;
 2392
 2393	if (trans->aborted) {
 2394		if (insert_reserved)
 2395			btrfs_pin_extent(root, node->bytenr,
 2396					 node->num_bytes, 1);
 2397		return 0;
 2398	}
 2399
 2400	if (btrfs_delayed_ref_is_head(node)) {
 2401		struct btrfs_delayed_ref_head *head;
 2402		/*
 2403		 * we've hit the end of the chain and we were supposed
 2404		 * to insert this extent into the tree.  But, it got
 2405		 * deleted before we ever needed to insert it, so all
 2406		 * we have to do is clean up the accounting
 2407		 */
 2408		BUG_ON(extent_op);
 2409		head = btrfs_delayed_node_to_head(node);
 2410		trace_run_delayed_ref_head(node, head, node->action);
 2411
 2412		if (insert_reserved) {
 2413			btrfs_pin_extent(root, node->bytenr,
 2414					 node->num_bytes, 1);
 2415			if (head->is_data) {
 2416				ret = btrfs_del_csums(trans, root,
 2417						      node->bytenr,
 2418						      node->num_bytes);
 2419			}
 2420		}
 2421
 2422		/* Also free its reserved qgroup space */
 2423		btrfs_qgroup_free_delayed_ref(root->fs_info,
 2424					      head->qgroup_ref_root,
 2425					      head->qgroup_reserved);
 2426		return ret;
 2427	}
 2428
 2429	if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
 2430	    node->type == BTRFS_SHARED_BLOCK_REF_KEY)
 2431		ret = run_delayed_tree_ref(trans, root, node, extent_op,
 2432					   insert_reserved);
 2433	else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
 2434		 node->type == BTRFS_SHARED_DATA_REF_KEY)
 2435		ret = run_delayed_data_ref(trans, root, node, extent_op,
 2436					   insert_reserved);
 
 
 2437	else
 2438		BUG();
 
 
 
 
 
 
 
 2439	return ret;
 2440}
 2441
 2442static inline struct btrfs_delayed_ref_node *
 2443select_delayed_ref(struct btrfs_delayed_ref_head *head)
 2444{
 2445	struct btrfs_delayed_ref_node *ref;
 2446
 2447	if (list_empty(&head->ref_list))
 2448		return NULL;
 2449
 2450	/*
 2451	 * Select a delayed ref of type BTRFS_ADD_DELAYED_REF first.
 2452	 * This is to prevent a ref count from going down to zero, which deletes
 2453	 * the extent item from the extent tree, when there still are references
 2454	 * to add, which would fail because they would not find the extent item.
 2455	 */
 2456	list_for_each_entry(ref, &head->ref_list, list) {
 2457		if (ref->action == BTRFS_ADD_DELAYED_REF)
 2458			return ref;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2459	}
 
 
 2460
 2461	return list_entry(head->ref_list.next, struct btrfs_delayed_ref_node,
 2462			  list);
 
 
 
 
 
 
 
 
 
 
 
 
 2463}
 2464
 2465/*
 2466 * Returns 0 on success or if called with an already aborted transaction.
 2467 * Returns -ENOMEM or -EIO on failure and will abort the transaction.
 2468 */
 2469static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
 2470					     struct btrfs_root *root,
 2471					     unsigned long nr)
 2472{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2473	struct btrfs_delayed_ref_root *delayed_refs;
 2474	struct btrfs_delayed_ref_node *ref;
 2475	struct btrfs_delayed_ref_head *locked_ref = NULL;
 2476	struct btrfs_delayed_extent_op *extent_op;
 2477	struct btrfs_fs_info *fs_info = root->fs_info;
 2478	ktime_t start = ktime_get();
 2479	int ret;
 2480	unsigned long count = 0;
 2481	unsigned long actual_count = 0;
 2482	int must_insert_reserved = 0;
 2483
 2484	delayed_refs = &trans->transaction->delayed_refs;
 2485	while (1) {
 2486		if (!locked_ref) {
 2487			if (count >= nr)
 2488				break;
 2489
 2490			spin_lock(&delayed_refs->lock);
 2491			locked_ref = btrfs_select_ref_head(trans);
 2492			if (!locked_ref) {
 2493				spin_unlock(&delayed_refs->lock);
 2494				break;
 2495			}
 
 
 2496
 2497			/* grab the lock that says we are going to process
 2498			 * all the refs for this head */
 2499			ret = btrfs_delayed_ref_lock(trans, locked_ref);
 2500			spin_unlock(&delayed_refs->lock);
 2501			/*
 2502			 * we may have dropped the spin lock to get the head
 2503			 * mutex lock, and that might have given someone else
 2504			 * time to free the head.  If that's true, it has been
 2505			 * removed from our list and we can move on.
 2506			 */
 2507			if (ret == -EAGAIN) {
 2508				locked_ref = NULL;
 2509				count++;
 2510				continue;
 2511			}
 
 
 
 
 
 
 
 
 
 2512		}
 
 2513
 2514		/*
 2515		 * We need to try and merge add/drops of the same ref since we
 2516		 * can run into issues with relocate dropping the implicit ref
 2517		 * and then it being added back again before the drop can
 2518		 * finish.  If we merged anything we need to re-loop so we can
 2519		 * get a good ref.
 2520		 * Or we can get node references of the same type that weren't
 2521		 * merged when created due to bumps in the tree mod seq, and
 2522		 * we need to merge them to prevent adding an inline extent
 2523		 * backref before dropping it (triggering a BUG_ON at
 2524		 * insert_inline_extent_backref()).
 2525		 */
 2526		spin_lock(&locked_ref->lock);
 2527		btrfs_merge_delayed_refs(trans, fs_info, delayed_refs,
 2528					 locked_ref);
 2529
 2530		/*
 2531		 * locked_ref is the head node, so we have to go one
 2532		 * node back for any delayed ref updates
 2533		 */
 2534		ref = select_delayed_ref(locked_ref);
 
 
 
 
 
 
 
 
 
 
 
 2535
 2536		if (ref && ref->seq &&
 2537		    btrfs_check_delayed_seq(fs_info, delayed_refs, ref->seq)) {
 
 
 
 
 
 
 2538			spin_unlock(&locked_ref->lock);
 2539			btrfs_delayed_ref_unlock(locked_ref);
 2540			spin_lock(&delayed_refs->lock);
 2541			locked_ref->processing = 0;
 2542			delayed_refs->num_heads_ready++;
 2543			spin_unlock(&delayed_refs->lock);
 2544			locked_ref = NULL;
 2545			cond_resched();
 2546			count++;
 2547			continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 2548		}
 2549
 2550		/*
 2551		 * record the must insert reserved flag before we
 2552		 * drop the spin lock.
 2553		 */
 2554		must_insert_reserved = locked_ref->must_insert_reserved;
 2555		locked_ref->must_insert_reserved = 0;
 
 
 
 
 
 
 2556
 2557		extent_op = locked_ref->extent_op;
 2558		locked_ref->extent_op = NULL;
 
 2559
 2560		if (!ref) {
 
 
 
 2561
 
 
 
 
 
 
 2562
 2563			/* All delayed refs have been processed, Go ahead
 2564			 * and send the head node to run_one_delayed_ref,
 2565			 * so that any accounting fixes can happen
 2566			 */
 2567			ref = &locked_ref->node;
 2568
 2569			if (extent_op && must_insert_reserved) {
 2570				btrfs_free_delayed_extent_op(extent_op);
 2571				extent_op = NULL;
 2572			}
 2573
 2574			if (extent_op) {
 2575				spin_unlock(&locked_ref->lock);
 2576				ret = run_delayed_extent_op(trans, root,
 2577							    ref, extent_op);
 2578				btrfs_free_delayed_extent_op(extent_op);
 2579
 2580				if (ret) {
 2581					/*
 2582					 * Need to reset must_insert_reserved if
 2583					 * there was an error so the abort stuff
 2584					 * can cleanup the reserved space
 2585					 * properly.
 2586					 */
 2587					if (must_insert_reserved)
 2588						locked_ref->must_insert_reserved = 1;
 2589					locked_ref->processing = 0;
 2590					btrfs_debug(fs_info, "run_delayed_extent_op returned %d", ret);
 2591					btrfs_delayed_ref_unlock(locked_ref);
 2592					return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2593				}
 2594				continue;
 2595			}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 2596
 
 
 2597			/*
 2598			 * Need to drop our head ref lock and re-aqcuire the
 2599			 * delayed ref lock and then re-check to make sure
 2600			 * nobody got added.
 2601			 */
 2602			spin_unlock(&locked_ref->lock);
 2603			spin_lock(&delayed_refs->lock);
 2604			spin_lock(&locked_ref->lock);
 2605			if (!list_empty(&locked_ref->ref_list) ||
 2606			    locked_ref->extent_op) {
 2607				spin_unlock(&locked_ref->lock);
 2608				spin_unlock(&delayed_refs->lock);
 2609				continue;
 2610			}
 2611			ref->in_tree = 0;
 2612			delayed_refs->num_heads--;
 2613			rb_erase(&locked_ref->href_node,
 2614				 &delayed_refs->href_root);
 2615			spin_unlock(&delayed_refs->lock);
 2616		} else {
 2617			actual_count++;
 2618			ref->in_tree = 0;
 2619			list_del(&ref->list);
 2620		}
 2621		atomic_dec(&delayed_refs->num_entries);
 2622
 2623		if (!btrfs_delayed_ref_is_head(ref)) {
 2624			/*
 2625			 * when we play the delayed ref, also correct the
 2626			 * ref_mod on head
 2627			 */
 2628			switch (ref->action) {
 2629			case BTRFS_ADD_DELAYED_REF:
 2630			case BTRFS_ADD_DELAYED_EXTENT:
 2631				locked_ref->node.ref_mod -= ref->ref_mod;
 2632				break;
 2633			case BTRFS_DROP_DELAYED_REF:
 2634				locked_ref->node.ref_mod += ref->ref_mod;
 2635				break;
 2636			default:
 2637				WARN_ON(1);
 2638			}
 2639		}
 2640		spin_unlock(&locked_ref->lock);
 2641
 2642		ret = run_one_delayed_ref(trans, root, ref, extent_op,
 2643					  must_insert_reserved);
 2644
 2645		btrfs_free_delayed_extent_op(extent_op);
 2646		if (ret) {
 2647			locked_ref->processing = 0;
 2648			btrfs_delayed_ref_unlock(locked_ref);
 2649			btrfs_put_delayed_ref(ref);
 2650			btrfs_debug(fs_info, "run_one_delayed_ref returned %d", ret);
 2651			return ret;
 2652		}
 2653
 2654		/*
 2655		 * If this node is a head, that means all the refs in this head
 2656		 * have been dealt with, and we will pick the next head to deal
 2657		 * with, so we must unlock the head and drop it from the cluster
 2658		 * list before we release it.
 2659		 */
 2660		if (btrfs_delayed_ref_is_head(ref)) {
 2661			if (locked_ref->is_data &&
 2662			    locked_ref->total_ref_mod < 0) {
 2663				spin_lock(&delayed_refs->lock);
 2664				delayed_refs->pending_csums -= ref->num_bytes;
 2665				spin_unlock(&delayed_refs->lock);
 2666			}
 2667			btrfs_delayed_ref_unlock(locked_ref);
 2668			locked_ref = NULL;
 2669		}
 2670		btrfs_put_delayed_ref(ref);
 2671		count++;
 2672		cond_resched();
 2673	}
 2674
 2675	/*
 2676	 * We don't want to include ref heads since we can have empty ref heads
 2677	 * and those will drastically skew our runtime down since we just do
 2678	 * accounting, no actual extent tree updates.
 2679	 */
 2680	if (actual_count > 0) {
 2681		u64 runtime = ktime_to_ns(ktime_sub(ktime_get(), start));
 2682		u64 avg;
 2683
 2684		/*
 2685		 * We weigh the current average higher than our current runtime
 2686		 * to avoid large swings in the average.
 2687		 */
 2688		spin_lock(&delayed_refs->lock);
 2689		avg = fs_info->avg_delayed_ref_runtime * 3 + runtime;
 2690		fs_info->avg_delayed_ref_runtime = avg >> 2;	/* div by 4 */
 2691		spin_unlock(&delayed_refs->lock);
 2692	}
 2693	return 0;
 2694}
 2695
 2696#ifdef SCRAMBLE_DELAYED_REFS
 2697/*
 2698 * Normally delayed refs get processed in ascending bytenr order. This
 2699 * correlates in most cases to the order added. To expose dependencies on this
 2700 * order, we start to process the tree in the middle instead of the beginning
 2701 */
 2702static u64 find_middle(struct rb_root *root)
 2703{
 2704	struct rb_node *n = root->rb_node;
 2705	struct btrfs_delayed_ref_node *entry;
 2706	int alt = 1;
 2707	u64 middle;
 2708	u64 first = 0, last = 0;
 2709
 2710	n = rb_first(root);
 2711	if (n) {
 2712		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
 2713		first = entry->bytenr;
 2714	}
 2715	n = rb_last(root);
 2716	if (n) {
 2717		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
 2718		last = entry->bytenr;
 2719	}
 2720	n = root->rb_node;
 2721
 2722	while (n) {
 2723		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
 2724		WARN_ON(!entry->in_tree);
 2725
 2726		middle = entry->bytenr;
 2727
 2728		if (alt)
 2729			n = n->rb_left;
 2730		else
 2731			n = n->rb_right;
 2732
 2733		alt = 1 - alt;
 2734	}
 2735	return middle;
 2736}
 2737#endif
 2738
 2739static inline u64 heads_to_leaves(struct btrfs_root *root, u64 heads)
 2740{
 2741	u64 num_bytes;
 2742
 2743	num_bytes = heads * (sizeof(struct btrfs_extent_item) +
 2744			     sizeof(struct btrfs_extent_inline_ref));
 2745	if (!btrfs_fs_incompat(root->fs_info, SKINNY_METADATA))
 2746		num_bytes += heads * sizeof(struct btrfs_tree_block_info);
 2747
 2748	/*
 2749	 * We don't ever fill up leaves all the way so multiply by 2 just to be
 2750	 * closer to what we're really going to want to ouse.
 2751	 */
 2752	return div_u64(num_bytes, BTRFS_LEAF_DATA_SIZE(root));
 2753}
 2754
 2755/*
 2756 * Takes the number of bytes to be csumm'ed and figures out how many leaves it
 2757 * would require to store the csums for that many bytes.
 2758 */
 2759u64 btrfs_csum_bytes_to_leaves(struct btrfs_root *root, u64 csum_bytes)
 2760{
 2761	u64 csum_size;
 2762	u64 num_csums_per_leaf;
 2763	u64 num_csums;
 2764
 2765	csum_size = BTRFS_LEAF_DATA_SIZE(root) - sizeof(struct btrfs_item);
 2766	num_csums_per_leaf = div64_u64(csum_size,
 2767			(u64)btrfs_super_csum_size(root->fs_info->super_copy));
 2768	num_csums = div64_u64(csum_bytes, root->sectorsize);
 2769	num_csums += num_csums_per_leaf - 1;
 2770	num_csums = div64_u64(num_csums, num_csums_per_leaf);
 2771	return num_csums;
 2772}
 2773
 2774int btrfs_check_space_for_delayed_refs(struct btrfs_trans_handle *trans,
 2775				       struct btrfs_root *root)
 2776{
 2777	struct btrfs_block_rsv *global_rsv;
 2778	u64 num_heads = trans->transaction->delayed_refs.num_heads_ready;
 2779	u64 csum_bytes = trans->transaction->delayed_refs.pending_csums;
 2780	u64 num_dirty_bgs = trans->transaction->num_dirty_bgs;
 2781	u64 num_bytes, num_dirty_bgs_bytes;
 2782	int ret = 0;
 2783
 2784	num_bytes = btrfs_calc_trans_metadata_size(root, 1);
 2785	num_heads = heads_to_leaves(root, num_heads);
 2786	if (num_heads > 1)
 2787		num_bytes += (num_heads - 1) * root->nodesize;
 2788	num_bytes <<= 1;
 2789	num_bytes += btrfs_csum_bytes_to_leaves(root, csum_bytes) * root->nodesize;
 2790	num_dirty_bgs_bytes = btrfs_calc_trans_metadata_size(root,
 2791							     num_dirty_bgs);
 2792	global_rsv = &root->fs_info->global_block_rsv;
 2793
 2794	/*
 2795	 * If we can't allocate any more chunks lets make sure we have _lots_ of
 2796	 * wiggle room since running delayed refs can create more delayed refs.
 2797	 */
 2798	if (global_rsv->space_info->full) {
 2799		num_dirty_bgs_bytes <<= 1;
 2800		num_bytes <<= 1;
 2801	}
 2802
 2803	spin_lock(&global_rsv->lock);
 2804	if (global_rsv->reserved <= num_bytes + num_dirty_bgs_bytes)
 2805		ret = 1;
 2806	spin_unlock(&global_rsv->lock);
 2807	return ret;
 2808}
 2809
 2810int btrfs_should_throttle_delayed_refs(struct btrfs_trans_handle *trans,
 2811				       struct btrfs_root *root)
 2812{
 2813	struct btrfs_fs_info *fs_info = root->fs_info;
 2814	u64 num_entries =
 2815		atomic_read(&trans->transaction->delayed_refs.num_entries);
 2816	u64 avg_runtime;
 2817	u64 val;
 2818
 2819	smp_mb();
 2820	avg_runtime = fs_info->avg_delayed_ref_runtime;
 2821	val = num_entries * avg_runtime;
 2822	if (num_entries * avg_runtime >= NSEC_PER_SEC)
 2823		return 1;
 2824	if (val >= NSEC_PER_SEC / 2)
 2825		return 2;
 2826
 2827	return btrfs_check_space_for_delayed_refs(trans, root);
 2828}
 2829
 2830struct async_delayed_refs {
 2831	struct btrfs_root *root;
 2832	int count;
 2833	int error;
 2834	int sync;
 2835	struct completion wait;
 2836	struct btrfs_work work;
 2837};
 2838
 2839static void delayed_ref_async_start(struct btrfs_work *work)
 2840{
 2841	struct async_delayed_refs *async;
 2842	struct btrfs_trans_handle *trans;
 2843	int ret;
 2844
 2845	async = container_of(work, struct async_delayed_refs, work);
 2846
 2847	trans = btrfs_join_transaction(async->root);
 2848	if (IS_ERR(trans)) {
 2849		async->error = PTR_ERR(trans);
 2850		goto done;
 2851	}
 2852
 2853	/*
 2854	 * trans->sync means that when we call end_transaciton, we won't
 2855	 * wait on delayed refs
 2856	 */
 2857	trans->sync = true;
 2858	ret = btrfs_run_delayed_refs(trans, async->root, async->count);
 2859	if (ret)
 2860		async->error = ret;
 2861
 2862	ret = btrfs_end_transaction(trans, async->root);
 2863	if (ret && !async->error)
 2864		async->error = ret;
 2865done:
 2866	if (async->sync)
 2867		complete(&async->wait);
 2868	else
 2869		kfree(async);
 2870}
 2871
 2872int btrfs_async_run_delayed_refs(struct btrfs_root *root,
 2873				 unsigned long count, int wait)
 2874{
 2875	struct async_delayed_refs *async;
 2876	int ret;
 2877
 2878	async = kmalloc(sizeof(*async), GFP_NOFS);
 2879	if (!async)
 2880		return -ENOMEM;
 2881
 2882	async->root = root->fs_info->tree_root;
 2883	async->count = count;
 2884	async->error = 0;
 2885	if (wait)
 2886		async->sync = 1;
 2887	else
 2888		async->sync = 0;
 2889	init_completion(&async->wait);
 2890
 2891	btrfs_init_work(&async->work, btrfs_extent_refs_helper,
 2892			delayed_ref_async_start, NULL, NULL);
 2893
 2894	btrfs_queue_work(root->fs_info->extent_workers, &async->work);
 2895
 2896	if (wait) {
 2897		wait_for_completion(&async->wait);
 2898		ret = async->error;
 2899		kfree(async);
 2900		return ret;
 2901	}
 2902	return 0;
 2903}
 2904
 2905/*
 2906 * this starts processing the delayed reference count updates and
 2907 * extent insertions we have queued up so far.  count can be
 2908 * 0, which means to process everything in the tree at the start
 2909 * of the run (but not newly added entries), or it can be some target
 2910 * number you'd like to process.
 
 
 
 
 
 2911 *
 2912 * Returns 0 on success or if called with an aborted transaction
 2913 * Returns <0 on error and aborts the transaction
 2914 */
 2915int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
 2916			   struct btrfs_root *root, unsigned long count)
 2917{
 2918	struct rb_node *node;
 2919	struct btrfs_delayed_ref_root *delayed_refs;
 2920	struct btrfs_delayed_ref_head *head;
 2921	int ret;
 2922	int run_all = count == (unsigned long)-1;
 2923	bool can_flush_pending_bgs = trans->can_flush_pending_bgs;
 2924
 2925	/* We'll clean this up in btrfs_cleanup_transaction */
 2926	if (trans->aborted)
 2927		return 0;
 2928
 2929	if (root->fs_info->creating_free_space_tree)
 2930		return 0;
 2931
 2932	if (root == root->fs_info->extent_root)
 2933		root = root->fs_info->tree_root;
 2934
 2935	delayed_refs = &trans->transaction->delayed_refs;
 2936	if (count == 0)
 2937		count = atomic_read(&delayed_refs->num_entries) * 2;
 2938
 2939again:
 2940#ifdef SCRAMBLE_DELAYED_REFS
 2941	delayed_refs->run_delayed_start = find_middle(&delayed_refs->root);
 2942#endif
 2943	trans->can_flush_pending_bgs = false;
 2944	ret = __btrfs_run_delayed_refs(trans, root, count);
 2945	if (ret < 0) {
 2946		btrfs_abort_transaction(trans, root, ret);
 2947		return ret;
 2948	}
 2949
 2950	if (run_all) {
 2951		if (!list_empty(&trans->new_bgs))
 2952			btrfs_create_pending_block_groups(trans, root);
 2953
 2954		spin_lock(&delayed_refs->lock);
 2955		node = rb_first(&delayed_refs->href_root);
 2956		if (!node) {
 2957			spin_unlock(&delayed_refs->lock);
 2958			goto out;
 2959		}
 2960		count = (unsigned long)-1;
 2961
 2962		while (node) {
 2963			head = rb_entry(node, struct btrfs_delayed_ref_head,
 2964					href_node);
 2965			if (btrfs_delayed_ref_is_head(&head->node)) {
 2966				struct btrfs_delayed_ref_node *ref;
 2967
 2968				ref = &head->node;
 2969				atomic_inc(&ref->refs);
 2970
 2971				spin_unlock(&delayed_refs->lock);
 2972				/*
 2973				 * Mutex was contended, block until it's
 2974				 * released and try again
 2975				 */
 2976				mutex_lock(&head->mutex);
 2977				mutex_unlock(&head->mutex);
 2978
 2979				btrfs_put_delayed_ref(ref);
 2980				cond_resched();
 2981				goto again;
 2982			} else {
 2983				WARN_ON(1);
 2984			}
 2985			node = rb_next(node);
 2986		}
 2987		spin_unlock(&delayed_refs->lock);
 
 2988		cond_resched();
 2989		goto again;
 2990	}
 2991out:
 2992	assert_qgroups_uptodate(trans);
 2993	trans->can_flush_pending_bgs = can_flush_pending_bgs;
 2994	return 0;
 2995}
 2996
 2997int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
 2998				struct btrfs_root *root,
 2999				u64 bytenr, u64 num_bytes, u64 flags,
 3000				int level, int is_data)
 3001{
 3002	struct btrfs_delayed_extent_op *extent_op;
 3003	int ret;
 3004
 3005	extent_op = btrfs_alloc_delayed_extent_op();
 3006	if (!extent_op)
 3007		return -ENOMEM;
 3008
 3009	extent_op->flags_to_set = flags;
 3010	extent_op->update_flags = true;
 3011	extent_op->update_key = false;
 3012	extent_op->is_data = is_data ? true : false;
 3013	extent_op->level = level;
 3014
 3015	ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr,
 3016					  num_bytes, extent_op);
 3017	if (ret)
 3018		btrfs_free_delayed_extent_op(extent_op);
 3019	return ret;
 3020}
 3021
 3022static noinline int check_delayed_ref(struct btrfs_trans_handle *trans,
 3023				      struct btrfs_root *root,
 3024				      struct btrfs_path *path,
 3025				      u64 objectid, u64 offset, u64 bytenr)
 3026{
 3027	struct btrfs_delayed_ref_head *head;
 3028	struct btrfs_delayed_ref_node *ref;
 3029	struct btrfs_delayed_data_ref *data_ref;
 3030	struct btrfs_delayed_ref_root *delayed_refs;
 
 
 3031	int ret = 0;
 3032
 3033	delayed_refs = &trans->transaction->delayed_refs;
 
 
 
 
 
 
 
 
 3034	spin_lock(&delayed_refs->lock);
 3035	head = btrfs_find_delayed_ref_head(trans, bytenr);
 3036	if (!head) {
 3037		spin_unlock(&delayed_refs->lock);
 
 3038		return 0;
 3039	}
 3040
 3041	if (!mutex_trylock(&head->mutex)) {
 3042		atomic_inc(&head->node.refs);
 
 
 
 
 
 
 3043		spin_unlock(&delayed_refs->lock);
 3044
 3045		btrfs_release_path(path);
 3046
 3047		/*
 3048		 * Mutex was contended, block until it's released and let
 3049		 * caller try again
 3050		 */
 3051		mutex_lock(&head->mutex);
 3052		mutex_unlock(&head->mutex);
 3053		btrfs_put_delayed_ref(&head->node);
 
 3054		return -EAGAIN;
 3055	}
 3056	spin_unlock(&delayed_refs->lock);
 3057
 3058	spin_lock(&head->lock);
 3059	list_for_each_entry(ref, &head->ref_list, list) {
 
 
 
 
 
 
 
 
 
 3060		/* If it's a shared ref we know a cross reference exists */
 3061		if (ref->type != BTRFS_EXTENT_DATA_REF_KEY) {
 3062			ret = 1;
 3063			break;
 3064		}
 3065
 3066		data_ref = btrfs_delayed_node_to_data_ref(ref);
 
 3067
 3068		/*
 3069		 * If our ref doesn't match the one we're currently looking at
 3070		 * then we have a cross reference.
 3071		 */
 3072		if (data_ref->root != root->root_key.objectid ||
 3073		    data_ref->objectid != objectid ||
 3074		    data_ref->offset != offset) {
 3075			ret = 1;
 3076			break;
 3077		}
 3078	}
 3079	spin_unlock(&head->lock);
 3080	mutex_unlock(&head->mutex);
 
 3081	return ret;
 3082}
 3083
 3084static noinline int check_committed_ref(struct btrfs_trans_handle *trans,
 3085					struct btrfs_root *root,
 3086					struct btrfs_path *path,
 3087					u64 objectid, u64 offset, u64 bytenr)
 
 3088{
 3089	struct btrfs_root *extent_root = root->fs_info->extent_root;
 
 3090	struct extent_buffer *leaf;
 3091	struct btrfs_extent_data_ref *ref;
 3092	struct btrfs_extent_inline_ref *iref;
 3093	struct btrfs_extent_item *ei;
 3094	struct btrfs_key key;
 3095	u32 item_size;
 
 
 3096	int ret;
 3097
 3098	key.objectid = bytenr;
 3099	key.offset = (u64)-1;
 3100	key.type = BTRFS_EXTENT_ITEM_KEY;
 3101
 3102	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
 3103	if (ret < 0)
 3104		goto out;
 3105	BUG_ON(ret == 0); /* Corruption */
 
 
 
 
 
 
 
 3106
 3107	ret = -ENOENT;
 3108	if (path->slots[0] == 0)
 3109		goto out;
 3110
 3111	path->slots[0]--;
 3112	leaf = path->nodes[0];
 3113	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 3114
 3115	if (key.objectid != bytenr || key.type != BTRFS_EXTENT_ITEM_KEY)
 3116		goto out;
 3117
 3118	ret = 1;
 3119	item_size = btrfs_item_size_nr(leaf, path->slots[0]);
 3120#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 3121	if (item_size < sizeof(*ei)) {
 3122		WARN_ON(item_size != sizeof(struct btrfs_extent_item_v0));
 
 
 3123		goto out;
 
 
 
 
 
 
 
 3124	}
 3125#endif
 3126	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 3127
 3128	if (item_size != sizeof(*ei) +
 3129	    btrfs_extent_inline_ref_size(BTRFS_EXTENT_DATA_REF_KEY))
 3130		goto out;
 3131
 3132	if (btrfs_extent_generation(leaf, ei) <=
 3133	    btrfs_root_last_snapshot(&root->root_item))
 
 
 
 
 
 3134		goto out;
 3135
 3136	iref = (struct btrfs_extent_inline_ref *)(ei + 1);
 3137	if (btrfs_extent_inline_ref_type(leaf, iref) !=
 3138	    BTRFS_EXTENT_DATA_REF_KEY)
 3139		goto out;
 3140
 3141	ref = (struct btrfs_extent_data_ref *)(&iref->offset);
 3142	if (btrfs_extent_refs(leaf, ei) !=
 3143	    btrfs_extent_data_ref_count(leaf, ref) ||
 3144	    btrfs_extent_data_ref_root(leaf, ref) !=
 3145	    root->root_key.objectid ||
 3146	    btrfs_extent_data_ref_objectid(leaf, ref) != objectid ||
 3147	    btrfs_extent_data_ref_offset(leaf, ref) != offset)
 3148		goto out;
 3149
 3150	ret = 0;
 3151out:
 3152	return ret;
 3153}
 3154
 3155int btrfs_cross_ref_exist(struct btrfs_trans_handle *trans,
 3156			  struct btrfs_root *root,
 3157			  u64 objectid, u64 offset, u64 bytenr)
 3158{
 3159	struct btrfs_path *path;
 3160	int ret;
 3161	int ret2;
 3162
 3163	path = btrfs_alloc_path();
 3164	if (!path)
 3165		return -ENOENT;
 3166
 3167	do {
 3168		ret = check_committed_ref(trans, root, path, objectid,
 3169					  offset, bytenr);
 3170		if (ret && ret != -ENOENT)
 3171			goto out;
 3172
 3173		ret2 = check_delayed_ref(trans, root, path, objectid,
 3174					 offset, bytenr);
 3175	} while (ret2 == -EAGAIN);
 3176
 3177	if (ret2 && ret2 != -ENOENT) {
 3178		ret = ret2;
 3179		goto out;
 3180	}
 3181
 3182	if (ret != -ENOENT || ret2 != -ENOENT)
 3183		ret = 0;
 3184out:
 3185	btrfs_free_path(path);
 3186	if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID)
 3187		WARN_ON(ret > 0);
 3188	return ret;
 3189}
 3190
 3191static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
 3192			   struct btrfs_root *root,
 3193			   struct extent_buffer *buf,
 3194			   int full_backref, int inc)
 3195{
 3196	u64 bytenr;
 3197	u64 num_bytes;
 3198	u64 parent;
 3199	u64 ref_root;
 3200	u32 nritems;
 3201	struct btrfs_key key;
 3202	struct btrfs_file_extent_item *fi;
 
 3203	int i;
 
 3204	int level;
 3205	int ret = 0;
 3206	int (*process_func)(struct btrfs_trans_handle *, struct btrfs_root *,
 3207			    u64, u64, u64, u64, u64, u64);
 3208
 3209
 3210	if (btrfs_test_is_dummy_root(root))
 3211		return 0;
 3212
 3213	ref_root = btrfs_header_owner(buf);
 3214	nritems = btrfs_header_nritems(buf);
 3215	level = btrfs_header_level(buf);
 3216
 3217	if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0)
 3218		return 0;
 3219
 3220	if (inc)
 3221		process_func = btrfs_inc_extent_ref;
 3222	else
 3223		process_func = btrfs_free_extent;
 3224
 3225	if (full_backref)
 3226		parent = buf->start;
 3227	else
 3228		parent = 0;
 
 
 
 
 3229
 3230	for (i = 0; i < nritems; i++) {
 
 
 
 
 
 
 3231		if (level == 0) {
 3232			btrfs_item_key_to_cpu(buf, &key, i);
 3233			if (key.type != BTRFS_EXTENT_DATA_KEY)
 3234				continue;
 3235			fi = btrfs_item_ptr(buf, i,
 3236					    struct btrfs_file_extent_item);
 3237			if (btrfs_file_extent_type(buf, fi) ==
 3238			    BTRFS_FILE_EXTENT_INLINE)
 3239				continue;
 3240			bytenr = btrfs_file_extent_disk_bytenr(buf, fi);
 3241			if (bytenr == 0)
 3242				continue;
 3243
 3244			num_bytes = btrfs_file_extent_disk_num_bytes(buf, fi);
 
 
 3245			key.offset -= btrfs_file_extent_offset(buf, fi);
 3246			ret = process_func(trans, root, bytenr, num_bytes,
 3247					   parent, ref_root, key.objectid,
 3248					   key.offset);
 
 
 
 3249			if (ret)
 3250				goto fail;
 3251		} else {
 3252			bytenr = btrfs_node_blockptr(buf, i);
 3253			num_bytes = root->nodesize;
 3254			ret = process_func(trans, root, bytenr, num_bytes,
 3255					   parent, ref_root, level - 1, 0);
 
 
 
 
 
 
 3256			if (ret)
 3257				goto fail;
 3258		}
 3259	}
 3260	return 0;
 3261fail:
 3262	return ret;
 3263}
 3264
 3265int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
 3266		  struct extent_buffer *buf, int full_backref)
 3267{
 3268	return __btrfs_mod_ref(trans, root, buf, full_backref, 1);
 3269}
 3270
 3271int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
 3272		  struct extent_buffer *buf, int full_backref)
 3273{
 3274	return __btrfs_mod_ref(trans, root, buf, full_backref, 0);
 3275}
 3276
 3277static int write_one_cache_group(struct btrfs_trans_handle *trans,
 3278				 struct btrfs_root *root,
 3279				 struct btrfs_path *path,
 3280				 struct btrfs_block_group_cache *cache)
 3281{
 3282	int ret;
 3283	struct btrfs_root *extent_root = root->fs_info->extent_root;
 3284	unsigned long bi;
 3285	struct extent_buffer *leaf;
 3286
 3287	ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1);
 3288	if (ret) {
 3289		if (ret > 0)
 3290			ret = -ENOENT;
 3291		goto fail;
 3292	}
 3293
 3294	leaf = path->nodes[0];
 3295	bi = btrfs_item_ptr_offset(leaf, path->slots[0]);
 3296	write_extent_buffer(leaf, &cache->item, bi, sizeof(cache->item));
 3297	btrfs_mark_buffer_dirty(leaf);
 3298fail:
 3299	btrfs_release_path(path);
 3300	return ret;
 3301
 3302}
 3303
 3304static struct btrfs_block_group_cache *
 3305next_block_group(struct btrfs_root *root,
 3306		 struct btrfs_block_group_cache *cache)
 3307{
 3308	struct rb_node *node;
 3309
 3310	spin_lock(&root->fs_info->block_group_cache_lock);
 3311
 3312	/* If our block group was removed, we need a full search. */
 3313	if (RB_EMPTY_NODE(&cache->cache_node)) {
 3314		const u64 next_bytenr = cache->key.objectid + cache->key.offset;
 3315
 3316		spin_unlock(&root->fs_info->block_group_cache_lock);
 3317		btrfs_put_block_group(cache);
 3318		cache = btrfs_lookup_first_block_group(root->fs_info,
 3319						       next_bytenr);
 3320		return cache;
 3321	}
 3322	node = rb_next(&cache->cache_node);
 3323	btrfs_put_block_group(cache);
 3324	if (node) {
 3325		cache = rb_entry(node, struct btrfs_block_group_cache,
 3326				 cache_node);
 3327		btrfs_get_block_group(cache);
 3328	} else
 3329		cache = NULL;
 3330	spin_unlock(&root->fs_info->block_group_cache_lock);
 3331	return cache;
 3332}
 3333
 3334static int cache_save_setup(struct btrfs_block_group_cache *block_group,
 3335			    struct btrfs_trans_handle *trans,
 3336			    struct btrfs_path *path)
 3337{
 3338	struct btrfs_root *root = block_group->fs_info->tree_root;
 3339	struct inode *inode = NULL;
 3340	u64 alloc_hint = 0;
 3341	int dcs = BTRFS_DC_ERROR;
 3342	u64 num_pages = 0;
 3343	int retries = 0;
 3344	int ret = 0;
 3345
 3346	/*
 3347	 * If this block group is smaller than 100 megs don't bother caching the
 3348	 * block group.
 3349	 */
 3350	if (block_group->key.offset < (100 * SZ_1M)) {
 3351		spin_lock(&block_group->lock);
 3352		block_group->disk_cache_state = BTRFS_DC_WRITTEN;
 3353		spin_unlock(&block_group->lock);
 3354		return 0;
 3355	}
 3356
 3357	if (trans->aborted)
 3358		return 0;
 3359again:
 3360	inode = lookup_free_space_inode(root, block_group, path);
 3361	if (IS_ERR(inode) && PTR_ERR(inode) != -ENOENT) {
 3362		ret = PTR_ERR(inode);
 3363		btrfs_release_path(path);
 3364		goto out;
 3365	}
 3366
 3367	if (IS_ERR(inode)) {
 3368		BUG_ON(retries);
 3369		retries++;
 3370
 3371		if (block_group->ro)
 3372			goto out_free;
 3373
 3374		ret = create_free_space_inode(root, trans, block_group, path);
 3375		if (ret)
 3376			goto out_free;
 3377		goto again;
 3378	}
 3379
 3380	/* We've already setup this transaction, go ahead and exit */
 3381	if (block_group->cache_generation == trans->transid &&
 3382	    i_size_read(inode)) {
 3383		dcs = BTRFS_DC_SETUP;
 3384		goto out_put;
 3385	}
 3386
 3387	/*
 3388	 * We want to set the generation to 0, that way if anything goes wrong
 3389	 * from here on out we know not to trust this cache when we load up next
 3390	 * time.
 3391	 */
 3392	BTRFS_I(inode)->generation = 0;
 3393	ret = btrfs_update_inode(trans, root, inode);
 3394	if (ret) {
 3395		/*
 3396		 * So theoretically we could recover from this, simply set the
 3397		 * super cache generation to 0 so we know to invalidate the
 3398		 * cache, but then we'd have to keep track of the block groups
 3399		 * that fail this way so we know we _have_ to reset this cache
 3400		 * before the next commit or risk reading stale cache.  So to
 3401		 * limit our exposure to horrible edge cases lets just abort the
 3402		 * transaction, this only happens in really bad situations
 3403		 * anyway.
 3404		 */
 3405		btrfs_abort_transaction(trans, root, ret);
 3406		goto out_put;
 3407	}
 3408	WARN_ON(ret);
 3409
 3410	if (i_size_read(inode) > 0) {
 3411		ret = btrfs_check_trunc_cache_free_space(root,
 3412					&root->fs_info->global_block_rsv);
 3413		if (ret)
 3414			goto out_put;
 3415
 3416		ret = btrfs_truncate_free_space_cache(root, trans, NULL, inode);
 3417		if (ret)
 3418			goto out_put;
 3419	}
 3420
 3421	spin_lock(&block_group->lock);
 3422	if (block_group->cached != BTRFS_CACHE_FINISHED ||
 3423	    !btrfs_test_opt(root, SPACE_CACHE)) {
 3424		/*
 3425		 * don't bother trying to write stuff out _if_
 3426		 * a) we're not cached,
 3427		 * b) we're with nospace_cache mount option.
 3428		 */
 3429		dcs = BTRFS_DC_WRITTEN;
 3430		spin_unlock(&block_group->lock);
 3431		goto out_put;
 3432	}
 3433	spin_unlock(&block_group->lock);
 3434
 3435	/*
 3436	 * We hit an ENOSPC when setting up the cache in this transaction, just
 3437	 * skip doing the setup, we've already cleared the cache so we're safe.
 3438	 */
 3439	if (test_bit(BTRFS_TRANS_CACHE_ENOSPC, &trans->transaction->flags)) {
 3440		ret = -ENOSPC;
 3441		goto out_put;
 3442	}
 3443
 3444	/*
 3445	 * Try to preallocate enough space based on how big the block group is.
 3446	 * Keep in mind this has to include any pinned space which could end up
 3447	 * taking up quite a bit since it's not folded into the other space
 3448	 * cache.
 3449	 */
 3450	num_pages = div_u64(block_group->key.offset, SZ_256M);
 3451	if (!num_pages)
 3452		num_pages = 1;
 3453
 3454	num_pages *= 16;
 3455	num_pages *= PAGE_SIZE;
 3456
 3457	ret = btrfs_check_data_free_space(inode, 0, num_pages);
 3458	if (ret)
 3459		goto out_put;
 3460
 3461	ret = btrfs_prealloc_file_range_trans(inode, trans, 0, 0, num_pages,
 3462					      num_pages, num_pages,
 3463					      &alloc_hint);
 3464	/*
 3465	 * Our cache requires contiguous chunks so that we don't modify a bunch
 3466	 * of metadata or split extents when writing the cache out, which means
 3467	 * we can enospc if we are heavily fragmented in addition to just normal
 3468	 * out of space conditions.  So if we hit this just skip setting up any
 3469	 * other block groups for this transaction, maybe we'll unpin enough
 3470	 * space the next time around.
 3471	 */
 3472	if (!ret)
 3473		dcs = BTRFS_DC_SETUP;
 3474	else if (ret == -ENOSPC)
 3475		set_bit(BTRFS_TRANS_CACHE_ENOSPC, &trans->transaction->flags);
 3476	btrfs_free_reserved_data_space(inode, 0, num_pages);
 3477
 3478out_put:
 3479	iput(inode);
 3480out_free:
 3481	btrfs_release_path(path);
 3482out:
 3483	spin_lock(&block_group->lock);
 3484	if (!ret && dcs == BTRFS_DC_SETUP)
 3485		block_group->cache_generation = trans->transid;
 3486	block_group->disk_cache_state = dcs;
 3487	spin_unlock(&block_group->lock);
 3488
 3489	return ret;
 3490}
 3491
 3492int btrfs_setup_space_cache(struct btrfs_trans_handle *trans,
 3493			    struct btrfs_root *root)
 3494{
 3495	struct btrfs_block_group_cache *cache, *tmp;
 3496	struct btrfs_transaction *cur_trans = trans->transaction;
 3497	struct btrfs_path *path;
 3498
 3499	if (list_empty(&cur_trans->dirty_bgs) ||
 3500	    !btrfs_test_opt(root, SPACE_CACHE))
 3501		return 0;
 3502
 3503	path = btrfs_alloc_path();
 3504	if (!path)
 3505		return -ENOMEM;
 3506
 3507	/* Could add new block groups, use _safe just in case */
 3508	list_for_each_entry_safe(cache, tmp, &cur_trans->dirty_bgs,
 3509				 dirty_list) {
 3510		if (cache->disk_cache_state == BTRFS_DC_CLEAR)
 3511			cache_save_setup(cache, trans, path);
 3512	}
 3513
 3514	btrfs_free_path(path);
 3515	return 0;
 3516}
 3517
 3518/*
 3519 * transaction commit does final block group cache writeback during a
 3520 * critical section where nothing is allowed to change the FS.  This is
 3521 * required in order for the cache to actually match the block group,
 3522 * but can introduce a lot of latency into the commit.
 3523 *
 3524 * So, btrfs_start_dirty_block_groups is here to kick off block group
 3525 * cache IO.  There's a chance we'll have to redo some of it if the
 3526 * block group changes again during the commit, but it greatly reduces
 3527 * the commit latency by getting rid of the easy block groups while
 3528 * we're still allowing others to join the commit.
 3529 */
 3530int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans,
 3531				   struct btrfs_root *root)
 3532{
 3533	struct btrfs_block_group_cache *cache;
 3534	struct btrfs_transaction *cur_trans = trans->transaction;
 3535	int ret = 0;
 3536	int should_put;
 3537	struct btrfs_path *path = NULL;
 3538	LIST_HEAD(dirty);
 3539	struct list_head *io = &cur_trans->io_bgs;
 3540	int num_started = 0;
 3541	int loops = 0;
 3542
 3543	spin_lock(&cur_trans->dirty_bgs_lock);
 3544	if (list_empty(&cur_trans->dirty_bgs)) {
 3545		spin_unlock(&cur_trans->dirty_bgs_lock);
 3546		return 0;
 3547	}
 3548	list_splice_init(&cur_trans->dirty_bgs, &dirty);
 3549	spin_unlock(&cur_trans->dirty_bgs_lock);
 3550
 3551again:
 3552	/*
 3553	 * make sure all the block groups on our dirty list actually
 3554	 * exist
 3555	 */
 3556	btrfs_create_pending_block_groups(trans, root);
 3557
 3558	if (!path) {
 3559		path = btrfs_alloc_path();
 3560		if (!path)
 3561			return -ENOMEM;
 3562	}
 3563
 3564	/*
 3565	 * cache_write_mutex is here only to save us from balance or automatic
 3566	 * removal of empty block groups deleting this block group while we are
 3567	 * writing out the cache
 3568	 */
 3569	mutex_lock(&trans->transaction->cache_write_mutex);
 3570	while (!list_empty(&dirty)) {
 3571		cache = list_first_entry(&dirty,
 3572					 struct btrfs_block_group_cache,
 3573					 dirty_list);
 3574		/*
 3575		 * this can happen if something re-dirties a block
 3576		 * group that is already under IO.  Just wait for it to
 3577		 * finish and then do it all again
 3578		 */
 3579		if (!list_empty(&cache->io_list)) {
 3580			list_del_init(&cache->io_list);
 3581			btrfs_wait_cache_io(root, trans, cache,
 3582					    &cache->io_ctl, path,
 3583					    cache->key.objectid);
 3584			btrfs_put_block_group(cache);
 3585		}
 3586
 3587
 3588		/*
 3589		 * btrfs_wait_cache_io uses the cache->dirty_list to decide
 3590		 * if it should update the cache_state.  Don't delete
 3591		 * until after we wait.
 3592		 *
 3593		 * Since we're not running in the commit critical section
 3594		 * we need the dirty_bgs_lock to protect from update_block_group
 3595		 */
 3596		spin_lock(&cur_trans->dirty_bgs_lock);
 3597		list_del_init(&cache->dirty_list);
 3598		spin_unlock(&cur_trans->dirty_bgs_lock);
 3599
 3600		should_put = 1;
 3601
 3602		cache_save_setup(cache, trans, path);
 3603
 3604		if (cache->disk_cache_state == BTRFS_DC_SETUP) {
 3605			cache->io_ctl.inode = NULL;
 3606			ret = btrfs_write_out_cache(root, trans, cache, path);
 3607			if (ret == 0 && cache->io_ctl.inode) {
 3608				num_started++;
 3609				should_put = 0;
 3610
 3611				/*
 3612				 * the cache_write_mutex is protecting
 3613				 * the io_list
 3614				 */
 3615				list_add_tail(&cache->io_list, io);
 3616			} else {
 3617				/*
 3618				 * if we failed to write the cache, the
 3619				 * generation will be bad and life goes on
 3620				 */
 3621				ret = 0;
 3622			}
 3623		}
 3624		if (!ret) {
 3625			ret = write_one_cache_group(trans, root, path, cache);
 3626			/*
 3627			 * Our block group might still be attached to the list
 3628			 * of new block groups in the transaction handle of some
 3629			 * other task (struct btrfs_trans_handle->new_bgs). This
 3630			 * means its block group item isn't yet in the extent
 3631			 * tree. If this happens ignore the error, as we will
 3632			 * try again later in the critical section of the
 3633			 * transaction commit.
 3634			 */
 3635			if (ret == -ENOENT) {
 3636				ret = 0;
 3637				spin_lock(&cur_trans->dirty_bgs_lock);
 3638				if (list_empty(&cache->dirty_list)) {
 3639					list_add_tail(&cache->dirty_list,
 3640						      &cur_trans->dirty_bgs);
 3641					btrfs_get_block_group(cache);
 3642				}
 3643				spin_unlock(&cur_trans->dirty_bgs_lock);
 3644			} else if (ret) {
 3645				btrfs_abort_transaction(trans, root, ret);
 3646			}
 3647		}
 3648
 3649		/* if its not on the io list, we need to put the block group */
 3650		if (should_put)
 3651			btrfs_put_block_group(cache);
 3652
 3653		if (ret)
 3654			break;
 3655
 3656		/*
 3657		 * Avoid blocking other tasks for too long. It might even save
 3658		 * us from writing caches for block groups that are going to be
 3659		 * removed.
 3660		 */
 3661		mutex_unlock(&trans->transaction->cache_write_mutex);
 3662		mutex_lock(&trans->transaction->cache_write_mutex);
 3663	}
 3664	mutex_unlock(&trans->transaction->cache_write_mutex);
 3665
 3666	/*
 3667	 * go through delayed refs for all the stuff we've just kicked off
 3668	 * and then loop back (just once)
 3669	 */
 3670	ret = btrfs_run_delayed_refs(trans, root, 0);
 3671	if (!ret && loops == 0) {
 3672		loops++;
 3673		spin_lock(&cur_trans->dirty_bgs_lock);
 3674		list_splice_init(&cur_trans->dirty_bgs, &dirty);
 3675		/*
 3676		 * dirty_bgs_lock protects us from concurrent block group
 3677		 * deletes too (not just cache_write_mutex).
 3678		 */
 3679		if (!list_empty(&dirty)) {
 3680			spin_unlock(&cur_trans->dirty_bgs_lock);
 3681			goto again;
 3682		}
 3683		spin_unlock(&cur_trans->dirty_bgs_lock);
 3684	}
 3685
 3686	btrfs_free_path(path);
 3687	return ret;
 3688}
 3689
 3690int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans,
 3691				   struct btrfs_root *root)
 3692{
 3693	struct btrfs_block_group_cache *cache;
 3694	struct btrfs_transaction *cur_trans = trans->transaction;
 3695	int ret = 0;
 3696	int should_put;
 3697	struct btrfs_path *path;
 3698	struct list_head *io = &cur_trans->io_bgs;
 3699	int num_started = 0;
 3700
 3701	path = btrfs_alloc_path();
 3702	if (!path)
 3703		return -ENOMEM;
 3704
 3705	/*
 3706	 * Even though we are in the critical section of the transaction commit,
 3707	 * we can still have concurrent tasks adding elements to this
 3708	 * transaction's list of dirty block groups. These tasks correspond to
 3709	 * endio free space workers started when writeback finishes for a
 3710	 * space cache, which run inode.c:btrfs_finish_ordered_io(), and can
 3711	 * allocate new block groups as a result of COWing nodes of the root
 3712	 * tree when updating the free space inode. The writeback for the space
 3713	 * caches is triggered by an earlier call to
 3714	 * btrfs_start_dirty_block_groups() and iterations of the following
 3715	 * loop.
 3716	 * Also we want to do the cache_save_setup first and then run the
 3717	 * delayed refs to make sure we have the best chance at doing this all
 3718	 * in one shot.
 3719	 */
 3720	spin_lock(&cur_trans->dirty_bgs_lock);
 3721	while (!list_empty(&cur_trans->dirty_bgs)) {
 3722		cache = list_first_entry(&cur_trans->dirty_bgs,
 3723					 struct btrfs_block_group_cache,
 3724					 dirty_list);
 3725
 3726		/*
 3727		 * this can happen if cache_save_setup re-dirties a block
 3728		 * group that is already under IO.  Just wait for it to
 3729		 * finish and then do it all again
 3730		 */
 3731		if (!list_empty(&cache->io_list)) {
 3732			spin_unlock(&cur_trans->dirty_bgs_lock);
 3733			list_del_init(&cache->io_list);
 3734			btrfs_wait_cache_io(root, trans, cache,
 3735					    &cache->io_ctl, path,
 3736					    cache->key.objectid);
 3737			btrfs_put_block_group(cache);
 3738			spin_lock(&cur_trans->dirty_bgs_lock);
 3739		}
 3740
 3741		/*
 3742		 * don't remove from the dirty list until after we've waited
 3743		 * on any pending IO
 3744		 */
 3745		list_del_init(&cache->dirty_list);
 3746		spin_unlock(&cur_trans->dirty_bgs_lock);
 3747		should_put = 1;
 3748
 3749		cache_save_setup(cache, trans, path);
 3750
 3751		if (!ret)
 3752			ret = btrfs_run_delayed_refs(trans, root, (unsigned long) -1);
 3753
 3754		if (!ret && cache->disk_cache_state == BTRFS_DC_SETUP) {
 3755			cache->io_ctl.inode = NULL;
 3756			ret = btrfs_write_out_cache(root, trans, cache, path);
 3757			if (ret == 0 && cache->io_ctl.inode) {
 3758				num_started++;
 3759				should_put = 0;
 3760				list_add_tail(&cache->io_list, io);
 3761			} else {
 3762				/*
 3763				 * if we failed to write the cache, the
 3764				 * generation will be bad and life goes on
 3765				 */
 3766				ret = 0;
 3767			}
 3768		}
 3769		if (!ret) {
 3770			ret = write_one_cache_group(trans, root, path, cache);
 3771			/*
 3772			 * One of the free space endio workers might have
 3773			 * created a new block group while updating a free space
 3774			 * cache's inode (at inode.c:btrfs_finish_ordered_io())
 3775			 * and hasn't released its transaction handle yet, in
 3776			 * which case the new block group is still attached to
 3777			 * its transaction handle and its creation has not
 3778			 * finished yet (no block group item in the extent tree
 3779			 * yet, etc). If this is the case, wait for all free
 3780			 * space endio workers to finish and retry. This is a
 3781			 * a very rare case so no need for a more efficient and
 3782			 * complex approach.
 3783			 */
 3784			if (ret == -ENOENT) {
 3785				wait_event(cur_trans->writer_wait,
 3786				   atomic_read(&cur_trans->num_writers) == 1);
 3787				ret = write_one_cache_group(trans, root, path,
 3788							    cache);
 3789			}
 3790			if (ret)
 3791				btrfs_abort_transaction(trans, root, ret);
 3792		}
 3793
 3794		/* if its not on the io list, we need to put the block group */
 3795		if (should_put)
 3796			btrfs_put_block_group(cache);
 3797		spin_lock(&cur_trans->dirty_bgs_lock);
 3798	}
 3799	spin_unlock(&cur_trans->dirty_bgs_lock);
 3800
 3801	while (!list_empty(io)) {
 3802		cache = list_first_entry(io, struct btrfs_block_group_cache,
 3803					 io_list);
 3804		list_del_init(&cache->io_list);
 3805		btrfs_wait_cache_io(root, trans, cache,
 3806				    &cache->io_ctl, path, cache->key.objectid);
 3807		btrfs_put_block_group(cache);
 3808	}
 3809
 3810	btrfs_free_path(path);
 3811	return ret;
 3812}
 3813
 3814int btrfs_extent_readonly(struct btrfs_root *root, u64 bytenr)
 3815{
 3816	struct btrfs_block_group_cache *block_group;
 3817	int readonly = 0;
 3818
 3819	block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
 3820	if (!block_group || block_group->ro)
 3821		readonly = 1;
 3822	if (block_group)
 3823		btrfs_put_block_group(block_group);
 3824	return readonly;
 3825}
 3826
 3827static const char *alloc_name(u64 flags)
 3828{
 3829	switch (flags) {
 3830	case BTRFS_BLOCK_GROUP_METADATA|BTRFS_BLOCK_GROUP_DATA:
 3831		return "mixed";
 3832	case BTRFS_BLOCK_GROUP_METADATA:
 3833		return "metadata";
 3834	case BTRFS_BLOCK_GROUP_DATA:
 3835		return "data";
 3836	case BTRFS_BLOCK_GROUP_SYSTEM:
 3837		return "system";
 3838	default:
 3839		WARN_ON(1);
 3840		return "invalid-combination";
 3841	};
 3842}
 3843
 3844static int update_space_info(struct btrfs_fs_info *info, u64 flags,
 3845			     u64 total_bytes, u64 bytes_used,
 3846			     struct btrfs_space_info **space_info)
 3847{
 3848	struct btrfs_space_info *found;
 3849	int i;
 3850	int factor;
 3851	int ret;
 3852
 3853	if (flags & (BTRFS_BLOCK_GROUP_DUP | BTRFS_BLOCK_GROUP_RAID1 |
 3854		     BTRFS_BLOCK_GROUP_RAID10))
 3855		factor = 2;
 3856	else
 3857		factor = 1;
 3858
 3859	found = __find_space_info(info, flags);
 3860	if (found) {
 3861		spin_lock(&found->lock);
 3862		found->total_bytes += total_bytes;
 3863		found->disk_total += total_bytes * factor;
 3864		found->bytes_used += bytes_used;
 3865		found->disk_used += bytes_used * factor;
 3866		if (total_bytes > 0)
 3867			found->full = 0;
 3868		spin_unlock(&found->lock);
 3869		*space_info = found;
 3870		return 0;
 3871	}
 3872	found = kzalloc(sizeof(*found), GFP_NOFS);
 3873	if (!found)
 3874		return -ENOMEM;
 3875
 3876	ret = percpu_counter_init(&found->total_bytes_pinned, 0, GFP_KERNEL);
 3877	if (ret) {
 3878		kfree(found);
 3879		return ret;
 3880	}
 3881
 3882	for (i = 0; i < BTRFS_NR_RAID_TYPES; i++)
 3883		INIT_LIST_HEAD(&found->block_groups[i]);
 3884	init_rwsem(&found->groups_sem);
 3885	spin_lock_init(&found->lock);
 3886	found->flags = flags & BTRFS_BLOCK_GROUP_TYPE_MASK;
 3887	found->total_bytes = total_bytes;
 3888	found->disk_total = total_bytes * factor;
 3889	found->bytes_used = bytes_used;
 3890	found->disk_used = bytes_used * factor;
 3891	found->bytes_pinned = 0;
 3892	found->bytes_reserved = 0;
 3893	found->bytes_readonly = 0;
 3894	found->bytes_may_use = 0;
 3895	found->full = 0;
 3896	found->max_extent_size = 0;
 3897	found->force_alloc = CHUNK_ALLOC_NO_FORCE;
 3898	found->chunk_alloc = 0;
 3899	found->flush = 0;
 3900	init_waitqueue_head(&found->wait);
 3901	INIT_LIST_HEAD(&found->ro_bgs);
 3902
 3903	ret = kobject_init_and_add(&found->kobj, &space_info_ktype,
 3904				    info->space_info_kobj, "%s",
 3905				    alloc_name(found->flags));
 3906	if (ret) {
 3907		kfree(found);
 3908		return ret;
 3909	}
 3910
 3911	*space_info = found;
 3912	list_add_rcu(&found->list, &info->space_info);
 3913	if (flags & BTRFS_BLOCK_GROUP_DATA)
 3914		info->data_sinfo = found;
 3915
 3916	return ret;
 3917}
 3918
 3919static void set_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
 3920{
 3921	u64 extra_flags = chunk_to_extended(flags) &
 3922				BTRFS_EXTENDED_PROFILE_MASK;
 3923
 3924	write_seqlock(&fs_info->profiles_lock);
 3925	if (flags & BTRFS_BLOCK_GROUP_DATA)
 3926		fs_info->avail_data_alloc_bits |= extra_flags;
 3927	if (flags & BTRFS_BLOCK_GROUP_METADATA)
 3928		fs_info->avail_metadata_alloc_bits |= extra_flags;
 3929	if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
 3930		fs_info->avail_system_alloc_bits |= extra_flags;
 3931	write_sequnlock(&fs_info->profiles_lock);
 3932}
 3933
 3934/*
 3935 * returns target flags in extended format or 0 if restripe for this
 3936 * chunk_type is not in progress
 3937 *
 3938 * should be called with either volume_mutex or balance_lock held
 3939 */
 3940static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
 3941{
 3942	struct btrfs_balance_control *bctl = fs_info->balance_ctl;
 3943	u64 target = 0;
 3944
 3945	if (!bctl)
 3946		return 0;
 3947
 3948	if (flags & BTRFS_BLOCK_GROUP_DATA &&
 3949	    bctl->data.flags & BTRFS_BALANCE_ARGS_CONVERT) {
 3950		target = BTRFS_BLOCK_GROUP_DATA | bctl->data.target;
 3951	} else if (flags & BTRFS_BLOCK_GROUP_SYSTEM &&
 3952		   bctl->sys.flags & BTRFS_BALANCE_ARGS_CONVERT) {
 3953		target = BTRFS_BLOCK_GROUP_SYSTEM | bctl->sys.target;
 3954	} else if (flags & BTRFS_BLOCK_GROUP_METADATA &&
 3955		   bctl->meta.flags & BTRFS_BALANCE_ARGS_CONVERT) {
 3956		target = BTRFS_BLOCK_GROUP_METADATA | bctl->meta.target;
 3957	}
 3958
 3959	return target;
 3960}
 3961
 3962/*
 3963 * @flags: available profiles in extended format (see ctree.h)
 3964 *
 3965 * Returns reduced profile in chunk format.  If profile changing is in
 3966 * progress (either running or paused) picks the target profile (if it's
 3967 * already available), otherwise falls back to plain reducing.
 3968 */
 3969static u64 btrfs_reduce_alloc_profile(struct btrfs_root *root, u64 flags)
 3970{
 3971	u64 num_devices = root->fs_info->fs_devices->rw_devices;
 3972	u64 target;
 3973	u64 raid_type;
 3974	u64 allowed = 0;
 3975
 3976	/*
 3977	 * see if restripe for this chunk_type is in progress, if so
 3978	 * try to reduce to the target profile
 3979	 */
 3980	spin_lock(&root->fs_info->balance_lock);
 3981	target = get_restripe_target(root->fs_info, flags);
 3982	if (target) {
 3983		/* pick target profile only if it's already available */
 3984		if ((flags & target) & BTRFS_EXTENDED_PROFILE_MASK) {
 3985			spin_unlock(&root->fs_info->balance_lock);
 3986			return extended_to_chunk(target);
 3987		}
 3988	}
 3989	spin_unlock(&root->fs_info->balance_lock);
 3990
 3991	/* First, mask out the RAID levels which aren't possible */
 3992	for (raid_type = 0; raid_type < BTRFS_NR_RAID_TYPES; raid_type++) {
 3993		if (num_devices >= btrfs_raid_array[raid_type].devs_min)
 3994			allowed |= btrfs_raid_group[raid_type];
 3995	}
 3996	allowed &= flags;
 3997
 3998	if (allowed & BTRFS_BLOCK_GROUP_RAID6)
 3999		allowed = BTRFS_BLOCK_GROUP_RAID6;
 4000	else if (allowed & BTRFS_BLOCK_GROUP_RAID5)
 4001		allowed = BTRFS_BLOCK_GROUP_RAID5;
 4002	else if (allowed & BTRFS_BLOCK_GROUP_RAID10)
 4003		allowed = BTRFS_BLOCK_GROUP_RAID10;
 4004	else if (allowed & BTRFS_BLOCK_GROUP_RAID1)
 4005		allowed = BTRFS_BLOCK_GROUP_RAID1;
 4006	else if (allowed & BTRFS_BLOCK_GROUP_RAID0)
 4007		allowed = BTRFS_BLOCK_GROUP_RAID0;
 4008
 4009	flags &= ~BTRFS_BLOCK_GROUP_PROFILE_MASK;
 4010
 4011	return extended_to_chunk(flags | allowed);
 4012}
 4013
 4014static u64 get_alloc_profile(struct btrfs_root *root, u64 orig_flags)
 4015{
 4016	unsigned seq;
 4017	u64 flags;
 4018
 4019	do {
 4020		flags = orig_flags;
 4021		seq = read_seqbegin(&root->fs_info->profiles_lock);
 4022
 4023		if (flags & BTRFS_BLOCK_GROUP_DATA)
 4024			flags |= root->fs_info->avail_data_alloc_bits;
 4025		else if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
 4026			flags |= root->fs_info->avail_system_alloc_bits;
 4027		else if (flags & BTRFS_BLOCK_GROUP_METADATA)
 4028			flags |= root->fs_info->avail_metadata_alloc_bits;
 4029	} while (read_seqretry(&root->fs_info->profiles_lock, seq));
 4030
 4031	return btrfs_reduce_alloc_profile(root, flags);
 4032}
 4033
 4034u64 btrfs_get_alloc_profile(struct btrfs_root *root, int data)
 4035{
 
 4036	u64 flags;
 4037	u64 ret;
 4038
 4039	if (data)
 4040		flags = BTRFS_BLOCK_GROUP_DATA;
 4041	else if (root == root->fs_info->chunk_root)
 4042		flags = BTRFS_BLOCK_GROUP_SYSTEM;
 4043	else
 4044		flags = BTRFS_BLOCK_GROUP_METADATA;
 4045
 4046	ret = get_alloc_profile(root, flags);
 4047	return ret;
 4048}
 4049
 4050int btrfs_alloc_data_chunk_ondemand(struct inode *inode, u64 bytes)
 4051{
 4052	struct btrfs_space_info *data_sinfo;
 4053	struct btrfs_root *root = BTRFS_I(inode)->root;
 4054	struct btrfs_fs_info *fs_info = root->fs_info;
 4055	u64 used;
 4056	int ret = 0;
 4057	int need_commit = 2;
 4058	int have_pinned_space;
 4059
 4060	/* make sure bytes are sectorsize aligned */
 4061	bytes = ALIGN(bytes, root->sectorsize);
 4062
 4063	if (btrfs_is_free_space_inode(inode)) {
 4064		need_commit = 0;
 4065		ASSERT(current->journal_info);
 4066	}
 4067
 4068	data_sinfo = fs_info->data_sinfo;
 4069	if (!data_sinfo)
 4070		goto alloc;
 4071
 4072again:
 4073	/* make sure we have enough space to handle the data first */
 4074	spin_lock(&data_sinfo->lock);
 4075	used = data_sinfo->bytes_used + data_sinfo->bytes_reserved +
 4076		data_sinfo->bytes_pinned + data_sinfo->bytes_readonly +
 4077		data_sinfo->bytes_may_use;
 4078
 4079	if (used + bytes > data_sinfo->total_bytes) {
 4080		struct btrfs_trans_handle *trans;
 4081
 4082		/*
 4083		 * if we don't have enough free bytes in this space then we need
 4084		 * to alloc a new chunk.
 4085		 */
 4086		if (!data_sinfo->full) {
 4087			u64 alloc_target;
 4088
 4089			data_sinfo->force_alloc = CHUNK_ALLOC_FORCE;
 4090			spin_unlock(&data_sinfo->lock);
 4091alloc:
 4092			alloc_target = btrfs_get_alloc_profile(root, 1);
 4093			/*
 4094			 * It is ugly that we don't call nolock join
 4095			 * transaction for the free space inode case here.
 4096			 * But it is safe because we only do the data space
 4097			 * reservation for the free space cache in the
 4098			 * transaction context, the common join transaction
 4099			 * just increase the counter of the current transaction
 4100			 * handler, doesn't try to acquire the trans_lock of
 4101			 * the fs.
 4102			 */
 4103			trans = btrfs_join_transaction(root);
 4104			if (IS_ERR(trans))
 4105				return PTR_ERR(trans);
 4106
 4107			ret = do_chunk_alloc(trans, root->fs_info->extent_root,
 4108					     alloc_target,
 4109					     CHUNK_ALLOC_NO_FORCE);
 4110			btrfs_end_transaction(trans, root);
 4111			if (ret < 0) {
 4112				if (ret != -ENOSPC)
 4113					return ret;
 4114				else {
 4115					have_pinned_space = 1;
 4116					goto commit_trans;
 4117				}
 4118			}
 4119
 4120			if (!data_sinfo)
 4121				data_sinfo = fs_info->data_sinfo;
 4122
 4123			goto again;
 4124		}
 4125
 4126		/*
 4127		 * If we don't have enough pinned space to deal with this
 4128		 * allocation, and no removed chunk in current transaction,
 4129		 * don't bother committing the transaction.
 4130		 */
 4131		have_pinned_space = percpu_counter_compare(
 4132			&data_sinfo->total_bytes_pinned,
 4133			used + bytes - data_sinfo->total_bytes);
 4134		spin_unlock(&data_sinfo->lock);
 4135
 4136		/* commit the current transaction and try again */
 4137commit_trans:
 4138		if (need_commit &&
 4139		    !atomic_read(&root->fs_info->open_ioctl_trans)) {
 4140			need_commit--;
 4141
 4142			if (need_commit > 0) {
 4143				btrfs_start_delalloc_roots(fs_info, 0, -1);
 4144				btrfs_wait_ordered_roots(fs_info, -1);
 4145			}
 4146
 4147			trans = btrfs_join_transaction(root);
 4148			if (IS_ERR(trans))
 4149				return PTR_ERR(trans);
 4150			if (have_pinned_space >= 0 ||
 4151			    test_bit(BTRFS_TRANS_HAVE_FREE_BGS,
 4152				     &trans->transaction->flags) ||
 4153			    need_commit > 0) {
 4154				ret = btrfs_commit_transaction(trans, root);
 4155				if (ret)
 4156					return ret;
 4157				/*
 4158				 * The cleaner kthread might still be doing iput
 4159				 * operations. Wait for it to finish so that
 4160				 * more space is released.
 4161				 */
 4162				mutex_lock(&root->fs_info->cleaner_delayed_iput_mutex);
 4163				mutex_unlock(&root->fs_info->cleaner_delayed_iput_mutex);
 4164				goto again;
 4165			} else {
 4166				btrfs_end_transaction(trans, root);
 4167			}
 4168		}
 4169
 4170		trace_btrfs_space_reservation(root->fs_info,
 4171					      "space_info:enospc",
 4172					      data_sinfo->flags, bytes, 1);
 4173		return -ENOSPC;
 4174	}
 4175	data_sinfo->bytes_may_use += bytes;
 4176	trace_btrfs_space_reservation(root->fs_info, "space_info",
 4177				      data_sinfo->flags, bytes, 1);
 4178	spin_unlock(&data_sinfo->lock);
 4179
 4180	return ret;
 4181}
 4182
 4183/*
 4184 * New check_data_free_space() with ability for precious data reservation
 4185 * Will replace old btrfs_check_data_free_space(), but for patch split,
 4186 * add a new function first and then replace it.
 4187 */
 4188int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
 4189{
 4190	struct btrfs_root *root = BTRFS_I(inode)->root;
 4191	int ret;
 4192
 4193	/* align the range */
 4194	len = round_up(start + len, root->sectorsize) -
 4195	      round_down(start, root->sectorsize);
 4196	start = round_down(start, root->sectorsize);
 4197
 4198	ret = btrfs_alloc_data_chunk_ondemand(inode, len);
 4199	if (ret < 0)
 4200		return ret;
 4201
 4202	/*
 4203	 * Use new btrfs_qgroup_reserve_data to reserve precious data space
 4204	 *
 4205	 * TODO: Find a good method to avoid reserve data space for NOCOW
 4206	 * range, but don't impact performance on quota disable case.
 4207	 */
 4208	ret = btrfs_qgroup_reserve_data(inode, start, len);
 4209	return ret;
 4210}
 4211
 4212/*
 4213 * Called if we need to clear a data reservation for this inode
 4214 * Normally in a error case.
 4215 *
 4216 * This one will *NOT* use accurate qgroup reserved space API, just for case
 4217 * which we can't sleep and is sure it won't affect qgroup reserved space.
 4218 * Like clear_bit_hook().
 4219 */
 4220void btrfs_free_reserved_data_space_noquota(struct inode *inode, u64 start,
 4221					    u64 len)
 4222{
 4223	struct btrfs_root *root = BTRFS_I(inode)->root;
 4224	struct btrfs_space_info *data_sinfo;
 4225
 4226	/* Make sure the range is aligned to sectorsize */
 4227	len = round_up(start + len, root->sectorsize) -
 4228	      round_down(start, root->sectorsize);
 4229	start = round_down(start, root->sectorsize);
 4230
 4231	data_sinfo = root->fs_info->data_sinfo;
 4232	spin_lock(&data_sinfo->lock);
 4233	if (WARN_ON(data_sinfo->bytes_may_use < len))
 4234		data_sinfo->bytes_may_use = 0;
 4235	else
 4236		data_sinfo->bytes_may_use -= len;
 4237	trace_btrfs_space_reservation(root->fs_info, "space_info",
 4238				      data_sinfo->flags, len, 0);
 4239	spin_unlock(&data_sinfo->lock);
 4240}
 4241
 4242/*
 4243 * Called if we need to clear a data reservation for this inode
 4244 * Normally in a error case.
 4245 *
 4246 * This one will handle the per-indoe data rsv map for accurate reserved
 4247 * space framework.
 4248 */
 4249void btrfs_free_reserved_data_space(struct inode *inode, u64 start, u64 len)
 4250{
 4251	btrfs_free_reserved_data_space_noquota(inode, start, len);
 4252	btrfs_qgroup_free_data(inode, start, len);
 4253}
 4254
 4255static void force_metadata_allocation(struct btrfs_fs_info *info)
 4256{
 4257	struct list_head *head = &info->space_info;
 4258	struct btrfs_space_info *found;
 4259
 4260	rcu_read_lock();
 4261	list_for_each_entry_rcu(found, head, list) {
 4262		if (found->flags & BTRFS_BLOCK_GROUP_METADATA)
 4263			found->force_alloc = CHUNK_ALLOC_FORCE;
 4264	}
 4265	rcu_read_unlock();
 4266}
 4267
 4268static inline u64 calc_global_rsv_need_space(struct btrfs_block_rsv *global)
 4269{
 4270	return (global->size << 1);
 4271}
 4272
 4273static int should_alloc_chunk(struct btrfs_root *root,
 4274			      struct btrfs_space_info *sinfo, int force)
 4275{
 4276	struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
 4277	u64 num_bytes = sinfo->total_bytes - sinfo->bytes_readonly;
 4278	u64 num_allocated = sinfo->bytes_used + sinfo->bytes_reserved;
 4279	u64 thresh;
 4280
 4281	if (force == CHUNK_ALLOC_FORCE)
 4282		return 1;
 4283
 4284	/*
 4285	 * We need to take into account the global rsv because for all intents
 4286	 * and purposes it's used space.  Don't worry about locking the
 4287	 * global_rsv, it doesn't change except when the transaction commits.
 4288	 */
 4289	if (sinfo->flags & BTRFS_BLOCK_GROUP_METADATA)
 4290		num_allocated += calc_global_rsv_need_space(global_rsv);
 4291
 4292	/*
 4293	 * in limited mode, we want to have some free space up to
 4294	 * about 1% of the FS size.
 4295	 */
 4296	if (force == CHUNK_ALLOC_LIMITED) {
 4297		thresh = btrfs_super_total_bytes(root->fs_info->super_copy);
 4298		thresh = max_t(u64, SZ_64M, div_factor_fine(thresh, 1));
 4299
 4300		if (num_bytes - num_allocated < thresh)
 4301			return 1;
 4302	}
 4303
 4304	if (num_allocated + SZ_2M < div_factor(num_bytes, 8))
 4305		return 0;
 4306	return 1;
 4307}
 4308
 4309static u64 get_profile_num_devs(struct btrfs_root *root, u64 type)
 4310{
 4311	u64 num_dev;
 4312
 4313	if (type & (BTRFS_BLOCK_GROUP_RAID10 |
 4314		    BTRFS_BLOCK_GROUP_RAID0 |
 4315		    BTRFS_BLOCK_GROUP_RAID5 |
 4316		    BTRFS_BLOCK_GROUP_RAID6))
 4317		num_dev = root->fs_info->fs_devices->rw_devices;
 4318	else if (type & BTRFS_BLOCK_GROUP_RAID1)
 4319		num_dev = 2;
 4320	else
 4321		num_dev = 1;	/* DUP or single */
 4322
 4323	return num_dev;
 4324}
 4325
 4326/*
 4327 * If @is_allocation is true, reserve space in the system space info necessary
 4328 * for allocating a chunk, otherwise if it's false, reserve space necessary for
 4329 * removing a chunk.
 4330 */
 4331void check_system_chunk(struct btrfs_trans_handle *trans,
 4332			struct btrfs_root *root,
 4333			u64 type)
 4334{
 4335	struct btrfs_space_info *info;
 4336	u64 left;
 4337	u64 thresh;
 4338	int ret = 0;
 4339	u64 num_devs;
 4340
 4341	/*
 4342	 * Needed because we can end up allocating a system chunk and for an
 4343	 * atomic and race free space reservation in the chunk block reserve.
 4344	 */
 4345	ASSERT(mutex_is_locked(&root->fs_info->chunk_mutex));
 4346
 4347	info = __find_space_info(root->fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
 4348	spin_lock(&info->lock);
 4349	left = info->total_bytes - info->bytes_used - info->bytes_pinned -
 4350		info->bytes_reserved - info->bytes_readonly -
 4351		info->bytes_may_use;
 4352	spin_unlock(&info->lock);
 4353
 4354	num_devs = get_profile_num_devs(root, type);
 4355
 4356	/* num_devs device items to update and 1 chunk item to add or remove */
 4357	thresh = btrfs_calc_trunc_metadata_size(root, num_devs) +
 4358		btrfs_calc_trans_metadata_size(root, 1);
 4359
 4360	if (left < thresh && btrfs_test_opt(root, ENOSPC_DEBUG)) {
 4361		btrfs_info(root->fs_info, "left=%llu, need=%llu, flags=%llu",
 4362			left, thresh, type);
 4363		dump_space_info(info, 0, 0);
 4364	}
 4365
 4366	if (left < thresh) {
 4367		u64 flags;
 4368
 4369		flags = btrfs_get_alloc_profile(root->fs_info->chunk_root, 0);
 4370		/*
 4371		 * Ignore failure to create system chunk. We might end up not
 4372		 * needing it, as we might not need to COW all nodes/leafs from
 4373		 * the paths we visit in the chunk tree (they were already COWed
 4374		 * or created in the current transaction for example).
 4375		 */
 4376		ret = btrfs_alloc_chunk(trans, root, flags);
 4377	}
 4378
 4379	if (!ret) {
 4380		ret = btrfs_block_rsv_add(root->fs_info->chunk_root,
 4381					  &root->fs_info->chunk_block_rsv,
 4382					  thresh, BTRFS_RESERVE_NO_FLUSH);
 4383		if (!ret)
 4384			trans->chunk_bytes_reserved += thresh;
 4385	}
 4386}
 4387
 4388static int do_chunk_alloc(struct btrfs_trans_handle *trans,
 4389			  struct btrfs_root *extent_root, u64 flags, int force)
 4390{
 4391	struct btrfs_space_info *space_info;
 4392	struct btrfs_fs_info *fs_info = extent_root->fs_info;
 4393	int wait_for_alloc = 0;
 4394	int ret = 0;
 4395
 4396	/* Don't re-enter if we're already allocating a chunk */
 4397	if (trans->allocating_chunk)
 4398		return -ENOSPC;
 
 
 4399
 4400	space_info = __find_space_info(extent_root->fs_info, flags);
 4401	if (!space_info) {
 4402		ret = update_space_info(extent_root->fs_info, flags,
 4403					0, 0, &space_info);
 4404		BUG_ON(ret); /* -ENOMEM */
 4405	}
 4406	BUG_ON(!space_info); /* Logic error */
 4407
 4408again:
 4409	spin_lock(&space_info->lock);
 4410	if (force < space_info->force_alloc)
 4411		force = space_info->force_alloc;
 4412	if (space_info->full) {
 4413		if (should_alloc_chunk(extent_root, space_info, force))
 4414			ret = -ENOSPC;
 4415		else
 4416			ret = 0;
 4417		spin_unlock(&space_info->lock);
 4418		return ret;
 4419	}
 4420
 4421	if (!should_alloc_chunk(extent_root, space_info, force)) {
 4422		spin_unlock(&space_info->lock);
 4423		return 0;
 4424	} else if (space_info->chunk_alloc) {
 4425		wait_for_alloc = 1;
 4426	} else {
 4427		space_info->chunk_alloc = 1;
 4428	}
 4429
 4430	spin_unlock(&space_info->lock);
 4431
 4432	mutex_lock(&fs_info->chunk_mutex);
 4433
 4434	/*
 4435	 * The chunk_mutex is held throughout the entirety of a chunk
 4436	 * allocation, so once we've acquired the chunk_mutex we know that the
 4437	 * other guy is done and we need to recheck and see if we should
 4438	 * allocate.
 4439	 */
 4440	if (wait_for_alloc) {
 4441		mutex_unlock(&fs_info->chunk_mutex);
 4442		wait_for_alloc = 0;
 4443		goto again;
 4444	}
 4445
 4446	trans->allocating_chunk = true;
 4447
 4448	/*
 4449	 * If we have mixed data/metadata chunks we want to make sure we keep
 4450	 * allocating mixed chunks instead of individual chunks.
 4451	 */
 4452	if (btrfs_mixed_space_info(space_info))
 4453		flags |= (BTRFS_BLOCK_GROUP_DATA | BTRFS_BLOCK_GROUP_METADATA);
 4454
 4455	/*
 4456	 * if we're doing a data chunk, go ahead and make sure that
 4457	 * we keep a reasonable number of metadata chunks allocated in the
 4458	 * FS as well.
 4459	 */
 4460	if (flags & BTRFS_BLOCK_GROUP_DATA && fs_info->metadata_ratio) {
 4461		fs_info->data_chunk_allocations++;
 4462		if (!(fs_info->data_chunk_allocations %
 4463		      fs_info->metadata_ratio))
 4464			force_metadata_allocation(fs_info);
 4465	}
 4466
 4467	/*
 4468	 * Check if we have enough space in SYSTEM chunk because we may need
 4469	 * to update devices.
 4470	 */
 4471	check_system_chunk(trans, extent_root, flags);
 4472
 4473	ret = btrfs_alloc_chunk(trans, extent_root, flags);
 4474	trans->allocating_chunk = false;
 4475
 4476	spin_lock(&space_info->lock);
 4477	if (ret < 0 && ret != -ENOSPC)
 4478		goto out;
 4479	if (ret)
 4480		space_info->full = 1;
 4481	else
 4482		ret = 1;
 4483
 4484	space_info->force_alloc = CHUNK_ALLOC_NO_FORCE;
 4485out:
 4486	space_info->chunk_alloc = 0;
 4487	spin_unlock(&space_info->lock);
 4488	mutex_unlock(&fs_info->chunk_mutex);
 4489	/*
 4490	 * When we allocate a new chunk we reserve space in the chunk block
 4491	 * reserve to make sure we can COW nodes/leafs in the chunk tree or
 4492	 * add new nodes/leafs to it if we end up needing to do it when
 4493	 * inserting the chunk item and updating device items as part of the
 4494	 * second phase of chunk allocation, performed by
 4495	 * btrfs_finish_chunk_alloc(). So make sure we don't accumulate a
 4496	 * large number of new block groups to create in our transaction
 4497	 * handle's new_bgs list to avoid exhausting the chunk block reserve
 4498	 * in extreme cases - like having a single transaction create many new
 4499	 * block groups when starting to write out the free space caches of all
 4500	 * the block groups that were made dirty during the lifetime of the
 4501	 * transaction.
 4502	 */
 4503	if (trans->can_flush_pending_bgs &&
 4504	    trans->chunk_bytes_reserved >= (u64)SZ_2M) {
 4505		btrfs_create_pending_block_groups(trans, trans->root);
 4506		btrfs_trans_release_chunk_metadata(trans);
 4507	}
 4508	return ret;
 4509}
 4510
 4511static int can_overcommit(struct btrfs_root *root,
 4512			  struct btrfs_space_info *space_info, u64 bytes,
 4513			  enum btrfs_reserve_flush_enum flush)
 4514{
 4515	struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
 4516	u64 profile = btrfs_get_alloc_profile(root, 0);
 4517	u64 space_size;
 4518	u64 avail;
 4519	u64 used;
 4520
 4521	used = space_info->bytes_used + space_info->bytes_reserved +
 4522		space_info->bytes_pinned + space_info->bytes_readonly;
 4523
 4524	/*
 4525	 * We only want to allow over committing if we have lots of actual space
 4526	 * free, but if we don't have enough space to handle the global reserve
 4527	 * space then we could end up having a real enospc problem when trying
 4528	 * to allocate a chunk or some other such important allocation.
 4529	 */
 4530	spin_lock(&global_rsv->lock);
 4531	space_size = calc_global_rsv_need_space(global_rsv);
 4532	spin_unlock(&global_rsv->lock);
 4533	if (used + space_size >= space_info->total_bytes)
 4534		return 0;
 4535
 4536	used += space_info->bytes_may_use;
 4537
 4538	spin_lock(&root->fs_info->free_chunk_lock);
 4539	avail = root->fs_info->free_chunk_space;
 4540	spin_unlock(&root->fs_info->free_chunk_lock);
 4541
 4542	/*
 4543	 * If we have dup, raid1 or raid10 then only half of the free
 4544	 * space is actually useable.  For raid56, the space info used
 4545	 * doesn't include the parity drive, so we don't have to
 4546	 * change the math
 4547	 */
 4548	if (profile & (BTRFS_BLOCK_GROUP_DUP |
 4549		       BTRFS_BLOCK_GROUP_RAID1 |
 4550		       BTRFS_BLOCK_GROUP_RAID10))
 4551		avail >>= 1;
 4552
 4553	/*
 4554	 * If we aren't flushing all things, let us overcommit up to
 4555	 * 1/2th of the space. If we can flush, don't let us overcommit
 4556	 * too much, let it overcommit up to 1/8 of the space.
 4557	 */
 4558	if (flush == BTRFS_RESERVE_FLUSH_ALL)
 4559		avail >>= 3;
 4560	else
 4561		avail >>= 1;
 4562
 4563	if (used + bytes < space_info->total_bytes + avail)
 4564		return 1;
 4565	return 0;
 4566}
 4567
 4568static void btrfs_writeback_inodes_sb_nr(struct btrfs_root *root,
 4569					 unsigned long nr_pages, int nr_items)
 4570{
 4571	struct super_block *sb = root->fs_info->sb;
 4572
 4573	if (down_read_trylock(&sb->s_umount)) {
 4574		writeback_inodes_sb_nr(sb, nr_pages, WB_REASON_FS_FREE_SPACE);
 4575		up_read(&sb->s_umount);
 4576	} else {
 4577		/*
 4578		 * We needn't worry the filesystem going from r/w to r/o though
 4579		 * we don't acquire ->s_umount mutex, because the filesystem
 4580		 * should guarantee the delalloc inodes list be empty after
 4581		 * the filesystem is readonly(all dirty pages are written to
 4582		 * the disk).
 4583		 */
 4584		btrfs_start_delalloc_roots(root->fs_info, 0, nr_items);
 4585		if (!current->journal_info)
 4586			btrfs_wait_ordered_roots(root->fs_info, nr_items);
 4587	}
 4588}
 4589
 4590static inline int calc_reclaim_items_nr(struct btrfs_root *root, u64 to_reclaim)
 4591{
 4592	u64 bytes;
 4593	int nr;
 4594
 4595	bytes = btrfs_calc_trans_metadata_size(root, 1);
 4596	nr = (int)div64_u64(to_reclaim, bytes);
 4597	if (!nr)
 4598		nr = 1;
 4599	return nr;
 4600}
 4601
 4602#define EXTENT_SIZE_PER_ITEM	SZ_256K
 4603
 4604/*
 4605 * shrink metadata reservation for delalloc
 4606 */
 4607static void shrink_delalloc(struct btrfs_root *root, u64 to_reclaim, u64 orig,
 4608			    bool wait_ordered)
 4609{
 4610	struct btrfs_block_rsv *block_rsv;
 4611	struct btrfs_space_info *space_info;
 4612	struct btrfs_trans_handle *trans;
 4613	u64 delalloc_bytes;
 4614	u64 max_reclaim;
 4615	long time_left;
 4616	unsigned long nr_pages;
 4617	int loops;
 4618	int items;
 4619	enum btrfs_reserve_flush_enum flush;
 4620
 4621	/* Calc the number of the pages we need flush for space reservation */
 4622	items = calc_reclaim_items_nr(root, to_reclaim);
 4623	to_reclaim = items * EXTENT_SIZE_PER_ITEM;
 4624
 4625	trans = (struct btrfs_trans_handle *)current->journal_info;
 4626	block_rsv = &root->fs_info->delalloc_block_rsv;
 4627	space_info = block_rsv->space_info;
 4628
 4629	delalloc_bytes = percpu_counter_sum_positive(
 4630						&root->fs_info->delalloc_bytes);
 4631	if (delalloc_bytes == 0) {
 4632		if (trans)
 4633			return;
 4634		if (wait_ordered)
 4635			btrfs_wait_ordered_roots(root->fs_info, items);
 4636		return;
 4637	}
 4638
 4639	loops = 0;
 4640	while (delalloc_bytes && loops < 3) {
 4641		max_reclaim = min(delalloc_bytes, to_reclaim);
 4642		nr_pages = max_reclaim >> PAGE_SHIFT;
 4643		btrfs_writeback_inodes_sb_nr(root, nr_pages, items);
 4644		/*
 4645		 * We need to wait for the async pages to actually start before
 4646		 * we do anything.
 4647		 */
 4648		max_reclaim = atomic_read(&root->fs_info->async_delalloc_pages);
 4649		if (!max_reclaim)
 4650			goto skip_async;
 4651
 4652		if (max_reclaim <= nr_pages)
 4653			max_reclaim = 0;
 4654		else
 4655			max_reclaim -= nr_pages;
 4656
 4657		wait_event(root->fs_info->async_submit_wait,
 4658			   atomic_read(&root->fs_info->async_delalloc_pages) <=
 4659			   (int)max_reclaim);
 4660skip_async:
 4661		if (!trans)
 4662			flush = BTRFS_RESERVE_FLUSH_ALL;
 4663		else
 4664			flush = BTRFS_RESERVE_NO_FLUSH;
 4665		spin_lock(&space_info->lock);
 4666		if (can_overcommit(root, space_info, orig, flush)) {
 4667			spin_unlock(&space_info->lock);
 4668			break;
 4669		}
 4670		spin_unlock(&space_info->lock);
 4671
 4672		loops++;
 4673		if (wait_ordered && !trans) {
 4674			btrfs_wait_ordered_roots(root->fs_info, items);
 4675		} else {
 4676			time_left = schedule_timeout_killable(1);
 4677			if (time_left)
 4678				break;
 4679		}
 4680		delalloc_bytes = percpu_counter_sum_positive(
 4681						&root->fs_info->delalloc_bytes);
 4682	}
 4683}
 4684
 4685/**
 4686 * maybe_commit_transaction - possibly commit the transaction if its ok to
 4687 * @root - the root we're allocating for
 4688 * @bytes - the number of bytes we want to reserve
 4689 * @force - force the commit
 4690 *
 4691 * This will check to make sure that committing the transaction will actually
 4692 * get us somewhere and then commit the transaction if it does.  Otherwise it
 4693 * will return -ENOSPC.
 4694 */
 4695static int may_commit_transaction(struct btrfs_root *root,
 4696				  struct btrfs_space_info *space_info,
 4697				  u64 bytes, int force)
 4698{
 4699	struct btrfs_block_rsv *delayed_rsv = &root->fs_info->delayed_block_rsv;
 4700	struct btrfs_trans_handle *trans;
 4701
 4702	trans = (struct btrfs_trans_handle *)current->journal_info;
 4703	if (trans)
 4704		return -EAGAIN;
 4705
 4706	if (force)
 4707		goto commit;
 4708
 4709	/* See if there is enough pinned space to make this reservation */
 4710	if (percpu_counter_compare(&space_info->total_bytes_pinned,
 4711				   bytes) >= 0)
 4712		goto commit;
 4713
 4714	/*
 4715	 * See if there is some space in the delayed insertion reservation for
 4716	 * this reservation.
 4717	 */
 4718	if (space_info != delayed_rsv->space_info)
 4719		return -ENOSPC;
 4720
 4721	spin_lock(&delayed_rsv->lock);
 4722	if (percpu_counter_compare(&space_info->total_bytes_pinned,
 4723				   bytes - delayed_rsv->size) >= 0) {
 4724		spin_unlock(&delayed_rsv->lock);
 4725		return -ENOSPC;
 4726	}
 4727	spin_unlock(&delayed_rsv->lock);
 4728
 4729commit:
 4730	trans = btrfs_join_transaction(root);
 4731	if (IS_ERR(trans))
 4732		return -ENOSPC;
 4733
 4734	return btrfs_commit_transaction(trans, root);
 4735}
 4736
 4737enum flush_state {
 4738	FLUSH_DELAYED_ITEMS_NR	=	1,
 4739	FLUSH_DELAYED_ITEMS	=	2,
 4740	FLUSH_DELALLOC		=	3,
 4741	FLUSH_DELALLOC_WAIT	=	4,
 4742	ALLOC_CHUNK		=	5,
 4743	COMMIT_TRANS		=	6,
 4744};
 4745
 4746static int flush_space(struct btrfs_root *root,
 4747		       struct btrfs_space_info *space_info, u64 num_bytes,
 4748		       u64 orig_bytes, int state)
 4749{
 4750	struct btrfs_trans_handle *trans;
 4751	int nr;
 4752	int ret = 0;
 4753
 4754	switch (state) {
 4755	case FLUSH_DELAYED_ITEMS_NR:
 4756	case FLUSH_DELAYED_ITEMS:
 4757		if (state == FLUSH_DELAYED_ITEMS_NR)
 4758			nr = calc_reclaim_items_nr(root, num_bytes) * 2;
 4759		else
 4760			nr = -1;
 4761
 4762		trans = btrfs_join_transaction(root);
 4763		if (IS_ERR(trans)) {
 4764			ret = PTR_ERR(trans);
 4765			break;
 4766		}
 4767		ret = btrfs_run_delayed_items_nr(trans, root, nr);
 4768		btrfs_end_transaction(trans, root);
 4769		break;
 4770	case FLUSH_DELALLOC:
 4771	case FLUSH_DELALLOC_WAIT:
 4772		shrink_delalloc(root, num_bytes * 2, orig_bytes,
 4773				state == FLUSH_DELALLOC_WAIT);
 4774		break;
 4775	case ALLOC_CHUNK:
 4776		trans = btrfs_join_transaction(root);
 4777		if (IS_ERR(trans)) {
 4778			ret = PTR_ERR(trans);
 4779			break;
 4780		}
 4781		ret = do_chunk_alloc(trans, root->fs_info->extent_root,
 4782				     btrfs_get_alloc_profile(root, 0),
 4783				     CHUNK_ALLOC_NO_FORCE);
 4784		btrfs_end_transaction(trans, root);
 4785		if (ret == -ENOSPC)
 4786			ret = 0;
 4787		break;
 4788	case COMMIT_TRANS:
 4789		ret = may_commit_transaction(root, space_info, orig_bytes, 0);
 4790		break;
 4791	default:
 4792		ret = -ENOSPC;
 4793		break;
 4794	}
 4795
 4796	return ret;
 4797}
 4798
 4799static inline u64
 4800btrfs_calc_reclaim_metadata_size(struct btrfs_root *root,
 4801				 struct btrfs_space_info *space_info)
 4802{
 4803	u64 used;
 4804	u64 expected;
 4805	u64 to_reclaim;
 4806
 4807	to_reclaim = min_t(u64, num_online_cpus() * SZ_1M, SZ_16M);
 4808	spin_lock(&space_info->lock);
 4809	if (can_overcommit(root, space_info, to_reclaim,
 4810			   BTRFS_RESERVE_FLUSH_ALL)) {
 4811		to_reclaim = 0;
 4812		goto out;
 4813	}
 4814
 4815	used = space_info->bytes_used + space_info->bytes_reserved +
 4816	       space_info->bytes_pinned + space_info->bytes_readonly +
 4817	       space_info->bytes_may_use;
 4818	if (can_overcommit(root, space_info, SZ_1M, BTRFS_RESERVE_FLUSH_ALL))
 4819		expected = div_factor_fine(space_info->total_bytes, 95);
 4820	else
 4821		expected = div_factor_fine(space_info->total_bytes, 90);
 4822
 4823	if (used > expected)
 4824		to_reclaim = used - expected;
 4825	else
 4826		to_reclaim = 0;
 4827	to_reclaim = min(to_reclaim, space_info->bytes_may_use +
 4828				     space_info->bytes_reserved);
 4829out:
 4830	spin_unlock(&space_info->lock);
 4831
 4832	return to_reclaim;
 4833}
 4834
 4835static inline int need_do_async_reclaim(struct btrfs_space_info *space_info,
 4836					struct btrfs_fs_info *fs_info, u64 used)
 4837{
 4838	u64 thresh = div_factor_fine(space_info->total_bytes, 98);
 4839
 4840	/* If we're just plain full then async reclaim just slows us down. */
 4841	if ((space_info->bytes_used + space_info->bytes_reserved) >= thresh)
 4842		return 0;
 4843
 4844	return (used >= thresh && !btrfs_fs_closing(fs_info) &&
 4845		!test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state));
 4846}
 4847
 4848static int btrfs_need_do_async_reclaim(struct btrfs_space_info *space_info,
 4849				       struct btrfs_fs_info *fs_info,
 4850				       int flush_state)
 4851{
 4852	u64 used;
 4853
 4854	spin_lock(&space_info->lock);
 4855	/*
 4856	 * We run out of space and have not got any free space via flush_space,
 4857	 * so don't bother doing async reclaim.
 4858	 */
 4859	if (flush_state > COMMIT_TRANS && space_info->full) {
 4860		spin_unlock(&space_info->lock);
 4861		return 0;
 4862	}
 4863
 4864	used = space_info->bytes_used + space_info->bytes_reserved +
 4865	       space_info->bytes_pinned + space_info->bytes_readonly +
 4866	       space_info->bytes_may_use;
 4867	if (need_do_async_reclaim(space_info, fs_info, used)) {
 4868		spin_unlock(&space_info->lock);
 4869		return 1;
 4870	}
 4871	spin_unlock(&space_info->lock);
 4872
 4873	return 0;
 4874}
 4875
 4876static void btrfs_async_reclaim_metadata_space(struct work_struct *work)
 4877{
 4878	struct btrfs_fs_info *fs_info;
 4879	struct btrfs_space_info *space_info;
 4880	u64 to_reclaim;
 4881	int flush_state;
 4882
 4883	fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work);
 4884	space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
 4885
 4886	to_reclaim = btrfs_calc_reclaim_metadata_size(fs_info->fs_root,
 4887						      space_info);
 4888	if (!to_reclaim)
 4889		return;
 4890
 4891	flush_state = FLUSH_DELAYED_ITEMS_NR;
 4892	do {
 4893		flush_space(fs_info->fs_root, space_info, to_reclaim,
 4894			    to_reclaim, flush_state);
 4895		flush_state++;
 4896		if (!btrfs_need_do_async_reclaim(space_info, fs_info,
 4897						 flush_state))
 4898			return;
 4899	} while (flush_state < COMMIT_TRANS);
 4900}
 4901
 4902void btrfs_init_async_reclaim_work(struct work_struct *work)
 4903{
 4904	INIT_WORK(work, btrfs_async_reclaim_metadata_space);
 4905}
 4906
 4907/**
 4908 * reserve_metadata_bytes - try to reserve bytes from the block_rsv's space
 4909 * @root - the root we're allocating for
 4910 * @block_rsv - the block_rsv we're allocating for
 4911 * @orig_bytes - the number of bytes we want
 4912 * @flush - whether or not we can flush to make our reservation
 4913 *
 4914 * This will reserve orgi_bytes number of bytes from the space info associated
 4915 * with the block_rsv.  If there is not enough space it will make an attempt to
 4916 * flush out space to make room.  It will do this by flushing delalloc if
 4917 * possible or committing the transaction.  If flush is 0 then no attempts to
 4918 * regain reservations will be made and this will fail if there is not enough
 4919 * space already.
 4920 */
 4921static int reserve_metadata_bytes(struct btrfs_root *root,
 4922				  struct btrfs_block_rsv *block_rsv,
 4923				  u64 orig_bytes,
 4924				  enum btrfs_reserve_flush_enum flush)
 4925{
 4926	struct btrfs_space_info *space_info = block_rsv->space_info;
 4927	u64 used;
 4928	u64 num_bytes = orig_bytes;
 4929	int flush_state = FLUSH_DELAYED_ITEMS_NR;
 4930	int ret = 0;
 4931	bool flushing = false;
 4932
 4933again:
 4934	ret = 0;
 4935	spin_lock(&space_info->lock);
 4936	/*
 4937	 * We only want to wait if somebody other than us is flushing and we
 4938	 * are actually allowed to flush all things.
 4939	 */
 4940	while (flush == BTRFS_RESERVE_FLUSH_ALL && !flushing &&
 4941	       space_info->flush) {
 4942		spin_unlock(&space_info->lock);
 4943		/*
 4944		 * If we have a trans handle we can't wait because the flusher
 4945		 * may have to commit the transaction, which would mean we would
 4946		 * deadlock since we are waiting for the flusher to finish, but
 4947		 * hold the current transaction open.
 4948		 */
 4949		if (current->journal_info)
 4950			return -EAGAIN;
 4951		ret = wait_event_killable(space_info->wait, !space_info->flush);
 4952		/* Must have been killed, return */
 4953		if (ret)
 4954			return -EINTR;
 4955
 4956		spin_lock(&space_info->lock);
 4957	}
 4958
 4959	ret = -ENOSPC;
 4960	used = space_info->bytes_used + space_info->bytes_reserved +
 4961		space_info->bytes_pinned + space_info->bytes_readonly +
 4962		space_info->bytes_may_use;
 4963
 4964	/*
 4965	 * The idea here is that we've not already over-reserved the block group
 4966	 * then we can go ahead and save our reservation first and then start
 4967	 * flushing if we need to.  Otherwise if we've already overcommitted
 4968	 * lets start flushing stuff first and then come back and try to make
 4969	 * our reservation.
 4970	 */
 4971	if (used <= space_info->total_bytes) {
 4972		if (used + orig_bytes <= space_info->total_bytes) {
 4973			space_info->bytes_may_use += orig_bytes;
 4974			trace_btrfs_space_reservation(root->fs_info,
 4975				"space_info", space_info->flags, orig_bytes, 1);
 4976			ret = 0;
 4977		} else {
 4978			/*
 4979			 * Ok set num_bytes to orig_bytes since we aren't
 4980			 * overocmmitted, this way we only try and reclaim what
 4981			 * we need.
 4982			 */
 4983			num_bytes = orig_bytes;
 4984		}
 4985	} else {
 4986		/*
 4987		 * Ok we're over committed, set num_bytes to the overcommitted
 4988		 * amount plus the amount of bytes that we need for this
 4989		 * reservation.
 4990		 */
 4991		num_bytes = used - space_info->total_bytes +
 4992			(orig_bytes * 2);
 4993	}
 4994
 4995	if (ret && can_overcommit(root, space_info, orig_bytes, flush)) {
 4996		space_info->bytes_may_use += orig_bytes;
 4997		trace_btrfs_space_reservation(root->fs_info, "space_info",
 4998					      space_info->flags, orig_bytes,
 4999					      1);
 5000		ret = 0;
 5001	}
 5002
 5003	/*
 5004	 * Couldn't make our reservation, save our place so while we're trying
 5005	 * to reclaim space we can actually use it instead of somebody else
 5006	 * stealing it from us.
 5007	 *
 5008	 * We make the other tasks wait for the flush only when we can flush
 5009	 * all things.
 5010	 */
 5011	if (ret && flush != BTRFS_RESERVE_NO_FLUSH) {
 5012		flushing = true;
 5013		space_info->flush = 1;
 5014	} else if (!ret && space_info->flags & BTRFS_BLOCK_GROUP_METADATA) {
 5015		used += orig_bytes;
 5016		/*
 5017		 * We will do the space reservation dance during log replay,
 5018		 * which means we won't have fs_info->fs_root set, so don't do
 5019		 * the async reclaim as we will panic.
 5020		 */
 5021		if (!root->fs_info->log_root_recovering &&
 5022		    need_do_async_reclaim(space_info, root->fs_info, used) &&
 5023		    !work_busy(&root->fs_info->async_reclaim_work))
 5024			queue_work(system_unbound_wq,
 5025				   &root->fs_info->async_reclaim_work);
 5026	}
 5027	spin_unlock(&space_info->lock);
 5028
 5029	if (!ret || flush == BTRFS_RESERVE_NO_FLUSH)
 5030		goto out;
 5031
 5032	ret = flush_space(root, space_info, num_bytes, orig_bytes,
 5033			  flush_state);
 5034	flush_state++;
 5035
 5036	/*
 5037	 * If we are FLUSH_LIMIT, we can not flush delalloc, or the deadlock
 5038	 * would happen. So skip delalloc flush.
 5039	 */
 5040	if (flush == BTRFS_RESERVE_FLUSH_LIMIT &&
 5041	    (flush_state == FLUSH_DELALLOC ||
 5042	     flush_state == FLUSH_DELALLOC_WAIT))
 5043		flush_state = ALLOC_CHUNK;
 5044
 5045	if (!ret)
 5046		goto again;
 5047	else if (flush == BTRFS_RESERVE_FLUSH_LIMIT &&
 5048		 flush_state < COMMIT_TRANS)
 5049		goto again;
 5050	else if (flush == BTRFS_RESERVE_FLUSH_ALL &&
 5051		 flush_state <= COMMIT_TRANS)
 5052		goto again;
 5053
 5054out:
 5055	if (ret == -ENOSPC &&
 5056	    unlikely(root->orphan_cleanup_state == ORPHAN_CLEANUP_STARTED)) {
 5057		struct btrfs_block_rsv *global_rsv =
 5058			&root->fs_info->global_block_rsv;
 5059
 5060		if (block_rsv != global_rsv &&
 5061		    !block_rsv_use_bytes(global_rsv, orig_bytes))
 5062			ret = 0;
 5063	}
 5064	if (ret == -ENOSPC)
 5065		trace_btrfs_space_reservation(root->fs_info,
 5066					      "space_info:enospc",
 5067					      space_info->flags, orig_bytes, 1);
 5068	if (flushing) {
 5069		spin_lock(&space_info->lock);
 5070		space_info->flush = 0;
 5071		wake_up_all(&space_info->wait);
 5072		spin_unlock(&space_info->lock);
 5073	}
 5074	return ret;
 5075}
 5076
 5077static struct btrfs_block_rsv *get_block_rsv(
 5078					const struct btrfs_trans_handle *trans,
 5079					const struct btrfs_root *root)
 5080{
 5081	struct btrfs_block_rsv *block_rsv = NULL;
 5082
 5083	if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) ||
 5084	    (root == root->fs_info->csum_root && trans->adding_csums) ||
 5085	     (root == root->fs_info->uuid_root))
 5086		block_rsv = trans->block_rsv;
 5087
 5088	if (!block_rsv)
 5089		block_rsv = root->block_rsv;
 5090
 5091	if (!block_rsv)
 5092		block_rsv = &root->fs_info->empty_block_rsv;
 5093
 5094	return block_rsv;
 5095}
 5096
 5097static int block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv,
 5098			       u64 num_bytes)
 5099{
 5100	int ret = -ENOSPC;
 5101	spin_lock(&block_rsv->lock);
 5102	if (block_rsv->reserved >= num_bytes) {
 5103		block_rsv->reserved -= num_bytes;
 5104		if (block_rsv->reserved < block_rsv->size)
 5105			block_rsv->full = 0;
 5106		ret = 0;
 5107	}
 5108	spin_unlock(&block_rsv->lock);
 5109	return ret;
 5110}
 5111
 5112static void block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
 5113				u64 num_bytes, int update_size)
 5114{
 5115	spin_lock(&block_rsv->lock);
 5116	block_rsv->reserved += num_bytes;
 5117	if (update_size)
 5118		block_rsv->size += num_bytes;
 5119	else if (block_rsv->reserved >= block_rsv->size)
 5120		block_rsv->full = 1;
 5121	spin_unlock(&block_rsv->lock);
 5122}
 5123
 5124int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
 5125			     struct btrfs_block_rsv *dest, u64 num_bytes,
 5126			     int min_factor)
 5127{
 5128	struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
 5129	u64 min_bytes;
 5130
 5131	if (global_rsv->space_info != dest->space_info)
 5132		return -ENOSPC;
 5133
 5134	spin_lock(&global_rsv->lock);
 5135	min_bytes = div_factor(global_rsv->size, min_factor);
 5136	if (global_rsv->reserved < min_bytes + num_bytes) {
 5137		spin_unlock(&global_rsv->lock);
 5138		return -ENOSPC;
 5139	}
 5140	global_rsv->reserved -= num_bytes;
 5141	if (global_rsv->reserved < global_rsv->size)
 5142		global_rsv->full = 0;
 5143	spin_unlock(&global_rsv->lock);
 5144
 5145	block_rsv_add_bytes(dest, num_bytes, 1);
 5146	return 0;
 5147}
 5148
 5149static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
 5150				    struct btrfs_block_rsv *block_rsv,
 5151				    struct btrfs_block_rsv *dest, u64 num_bytes)
 5152{
 5153	struct btrfs_space_info *space_info = block_rsv->space_info;
 5154
 5155	spin_lock(&block_rsv->lock);
 5156	if (num_bytes == (u64)-1)
 5157		num_bytes = block_rsv->size;
 5158	block_rsv->size -= num_bytes;
 5159	if (block_rsv->reserved >= block_rsv->size) {
 5160		num_bytes = block_rsv->reserved - block_rsv->size;
 5161		block_rsv->reserved = block_rsv->size;
 5162		block_rsv->full = 1;
 5163	} else {
 5164		num_bytes = 0;
 5165	}
 5166	spin_unlock(&block_rsv->lock);
 5167
 5168	if (num_bytes > 0) {
 5169		if (dest) {
 5170			spin_lock(&dest->lock);
 5171			if (!dest->full) {
 5172				u64 bytes_to_add;
 5173
 5174				bytes_to_add = dest->size - dest->reserved;
 5175				bytes_to_add = min(num_bytes, bytes_to_add);
 5176				dest->reserved += bytes_to_add;
 5177				if (dest->reserved >= dest->size)
 5178					dest->full = 1;
 5179				num_bytes -= bytes_to_add;
 5180			}
 5181			spin_unlock(&dest->lock);
 5182		}
 5183		if (num_bytes) {
 5184			spin_lock(&space_info->lock);
 5185			space_info->bytes_may_use -= num_bytes;
 5186			trace_btrfs_space_reservation(fs_info, "space_info",
 5187					space_info->flags, num_bytes, 0);
 5188			spin_unlock(&space_info->lock);
 5189		}
 5190	}
 5191}
 5192
 5193static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
 5194				   struct btrfs_block_rsv *dst, u64 num_bytes)
 5195{
 5196	int ret;
 5197
 5198	ret = block_rsv_use_bytes(src, num_bytes);
 5199	if (ret)
 5200		return ret;
 5201
 5202	block_rsv_add_bytes(dst, num_bytes, 1);
 5203	return 0;
 5204}
 5205
 5206void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type)
 5207{
 5208	memset(rsv, 0, sizeof(*rsv));
 5209	spin_lock_init(&rsv->lock);
 5210	rsv->type = type;
 5211}
 5212
 5213struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_root *root,
 5214					      unsigned short type)
 5215{
 5216	struct btrfs_block_rsv *block_rsv;
 5217	struct btrfs_fs_info *fs_info = root->fs_info;
 5218
 5219	block_rsv = kmalloc(sizeof(*block_rsv), GFP_NOFS);
 5220	if (!block_rsv)
 5221		return NULL;
 5222
 5223	btrfs_init_block_rsv(block_rsv, type);
 5224	block_rsv->space_info = __find_space_info(fs_info,
 5225						  BTRFS_BLOCK_GROUP_METADATA);
 5226	return block_rsv;
 5227}
 5228
 5229void btrfs_free_block_rsv(struct btrfs_root *root,
 5230			  struct btrfs_block_rsv *rsv)
 5231{
 5232	if (!rsv)
 5233		return;
 5234	btrfs_block_rsv_release(root, rsv, (u64)-1);
 5235	kfree(rsv);
 5236}
 5237
 5238void __btrfs_free_block_rsv(struct btrfs_block_rsv *rsv)
 5239{
 5240	kfree(rsv);
 5241}
 5242
 5243int btrfs_block_rsv_add(struct btrfs_root *root,
 5244			struct btrfs_block_rsv *block_rsv, u64 num_bytes,
 5245			enum btrfs_reserve_flush_enum flush)
 5246{
 5247	int ret;
 5248
 5249	if (num_bytes == 0)
 5250		return 0;
 5251
 5252	ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
 5253	if (!ret) {
 5254		block_rsv_add_bytes(block_rsv, num_bytes, 1);
 5255		return 0;
 5256	}
 5257
 5258	return ret;
 5259}
 5260
 5261int btrfs_block_rsv_check(struct btrfs_root *root,
 5262			  struct btrfs_block_rsv *block_rsv, int min_factor)
 5263{
 5264	u64 num_bytes = 0;
 5265	int ret = -ENOSPC;
 5266
 5267	if (!block_rsv)
 5268		return 0;
 5269
 5270	spin_lock(&block_rsv->lock);
 5271	num_bytes = div_factor(block_rsv->size, min_factor);
 5272	if (block_rsv->reserved >= num_bytes)
 5273		ret = 0;
 5274	spin_unlock(&block_rsv->lock);
 5275
 5276	return ret;
 5277}
 5278
 5279int btrfs_block_rsv_refill(struct btrfs_root *root,
 5280			   struct btrfs_block_rsv *block_rsv, u64 min_reserved,
 5281			   enum btrfs_reserve_flush_enum flush)
 5282{
 5283	u64 num_bytes = 0;
 5284	int ret = -ENOSPC;
 5285
 5286	if (!block_rsv)
 5287		return 0;
 5288
 5289	spin_lock(&block_rsv->lock);
 5290	num_bytes = min_reserved;
 5291	if (block_rsv->reserved >= num_bytes)
 5292		ret = 0;
 5293	else
 5294		num_bytes -= block_rsv->reserved;
 5295	spin_unlock(&block_rsv->lock);
 5296
 5297	if (!ret)
 5298		return 0;
 5299
 5300	ret = reserve_metadata_bytes(root, block_rsv, num_bytes, flush);
 5301	if (!ret) {
 5302		block_rsv_add_bytes(block_rsv, num_bytes, 0);
 5303		return 0;
 5304	}
 5305
 5306	return ret;
 5307}
 5308
 5309int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
 5310			    struct btrfs_block_rsv *dst_rsv,
 5311			    u64 num_bytes)
 5312{
 5313	return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
 5314}
 5315
 5316void btrfs_block_rsv_release(struct btrfs_root *root,
 5317			     struct btrfs_block_rsv *block_rsv,
 5318			     u64 num_bytes)
 5319{
 5320	struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
 5321	if (global_rsv == block_rsv ||
 5322	    block_rsv->space_info != global_rsv->space_info)
 5323		global_rsv = NULL;
 5324	block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv,
 5325				num_bytes);
 5326}
 5327
 5328/*
 5329 * helper to calculate size of global block reservation.
 5330 * the desired value is sum of space used by extent tree,
 5331 * checksum tree and root tree
 5332 */
 5333static u64 calc_global_metadata_size(struct btrfs_fs_info *fs_info)
 5334{
 5335	struct btrfs_space_info *sinfo;
 5336	u64 num_bytes;
 5337	u64 meta_used;
 5338	u64 data_used;
 5339	int csum_size = btrfs_super_csum_size(fs_info->super_copy);
 5340
 5341	sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_DATA);
 5342	spin_lock(&sinfo->lock);
 5343	data_used = sinfo->bytes_used;
 5344	spin_unlock(&sinfo->lock);
 5345
 5346	sinfo = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
 5347	spin_lock(&sinfo->lock);
 5348	if (sinfo->flags & BTRFS_BLOCK_GROUP_DATA)
 5349		data_used = 0;
 5350	meta_used = sinfo->bytes_used;
 5351	spin_unlock(&sinfo->lock);
 5352
 5353	num_bytes = (data_used >> fs_info->sb->s_blocksize_bits) *
 5354		    csum_size * 2;
 5355	num_bytes += div_u64(data_used + meta_used, 50);
 5356
 5357	if (num_bytes * 3 > meta_used)
 5358		num_bytes = div_u64(meta_used, 3);
 5359
 5360	return ALIGN(num_bytes, fs_info->extent_root->nodesize << 10);
 5361}
 5362
 5363static void update_global_block_rsv(struct btrfs_fs_info *fs_info)
 5364{
 5365	struct btrfs_block_rsv *block_rsv = &fs_info->global_block_rsv;
 5366	struct btrfs_space_info *sinfo = block_rsv->space_info;
 5367	u64 num_bytes;
 5368
 5369	num_bytes = calc_global_metadata_size(fs_info);
 5370
 5371	spin_lock(&sinfo->lock);
 5372	spin_lock(&block_rsv->lock);
 5373
 5374	block_rsv->size = min_t(u64, num_bytes, SZ_512M);
 5375
 5376	if (block_rsv->reserved < block_rsv->size) {
 5377		num_bytes = sinfo->bytes_used + sinfo->bytes_pinned +
 5378			sinfo->bytes_reserved + sinfo->bytes_readonly +
 5379			sinfo->bytes_may_use;
 5380		if (sinfo->total_bytes > num_bytes) {
 5381			num_bytes = sinfo->total_bytes - num_bytes;
 5382			num_bytes = min(num_bytes,
 5383					block_rsv->size - block_rsv->reserved);
 5384			block_rsv->reserved += num_bytes;
 5385			sinfo->bytes_may_use += num_bytes;
 5386			trace_btrfs_space_reservation(fs_info, "space_info",
 5387						      sinfo->flags, num_bytes,
 5388						      1);
 5389		}
 5390	} else if (block_rsv->reserved > block_rsv->size) {
 5391		num_bytes = block_rsv->reserved - block_rsv->size;
 5392		sinfo->bytes_may_use -= num_bytes;
 5393		trace_btrfs_space_reservation(fs_info, "space_info",
 5394				      sinfo->flags, num_bytes, 0);
 5395		block_rsv->reserved = block_rsv->size;
 5396	}
 5397
 5398	if (block_rsv->reserved == block_rsv->size)
 5399		block_rsv->full = 1;
 5400	else
 5401		block_rsv->full = 0;
 5402
 5403	spin_unlock(&block_rsv->lock);
 5404	spin_unlock(&sinfo->lock);
 5405}
 5406
 5407static void init_global_block_rsv(struct btrfs_fs_info *fs_info)
 5408{
 5409	struct btrfs_space_info *space_info;
 5410
 5411	space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_SYSTEM);
 5412	fs_info->chunk_block_rsv.space_info = space_info;
 5413
 5414	space_info = __find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA);
 5415	fs_info->global_block_rsv.space_info = space_info;
 5416	fs_info->delalloc_block_rsv.space_info = space_info;
 5417	fs_info->trans_block_rsv.space_info = space_info;
 5418	fs_info->empty_block_rsv.space_info = space_info;
 5419	fs_info->delayed_block_rsv.space_info = space_info;
 5420
 5421	fs_info->extent_root->block_rsv = &fs_info->global_block_rsv;
 5422	fs_info->csum_root->block_rsv = &fs_info->global_block_rsv;
 5423	fs_info->dev_root->block_rsv = &fs_info->global_block_rsv;
 5424	fs_info->tree_root->block_rsv = &fs_info->global_block_rsv;
 5425	if (fs_info->quota_root)
 5426		fs_info->quota_root->block_rsv = &fs_info->global_block_rsv;
 5427	fs_info->chunk_root->block_rsv = &fs_info->chunk_block_rsv;
 5428
 5429	update_global_block_rsv(fs_info);
 5430}
 5431
 5432static void release_global_block_rsv(struct btrfs_fs_info *fs_info)
 5433{
 5434	block_rsv_release_bytes(fs_info, &fs_info->global_block_rsv, NULL,
 5435				(u64)-1);
 5436	WARN_ON(fs_info->delalloc_block_rsv.size > 0);
 5437	WARN_ON(fs_info->delalloc_block_rsv.reserved > 0);
 5438	WARN_ON(fs_info->trans_block_rsv.size > 0);
 5439	WARN_ON(fs_info->trans_block_rsv.reserved > 0);
 5440	WARN_ON(fs_info->chunk_block_rsv.size > 0);
 5441	WARN_ON(fs_info->chunk_block_rsv.reserved > 0);
 5442	WARN_ON(fs_info->delayed_block_rsv.size > 0);
 5443	WARN_ON(fs_info->delayed_block_rsv.reserved > 0);
 5444}
 5445
 5446void btrfs_trans_release_metadata(struct btrfs_trans_handle *trans,
 5447				  struct btrfs_root *root)
 5448{
 5449	if (!trans->block_rsv)
 5450		return;
 5451
 5452	if (!trans->bytes_reserved)
 5453		return;
 5454
 5455	trace_btrfs_space_reservation(root->fs_info, "transaction",
 5456				      trans->transid, trans->bytes_reserved, 0);
 5457	btrfs_block_rsv_release(root, trans->block_rsv, trans->bytes_reserved);
 5458	trans->bytes_reserved = 0;
 5459}
 5460
 5461/*
 5462 * To be called after all the new block groups attached to the transaction
 5463 * handle have been created (btrfs_create_pending_block_groups()).
 5464 */
 5465void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans)
 5466{
 5467	struct btrfs_fs_info *fs_info = trans->root->fs_info;
 5468
 5469	if (!trans->chunk_bytes_reserved)
 5470		return;
 5471
 5472	WARN_ON_ONCE(!list_empty(&trans->new_bgs));
 5473
 5474	block_rsv_release_bytes(fs_info, &fs_info->chunk_block_rsv, NULL,
 5475				trans->chunk_bytes_reserved);
 5476	trans->chunk_bytes_reserved = 0;
 5477}
 5478
 5479/* Can only return 0 or -ENOSPC */
 5480int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
 5481				  struct inode *inode)
 5482{
 5483	struct btrfs_root *root = BTRFS_I(inode)->root;
 5484	struct btrfs_block_rsv *src_rsv = get_block_rsv(trans, root);
 5485	struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv;
 5486
 5487	/*
 5488	 * We need to hold space in order to delete our orphan item once we've
 5489	 * added it, so this takes the reservation so we can release it later
 5490	 * when we are truly done with the orphan item.
 5491	 */
 5492	u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
 5493	trace_btrfs_space_reservation(root->fs_info, "orphan",
 5494				      btrfs_ino(inode), num_bytes, 1);
 5495	return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
 5496}
 5497
 5498void btrfs_orphan_release_metadata(struct inode *inode)
 5499{
 5500	struct btrfs_root *root = BTRFS_I(inode)->root;
 5501	u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
 5502	trace_btrfs_space_reservation(root->fs_info, "orphan",
 5503				      btrfs_ino(inode), num_bytes, 0);
 5504	btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes);
 5505}
 5506
 5507/*
 5508 * btrfs_subvolume_reserve_metadata() - reserve space for subvolume operation
 5509 * root: the root of the parent directory
 5510 * rsv: block reservation
 5511 * items: the number of items that we need do reservation
 5512 * qgroup_reserved: used to return the reserved size in qgroup
 5513 *
 5514 * This function is used to reserve the space for snapshot/subvolume
 5515 * creation and deletion. Those operations are different with the
 5516 * common file/directory operations, they change two fs/file trees
 5517 * and root tree, the number of items that the qgroup reserves is
 5518 * different with the free space reservation. So we can not use
 5519 * the space reseravtion mechanism in start_transaction().
 5520 */
 5521int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
 5522				     struct btrfs_block_rsv *rsv,
 5523				     int items,
 5524				     u64 *qgroup_reserved,
 5525				     bool use_global_rsv)
 5526{
 5527	u64 num_bytes;
 5528	int ret;
 5529	struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
 5530
 5531	if (root->fs_info->quota_enabled) {
 5532		/* One for parent inode, two for dir entries */
 5533		num_bytes = 3 * root->nodesize;
 5534		ret = btrfs_qgroup_reserve_meta(root, num_bytes);
 5535		if (ret)
 5536			return ret;
 5537	} else {
 5538		num_bytes = 0;
 5539	}
 5540
 5541	*qgroup_reserved = num_bytes;
 5542
 5543	num_bytes = btrfs_calc_trans_metadata_size(root, items);
 5544	rsv->space_info = __find_space_info(root->fs_info,
 5545					    BTRFS_BLOCK_GROUP_METADATA);
 5546	ret = btrfs_block_rsv_add(root, rsv, num_bytes,
 5547				  BTRFS_RESERVE_FLUSH_ALL);
 5548
 5549	if (ret == -ENOSPC && use_global_rsv)
 5550		ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes);
 5551
 5552	if (ret && *qgroup_reserved)
 5553		btrfs_qgroup_free_meta(root, *qgroup_reserved);
 5554
 5555	return ret;
 5556}
 5557
 5558void btrfs_subvolume_release_metadata(struct btrfs_root *root,
 5559				      struct btrfs_block_rsv *rsv,
 5560				      u64 qgroup_reserved)
 5561{
 5562	btrfs_block_rsv_release(root, rsv, (u64)-1);
 5563}
 5564
 5565/**
 5566 * drop_outstanding_extent - drop an outstanding extent
 5567 * @inode: the inode we're dropping the extent for
 5568 * @num_bytes: the number of bytes we're relaseing.
 5569 *
 5570 * This is called when we are freeing up an outstanding extent, either called
 5571 * after an error or after an extent is written.  This will return the number of
 5572 * reserved extents that need to be freed.  This must be called with
 5573 * BTRFS_I(inode)->lock held.
 5574 */
 5575static unsigned drop_outstanding_extent(struct inode *inode, u64 num_bytes)
 5576{
 5577	unsigned drop_inode_space = 0;
 5578	unsigned dropped_extents = 0;
 5579	unsigned num_extents = 0;
 5580
 5581	num_extents = (unsigned)div64_u64(num_bytes +
 5582					  BTRFS_MAX_EXTENT_SIZE - 1,
 5583					  BTRFS_MAX_EXTENT_SIZE);
 5584	ASSERT(num_extents);
 5585	ASSERT(BTRFS_I(inode)->outstanding_extents >= num_extents);
 5586	BTRFS_I(inode)->outstanding_extents -= num_extents;
 5587
 5588	if (BTRFS_I(inode)->outstanding_extents == 0 &&
 5589	    test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
 5590			       &BTRFS_I(inode)->runtime_flags))
 5591		drop_inode_space = 1;
 5592
 5593	/*
 5594	 * If we have more or the same amount of outsanding extents than we have
 5595	 * reserved then we need to leave the reserved extents count alone.
 5596	 */
 5597	if (BTRFS_I(inode)->outstanding_extents >=
 5598	    BTRFS_I(inode)->reserved_extents)
 5599		return drop_inode_space;
 5600
 5601	dropped_extents = BTRFS_I(inode)->reserved_extents -
 5602		BTRFS_I(inode)->outstanding_extents;
 5603	BTRFS_I(inode)->reserved_extents -= dropped_extents;
 5604	return dropped_extents + drop_inode_space;
 5605}
 5606
 5607/**
 5608 * calc_csum_metadata_size - return the amount of metada space that must be
 5609 *	reserved/free'd for the given bytes.
 5610 * @inode: the inode we're manipulating
 5611 * @num_bytes: the number of bytes in question
 5612 * @reserve: 1 if we are reserving space, 0 if we are freeing space
 5613 *
 5614 * This adjusts the number of csum_bytes in the inode and then returns the
 5615 * correct amount of metadata that must either be reserved or freed.  We
 5616 * calculate how many checksums we can fit into one leaf and then divide the
 5617 * number of bytes that will need to be checksumed by this value to figure out
 5618 * how many checksums will be required.  If we are adding bytes then the number
 5619 * may go up and we will return the number of additional bytes that must be
 5620 * reserved.  If it is going down we will return the number of bytes that must
 5621 * be freed.
 5622 *
 5623 * This must be called with BTRFS_I(inode)->lock held.
 5624 */
 5625static u64 calc_csum_metadata_size(struct inode *inode, u64 num_bytes,
 5626				   int reserve)
 5627{
 5628	struct btrfs_root *root = BTRFS_I(inode)->root;
 5629	u64 old_csums, num_csums;
 5630
 5631	if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM &&
 5632	    BTRFS_I(inode)->csum_bytes == 0)
 5633		return 0;
 5634
 5635	old_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes);
 5636	if (reserve)
 5637		BTRFS_I(inode)->csum_bytes += num_bytes;
 5638	else
 5639		BTRFS_I(inode)->csum_bytes -= num_bytes;
 5640	num_csums = btrfs_csum_bytes_to_leaves(root, BTRFS_I(inode)->csum_bytes);
 5641
 5642	/* No change, no need to reserve more */
 5643	if (old_csums == num_csums)
 5644		return 0;
 5645
 5646	if (reserve)
 5647		return btrfs_calc_trans_metadata_size(root,
 5648						      num_csums - old_csums);
 5649
 5650	return btrfs_calc_trans_metadata_size(root, old_csums - num_csums);
 5651}
 5652
 5653int btrfs_delalloc_reserve_metadata(struct inode *inode, u64 num_bytes)
 5654{
 5655	struct btrfs_root *root = BTRFS_I(inode)->root;
 5656	struct btrfs_block_rsv *block_rsv = &root->fs_info->delalloc_block_rsv;
 5657	u64 to_reserve = 0;
 5658	u64 csum_bytes;
 5659	unsigned nr_extents = 0;
 5660	int extra_reserve = 0;
 5661	enum btrfs_reserve_flush_enum flush = BTRFS_RESERVE_FLUSH_ALL;
 5662	int ret = 0;
 5663	bool delalloc_lock = true;
 5664	u64 to_free = 0;
 5665	unsigned dropped;
 5666
 5667	/* If we are a free space inode we need to not flush since we will be in
 5668	 * the middle of a transaction commit.  We also don't need the delalloc
 5669	 * mutex since we won't race with anybody.  We need this mostly to make
 5670	 * lockdep shut its filthy mouth.
 5671	 */
 5672	if (btrfs_is_free_space_inode(inode)) {
 5673		flush = BTRFS_RESERVE_NO_FLUSH;
 5674		delalloc_lock = false;
 5675	}
 5676
 5677	if (flush != BTRFS_RESERVE_NO_FLUSH &&
 5678	    btrfs_transaction_in_commit(root->fs_info))
 5679		schedule_timeout(1);
 5680
 5681	if (delalloc_lock)
 5682		mutex_lock(&BTRFS_I(inode)->delalloc_mutex);
 5683
 5684	num_bytes = ALIGN(num_bytes, root->sectorsize);
 5685
 5686	spin_lock(&BTRFS_I(inode)->lock);
 5687	nr_extents = (unsigned)div64_u64(num_bytes +
 5688					 BTRFS_MAX_EXTENT_SIZE - 1,
 5689					 BTRFS_MAX_EXTENT_SIZE);
 5690	BTRFS_I(inode)->outstanding_extents += nr_extents;
 5691	nr_extents = 0;
 5692
 5693	if (BTRFS_I(inode)->outstanding_extents >
 5694	    BTRFS_I(inode)->reserved_extents)
 5695		nr_extents = BTRFS_I(inode)->outstanding_extents -
 5696			BTRFS_I(inode)->reserved_extents;
 5697
 5698	/*
 5699	 * Add an item to reserve for updating the inode when we complete the
 5700	 * delalloc io.
 5701	 */
 5702	if (!test_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
 5703		      &BTRFS_I(inode)->runtime_flags)) {
 5704		nr_extents++;
 5705		extra_reserve = 1;
 5706	}
 5707
 5708	to_reserve = btrfs_calc_trans_metadata_size(root, nr_extents);
 5709	to_reserve += calc_csum_metadata_size(inode, num_bytes, 1);
 5710	csum_bytes = BTRFS_I(inode)->csum_bytes;
 5711	spin_unlock(&BTRFS_I(inode)->lock);
 5712
 5713	if (root->fs_info->quota_enabled) {
 5714		ret = btrfs_qgroup_reserve_meta(root,
 5715				nr_extents * root->nodesize);
 5716		if (ret)
 5717			goto out_fail;
 5718	}
 5719
 5720	ret = reserve_metadata_bytes(root, block_rsv, to_reserve, flush);
 5721	if (unlikely(ret)) {
 5722		btrfs_qgroup_free_meta(root, nr_extents * root->nodesize);
 5723		goto out_fail;
 5724	}
 5725
 5726	spin_lock(&BTRFS_I(inode)->lock);
 5727	if (extra_reserve) {
 5728		set_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
 5729			&BTRFS_I(inode)->runtime_flags);
 5730		nr_extents--;
 5731	}
 5732	BTRFS_I(inode)->reserved_extents += nr_extents;
 5733	spin_unlock(&BTRFS_I(inode)->lock);
 5734
 5735	if (delalloc_lock)
 5736		mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
 5737
 5738	if (to_reserve)
 5739		trace_btrfs_space_reservation(root->fs_info, "delalloc",
 5740					      btrfs_ino(inode), to_reserve, 1);
 5741	block_rsv_add_bytes(block_rsv, to_reserve, 1);
 5742
 5743	return 0;
 5744
 5745out_fail:
 5746	spin_lock(&BTRFS_I(inode)->lock);
 5747	dropped = drop_outstanding_extent(inode, num_bytes);
 5748	/*
 5749	 * If the inodes csum_bytes is the same as the original
 5750	 * csum_bytes then we know we haven't raced with any free()ers
 5751	 * so we can just reduce our inodes csum bytes and carry on.
 5752	 */
 5753	if (BTRFS_I(inode)->csum_bytes == csum_bytes) {
 5754		calc_csum_metadata_size(inode, num_bytes, 0);
 5755	} else {
 5756		u64 orig_csum_bytes = BTRFS_I(inode)->csum_bytes;
 5757		u64 bytes;
 5758
 5759		/*
 5760		 * This is tricky, but first we need to figure out how much we
 5761		 * free'd from any free-ers that occurred during this
 5762		 * reservation, so we reset ->csum_bytes to the csum_bytes
 5763		 * before we dropped our lock, and then call the free for the
 5764		 * number of bytes that were freed while we were trying our
 5765		 * reservation.
 5766		 */
 5767		bytes = csum_bytes - BTRFS_I(inode)->csum_bytes;
 5768		BTRFS_I(inode)->csum_bytes = csum_bytes;
 5769		to_free = calc_csum_metadata_size(inode, bytes, 0);
 5770
 5771
 5772		/*
 5773		 * Now we need to see how much we would have freed had we not
 5774		 * been making this reservation and our ->csum_bytes were not
 5775		 * artificially inflated.
 5776		 */
 5777		BTRFS_I(inode)->csum_bytes = csum_bytes - num_bytes;
 5778		bytes = csum_bytes - orig_csum_bytes;
 5779		bytes = calc_csum_metadata_size(inode, bytes, 0);
 5780
 5781		/*
 5782		 * Now reset ->csum_bytes to what it should be.  If bytes is
 5783		 * more than to_free then we would have free'd more space had we
 5784		 * not had an artificially high ->csum_bytes, so we need to free
 5785		 * the remainder.  If bytes is the same or less then we don't
 5786		 * need to do anything, the other free-ers did the correct
 5787		 * thing.
 5788		 */
 5789		BTRFS_I(inode)->csum_bytes = orig_csum_bytes - num_bytes;
 5790		if (bytes > to_free)
 5791			to_free = bytes - to_free;
 5792		else
 5793			to_free = 0;
 5794	}
 5795	spin_unlock(&BTRFS_I(inode)->lock);
 5796	if (dropped)
 5797		to_free += btrfs_calc_trans_metadata_size(root, dropped);
 5798
 5799	if (to_free) {
 5800		btrfs_block_rsv_release(root, block_rsv, to_free);
 5801		trace_btrfs_space_reservation(root->fs_info, "delalloc",
 5802					      btrfs_ino(inode), to_free, 0);
 5803	}
 5804	if (delalloc_lock)
 5805		mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
 5806	return ret;
 5807}
 5808
 5809/**
 5810 * btrfs_delalloc_release_metadata - release a metadata reservation for an inode
 5811 * @inode: the inode to release the reservation for
 5812 * @num_bytes: the number of bytes we're releasing
 5813 *
 5814 * This will release the metadata reservation for an inode.  This can be called
 5815 * once we complete IO for a given set of bytes to release their metadata
 5816 * reservations.
 5817 */
 5818void btrfs_delalloc_release_metadata(struct inode *inode, u64 num_bytes)
 5819{
 5820	struct btrfs_root *root = BTRFS_I(inode)->root;
 5821	u64 to_free = 0;
 5822	unsigned dropped;
 5823
 5824	num_bytes = ALIGN(num_bytes, root->sectorsize);
 5825	spin_lock(&BTRFS_I(inode)->lock);
 5826	dropped = drop_outstanding_extent(inode, num_bytes);
 5827
 5828	if (num_bytes)
 5829		to_free = calc_csum_metadata_size(inode, num_bytes, 0);
 5830	spin_unlock(&BTRFS_I(inode)->lock);
 5831	if (dropped > 0)
 5832		to_free += btrfs_calc_trans_metadata_size(root, dropped);
 5833
 5834	if (btrfs_test_is_dummy_root(root))
 5835		return;
 5836
 5837	trace_btrfs_space_reservation(root->fs_info, "delalloc",
 5838				      btrfs_ino(inode), to_free, 0);
 5839
 5840	btrfs_block_rsv_release(root, &root->fs_info->delalloc_block_rsv,
 5841				to_free);
 5842}
 5843
 5844/**
 5845 * btrfs_delalloc_reserve_space - reserve data and metadata space for
 5846 * delalloc
 5847 * @inode: inode we're writing to
 5848 * @start: start range we are writing to
 5849 * @len: how long the range we are writing to
 5850 *
 5851 * TODO: This function will finally replace old btrfs_delalloc_reserve_space()
 5852 *
 5853 * This will do the following things
 5854 *
 5855 * o reserve space in data space info for num bytes
 5856 *   and reserve precious corresponding qgroup space
 5857 *   (Done in check_data_free_space)
 5858 *
 5859 * o reserve space for metadata space, based on the number of outstanding
 5860 *   extents and how much csums will be needed
 5861 *   also reserve metadata space in a per root over-reserve method.
 5862 * o add to the inodes->delalloc_bytes
 5863 * o add it to the fs_info's delalloc inodes list.
 5864 *   (Above 3 all done in delalloc_reserve_metadata)
 5865 *
 5866 * Return 0 for success
 5867 * Return <0 for error(-ENOSPC or -EQUOT)
 5868 */
 5869int btrfs_delalloc_reserve_space(struct inode *inode, u64 start, u64 len)
 5870{
 5871	int ret;
 5872
 5873	ret = btrfs_check_data_free_space(inode, start, len);
 5874	if (ret < 0)
 5875		return ret;
 5876	ret = btrfs_delalloc_reserve_metadata(inode, len);
 5877	if (ret < 0)
 5878		btrfs_free_reserved_data_space(inode, start, len);
 5879	return ret;
 5880}
 5881
 5882/**
 5883 * btrfs_delalloc_release_space - release data and metadata space for delalloc
 5884 * @inode: inode we're releasing space for
 5885 * @start: start position of the space already reserved
 5886 * @len: the len of the space already reserved
 5887 *
 5888 * This must be matched with a call to btrfs_delalloc_reserve_space.  This is
 5889 * called in the case that we don't need the metadata AND data reservations
 5890 * anymore.  So if there is an error or we insert an inline extent.
 5891 *
 5892 * This function will release the metadata space that was not used and will
 5893 * decrement ->delalloc_bytes and remove it from the fs_info delalloc_inodes
 5894 * list if there are no delalloc bytes left.
 5895 * Also it will handle the qgroup reserved space.
 5896 */
 5897void btrfs_delalloc_release_space(struct inode *inode, u64 start, u64 len)
 5898{
 5899	btrfs_delalloc_release_metadata(inode, len);
 5900	btrfs_free_reserved_data_space(inode, start, len);
 5901}
 5902
 5903static int update_block_group(struct btrfs_trans_handle *trans,
 5904			      struct btrfs_root *root, u64 bytenr,
 5905			      u64 num_bytes, int alloc)
 5906{
 5907	struct btrfs_block_group_cache *cache = NULL;
 5908	struct btrfs_fs_info *info = root->fs_info;
 5909	u64 total = num_bytes;
 5910	u64 old_val;
 5911	u64 byte_in_group;
 5912	int factor;
 5913
 5914	/* block accounting for super block */
 5915	spin_lock(&info->delalloc_root_lock);
 5916	old_val = btrfs_super_bytes_used(info->super_copy);
 5917	if (alloc)
 5918		old_val += num_bytes;
 5919	else
 5920		old_val -= num_bytes;
 5921	btrfs_set_super_bytes_used(info->super_copy, old_val);
 5922	spin_unlock(&info->delalloc_root_lock);
 5923
 5924	while (total) {
 5925		cache = btrfs_lookup_block_group(info, bytenr);
 5926		if (!cache)
 5927			return -ENOENT;
 5928		if (cache->flags & (BTRFS_BLOCK_GROUP_DUP |
 5929				    BTRFS_BLOCK_GROUP_RAID1 |
 5930				    BTRFS_BLOCK_GROUP_RAID10))
 5931			factor = 2;
 5932		else
 5933			factor = 1;
 5934		/*
 5935		 * If this block group has free space cache written out, we
 5936		 * need to make sure to load it if we are removing space.  This
 5937		 * is because we need the unpinning stage to actually add the
 5938		 * space back to the block group, otherwise we will leak space.
 5939		 */
 5940		if (!alloc && cache->cached == BTRFS_CACHE_NO)
 5941			cache_block_group(cache, 1);
 5942
 5943		byte_in_group = bytenr - cache->key.objectid;
 5944		WARN_ON(byte_in_group > cache->key.offset);
 5945
 5946		spin_lock(&cache->space_info->lock);
 5947		spin_lock(&cache->lock);
 5948
 5949		if (btrfs_test_opt(root, SPACE_CACHE) &&
 5950		    cache->disk_cache_state < BTRFS_DC_CLEAR)
 5951			cache->disk_cache_state = BTRFS_DC_CLEAR;
 5952
 5953		old_val = btrfs_block_group_used(&cache->item);
 5954		num_bytes = min(total, cache->key.offset - byte_in_group);
 5955		if (alloc) {
 5956			old_val += num_bytes;
 5957			btrfs_set_block_group_used(&cache->item, old_val);
 5958			cache->reserved -= num_bytes;
 5959			cache->space_info->bytes_reserved -= num_bytes;
 5960			cache->space_info->bytes_used += num_bytes;
 5961			cache->space_info->disk_used += num_bytes * factor;
 5962			spin_unlock(&cache->lock);
 5963			spin_unlock(&cache->space_info->lock);
 5964		} else {
 5965			old_val -= num_bytes;
 5966			btrfs_set_block_group_used(&cache->item, old_val);
 5967			cache->pinned += num_bytes;
 5968			cache->space_info->bytes_pinned += num_bytes;
 5969			cache->space_info->bytes_used -= num_bytes;
 5970			cache->space_info->disk_used -= num_bytes * factor;
 5971			spin_unlock(&cache->lock);
 5972			spin_unlock(&cache->space_info->lock);
 5973
 5974			set_extent_dirty(info->pinned_extents,
 5975					 bytenr, bytenr + num_bytes - 1,
 5976					 GFP_NOFS | __GFP_NOFAIL);
 5977		}
 5978
 5979		spin_lock(&trans->transaction->dirty_bgs_lock);
 5980		if (list_empty(&cache->dirty_list)) {
 5981			list_add_tail(&cache->dirty_list,
 5982				      &trans->transaction->dirty_bgs);
 5983				trans->transaction->num_dirty_bgs++;
 5984			btrfs_get_block_group(cache);
 5985		}
 5986		spin_unlock(&trans->transaction->dirty_bgs_lock);
 5987
 5988		/*
 5989		 * No longer have used bytes in this block group, queue it for
 5990		 * deletion. We do this after adding the block group to the
 5991		 * dirty list to avoid races between cleaner kthread and space
 5992		 * cache writeout.
 5993		 */
 5994		if (!alloc && old_val == 0) {
 5995			spin_lock(&info->unused_bgs_lock);
 5996			if (list_empty(&cache->bg_list)) {
 5997				btrfs_get_block_group(cache);
 5998				list_add_tail(&cache->bg_list,
 5999					      &info->unused_bgs);
 6000			}
 6001			spin_unlock(&info->unused_bgs_lock);
 6002		}
 6003
 6004		btrfs_put_block_group(cache);
 6005		total -= num_bytes;
 6006		bytenr += num_bytes;
 6007	}
 6008	return 0;
 6009}
 6010
 6011static u64 first_logical_byte(struct btrfs_root *root, u64 search_start)
 6012{
 6013	struct btrfs_block_group_cache *cache;
 6014	u64 bytenr;
 6015
 6016	spin_lock(&root->fs_info->block_group_cache_lock);
 6017	bytenr = root->fs_info->first_logical_byte;
 6018	spin_unlock(&root->fs_info->block_group_cache_lock);
 6019
 6020	if (bytenr < (u64)-1)
 6021		return bytenr;
 6022
 6023	cache = btrfs_lookup_first_block_group(root->fs_info, search_start);
 6024	if (!cache)
 6025		return 0;
 6026
 6027	bytenr = cache->key.objectid;
 6028	btrfs_put_block_group(cache);
 6029
 6030	return bytenr;
 6031}
 6032
 6033static int pin_down_extent(struct btrfs_root *root,
 6034			   struct btrfs_block_group_cache *cache,
 6035			   u64 bytenr, u64 num_bytes, int reserved)
 6036{
 
 
 6037	spin_lock(&cache->space_info->lock);
 6038	spin_lock(&cache->lock);
 6039	cache->pinned += num_bytes;
 6040	cache->space_info->bytes_pinned += num_bytes;
 
 6041	if (reserved) {
 6042		cache->reserved -= num_bytes;
 6043		cache->space_info->bytes_reserved -= num_bytes;
 6044	}
 6045	spin_unlock(&cache->lock);
 6046	spin_unlock(&cache->space_info->lock);
 6047
 6048	set_extent_dirty(root->fs_info->pinned_extents, bytenr,
 6049			 bytenr + num_bytes - 1, GFP_NOFS | __GFP_NOFAIL);
 6050	if (reserved)
 6051		trace_btrfs_reserved_extent_free(root, bytenr, num_bytes);
 6052	return 0;
 6053}
 6054
 6055/*
 6056 * this function must be called within transaction
 6057 */
 6058int btrfs_pin_extent(struct btrfs_root *root,
 6059		     u64 bytenr, u64 num_bytes, int reserved)
 6060{
 6061	struct btrfs_block_group_cache *cache;
 6062
 6063	cache = btrfs_lookup_block_group(root->fs_info, bytenr);
 6064	BUG_ON(!cache); /* Logic error */
 6065
 6066	pin_down_extent(root, cache, bytenr, num_bytes, reserved);
 6067
 6068	btrfs_put_block_group(cache);
 6069	return 0;
 6070}
 6071
 6072/*
 6073 * this function must be called within transaction
 6074 */
 6075int btrfs_pin_extent_for_log_replay(struct btrfs_root *root,
 6076				    u64 bytenr, u64 num_bytes)
 6077{
 6078	struct btrfs_block_group_cache *cache;
 6079	int ret;
 6080
 6081	cache = btrfs_lookup_block_group(root->fs_info, bytenr);
 6082	if (!cache)
 6083		return -EINVAL;
 6084
 6085	/*
 6086	 * pull in the free space cache (if any) so that our pin
 6087	 * removes the free space from the cache.  We have load_only set
 6088	 * to one because the slow code to read in the free extents does check
 6089	 * the pinned extents.
 6090	 */
 6091	cache_block_group(cache, 1);
 
 
 6092
 6093	pin_down_extent(root, cache, bytenr, num_bytes, 0);
 6094
 6095	/* remove us from the free space cache (if we're there at all) */
 6096	ret = btrfs_remove_free_space(cache, bytenr, num_bytes);
 
 6097	btrfs_put_block_group(cache);
 6098	return ret;
 6099}
 6100
 6101static int __exclude_logged_extent(struct btrfs_root *root, u64 start, u64 num_bytes)
 
 6102{
 6103	int ret;
 6104	struct btrfs_block_group_cache *block_group;
 6105	struct btrfs_caching_control *caching_ctl;
 6106
 6107	block_group = btrfs_lookup_block_group(root->fs_info, start);
 6108	if (!block_group)
 6109		return -EINVAL;
 6110
 6111	cache_block_group(block_group, 0);
 6112	caching_ctl = get_caching_control(block_group);
 6113
 6114	if (!caching_ctl) {
 6115		/* Logic error */
 6116		BUG_ON(!block_group_cache_done(block_group));
 6117		ret = btrfs_remove_free_space(block_group, start, num_bytes);
 6118	} else {
 6119		mutex_lock(&caching_ctl->mutex);
 6120
 6121		if (start >= caching_ctl->progress) {
 6122			ret = add_excluded_extent(root, start, num_bytes);
 6123		} else if (start + num_bytes <= caching_ctl->progress) {
 6124			ret = btrfs_remove_free_space(block_group,
 6125						      start, num_bytes);
 6126		} else {
 6127			num_bytes = caching_ctl->progress - start;
 6128			ret = btrfs_remove_free_space(block_group,
 6129						      start, num_bytes);
 6130			if (ret)
 6131				goto out_lock;
 6132
 6133			num_bytes = (start + num_bytes) -
 6134				caching_ctl->progress;
 6135			start = caching_ctl->progress;
 6136			ret = add_excluded_extent(root, start, num_bytes);
 6137		}
 6138out_lock:
 6139		mutex_unlock(&caching_ctl->mutex);
 6140		put_caching_control(caching_ctl);
 6141	}
 6142	btrfs_put_block_group(block_group);
 6143	return ret;
 6144}
 6145
 6146int btrfs_exclude_logged_extents(struct btrfs_root *log,
 6147				 struct extent_buffer *eb)
 6148{
 
 6149	struct btrfs_file_extent_item *item;
 6150	struct btrfs_key key;
 6151	int found_type;
 6152	int i;
 
 6153
 6154	if (!btrfs_fs_incompat(log->fs_info, MIXED_GROUPS))
 6155		return 0;
 6156
 6157	for (i = 0; i < btrfs_header_nritems(eb); i++) {
 6158		btrfs_item_key_to_cpu(eb, &key, i);
 6159		if (key.type != BTRFS_EXTENT_DATA_KEY)
 6160			continue;
 6161		item = btrfs_item_ptr(eb, i, struct btrfs_file_extent_item);
 6162		found_type = btrfs_file_extent_type(eb, item);
 6163		if (found_type == BTRFS_FILE_EXTENT_INLINE)
 6164			continue;
 6165		if (btrfs_file_extent_disk_bytenr(eb, item) == 0)
 6166			continue;
 6167		key.objectid = btrfs_file_extent_disk_bytenr(eb, item);
 6168		key.offset = btrfs_file_extent_disk_num_bytes(eb, item);
 6169		__exclude_logged_extent(log, key.objectid, key.offset);
 
 
 6170	}
 6171
 6172	return 0;
 6173}
 6174
 6175/**
 6176 * btrfs_update_reserved_bytes - update the block_group and space info counters
 6177 * @cache:	The cache we are manipulating
 6178 * @num_bytes:	The number of bytes in question
 6179 * @reserve:	One of the reservation enums
 6180 * @delalloc:   The blocks are allocated for the delalloc write
 6181 *
 6182 * This is called by the allocator when it reserves space, or by somebody who is
 6183 * freeing space that was never actually used on disk.  For example if you
 6184 * reserve some space for a new leaf in transaction A and before transaction A
 6185 * commits you free that leaf, you call this with reserve set to 0 in order to
 6186 * clear the reservation.
 6187 *
 6188 * Metadata reservations should be called with RESERVE_ALLOC so we do the proper
 6189 * ENOSPC accounting.  For data we handle the reservation through clearing the
 6190 * delalloc bits in the io_tree.  We have to do this since we could end up
 6191 * allocating less disk space for the amount of data we have reserved in the
 6192 * case of compression.
 6193 *
 6194 * If this is a reservation and the block group has become read only we cannot
 6195 * make the reservation and return -EAGAIN, otherwise this function always
 6196 * succeeds.
 6197 */
 6198static int btrfs_update_reserved_bytes(struct btrfs_block_group_cache *cache,
 6199				       u64 num_bytes, int reserve, int delalloc)
 6200{
 6201	struct btrfs_space_info *space_info = cache->space_info;
 6202	int ret = 0;
 6203
 6204	spin_lock(&space_info->lock);
 6205	spin_lock(&cache->lock);
 6206	if (reserve != RESERVE_FREE) {
 6207		if (cache->ro) {
 6208			ret = -EAGAIN;
 6209		} else {
 6210			cache->reserved += num_bytes;
 6211			space_info->bytes_reserved += num_bytes;
 6212			if (reserve == RESERVE_ALLOC) {
 6213				trace_btrfs_space_reservation(cache->fs_info,
 6214						"space_info", space_info->flags,
 6215						num_bytes, 0);
 6216				space_info->bytes_may_use -= num_bytes;
 6217			}
 6218
 6219			if (delalloc)
 6220				cache->delalloc_bytes += num_bytes;
 6221		}
 6222	} else {
 6223		if (cache->ro)
 6224			space_info->bytes_readonly += num_bytes;
 6225		cache->reserved -= num_bytes;
 6226		space_info->bytes_reserved -= num_bytes;
 6227
 6228		if (delalloc)
 6229			cache->delalloc_bytes -= num_bytes;
 6230	}
 6231	spin_unlock(&cache->lock);
 6232	spin_unlock(&space_info->lock);
 6233	return ret;
 6234}
 6235
 6236void btrfs_prepare_extent_commit(struct btrfs_trans_handle *trans,
 6237				struct btrfs_root *root)
 6238{
 6239	struct btrfs_fs_info *fs_info = root->fs_info;
 6240	struct btrfs_caching_control *next;
 6241	struct btrfs_caching_control *caching_ctl;
 6242	struct btrfs_block_group_cache *cache;
 6243
 6244	down_write(&fs_info->commit_root_sem);
 6245
 6246	list_for_each_entry_safe(caching_ctl, next,
 6247				 &fs_info->caching_block_groups, list) {
 6248		cache = caching_ctl->block_group;
 6249		if (block_group_cache_done(cache)) {
 6250			cache->last_byte_to_unpin = (u64)-1;
 6251			list_del_init(&caching_ctl->list);
 6252			put_caching_control(caching_ctl);
 6253		} else {
 6254			cache->last_byte_to_unpin = caching_ctl->progress;
 6255		}
 6256	}
 6257
 6258	if (fs_info->pinned_extents == &fs_info->freed_extents[0])
 6259		fs_info->pinned_extents = &fs_info->freed_extents[1];
 6260	else
 6261		fs_info->pinned_extents = &fs_info->freed_extents[0];
 6262
 6263	up_write(&fs_info->commit_root_sem);
 6264
 6265	update_global_block_rsv(fs_info);
 6266}
 6267
 6268/*
 6269 * Returns the free cluster for the given space info and sets empty_cluster to
 6270 * what it should be based on the mount options.
 6271 */
 6272static struct btrfs_free_cluster *
 6273fetch_cluster_info(struct btrfs_root *root, struct btrfs_space_info *space_info,
 6274		   u64 *empty_cluster)
 6275{
 6276	struct btrfs_free_cluster *ret = NULL;
 6277	bool ssd = btrfs_test_opt(root, SSD);
 6278
 6279	*empty_cluster = 0;
 6280	if (btrfs_mixed_space_info(space_info))
 6281		return ret;
 6282
 6283	if (ssd)
 6284		*empty_cluster = SZ_2M;
 6285	if (space_info->flags & BTRFS_BLOCK_GROUP_METADATA) {
 6286		ret = &root->fs_info->meta_alloc_cluster;
 6287		if (!ssd)
 
 
 6288			*empty_cluster = SZ_64K;
 6289	} else if ((space_info->flags & BTRFS_BLOCK_GROUP_DATA) && ssd) {
 6290		ret = &root->fs_info->data_alloc_cluster;
 
 
 6291	}
 6292
 6293	return ret;
 6294}
 6295
 6296static int unpin_extent_range(struct btrfs_root *root, u64 start, u64 end,
 
 6297			      const bool return_free_space)
 6298{
 6299	struct btrfs_fs_info *fs_info = root->fs_info;
 6300	struct btrfs_block_group_cache *cache = NULL;
 6301	struct btrfs_space_info *space_info;
 6302	struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
 6303	struct btrfs_free_cluster *cluster = NULL;
 6304	u64 len;
 6305	u64 total_unpinned = 0;
 6306	u64 empty_cluster = 0;
 6307	bool readonly;
 
 6308
 6309	while (start <= end) {
 6310		readonly = false;
 6311		if (!cache ||
 6312		    start >= cache->key.objectid + cache->key.offset) {
 6313			if (cache)
 6314				btrfs_put_block_group(cache);
 6315			total_unpinned = 0;
 6316			cache = btrfs_lookup_block_group(fs_info, start);
 6317			BUG_ON(!cache); /* Logic error */
 
 
 
 
 6318
 6319			cluster = fetch_cluster_info(root,
 6320						     cache->space_info,
 6321						     &empty_cluster);
 6322			empty_cluster <<= 1;
 6323		}
 6324
 6325		len = cache->key.objectid + cache->key.offset - start;
 6326		len = min(len, end + 1 - start);
 6327
 6328		if (start < cache->last_byte_to_unpin) {
 6329			len = min(len, cache->last_byte_to_unpin - start);
 6330			if (return_free_space)
 6331				btrfs_add_free_space(cache, start, len);
 6332		}
 6333
 6334		start += len;
 6335		total_unpinned += len;
 6336		space_info = cache->space_info;
 6337
 6338		/*
 6339		 * If this space cluster has been marked as fragmented and we've
 6340		 * unpinned enough in this block group to potentially allow a
 6341		 * cluster to be created inside of it go ahead and clear the
 6342		 * fragmented check.
 6343		 */
 6344		if (cluster && cluster->fragmented &&
 6345		    total_unpinned > empty_cluster) {
 6346			spin_lock(&cluster->lock);
 6347			cluster->fragmented = 0;
 6348			spin_unlock(&cluster->lock);
 6349		}
 6350
 6351		spin_lock(&space_info->lock);
 6352		spin_lock(&cache->lock);
 6353		cache->pinned -= len;
 6354		space_info->bytes_pinned -= len;
 6355		space_info->max_extent_size = 0;
 6356		percpu_counter_add(&space_info->total_bytes_pinned, -len);
 6357		if (cache->ro) {
 6358			space_info->bytes_readonly += len;
 6359			readonly = true;
 
 
 
 
 
 6360		}
 6361		spin_unlock(&cache->lock);
 6362		if (!readonly && global_rsv->space_info == space_info) {
 
 6363			spin_lock(&global_rsv->lock);
 6364			if (!global_rsv->full) {
 6365				len = min(len, global_rsv->size -
 6366					  global_rsv->reserved);
 6367				global_rsv->reserved += len;
 6368				space_info->bytes_may_use += len;
 
 
 6369				if (global_rsv->reserved >= global_rsv->size)
 6370					global_rsv->full = 1;
 
 6371			}
 6372			spin_unlock(&global_rsv->lock);
 6373		}
 
 
 
 6374		spin_unlock(&space_info->lock);
 6375	}
 6376
 6377	if (cache)
 6378		btrfs_put_block_group(cache);
 6379	return 0;
 
 6380}
 6381
 6382int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
 6383			       struct btrfs_root *root)
 6384{
 6385	struct btrfs_fs_info *fs_info = root->fs_info;
 6386	struct btrfs_block_group_cache *block_group, *tmp;
 6387	struct list_head *deleted_bgs;
 6388	struct extent_io_tree *unpin;
 6389	u64 start;
 6390	u64 end;
 6391	int ret;
 6392
 6393	if (fs_info->pinned_extents == &fs_info->freed_extents[0])
 6394		unpin = &fs_info->freed_extents[1];
 6395	else
 6396		unpin = &fs_info->freed_extents[0];
 6397
 6398	while (!trans->aborted) {
 6399		mutex_lock(&fs_info->unused_bg_unpin_mutex);
 6400		ret = find_first_extent_bit(unpin, 0, &start, &end,
 6401					    EXTENT_DIRTY, NULL);
 6402		if (ret) {
 6403			mutex_unlock(&fs_info->unused_bg_unpin_mutex);
 6404			break;
 6405		}
 6406
 6407		if (btrfs_test_opt(root, DISCARD))
 6408			ret = btrfs_discard_extent(root, start,
 6409						   end + 1 - start, NULL);
 6410
 6411		clear_extent_dirty(unpin, start, end, GFP_NOFS);
 6412		unpin_extent_range(root, start, end, true);
 
 6413		mutex_unlock(&fs_info->unused_bg_unpin_mutex);
 
 6414		cond_resched();
 6415	}
 6416
 
 
 
 
 
 6417	/*
 6418	 * Transaction is finished.  We don't need the lock anymore.  We
 6419	 * do need to clean up the block groups in case of a transaction
 6420	 * abort.
 6421	 */
 6422	deleted_bgs = &trans->transaction->deleted_bgs;
 6423	list_for_each_entry_safe(block_group, tmp, deleted_bgs, bg_list) {
 6424		u64 trimmed = 0;
 6425
 6426		ret = -EROFS;
 6427		if (!trans->aborted)
 6428			ret = btrfs_discard_extent(root,
 6429						   block_group->key.objectid,
 6430						   block_group->key.offset,
 6431						   &trimmed);
 6432
 6433		list_del_init(&block_group->bg_list);
 6434		btrfs_put_block_group_trimming(block_group);
 6435		btrfs_put_block_group(block_group);
 6436
 6437		if (ret) {
 6438			const char *errstr = btrfs_decode_error(ret);
 6439			btrfs_warn(fs_info,
 6440				   "Discard failed while removing blockgroup: errno=%d %s\n",
 6441				   ret, errstr);
 6442		}
 6443	}
 6444
 6445	return 0;
 6446}
 6447
 6448static void add_pinned_bytes(struct btrfs_fs_info *fs_info, u64 num_bytes,
 6449			     u64 owner, u64 root_objectid)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6450{
 6451	struct btrfs_space_info *space_info;
 6452	u64 flags;
 
 
 
 
 6453
 6454	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 6455		if (root_objectid == BTRFS_CHUNK_TREE_OBJECTID)
 6456			flags = BTRFS_BLOCK_GROUP_SYSTEM;
 6457		else
 6458			flags = BTRFS_BLOCK_GROUP_METADATA;
 6459	} else {
 6460		flags = BTRFS_BLOCK_GROUP_DATA;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6461	}
 6462
 6463	space_info = __find_space_info(fs_info, flags);
 6464	BUG_ON(!space_info); /* Logic bug */
 6465	percpu_counter_add(&space_info->total_bytes_pinned, num_bytes);
 
 
 
 
 
 
 
 
 6466}
 6467
 
 
 
 
 
 
 6468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6469static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
 6470				struct btrfs_root *root,
 6471				struct btrfs_delayed_ref_node *node, u64 parent,
 6472				u64 root_objectid, u64 owner_objectid,
 6473				u64 owner_offset, int refs_to_drop,
 6474				struct btrfs_delayed_extent_op *extent_op)
 6475{
 
 6476	struct btrfs_key key;
 6477	struct btrfs_path *path;
 6478	struct btrfs_fs_info *info = root->fs_info;
 6479	struct btrfs_root *extent_root = info->extent_root;
 6480	struct extent_buffer *leaf;
 6481	struct btrfs_extent_item *ei;
 6482	struct btrfs_extent_inline_ref *iref;
 6483	int ret;
 6484	int is_data;
 6485	int extent_slot = 0;
 6486	int found_extent = 0;
 6487	int num_to_del = 1;
 
 6488	u32 item_size;
 6489	u64 refs;
 6490	u64 bytenr = node->bytenr;
 6491	u64 num_bytes = node->num_bytes;
 6492	int last_ref = 0;
 6493	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
 6494						 SKINNY_METADATA);
 
 
 
 
 6495
 6496	path = btrfs_alloc_path();
 6497	if (!path)
 6498		return -ENOMEM;
 6499
 6500	path->reada = READA_FORWARD;
 6501	path->leave_spinning = 1;
 6502
 6503	is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
 6504	BUG_ON(!is_data && refs_to_drop != 1);
 
 
 
 
 
 
 
 
 6505
 6506	if (is_data)
 6507		skinny_metadata = 0;
 6508
 6509	ret = lookup_extent_backref(trans, extent_root, path, &iref,
 6510				    bytenr, num_bytes, parent,
 6511				    root_objectid, owner_objectid,
 6512				    owner_offset);
 6513	if (ret == 0) {
 
 
 
 
 
 
 
 6514		extent_slot = path->slots[0];
 6515		while (extent_slot >= 0) {
 6516			btrfs_item_key_to_cpu(path->nodes[0], &key,
 6517					      extent_slot);
 6518			if (key.objectid != bytenr)
 6519				break;
 6520			if (key.type == BTRFS_EXTENT_ITEM_KEY &&
 6521			    key.offset == num_bytes) {
 6522				found_extent = 1;
 6523				break;
 6524			}
 6525			if (key.type == BTRFS_METADATA_ITEM_KEY &&
 6526			    key.offset == owner_objectid) {
 6527				found_extent = 1;
 6528				break;
 6529			}
 
 
 6530			if (path->slots[0] - extent_slot > 5)
 6531				break;
 6532			extent_slot--;
 6533		}
 6534#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 6535		item_size = btrfs_item_size_nr(path->nodes[0], extent_slot);
 6536		if (found_extent && item_size < sizeof(*ei))
 6537			found_extent = 0;
 6538#endif
 6539		if (!found_extent) {
 6540			BUG_ON(iref);
 
 
 
 
 
 
 
 6541			ret = remove_extent_backref(trans, extent_root, path,
 6542						    NULL, refs_to_drop,
 6543						    is_data, &last_ref);
 6544			if (ret) {
 6545				btrfs_abort_transaction(trans, extent_root, ret);
 6546				goto out;
 6547			}
 6548			btrfs_release_path(path);
 6549			path->leave_spinning = 1;
 6550
 
 6551			key.objectid = bytenr;
 6552			key.type = BTRFS_EXTENT_ITEM_KEY;
 6553			key.offset = num_bytes;
 6554
 6555			if (!is_data && skinny_metadata) {
 6556				key.type = BTRFS_METADATA_ITEM_KEY;
 6557				key.offset = owner_objectid;
 6558			}
 6559
 6560			ret = btrfs_search_slot(trans, extent_root,
 6561						&key, path, -1, 1);
 6562			if (ret > 0 && skinny_metadata && path->slots[0]) {
 6563				/*
 6564				 * Couldn't find our skinny metadata item,
 6565				 * see if we have ye olde extent item.
 6566				 */
 6567				path->slots[0]--;
 6568				btrfs_item_key_to_cpu(path->nodes[0], &key,
 6569						      path->slots[0]);
 6570				if (key.objectid == bytenr &&
 6571				    key.type == BTRFS_EXTENT_ITEM_KEY &&
 6572				    key.offset == num_bytes)
 6573					ret = 0;
 6574			}
 6575
 6576			if (ret > 0 && skinny_metadata) {
 6577				skinny_metadata = false;
 6578				key.objectid = bytenr;
 6579				key.type = BTRFS_EXTENT_ITEM_KEY;
 6580				key.offset = num_bytes;
 6581				btrfs_release_path(path);
 6582				ret = btrfs_search_slot(trans, extent_root,
 6583							&key, path, -1, 1);
 6584			}
 6585
 6586			if (ret) {
 6587				btrfs_err(info, "umm, got %d back from search, was looking for %llu",
 6588					ret, bytenr);
 6589				if (ret > 0)
 6590					btrfs_print_leaf(extent_root,
 6591							 path->nodes[0]);
 
 
 6592			}
 6593			if (ret < 0) {
 6594				btrfs_abort_transaction(trans, extent_root, ret);
 6595				goto out;
 6596			}
 6597			extent_slot = path->slots[0];
 6598		}
 6599	} else if (WARN_ON(ret == -ENOENT)) {
 6600		btrfs_print_leaf(extent_root, path->nodes[0]);
 6601		btrfs_err(info,
 6602			"unable to find ref byte nr %llu parent %llu root %llu  owner %llu offset %llu",
 6603			bytenr, parent, root_objectid, owner_objectid,
 6604			owner_offset);
 6605		btrfs_abort_transaction(trans, extent_root, ret);
 6606		goto out;
 6607	} else {
 6608		btrfs_abort_transaction(trans, extent_root, ret);
 6609		goto out;
 6610	}
 6611
 6612	leaf = path->nodes[0];
 6613	item_size = btrfs_item_size_nr(leaf, extent_slot);
 6614#ifdef BTRFS_COMPAT_EXTENT_TREE_V0
 6615	if (item_size < sizeof(*ei)) {
 6616		BUG_ON(found_extent || extent_slot != path->slots[0]);
 6617		ret = convert_extent_item_v0(trans, extent_root, path,
 6618					     owner_objectid, 0);
 6619		if (ret < 0) {
 6620			btrfs_abort_transaction(trans, extent_root, ret);
 6621			goto out;
 6622		}
 6623
 6624		btrfs_release_path(path);
 6625		path->leave_spinning = 1;
 6626
 6627		key.objectid = bytenr;
 6628		key.type = BTRFS_EXTENT_ITEM_KEY;
 6629		key.offset = num_bytes;
 6630
 6631		ret = btrfs_search_slot(trans, extent_root, &key, path,
 6632					-1, 1);
 6633		if (ret) {
 6634			btrfs_err(info, "umm, got %d back from search, was looking for %llu",
 6635				ret, bytenr);
 6636			btrfs_print_leaf(extent_root, path->nodes[0]);
 6637		}
 6638		if (ret < 0) {
 6639			btrfs_abort_transaction(trans, extent_root, ret);
 6640			goto out;
 6641		}
 6642
 6643		extent_slot = path->slots[0];
 6644		leaf = path->nodes[0];
 6645		item_size = btrfs_item_size_nr(leaf, extent_slot);
 6646	}
 6647#endif
 6648	BUG_ON(item_size < sizeof(*ei));
 6649	ei = btrfs_item_ptr(leaf, extent_slot,
 6650			    struct btrfs_extent_item);
 6651	if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID &&
 6652	    key.type == BTRFS_EXTENT_ITEM_KEY) {
 6653		struct btrfs_tree_block_info *bi;
 6654		BUG_ON(item_size < sizeof(*ei) + sizeof(*bi));
 
 
 
 
 
 
 
 
 
 6655		bi = (struct btrfs_tree_block_info *)(ei + 1);
 6656		WARN_ON(owner_objectid != btrfs_tree_block_level(leaf, bi));
 6657	}
 6658
 6659	refs = btrfs_extent_refs(leaf, ei);
 6660	if (refs < refs_to_drop) {
 6661		btrfs_err(info, "trying to drop %d refs but we only have %Lu "
 6662			  "for bytenr %Lu", refs_to_drop, refs, bytenr);
 6663		ret = -EINVAL;
 6664		btrfs_abort_transaction(trans, extent_root, ret);
 6665		goto out;
 6666	}
 6667	refs -= refs_to_drop;
 6668
 6669	if (refs > 0) {
 6670		if (extent_op)
 6671			__run_delayed_extent_op(extent_op, leaf, ei);
 6672		/*
 6673		 * In the case of inline back ref, reference count will
 6674		 * be updated by remove_extent_backref
 6675		 */
 6676		if (iref) {
 6677			BUG_ON(!found_extent);
 
 
 
 
 
 
 6678		} else {
 6679			btrfs_set_extent_refs(leaf, ei, refs);
 6680			btrfs_mark_buffer_dirty(leaf);
 6681		}
 6682		if (found_extent) {
 6683			ret = remove_extent_backref(trans, extent_root, path,
 6684						    iref, refs_to_drop,
 6685						    is_data, &last_ref);
 6686			if (ret) {
 6687				btrfs_abort_transaction(trans, extent_root, ret);
 6688				goto out;
 6689			}
 6690		}
 6691		add_pinned_bytes(root->fs_info, -num_bytes, owner_objectid,
 6692				 root_objectid);
 6693	} else {
 
 
 
 
 
 
 
 
 
 6694		if (found_extent) {
 6695			BUG_ON(is_data && refs_to_drop !=
 6696			       extent_data_ref_count(path, iref));
 
 
 
 
 
 
 
 6697			if (iref) {
 6698				BUG_ON(path->slots[0] != extent_slot);
 
 
 
 
 
 
 
 6699			} else {
 6700				BUG_ON(path->slots[0] != extent_slot + 1);
 
 
 
 
 
 
 
 
 
 
 
 
 6701				path->slots[0] = extent_slot;
 6702				num_to_del = 2;
 6703			}
 6704		}
 
 
 
 
 
 
 
 
 
 
 6705
 6706		last_ref = 1;
 6707		ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
 6708				      num_to_del);
 6709		if (ret) {
 6710			btrfs_abort_transaction(trans, extent_root, ret);
 6711			goto out;
 6712		}
 6713		btrfs_release_path(path);
 6714
 6715		if (is_data) {
 6716			ret = btrfs_del_csums(trans, root, bytenr, num_bytes);
 6717			if (ret) {
 6718				btrfs_abort_transaction(trans, extent_root, ret);
 6719				goto out;
 6720			}
 6721		}
 6722
 6723		ret = add_to_free_space_tree(trans, root->fs_info, bytenr,
 6724					     num_bytes);
 6725		if (ret) {
 6726			btrfs_abort_transaction(trans, extent_root, ret);
 6727			goto out;
 6728		}
 6729
 6730		ret = update_block_group(trans, root, bytenr, num_bytes, 0);
 6731		if (ret) {
 6732			btrfs_abort_transaction(trans, extent_root, ret);
 6733			goto out;
 6734		}
 6735	}
 6736	btrfs_release_path(path);
 6737
 6738out:
 6739	btrfs_free_path(path);
 6740	return ret;
 6741}
 6742
 6743/*
 6744 * when we free an block, it is possible (and likely) that we free the last
 6745 * delayed ref for that extent as well.  This searches the delayed ref tree for
 6746 * a given extent, and if there are no other delayed refs to be processed, it
 6747 * removes it from the tree.
 6748 */
 6749static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
 6750				      struct btrfs_root *root, u64 bytenr)
 6751{
 
 6752	struct btrfs_delayed_ref_head *head;
 6753	struct btrfs_delayed_ref_root *delayed_refs;
 6754	int ret = 0;
 6755
 6756	delayed_refs = &trans->transaction->delayed_refs;
 6757	spin_lock(&delayed_refs->lock);
 6758	head = btrfs_find_delayed_ref_head(trans, bytenr);
 6759	if (!head)
 6760		goto out_delayed_unlock;
 6761
 6762	spin_lock(&head->lock);
 6763	if (!list_empty(&head->ref_list))
 6764		goto out;
 6765
 6766	if (head->extent_op) {
 6767		if (!head->must_insert_reserved)
 6768			goto out;
 6769		btrfs_free_delayed_extent_op(head->extent_op);
 6770		head->extent_op = NULL;
 6771	}
 6772
 6773	/*
 6774	 * waiting for the lock here would deadlock.  If someone else has it
 6775	 * locked they are already in the process of dropping it anyway
 6776	 */
 6777	if (!mutex_trylock(&head->mutex))
 6778		goto out;
 6779
 6780	/*
 6781	 * at this point we have a head with no other entries.  Go
 6782	 * ahead and process it.
 6783	 */
 6784	head->node.in_tree = 0;
 6785	rb_erase(&head->href_node, &delayed_refs->href_root);
 6786
 6787	atomic_dec(&delayed_refs->num_entries);
 6788
 6789	/*
 6790	 * we don't take a ref on the node because we're removing it from the
 6791	 * tree, so we just steal the ref the tree was holding.
 6792	 */
 6793	delayed_refs->num_heads--;
 6794	if (head->processing == 0)
 6795		delayed_refs->num_heads_ready--;
 6796	head->processing = 0;
 6797	spin_unlock(&head->lock);
 6798	spin_unlock(&delayed_refs->lock);
 6799
 6800	BUG_ON(head->extent_op);
 6801	if (head->must_insert_reserved)
 6802		ret = 1;
 6803
 
 6804	mutex_unlock(&head->mutex);
 6805	btrfs_put_delayed_ref(&head->node);
 6806	return ret;
 6807out:
 6808	spin_unlock(&head->lock);
 6809
 6810out_delayed_unlock:
 6811	spin_unlock(&delayed_refs->lock);
 6812	return 0;
 6813}
 6814
 6815void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
 6816			   struct btrfs_root *root,
 6817			   struct extent_buffer *buf,
 6818			   u64 parent, int last_ref)
 6819{
 6820	int pin = 1;
 6821	int ret;
 6822
 6823	if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
 6824		ret = btrfs_add_delayed_tree_ref(root->fs_info, trans,
 6825					buf->start, buf->len,
 6826					parent, root->root_key.objectid,
 6827					btrfs_header_level(buf),
 6828					BTRFS_DROP_DELAYED_REF, NULL);
 6829		BUG_ON(ret); /* -ENOMEM */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6830	}
 6831
 6832	if (!last_ref)
 6833		return;
 6834
 6835	if (btrfs_header_generation(buf) == trans->transid) {
 6836		struct btrfs_block_group_cache *cache;
 6837
 6838		if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
 6839			ret = check_ref_cleanup(trans, root, buf->start);
 6840			if (!ret)
 6841				goto out;
 6842		}
 6843
 6844		cache = btrfs_lookup_block_group(root->fs_info, buf->start);
 6845
 6846		if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
 6847			pin_down_extent(root, cache, buf->start, buf->len, 1);
 6848			btrfs_put_block_group(cache);
 6849			goto out;
 6850		}
 6851
 6852		WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6853
 6854		btrfs_add_free_space(cache, buf->start, buf->len);
 6855		btrfs_update_reserved_bytes(cache, buf->len, RESERVE_FREE, 0);
 6856		btrfs_put_block_group(cache);
 6857		trace_btrfs_reserved_extent_free(root, buf->start, buf->len);
 6858		pin = 0;
 6859	}
 
 
 
 
 
 
 
 
 6860out:
 6861	if (pin)
 6862		add_pinned_bytes(root->fs_info, buf->len,
 6863				 btrfs_header_level(buf),
 6864				 root->root_key.objectid);
 6865
 6866	/*
 6867	 * Deleting the buffer, clear the corrupt flag since it doesn't matter
 6868	 * anymore.
 6869	 */
 6870	clear_bit(EXTENT_BUFFER_CORRUPT, &buf->bflags);
 
 6871}
 6872
 6873/* Can return -ENOMEM */
 6874int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root *root,
 6875		      u64 bytenr, u64 num_bytes, u64 parent, u64 root_objectid,
 6876		      u64 owner, u64 offset)
 6877{
 
 6878	int ret;
 6879	struct btrfs_fs_info *fs_info = root->fs_info;
 6880
 6881	if (btrfs_test_is_dummy_root(root))
 6882		return 0;
 6883
 6884	add_pinned_bytes(root->fs_info, num_bytes, owner, root_objectid);
 6885
 6886	/*
 6887	 * tree log blocks never actually go into the extent allocation
 6888	 * tree, just update pinning info and exit early.
 6889	 */
 6890	if (root_objectid == BTRFS_TREE_LOG_OBJECTID) {
 6891		WARN_ON(owner >= BTRFS_FIRST_FREE_OBJECTID);
 6892		/* unlocks the pinned mutex */
 6893		btrfs_pin_extent(root, bytenr, num_bytes, 1);
 6894		ret = 0;
 6895	} else if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 6896		ret = btrfs_add_delayed_tree_ref(fs_info, trans, bytenr,
 6897					num_bytes,
 6898					parent, root_objectid, (int)owner,
 6899					BTRFS_DROP_DELAYED_REF, NULL);
 6900	} else {
 6901		ret = btrfs_add_delayed_data_ref(fs_info, trans, bytenr,
 6902						num_bytes,
 6903						parent, root_objectid, owner,
 6904						offset, 0,
 6905						BTRFS_DROP_DELAYED_REF, NULL);
 6906	}
 6907	return ret;
 6908}
 6909
 6910/*
 6911 * when we wait for progress in the block group caching, its because
 6912 * our allocation attempt failed at least once.  So, we must sleep
 6913 * and let some progress happen before we try again.
 6914 *
 6915 * This function will sleep at least once waiting for new free space to
 6916 * show up, and then it will check the block group free space numbers
 6917 * for our min num_bytes.  Another option is to have it go ahead
 6918 * and look in the rbtree for a free extent of a given size, but this
 6919 * is a good start.
 6920 *
 6921 * Callers of this must check if cache->cached == BTRFS_CACHE_ERROR before using
 6922 * any of the information in this block group.
 6923 */
 6924static noinline void
 6925wait_block_group_cache_progress(struct btrfs_block_group_cache *cache,
 6926				u64 num_bytes)
 6927{
 6928	struct btrfs_caching_control *caching_ctl;
 6929
 6930	caching_ctl = get_caching_control(cache);
 6931	if (!caching_ctl)
 6932		return;
 6933
 6934	wait_event(caching_ctl->wait, block_group_cache_done(cache) ||
 6935		   (cache->free_space_ctl->free_space >= num_bytes));
 6936
 6937	put_caching_control(caching_ctl);
 6938}
 6939
 6940static noinline int
 6941wait_block_group_cache_done(struct btrfs_block_group_cache *cache)
 6942{
 6943	struct btrfs_caching_control *caching_ctl;
 6944	int ret = 0;
 6945
 6946	caching_ctl = get_caching_control(cache);
 6947	if (!caching_ctl)
 6948		return (cache->cached == BTRFS_CACHE_ERROR) ? -EIO : 0;
 6949
 6950	wait_event(caching_ctl->wait, block_group_cache_done(cache));
 6951	if (cache->cached == BTRFS_CACHE_ERROR)
 6952		ret = -EIO;
 6953	put_caching_control(caching_ctl);
 6954	return ret;
 6955}
 6956
 6957int __get_raid_index(u64 flags)
 6958{
 6959	if (flags & BTRFS_BLOCK_GROUP_RAID10)
 6960		return BTRFS_RAID_RAID10;
 6961	else if (flags & BTRFS_BLOCK_GROUP_RAID1)
 6962		return BTRFS_RAID_RAID1;
 6963	else if (flags & BTRFS_BLOCK_GROUP_DUP)
 6964		return BTRFS_RAID_DUP;
 6965	else if (flags & BTRFS_BLOCK_GROUP_RAID0)
 6966		return BTRFS_RAID_RAID0;
 6967	else if (flags & BTRFS_BLOCK_GROUP_RAID5)
 6968		return BTRFS_RAID_RAID5;
 6969	else if (flags & BTRFS_BLOCK_GROUP_RAID6)
 6970		return BTRFS_RAID_RAID6;
 6971
 6972	return BTRFS_RAID_SINGLE; /* BTRFS_BLOCK_GROUP_SINGLE */
 6973}
 6974
 6975int get_block_group_index(struct btrfs_block_group_cache *cache)
 6976{
 6977	return __get_raid_index(cache->flags);
 6978}
 
 6979
 6980static const char *btrfs_raid_type_names[BTRFS_NR_RAID_TYPES] = {
 6981	[BTRFS_RAID_RAID10]	= "raid10",
 6982	[BTRFS_RAID_RAID1]	= "raid1",
 6983	[BTRFS_RAID_DUP]	= "dup",
 6984	[BTRFS_RAID_RAID0]	= "raid0",
 6985	[BTRFS_RAID_SINGLE]	= "single",
 6986	[BTRFS_RAID_RAID5]	= "raid5",
 6987	[BTRFS_RAID_RAID6]	= "raid6",
 6988};
 6989
 6990static const char *get_raid_name(enum btrfs_raid_types type)
 6991{
 6992	if (type >= BTRFS_NR_RAID_TYPES)
 6993		return NULL;
 6994
 6995	return btrfs_raid_type_names[type];
 6996}
 
 
 6997
 6998enum btrfs_loop_type {
 6999	LOOP_CACHING_NOWAIT = 0,
 7000	LOOP_CACHING_WAIT = 1,
 7001	LOOP_ALLOC_CHUNK = 2,
 7002	LOOP_NO_EMPTY_SIZE = 3,
 7003};
 7004
 7005static inline void
 7006btrfs_lock_block_group(struct btrfs_block_group_cache *cache,
 7007		       int delalloc)
 7008{
 7009	if (delalloc)
 7010		down_read(&cache->data_rwsem);
 7011}
 7012
 7013static inline void
 7014btrfs_grab_block_group(struct btrfs_block_group_cache *cache,
 7015		       int delalloc)
 7016{
 7017	btrfs_get_block_group(cache);
 7018	if (delalloc)
 7019		down_read(&cache->data_rwsem);
 7020}
 7021
 7022static struct btrfs_block_group_cache *
 7023btrfs_lock_cluster(struct btrfs_block_group_cache *block_group,
 7024		   struct btrfs_free_cluster *cluster,
 7025		   int delalloc)
 
 7026{
 7027	struct btrfs_block_group_cache *used_bg = NULL;
 7028	bool locked = false;
 7029again:
 7030	spin_lock(&cluster->refill_lock);
 7031	if (locked) {
 7032		if (used_bg == cluster->block_group)
 
 
 
 
 7033			return used_bg;
 7034
 7035		up_read(&used_bg->data_rwsem);
 7036		btrfs_put_block_group(used_bg);
 7037	}
 7038
 7039	used_bg = cluster->block_group;
 7040	if (!used_bg)
 7041		return NULL;
 7042
 7043	if (used_bg == block_group)
 7044		return used_bg;
 7045
 7046	btrfs_get_block_group(used_bg);
 7047
 7048	if (!delalloc)
 7049		return used_bg;
 7050
 7051	if (down_read_trylock(&used_bg->data_rwsem))
 7052		return used_bg;
 
 7053
 7054	spin_unlock(&cluster->refill_lock);
 7055	down_read(&used_bg->data_rwsem);
 7056	locked = true;
 7057	goto again;
 7058}
 7059
 7060static inline void
 7061btrfs_release_block_group(struct btrfs_block_group_cache *cache,
 7062			 int delalloc)
 7063{
 7064	if (delalloc)
 7065		up_read(&cache->data_rwsem);
 7066	btrfs_put_block_group(cache);
 7067}
 7068
 7069/*
 7070 * walks the btree of allocated extents and find a hole of a given size.
 7071 * The key ins is changed to record the hole:
 7072 * ins->objectid == start position
 7073 * ins->flags = BTRFS_EXTENT_ITEM_KEY
 7074 * ins->offset == the size of the hole.
 7075 * Any available blocks before search_start are skipped.
 7076 *
 7077 * If there is no suitable free space, we will record the max size of
 7078 * the free space extent currently.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7079 */
 7080static noinline int find_free_extent(struct btrfs_root *orig_root,
 7081				     u64 num_bytes, u64 empty_size,
 7082				     u64 hint_byte, struct btrfs_key *ins,
 7083				     u64 flags, int delalloc)
 7084{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7085	int ret = 0;
 7086	struct btrfs_root *root = orig_root->fs_info->extent_root;
 7087	struct btrfs_free_cluster *last_ptr = NULL;
 7088	struct btrfs_block_group_cache *block_group = NULL;
 7089	u64 search_start = 0;
 7090	u64 max_extent_size = 0;
 7091	u64 empty_cluster = 0;
 7092	struct btrfs_space_info *space_info;
 7093	int loop = 0;
 7094	int index = __get_raid_index(flags);
 7095	int alloc_type = (flags & BTRFS_BLOCK_GROUP_DATA) ?
 7096		RESERVE_ALLOC_NO_ACCOUNT : RESERVE_ALLOC;
 7097	bool failed_cluster_refill = false;
 7098	bool failed_alloc = false;
 7099	bool use_cluster = true;
 7100	bool have_caching_bg = false;
 7101	bool orig_have_caching_bg = false;
 7102	bool full_search = false;
 7103
 7104	WARN_ON(num_bytes < root->sectorsize);
 7105	ins->type = BTRFS_EXTENT_ITEM_KEY;
 7106	ins->objectid = 0;
 7107	ins->offset = 0;
 7108
 7109	trace_find_free_extent(orig_root, num_bytes, empty_size, flags);
 
 
 
 
 
 
 
 
 
 
 
 7110
 7111	space_info = __find_space_info(root->fs_info, flags);
 7112	if (!space_info) {
 7113		btrfs_err(root->fs_info, "No space info for %llu", flags);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7114		return -ENOSPC;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7115	}
 7116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7117	/*
 7118	 * If our free space is heavily fragmented we may not be able to make
 7119	 * big contiguous allocations, so instead of doing the expensive search
 7120	 * for free space, simply return ENOSPC with our max_extent_size so we
 7121	 * can go ahead and search for a more manageable chunk.
 7122	 *
 7123	 * If our max_extent_size is large enough for our allocation simply
 7124	 * disable clustering since we will likely not be able to find enough
 7125	 * space to create a cluster and induce latency trying.
 7126	 */
 7127	if (unlikely(space_info->max_extent_size)) {
 7128		spin_lock(&space_info->lock);
 7129		if (space_info->max_extent_size &&
 7130		    num_bytes > space_info->max_extent_size) {
 7131			ins->offset = space_info->max_extent_size;
 7132			spin_unlock(&space_info->lock);
 7133			return -ENOSPC;
 7134		} else if (space_info->max_extent_size) {
 7135			use_cluster = false;
 7136		}
 7137		spin_unlock(&space_info->lock);
 7138	}
 7139
 7140	last_ptr = fetch_cluster_info(orig_root, space_info, &empty_cluster);
 7141	if (last_ptr) {
 
 
 
 7142		spin_lock(&last_ptr->lock);
 7143		if (last_ptr->block_group)
 7144			hint_byte = last_ptr->window_start;
 7145		if (last_ptr->fragmented) {
 7146			/*
 7147			 * We still set window_start so we can keep track of the
 7148			 * last place we found an allocation to try and save
 7149			 * some time.
 7150			 */
 7151			hint_byte = last_ptr->window_start;
 7152			use_cluster = false;
 7153		}
 7154		spin_unlock(&last_ptr->lock);
 7155	}
 7156
 7157	search_start = max(search_start, first_logical_byte(root, 0));
 7158	search_start = max(search_start, hint_byte);
 7159	if (search_start == hint_byte) {
 7160		block_group = btrfs_lookup_block_group(root->fs_info,
 7161						       search_start);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7162		/*
 7163		 * we don't want to use the block group if it doesn't match our
 7164		 * allocation bits, or if its not cached.
 7165		 *
 7166		 * However if we are re-searching with an ideal block group
 7167		 * picked out then we don't care that the block group is cached.
 7168		 */
 7169		if (block_group && block_group_bits(block_group, flags) &&
 7170		    block_group->cached != BTRFS_CACHE_NO) {
 7171			down_read(&space_info->groups_sem);
 7172			if (list_empty(&block_group->list) ||
 7173			    block_group->ro) {
 7174				/*
 7175				 * someone is removing this block group,
 7176				 * we can't jump into the have_block_group
 7177				 * target because our list pointers are not
 7178				 * valid
 7179				 */
 7180				btrfs_put_block_group(block_group);
 7181				up_read(&space_info->groups_sem);
 7182			} else {
 7183				index = get_block_group_index(block_group);
 7184				btrfs_lock_block_group(block_group, delalloc);
 
 
 
 7185				goto have_block_group;
 7186			}
 7187		} else if (block_group) {
 7188			btrfs_put_block_group(block_group);
 7189		}
 7190	}
 7191search:
 7192	have_caching_bg = false;
 7193	if (index == 0 || index == __get_raid_index(flags))
 
 
 7194		full_search = true;
 7195	down_read(&space_info->groups_sem);
 7196	list_for_each_entry(block_group, &space_info->block_groups[index],
 7197			    list) {
 7198		u64 offset;
 7199		int cached;
 
 
 
 
 
 
 
 
 
 7200
 7201		btrfs_grab_block_group(block_group, delalloc);
 7202		search_start = block_group->key.objectid;
 7203
 7204		/*
 7205		 * this can happen if we end up cycling through all the
 7206		 * raid types, but we want to make sure we only allocate
 7207		 * for the proper type.
 7208		 */
 7209		if (!block_group_bits(block_group, flags)) {
 7210		    u64 extra = BTRFS_BLOCK_GROUP_DUP |
 7211				BTRFS_BLOCK_GROUP_RAID1 |
 7212				BTRFS_BLOCK_GROUP_RAID5 |
 7213				BTRFS_BLOCK_GROUP_RAID6 |
 7214				BTRFS_BLOCK_GROUP_RAID10;
 7215
 7216			/*
 7217			 * if they asked for extra copies and this block group
 7218			 * doesn't provide them, bail.  This does allow us to
 7219			 * fill raid0 from raid1.
 7220			 */
 7221			if ((flags & extra) && !(block_group->flags & extra))
 7222				goto loop;
 7223		}
 7224
 7225have_block_group:
 7226		cached = block_group_cache_done(block_group);
 7227		if (unlikely(!cached)) {
 7228			have_caching_bg = true;
 7229			ret = cache_block_group(block_group, 0);
 7230			BUG_ON(ret < 0);
 7231			ret = 0;
 7232		}
 7233
 7234		if (unlikely(block_group->cached == BTRFS_CACHE_ERROR))
 7235			goto loop;
 7236		if (unlikely(block_group->ro))
 7237			goto loop;
 7238
 7239		/*
 7240		 * Ok we want to try and use the cluster allocator, so
 7241		 * lets look there
 7242		 */
 7243		if (last_ptr && use_cluster) {
 7244			struct btrfs_block_group_cache *used_block_group;
 7245			unsigned long aligned_cluster;
 7246			/*
 7247			 * the refill lock keeps out other
 7248			 * people trying to start a new cluster
 
 7249			 */
 7250			used_block_group = btrfs_lock_cluster(block_group,
 7251							      last_ptr,
 7252							      delalloc);
 7253			if (!used_block_group)
 7254				goto refill_cluster;
 7255
 7256			if (used_block_group != block_group &&
 7257			    (used_block_group->ro ||
 7258			     !block_group_bits(used_block_group, flags)))
 7259				goto release_cluster;
 7260
 7261			offset = btrfs_alloc_from_cluster(used_block_group,
 7262						last_ptr,
 7263						num_bytes,
 7264						used_block_group->key.objectid,
 7265						&max_extent_size);
 7266			if (offset) {
 7267				/* we have a block, we're done */
 7268				spin_unlock(&last_ptr->refill_lock);
 7269				trace_btrfs_reserve_extent_cluster(root,
 7270						used_block_group,
 7271						search_start, num_bytes);
 7272				if (used_block_group != block_group) {
 7273					btrfs_release_block_group(block_group,
 7274								  delalloc);
 7275					block_group = used_block_group;
 7276				}
 7277				goto checks;
 7278			}
 7279
 7280			WARN_ON(last_ptr->block_group != used_block_group);
 7281release_cluster:
 7282			/* If we are on LOOP_NO_EMPTY_SIZE, we can't
 7283			 * set up a new clusters, so lets just skip it
 7284			 * and let the allocator find whatever block
 7285			 * it can find.  If we reach this point, we
 7286			 * will have tried the cluster allocator
 7287			 * plenty of times and not have found
 7288			 * anything, so we are likely way too
 7289			 * fragmented for the clustering stuff to find
 7290			 * anything.
 7291			 *
 7292			 * However, if the cluster is taken from the
 7293			 * current block group, release the cluster
 7294			 * first, so that we stand a better chance of
 7295			 * succeeding in the unclustered
 7296			 * allocation.  */
 7297			if (loop >= LOOP_NO_EMPTY_SIZE &&
 7298			    used_block_group != block_group) {
 7299				spin_unlock(&last_ptr->refill_lock);
 7300				btrfs_release_block_group(used_block_group,
 7301							  delalloc);
 7302				goto unclustered_alloc;
 7303			}
 7304
 7305			/*
 7306			 * this cluster didn't work out, free it and
 7307			 * start over
 
 
 
 7308			 */
 7309			btrfs_return_cluster_to_free_space(NULL, last_ptr);
 7310
 7311			if (used_block_group != block_group)
 7312				btrfs_release_block_group(used_block_group,
 7313							  delalloc);
 7314refill_cluster:
 7315			if (loop >= LOOP_NO_EMPTY_SIZE) {
 7316				spin_unlock(&last_ptr->refill_lock);
 7317				goto unclustered_alloc;
 7318			}
 7319
 7320			aligned_cluster = max_t(unsigned long,
 7321						empty_cluster + empty_size,
 7322					      block_group->full_stripe_len);
 7323
 7324			/* allocate a cluster in this block group */
 7325			ret = btrfs_find_space_cluster(root, block_group,
 7326						       last_ptr, search_start,
 7327						       num_bytes,
 7328						       aligned_cluster);
 7329			if (ret == 0) {
 7330				/*
 7331				 * now pull our allocation out of this
 7332				 * cluster
 7333				 */
 7334				offset = btrfs_alloc_from_cluster(block_group,
 7335							last_ptr,
 7336							num_bytes,
 7337							search_start,
 7338							&max_extent_size);
 7339				if (offset) {
 7340					/* we found one, proceed */
 7341					spin_unlock(&last_ptr->refill_lock);
 7342					trace_btrfs_reserve_extent_cluster(root,
 7343						block_group, search_start,
 7344						num_bytes);
 7345					goto checks;
 7346				}
 7347			} else if (!cached && loop > LOOP_CACHING_NOWAIT
 7348				   && !failed_cluster_refill) {
 7349				spin_unlock(&last_ptr->refill_lock);
 7350
 7351				failed_cluster_refill = true;
 7352				wait_block_group_cache_progress(block_group,
 7353				       num_bytes + empty_cluster + empty_size);
 7354				goto have_block_group;
 7355			}
 
 
 7356
 7357			/*
 7358			 * at this point we either didn't find a cluster
 7359			 * or we weren't able to allocate a block from our
 7360			 * cluster.  Free the cluster we've been trying
 7361			 * to use, and go to the next block group
 7362			 */
 7363			btrfs_return_cluster_to_free_space(NULL, last_ptr);
 7364			spin_unlock(&last_ptr->refill_lock);
 7365			goto loop;
 7366		}
 7367
 7368unclustered_alloc:
 7369		/*
 7370		 * We are doing an unclustered alloc, set the fragmented flag so
 7371		 * we don't bother trying to setup a cluster again until we get
 7372		 * more space.
 7373		 */
 7374		if (unlikely(last_ptr)) {
 7375			spin_lock(&last_ptr->lock);
 7376			last_ptr->fragmented = 1;
 7377			spin_unlock(&last_ptr->lock);
 7378		}
 7379		spin_lock(&block_group->free_space_ctl->tree_lock);
 7380		if (cached &&
 7381		    block_group->free_space_ctl->free_space <
 7382		    num_bytes + empty_cluster + empty_size) {
 7383			if (block_group->free_space_ctl->free_space >
 7384			    max_extent_size)
 7385				max_extent_size =
 7386					block_group->free_space_ctl->free_space;
 7387			spin_unlock(&block_group->free_space_ctl->tree_lock);
 7388			goto loop;
 7389		}
 7390		spin_unlock(&block_group->free_space_ctl->tree_lock);
 7391
 7392		offset = btrfs_find_space_for_alloc(block_group, search_start,
 7393						    num_bytes, empty_size,
 7394						    &max_extent_size);
 7395		/*
 7396		 * If we didn't find a chunk, and we haven't failed on this
 7397		 * block group before, and this block group is in the middle of
 7398		 * caching and we are ok with waiting, then go ahead and wait
 7399		 * for progress to be made, and set failed_alloc to true.
 7400		 *
 7401		 * If failed_alloc is true then we've already waited on this
 7402		 * block group once and should move on to the next block group.
 7403		 */
 7404		if (!offset && !failed_alloc && !cached &&
 7405		    loop > LOOP_CACHING_NOWAIT) {
 7406			wait_block_group_cache_progress(block_group,
 7407						num_bytes + empty_size);
 7408			failed_alloc = true;
 7409			goto have_block_group;
 7410		} else if (!offset) {
 7411			goto loop;
 
 
 
 
 7412		}
 7413checks:
 7414		search_start = ALIGN(offset, root->stripesize);
 
 
 7415
 7416		/* move on to the next group */
 7417		if (search_start + num_bytes >
 7418		    block_group->key.objectid + block_group->key.offset) {
 7419			btrfs_add_free_space(block_group, offset, num_bytes);
 
 
 7420			goto loop;
 7421		}
 7422
 7423		if (offset < search_start)
 7424			btrfs_add_free_space(block_group, offset,
 7425					     search_start - offset);
 7426		BUG_ON(offset > search_start);
 7427
 7428		ret = btrfs_update_reserved_bytes(block_group, num_bytes,
 7429						  alloc_type, delalloc);
 
 
 7430		if (ret == -EAGAIN) {
 7431			btrfs_add_free_space(block_group, offset, num_bytes);
 
 
 7432			goto loop;
 7433		}
 
 7434
 7435		/* we are all good, lets return */
 7436		ins->objectid = search_start;
 7437		ins->offset = num_bytes;
 7438
 7439		trace_btrfs_reserve_extent(orig_root, block_group,
 7440					   search_start, num_bytes);
 7441		btrfs_release_block_group(block_group, delalloc);
 7442		break;
 7443loop:
 7444		failed_cluster_refill = false;
 7445		failed_alloc = false;
 7446		BUG_ON(index != get_block_group_index(block_group));
 7447		btrfs_release_block_group(block_group, delalloc);
 
 
 
 
 
 
 
 7448	}
 7449	up_read(&space_info->groups_sem);
 7450
 7451	if ((loop == LOOP_CACHING_NOWAIT) && have_caching_bg
 7452		&& !orig_have_caching_bg)
 7453		orig_have_caching_bg = true;
 7454
 7455	if (!ins->objectid && loop >= LOOP_CACHING_WAIT && have_caching_bg)
 7456		goto search;
 7457
 7458	if (!ins->objectid && ++index < BTRFS_NR_RAID_TYPES)
 7459		goto search;
 7460
 7461	/*
 7462	 * LOOP_CACHING_NOWAIT, search partially cached block groups, kicking
 7463	 *			caching kthreads as we move along
 7464	 * LOOP_CACHING_WAIT, search everything, and wait if our bg is caching
 7465	 * LOOP_ALLOC_CHUNK, force a chunk allocation and try again
 7466	 * LOOP_NO_EMPTY_SIZE, set empty_size and empty_cluster to 0 and try
 7467	 *			again
 7468	 */
 7469	if (!ins->objectid && loop < LOOP_NO_EMPTY_SIZE) {
 7470		index = 0;
 7471		if (loop == LOOP_CACHING_NOWAIT) {
 7472			/*
 7473			 * We want to skip the LOOP_CACHING_WAIT step if we
 7474			 * don't have any unached bgs and we've alrelady done a
 7475			 * full search through.
 7476			 */
 7477			if (orig_have_caching_bg || !full_search)
 7478				loop = LOOP_CACHING_WAIT;
 7479			else
 7480				loop = LOOP_ALLOC_CHUNK;
 7481		} else {
 7482			loop++;
 7483		}
 7484
 7485		if (loop == LOOP_ALLOC_CHUNK) {
 7486			struct btrfs_trans_handle *trans;
 7487			int exist = 0;
 7488
 7489			trans = current->journal_info;
 7490			if (trans)
 7491				exist = 1;
 7492			else
 7493				trans = btrfs_join_transaction(root);
 7494
 7495			if (IS_ERR(trans)) {
 7496				ret = PTR_ERR(trans);
 7497				goto out;
 7498			}
 7499
 7500			ret = do_chunk_alloc(trans, root, flags,
 7501					     CHUNK_ALLOC_FORCE);
 7502
 7503			/*
 7504			 * If we can't allocate a new chunk we've already looped
 7505			 * through at least once, move on to the NO_EMPTY_SIZE
 7506			 * case.
 7507			 */
 7508			if (ret == -ENOSPC)
 7509				loop = LOOP_NO_EMPTY_SIZE;
 7510
 7511			/*
 7512			 * Do not bail out on ENOSPC since we
 7513			 * can do more things.
 7514			 */
 7515			if (ret < 0 && ret != -ENOSPC)
 7516				btrfs_abort_transaction(trans,
 7517							root, ret);
 7518			else
 7519				ret = 0;
 7520			if (!exist)
 7521				btrfs_end_transaction(trans, root);
 7522			if (ret)
 7523				goto out;
 7524		}
 7525
 7526		if (loop == LOOP_NO_EMPTY_SIZE) {
 7527			/*
 7528			 * Don't loop again if we already have no empty_size and
 7529			 * no empty_cluster.
 7530			 */
 7531			if (empty_size == 0 &&
 7532			    empty_cluster == 0) {
 7533				ret = -ENOSPC;
 7534				goto out;
 7535			}
 7536			empty_size = 0;
 7537			empty_cluster = 0;
 7538		}
 7539
 7540		goto search;
 7541	} else if (!ins->objectid) {
 7542		ret = -ENOSPC;
 7543	} else if (ins->objectid) {
 7544		if (!use_cluster && last_ptr) {
 7545			spin_lock(&last_ptr->lock);
 7546			last_ptr->window_start = ins->objectid;
 7547			spin_unlock(&last_ptr->lock);
 7548		}
 7549		ret = 0;
 7550	}
 7551out:
 7552	if (ret == -ENOSPC) {
 7553		spin_lock(&space_info->lock);
 7554		space_info->max_extent_size = max_extent_size;
 7555		spin_unlock(&space_info->lock);
 7556		ins->offset = max_extent_size;
 
 
 7557	}
 7558	return ret;
 7559}
 7560
 7561static void dump_space_info(struct btrfs_space_info *info, u64 bytes,
 7562			    int dump_block_groups)
 7563{
 7564	struct btrfs_block_group_cache *cache;
 7565	int index = 0;
 7566
 7567	spin_lock(&info->lock);
 7568	printk(KERN_INFO "BTRFS: space_info %llu has %llu free, is %sfull\n",
 7569	       info->flags,
 7570	       info->total_bytes - info->bytes_used - info->bytes_pinned -
 7571	       info->bytes_reserved - info->bytes_readonly,
 7572	       (info->full) ? "" : "not ");
 7573	printk(KERN_INFO "BTRFS: space_info total=%llu, used=%llu, pinned=%llu, "
 7574	       "reserved=%llu, may_use=%llu, readonly=%llu\n",
 7575	       info->total_bytes, info->bytes_used, info->bytes_pinned,
 7576	       info->bytes_reserved, info->bytes_may_use,
 7577	       info->bytes_readonly);
 7578	spin_unlock(&info->lock);
 7579
 7580	if (!dump_block_groups)
 7581		return;
 7582
 7583	down_read(&info->groups_sem);
 7584again:
 7585	list_for_each_entry(cache, &info->block_groups[index], list) {
 7586		spin_lock(&cache->lock);
 7587		printk(KERN_INFO "BTRFS: "
 7588			   "block group %llu has %llu bytes, "
 7589			   "%llu used %llu pinned %llu reserved %s\n",
 7590		       cache->key.objectid, cache->key.offset,
 7591		       btrfs_block_group_used(&cache->item), cache->pinned,
 7592		       cache->reserved, cache->ro ? "[readonly]" : "");
 7593		btrfs_dump_free_space(cache, bytes);
 7594		spin_unlock(&cache->lock);
 7595	}
 7596	if (++index < BTRFS_NR_RAID_TYPES)
 7597		goto again;
 7598	up_read(&info->groups_sem);
 7599}
 7600
 7601int btrfs_reserve_extent(struct btrfs_root *root,
 
 
 
 
 
 7602			 u64 num_bytes, u64 min_alloc_size,
 7603			 u64 empty_size, u64 hint_byte,
 7604			 struct btrfs_key *ins, int is_data, int delalloc)
 7605{
 
 
 7606	bool final_tried = num_bytes == min_alloc_size;
 7607	u64 flags;
 7608	int ret;
 
 
 7609
 7610	flags = btrfs_get_alloc_profile(root, is_data);
 7611again:
 7612	WARN_ON(num_bytes < root->sectorsize);
 7613	ret = find_free_extent(root, num_bytes, empty_size, hint_byte, ins,
 7614			       flags, delalloc);
 7615
 7616	if (ret == -ENOSPC) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 7617		if (!final_tried && ins->offset) {
 7618			num_bytes = min(num_bytes >> 1, ins->offset);
 7619			num_bytes = round_down(num_bytes, root->sectorsize);
 
 7620			num_bytes = max(num_bytes, min_alloc_size);
 
 7621			if (num_bytes == min_alloc_size)
 7622				final_tried = true;
 7623			goto again;
 7624		} else if (btrfs_test_opt(root, ENOSPC_DEBUG)) {
 7625			struct btrfs_space_info *sinfo;
 7626
 7627			sinfo = __find_space_info(root->fs_info, flags);
 7628			btrfs_err(root->fs_info, "allocation failed flags %llu, wanted %llu",
 7629				flags, num_bytes);
 
 7630			if (sinfo)
 7631				dump_space_info(sinfo, num_bytes, 1);
 
 7632		}
 7633	}
 7634
 7635	return ret;
 7636}
 7637
 7638static int __btrfs_free_reserved_extent(struct btrfs_root *root,
 7639					u64 start, u64 len,
 7640					int pin, int delalloc)
 7641{
 7642	struct btrfs_block_group_cache *cache;
 7643	int ret = 0;
 7644
 7645	cache = btrfs_lookup_block_group(root->fs_info, start);
 7646	if (!cache) {
 7647		btrfs_err(root->fs_info, "Unable to find block group for %llu",
 7648			start);
 7649		return -ENOSPC;
 7650	}
 7651
 7652	if (pin)
 7653		pin_down_extent(root, cache, start, len, 1);
 7654	else {
 7655		if (btrfs_test_opt(root, DISCARD))
 7656			ret = btrfs_discard_extent(root, start, len, NULL);
 7657		btrfs_add_free_space(cache, start, len);
 7658		btrfs_update_reserved_bytes(cache, len, RESERVE_FREE, delalloc);
 7659	}
 7660
 7661	btrfs_put_block_group(cache);
 
 
 7662
 7663	trace_btrfs_reserved_extent_free(root, start, len);
 
 
 
 
 7664
 
 
 
 
 
 
 
 
 
 7665	return ret;
 7666}
 7667
 7668int btrfs_free_reserved_extent(struct btrfs_root *root,
 7669			       u64 start, u64 len, int delalloc)
 7670{
 7671	return __btrfs_free_reserved_extent(root, start, len, 0, delalloc);
 7672}
 7673
 7674int btrfs_free_and_pin_reserved_extent(struct btrfs_root *root,
 7675				       u64 start, u64 len)
 7676{
 7677	return __btrfs_free_reserved_extent(root, start, len, 1, 0);
 
 
 
 
 
 
 
 
 
 
 7678}
 7679
 7680static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
 7681				      struct btrfs_root *root,
 7682				      u64 parent, u64 root_objectid,
 7683				      u64 flags, u64 owner, u64 offset,
 7684				      struct btrfs_key *ins, int ref_mod)
 7685{
 
 
 7686	int ret;
 7687	struct btrfs_fs_info *fs_info = root->fs_info;
 7688	struct btrfs_extent_item *extent_item;
 
 7689	struct btrfs_extent_inline_ref *iref;
 7690	struct btrfs_path *path;
 7691	struct extent_buffer *leaf;
 7692	int type;
 7693	u32 size;
 
 7694
 7695	if (parent > 0)
 7696		type = BTRFS_SHARED_DATA_REF_KEY;
 7697	else
 7698		type = BTRFS_EXTENT_DATA_REF_KEY;
 7699
 7700	size = sizeof(*extent_item) + btrfs_extent_inline_ref_size(type);
 
 
 
 7701
 7702	path = btrfs_alloc_path();
 7703	if (!path)
 7704		return -ENOMEM;
 7705
 7706	path->leave_spinning = 1;
 7707	ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
 7708				      ins, size);
 7709	if (ret) {
 7710		btrfs_free_path(path);
 7711		return ret;
 7712	}
 7713
 7714	leaf = path->nodes[0];
 7715	extent_item = btrfs_item_ptr(leaf, path->slots[0],
 7716				     struct btrfs_extent_item);
 7717	btrfs_set_extent_refs(leaf, extent_item, ref_mod);
 7718	btrfs_set_extent_generation(leaf, extent_item, trans->transid);
 7719	btrfs_set_extent_flags(leaf, extent_item,
 7720			       flags | BTRFS_EXTENT_FLAG_DATA);
 7721
 7722	iref = (struct btrfs_extent_inline_ref *)(extent_item + 1);
 
 
 
 
 
 
 7723	btrfs_set_extent_inline_ref_type(leaf, iref, type);
 
 7724	if (parent > 0) {
 7725		struct btrfs_shared_data_ref *ref;
 7726		ref = (struct btrfs_shared_data_ref *)(iref + 1);
 7727		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
 7728		btrfs_set_shared_data_ref_count(leaf, ref, ref_mod);
 7729	} else {
 7730		struct btrfs_extent_data_ref *ref;
 7731		ref = (struct btrfs_extent_data_ref *)(&iref->offset);
 7732		btrfs_set_extent_data_ref_root(leaf, ref, root_objectid);
 7733		btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
 7734		btrfs_set_extent_data_ref_offset(leaf, ref, offset);
 7735		btrfs_set_extent_data_ref_count(leaf, ref, ref_mod);
 7736	}
 7737
 7738	btrfs_mark_buffer_dirty(path->nodes[0]);
 7739	btrfs_free_path(path);
 7740
 7741	ret = remove_from_free_space_tree(trans, fs_info, ins->objectid,
 7742					  ins->offset);
 7743	if (ret)
 7744		return ret;
 7745
 7746	ret = update_block_group(trans, root, ins->objectid, ins->offset, 1);
 7747	if (ret) { /* -ENOENT, logic error */
 7748		btrfs_err(fs_info, "update block group failed for %llu %llu",
 7749			ins->objectid, ins->offset);
 7750		BUG();
 7751	}
 7752	trace_btrfs_reserved_extent_alloc(root, ins->objectid, ins->offset);
 7753	return ret;
 7754}
 7755
 7756static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
 7757				     struct btrfs_root *root,
 7758				     u64 parent, u64 root_objectid,
 7759				     u64 flags, struct btrfs_disk_key *key,
 7760				     int level, struct btrfs_key *ins)
 7761{
 
 
 7762	int ret;
 7763	struct btrfs_fs_info *fs_info = root->fs_info;
 7764	struct btrfs_extent_item *extent_item;
 
 7765	struct btrfs_tree_block_info *block_info;
 7766	struct btrfs_extent_inline_ref *iref;
 7767	struct btrfs_path *path;
 7768	struct extent_buffer *leaf;
 7769	u32 size = sizeof(*extent_item) + sizeof(*iref);
 7770	u64 num_bytes = ins->offset;
 7771	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
 7772						 SKINNY_METADATA);
 
 7773
 7774	if (!skinny_metadata)
 
 
 
 
 
 
 
 7775		size += sizeof(*block_info);
 
 7776
 7777	path = btrfs_alloc_path();
 7778	if (!path) {
 7779		btrfs_free_and_pin_reserved_extent(root, ins->objectid,
 7780						   root->nodesize);
 7781		return -ENOMEM;
 7782	}
 7783
 7784	path->leave_spinning = 1;
 7785	ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
 7786				      ins, size);
 7787	if (ret) {
 7788		btrfs_free_path(path);
 7789		btrfs_free_and_pin_reserved_extent(root, ins->objectid,
 7790						   root->nodesize);
 7791		return ret;
 7792	}
 7793
 7794	leaf = path->nodes[0];
 7795	extent_item = btrfs_item_ptr(leaf, path->slots[0],
 7796				     struct btrfs_extent_item);
 7797	btrfs_set_extent_refs(leaf, extent_item, 1);
 7798	btrfs_set_extent_generation(leaf, extent_item, trans->transid);
 7799	btrfs_set_extent_flags(leaf, extent_item,
 7800			       flags | BTRFS_EXTENT_FLAG_TREE_BLOCK);
 7801
 7802	if (skinny_metadata) {
 7803		iref = (struct btrfs_extent_inline_ref *)(extent_item + 1);
 7804		num_bytes = root->nodesize;
 7805	} else {
 7806		block_info = (struct btrfs_tree_block_info *)(extent_item + 1);
 7807		btrfs_set_tree_block_key(leaf, block_info, key);
 7808		btrfs_set_tree_block_level(leaf, block_info, level);
 7809		iref = (struct btrfs_extent_inline_ref *)(block_info + 1);
 7810	}
 7811
 7812	if (parent > 0) {
 7813		BUG_ON(!(flags & BTRFS_BLOCK_FLAG_FULL_BACKREF));
 7814		btrfs_set_extent_inline_ref_type(leaf, iref,
 7815						 BTRFS_SHARED_BLOCK_REF_KEY);
 7816		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
 7817	} else {
 7818		btrfs_set_extent_inline_ref_type(leaf, iref,
 7819						 BTRFS_TREE_BLOCK_REF_KEY);
 7820		btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
 7821	}
 7822
 7823	btrfs_mark_buffer_dirty(leaf);
 7824	btrfs_free_path(path);
 7825
 7826	ret = remove_from_free_space_tree(trans, fs_info, ins->objectid,
 7827					  num_bytes);
 7828	if (ret)
 7829		return ret;
 7830
 7831	ret = update_block_group(trans, root, ins->objectid, root->nodesize,
 7832				 1);
 7833	if (ret) { /* -ENOENT, logic error */
 7834		btrfs_err(fs_info, "update block group failed for %llu %llu",
 7835			ins->objectid, ins->offset);
 7836		BUG();
 7837	}
 7838
 7839	trace_btrfs_reserved_extent_alloc(root, ins->objectid, root->nodesize);
 7840	return ret;
 7841}
 7842
 7843int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
 7844				     struct btrfs_root *root,
 7845				     u64 root_objectid, u64 owner,
 7846				     u64 offset, u64 ram_bytes,
 7847				     struct btrfs_key *ins)
 7848{
 7849	int ret;
 
 
 
 
 
 
 7850
 7851	BUG_ON(root_objectid == BTRFS_TREE_LOG_OBJECTID);
 7852
 7853	ret = btrfs_add_delayed_data_ref(root->fs_info, trans, ins->objectid,
 7854					 ins->offset, 0,
 7855					 root_objectid, owner, offset,
 7856					 ram_bytes, BTRFS_ADD_DELAYED_EXTENT,
 7857					 NULL);
 7858	return ret;
 
 7859}
 7860
 7861/*
 7862 * this is used by the tree logging recovery code.  It records that
 7863 * an extent has been allocated and makes sure to clear the free
 7864 * space cache bits as well
 7865 */
 7866int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
 7867				   struct btrfs_root *root,
 7868				   u64 root_objectid, u64 owner, u64 offset,
 7869				   struct btrfs_key *ins)
 7870{
 
 7871	int ret;
 7872	struct btrfs_block_group_cache *block_group;
 
 
 
 
 
 
 
 
 7873
 7874	/*
 7875	 * Mixed block groups will exclude before processing the log so we only
 7876	 * need to do the exlude dance if this fs isn't mixed.
 7877	 */
 7878	if (!btrfs_fs_incompat(root->fs_info, MIXED_GROUPS)) {
 7879		ret = __exclude_logged_extent(root, ins->objectid, ins->offset);
 
 7880		if (ret)
 7881			return ret;
 7882	}
 7883
 7884	block_group = btrfs_lookup_block_group(root->fs_info, ins->objectid);
 7885	if (!block_group)
 7886		return -EINVAL;
 7887
 7888	ret = btrfs_update_reserved_bytes(block_group, ins->offset,
 7889					  RESERVE_ALLOC_NO_ACCOUNT, 0);
 7890	BUG_ON(ret); /* logic error */
 7891	ret = alloc_reserved_file_extent(trans, root, 0, root_objectid,
 7892					 0, owner, offset, ins, 1);
 
 
 
 
 
 
 
 
 7893	btrfs_put_block_group(block_group);
 7894	return ret;
 7895}
 7896
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7897static struct extent_buffer *
 7898btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
 7899		      u64 bytenr, int level)
 
 7900{
 
 7901	struct extent_buffer *buf;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7902
 7903	buf = btrfs_find_create_tree_block(root, bytenr);
 7904	if (!buf)
 7905		return ERR_PTR(-ENOMEM);
 7906	btrfs_set_header_generation(buf, trans->transid);
 7907	btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level);
 7908	btrfs_tree_lock(buf);
 7909	clean_tree_block(trans, root->fs_info, buf);
 
 
 
 
 
 
 
 7910	clear_bit(EXTENT_BUFFER_STALE, &buf->bflags);
 
 7911
 7912	btrfs_set_lock_blocking(buf);
 7913	set_extent_buffer_uptodate(buf);
 7914
 7915	if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
 
 
 
 
 
 
 
 
 7916		buf->log_index = root->log_transid % 2;
 7917		/*
 7918		 * we allow two log transactions at a time, use different
 7919		 * EXENT bit to differentiate dirty pages.
 7920		 */
 7921		if (buf->log_index == 0)
 7922			set_extent_dirty(&root->dirty_log_pages, buf->start,
 7923					buf->start + buf->len - 1, GFP_NOFS);
 
 7924		else
 7925			set_extent_new(&root->dirty_log_pages, buf->start,
 7926					buf->start + buf->len - 1, GFP_NOFS);
 
 7927	} else {
 7928		buf->log_index = -1;
 7929		set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
 7930			 buf->start + buf->len - 1, GFP_NOFS);
 7931	}
 7932	trans->blocks_used++;
 7933	/* this returns a buffer locked for blocking */
 7934	return buf;
 7935}
 7936
 7937static struct btrfs_block_rsv *
 7938use_block_rsv(struct btrfs_trans_handle *trans,
 7939	      struct btrfs_root *root, u32 blocksize)
 7940{
 7941	struct btrfs_block_rsv *block_rsv;
 7942	struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
 7943	int ret;
 7944	bool global_updated = false;
 7945
 7946	block_rsv = get_block_rsv(trans, root);
 7947
 7948	if (unlikely(block_rsv->size == 0))
 7949		goto try_reserve;
 7950again:
 7951	ret = block_rsv_use_bytes(block_rsv, blocksize);
 7952	if (!ret)
 7953		return block_rsv;
 7954
 7955	if (block_rsv->failfast)
 7956		return ERR_PTR(ret);
 7957
 7958	if (block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL && !global_updated) {
 7959		global_updated = true;
 7960		update_global_block_rsv(root->fs_info);
 7961		goto again;
 7962	}
 7963
 7964	if (btrfs_test_opt(root, ENOSPC_DEBUG)) {
 7965		static DEFINE_RATELIMIT_STATE(_rs,
 7966				DEFAULT_RATELIMIT_INTERVAL * 10,
 7967				/*DEFAULT_RATELIMIT_BURST*/ 1);
 7968		if (__ratelimit(&_rs))
 7969			WARN(1, KERN_DEBUG
 7970				"BTRFS: block rsv returned %d\n", ret);
 7971	}
 7972try_reserve:
 7973	ret = reserve_metadata_bytes(root, block_rsv, blocksize,
 7974				     BTRFS_RESERVE_NO_FLUSH);
 7975	if (!ret)
 7976		return block_rsv;
 7977	/*
 7978	 * If we couldn't reserve metadata bytes try and use some from
 7979	 * the global reserve if its space type is the same as the global
 7980	 * reservation.
 7981	 */
 7982	if (block_rsv->type != BTRFS_BLOCK_RSV_GLOBAL &&
 7983	    block_rsv->space_info == global_rsv->space_info) {
 7984		ret = block_rsv_use_bytes(global_rsv, blocksize);
 7985		if (!ret)
 7986			return global_rsv;
 7987	}
 7988	return ERR_PTR(ret);
 7989}
 7990
 7991static void unuse_block_rsv(struct btrfs_fs_info *fs_info,
 7992			    struct btrfs_block_rsv *block_rsv, u32 blocksize)
 7993{
 7994	block_rsv_add_bytes(block_rsv, blocksize, 0);
 7995	block_rsv_release_bytes(fs_info, block_rsv, NULL, 0);
 7996}
 7997
 7998/*
 7999 * finds a free extent and does all the dirty work required for allocation
 8000 * returns the tree buffer or an ERR_PTR on error.
 8001 */
 8002struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
 8003					struct btrfs_root *root,
 8004					u64 parent, u64 root_objectid,
 8005					struct btrfs_disk_key *key, int level,
 8006					u64 hint, u64 empty_size)
 
 
 
 8007{
 
 8008	struct btrfs_key ins;
 8009	struct btrfs_block_rsv *block_rsv;
 8010	struct extent_buffer *buf;
 8011	struct btrfs_delayed_extent_op *extent_op;
 8012	u64 flags = 0;
 8013	int ret;
 8014	u32 blocksize = root->nodesize;
 8015	bool skinny_metadata = btrfs_fs_incompat(root->fs_info,
 8016						 SKINNY_METADATA);
 8017
 8018	if (btrfs_test_is_dummy_root(root)) {
 
 8019		buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr,
 8020					    level);
 8021		if (!IS_ERR(buf))
 8022			root->alloc_bytenr += blocksize;
 8023		return buf;
 8024	}
 
 8025
 8026	block_rsv = use_block_rsv(trans, root, blocksize);
 8027	if (IS_ERR(block_rsv))
 8028		return ERR_CAST(block_rsv);
 8029
 8030	ret = btrfs_reserve_extent(root, blocksize, blocksize,
 8031				   empty_size, hint, &ins, 0, 0);
 8032	if (ret)
 8033		goto out_unuse;
 8034
 8035	buf = btrfs_init_new_buffer(trans, root, ins.objectid, level);
 
 8036	if (IS_ERR(buf)) {
 8037		ret = PTR_ERR(buf);
 8038		goto out_free_reserved;
 8039	}
 
 8040
 8041	if (root_objectid == BTRFS_TREE_RELOC_OBJECTID) {
 8042		if (parent == 0)
 8043			parent = ins.objectid;
 8044		flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF;
 
 8045	} else
 8046		BUG_ON(parent > 0);
 8047
 8048	if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
 8049		extent_op = btrfs_alloc_delayed_extent_op();
 8050		if (!extent_op) {
 8051			ret = -ENOMEM;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8052			goto out_free_buf;
 8053		}
 8054		if (key)
 8055			memcpy(&extent_op->key, key, sizeof(extent_op->key));
 8056		else
 8057			memset(&extent_op->key, 0, sizeof(extent_op->key));
 8058		extent_op->flags_to_set = flags;
 8059		extent_op->update_key = skinny_metadata ? false : true;
 8060		extent_op->update_flags = true;
 8061		extent_op->is_data = false;
 8062		extent_op->level = level;
 8063
 8064		ret = btrfs_add_delayed_tree_ref(root->fs_info, trans,
 8065						 ins.objectid, ins.offset,
 8066						 parent, root_objectid, level,
 8067						 BTRFS_ADD_DELAYED_EXTENT,
 8068						 extent_op);
 8069		if (ret)
 8070			goto out_free_delayed;
 8071	}
 8072	return buf;
 8073
 8074out_free_delayed:
 8075	btrfs_free_delayed_extent_op(extent_op);
 8076out_free_buf:
 
 8077	free_extent_buffer(buf);
 8078out_free_reserved:
 8079	btrfs_free_reserved_extent(root, ins.objectid, ins.offset, 0);
 8080out_unuse:
 8081	unuse_block_rsv(root->fs_info, block_rsv, blocksize);
 8082	return ERR_PTR(ret);
 8083}
 8084
 8085struct walk_control {
 8086	u64 refs[BTRFS_MAX_LEVEL];
 8087	u64 flags[BTRFS_MAX_LEVEL];
 8088	struct btrfs_key update_progress;
 
 
 8089	int stage;
 8090	int level;
 8091	int shared_level;
 8092	int update_ref;
 8093	int keep_locks;
 8094	int reada_slot;
 8095	int reada_count;
 8096	int for_reloc;
 
 
 8097};
 8098
 
 
 
 
 
 8099#define DROP_REFERENCE	1
 
 
 
 
 
 
 
 
 8100#define UPDATE_BACKREF	2
 8101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8102static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
 8103				     struct btrfs_root *root,
 8104				     struct walk_control *wc,
 8105				     struct btrfs_path *path)
 8106{
 
 8107	u64 bytenr;
 8108	u64 generation;
 8109	u64 refs;
 8110	u64 flags;
 8111	u32 nritems;
 8112	u32 blocksize;
 8113	struct btrfs_key key;
 8114	struct extent_buffer *eb;
 8115	int ret;
 8116	int slot;
 8117	int nread = 0;
 8118
 8119	if (path->slots[wc->level] < wc->reada_slot) {
 8120		wc->reada_count = wc->reada_count * 2 / 3;
 8121		wc->reada_count = max(wc->reada_count, 2);
 8122	} else {
 8123		wc->reada_count = wc->reada_count * 3 / 2;
 8124		wc->reada_count = min_t(int, wc->reada_count,
 8125					BTRFS_NODEPTRS_PER_BLOCK(root));
 8126	}
 8127
 8128	eb = path->nodes[wc->level];
 8129	nritems = btrfs_header_nritems(eb);
 8130	blocksize = root->nodesize;
 8131
 8132	for (slot = path->slots[wc->level]; slot < nritems; slot++) {
 8133		if (nread >= wc->reada_count)
 8134			break;
 8135
 8136		cond_resched();
 8137		bytenr = btrfs_node_blockptr(eb, slot);
 8138		generation = btrfs_node_ptr_generation(eb, slot);
 8139
 8140		if (slot == path->slots[wc->level])
 8141			goto reada;
 8142
 8143		if (wc->stage == UPDATE_BACKREF &&
 8144		    generation <= root->root_key.offset)
 8145			continue;
 8146
 8147		/* We don't lock the tree block, it's OK to be racy here */
 8148		ret = btrfs_lookup_extent_info(trans, root, bytenr,
 8149					       wc->level - 1, 1, &refs,
 8150					       &flags);
 8151		/* We don't care about errors in readahead. */
 8152		if (ret < 0)
 8153			continue;
 8154		BUG_ON(refs == 0);
 8155
 8156		if (wc->stage == DROP_REFERENCE) {
 8157			if (refs == 1)
 8158				goto reada;
 
 
 
 
 
 8159
 8160			if (wc->level == 1 &&
 8161			    (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
 8162				continue;
 8163			if (!wc->update_ref ||
 8164			    generation <= root->root_key.offset)
 8165				continue;
 8166			btrfs_node_key_to_cpu(eb, &key, slot);
 8167			ret = btrfs_comp_cpu_keys(&key,
 8168						  &wc->update_progress);
 8169			if (ret < 0)
 8170				continue;
 8171		} else {
 8172			if (wc->level == 1 &&
 8173			    (flags & BTRFS_BLOCK_FLAG_FULL_BACKREF))
 8174				continue;
 8175		}
 8176reada:
 8177		readahead_tree_block(root, bytenr);
 8178		nread++;
 8179	}
 8180	wc->reada_slot = slot;
 8181}
 8182
 8183/*
 8184 * These may not be seen by the usual inc/dec ref code so we have to
 8185 * add them here.
 8186 */
 8187static int record_one_subtree_extent(struct btrfs_trans_handle *trans,
 8188				     struct btrfs_root *root, u64 bytenr,
 8189				     u64 num_bytes)
 8190{
 8191	struct btrfs_qgroup_extent_record *qrecord;
 8192	struct btrfs_delayed_ref_root *delayed_refs;
 8193
 8194	qrecord = kmalloc(sizeof(*qrecord), GFP_NOFS);
 8195	if (!qrecord)
 8196		return -ENOMEM;
 8197
 8198	qrecord->bytenr = bytenr;
 8199	qrecord->num_bytes = num_bytes;
 8200	qrecord->old_roots = NULL;
 8201
 8202	delayed_refs = &trans->transaction->delayed_refs;
 8203	spin_lock(&delayed_refs->lock);
 8204	if (btrfs_qgroup_insert_dirty_extent(delayed_refs, qrecord))
 8205		kfree(qrecord);
 8206	spin_unlock(&delayed_refs->lock);
 8207
 8208	return 0;
 8209}
 8210
 8211static int account_leaf_items(struct btrfs_trans_handle *trans,
 8212			      struct btrfs_root *root,
 8213			      struct extent_buffer *eb)
 8214{
 8215	int nr = btrfs_header_nritems(eb);
 8216	int i, extent_type, ret;
 8217	struct btrfs_key key;
 8218	struct btrfs_file_extent_item *fi;
 8219	u64 bytenr, num_bytes;
 8220
 8221	/* We can be called directly from walk_up_proc() */
 8222	if (!root->fs_info->quota_enabled)
 8223		return 0;
 8224
 8225	for (i = 0; i < nr; i++) {
 8226		btrfs_item_key_to_cpu(eb, &key, i);
 8227
 8228		if (key.type != BTRFS_EXTENT_DATA_KEY)
 8229			continue;
 8230
 8231		fi = btrfs_item_ptr(eb, i, struct btrfs_file_extent_item);
 8232		/* filter out non qgroup-accountable extents  */
 8233		extent_type = btrfs_file_extent_type(eb, fi);
 8234
 8235		if (extent_type == BTRFS_FILE_EXTENT_INLINE)
 8236			continue;
 8237
 8238		bytenr = btrfs_file_extent_disk_bytenr(eb, fi);
 8239		if (!bytenr)
 8240			continue;
 8241
 8242		num_bytes = btrfs_file_extent_disk_num_bytes(eb, fi);
 8243
 8244		ret = record_one_subtree_extent(trans, root, bytenr, num_bytes);
 8245		if (ret)
 8246			return ret;
 8247	}
 8248	return 0;
 8249}
 8250
 8251/*
 8252 * Walk up the tree from the bottom, freeing leaves and any interior
 8253 * nodes which have had all slots visited. If a node (leaf or
 8254 * interior) is freed, the node above it will have it's slot
 8255 * incremented. The root node will never be freed.
 8256 *
 8257 * At the end of this function, we should have a path which has all
 8258 * slots incremented to the next position for a search. If we need to
 8259 * read a new node it will be NULL and the node above it will have the
 8260 * correct slot selected for a later read.
 8261 *
 8262 * If we increment the root nodes slot counter past the number of
 8263 * elements, 1 is returned to signal completion of the search.
 8264 */
 8265static int adjust_slots_upwards(struct btrfs_root *root,
 8266				struct btrfs_path *path, int root_level)
 8267{
 8268	int level = 0;
 8269	int nr, slot;
 8270	struct extent_buffer *eb;
 8271
 8272	if (root_level == 0)
 8273		return 1;
 8274
 8275	while (level <= root_level) {
 8276		eb = path->nodes[level];
 8277		nr = btrfs_header_nritems(eb);
 8278		path->slots[level]++;
 8279		slot = path->slots[level];
 8280		if (slot >= nr || level == 0) {
 8281			/*
 8282			 * Don't free the root -  we will detect this
 8283			 * condition after our loop and return a
 8284			 * positive value for caller to stop walking the tree.
 8285			 */
 8286			if (level != root_level) {
 8287				btrfs_tree_unlock_rw(eb, path->locks[level]);
 8288				path->locks[level] = 0;
 8289
 8290				free_extent_buffer(eb);
 8291				path->nodes[level] = NULL;
 8292				path->slots[level] = 0;
 8293			}
 8294		} else {
 8295			/*
 8296			 * We have a valid slot to walk back down
 8297			 * from. Stop here so caller can process these
 8298			 * new nodes.
 8299			 */
 8300			break;
 8301		}
 8302
 8303		level++;
 8304	}
 8305
 8306	eb = path->nodes[root_level];
 8307	if (path->slots[root_level] >= btrfs_header_nritems(eb))
 8308		return 1;
 8309
 8310	return 0;
 8311}
 8312
 8313/*
 8314 * root_eb is the subtree root and is locked before this function is called.
 8315 */
 8316static int account_shared_subtree(struct btrfs_trans_handle *trans,
 8317				  struct btrfs_root *root,
 8318				  struct extent_buffer *root_eb,
 8319				  u64 root_gen,
 8320				  int root_level)
 8321{
 8322	int ret = 0;
 8323	int level;
 8324	struct extent_buffer *eb = root_eb;
 8325	struct btrfs_path *path = NULL;
 8326
 8327	BUG_ON(root_level < 0 || root_level > BTRFS_MAX_LEVEL);
 8328	BUG_ON(root_eb == NULL);
 8329
 8330	if (!root->fs_info->quota_enabled)
 8331		return 0;
 8332
 8333	if (!extent_buffer_uptodate(root_eb)) {
 8334		ret = btrfs_read_buffer(root_eb, root_gen);
 8335		if (ret)
 8336			goto out;
 8337	}
 8338
 8339	if (root_level == 0) {
 8340		ret = account_leaf_items(trans, root, root_eb);
 8341		goto out;
 8342	}
 8343
 8344	path = btrfs_alloc_path();
 8345	if (!path)
 8346		return -ENOMEM;
 8347
 8348	/*
 8349	 * Walk down the tree.  Missing extent blocks are filled in as
 8350	 * we go. Metadata is accounted every time we read a new
 8351	 * extent block.
 8352	 *
 8353	 * When we reach a leaf, we account for file extent items in it,
 8354	 * walk back up the tree (adjusting slot pointers as we go)
 8355	 * and restart the search process.
 8356	 */
 8357	extent_buffer_get(root_eb); /* For path */
 8358	path->nodes[root_level] = root_eb;
 8359	path->slots[root_level] = 0;
 8360	path->locks[root_level] = 0; /* so release_path doesn't try to unlock */
 8361walk_down:
 8362	level = root_level;
 8363	while (level >= 0) {
 8364		if (path->nodes[level] == NULL) {
 8365			int parent_slot;
 8366			u64 child_gen;
 8367			u64 child_bytenr;
 8368
 8369			/* We need to get child blockptr/gen from
 8370			 * parent before we can read it. */
 8371			eb = path->nodes[level + 1];
 8372			parent_slot = path->slots[level + 1];
 8373			child_bytenr = btrfs_node_blockptr(eb, parent_slot);
 8374			child_gen = btrfs_node_ptr_generation(eb, parent_slot);
 8375
 8376			eb = read_tree_block(root, child_bytenr, child_gen);
 8377			if (IS_ERR(eb)) {
 8378				ret = PTR_ERR(eb);
 8379				goto out;
 8380			} else if (!extent_buffer_uptodate(eb)) {
 8381				free_extent_buffer(eb);
 8382				ret = -EIO;
 8383				goto out;
 8384			}
 8385
 8386			path->nodes[level] = eb;
 8387			path->slots[level] = 0;
 8388
 8389			btrfs_tree_read_lock(eb);
 8390			btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK);
 8391			path->locks[level] = BTRFS_READ_LOCK_BLOCKING;
 8392
 8393			ret = record_one_subtree_extent(trans, root, child_bytenr,
 8394							root->nodesize);
 8395			if (ret)
 8396				goto out;
 8397		}
 8398
 8399		if (level == 0) {
 8400			ret = account_leaf_items(trans, root, path->nodes[level]);
 8401			if (ret)
 8402				goto out;
 8403
 8404			/* Nonzero return here means we completed our search */
 8405			ret = adjust_slots_upwards(root, path, root_level);
 8406			if (ret)
 8407				break;
 8408
 8409			/* Restart search with new slots */
 8410			goto walk_down;
 8411		}
 8412
 8413		level--;
 8414	}
 8415
 8416	ret = 0;
 8417out:
 8418	btrfs_free_path(path);
 8419
 8420	return ret;
 8421}
 8422
 8423/*
 8424 * helper to process tree block while walking down the tree.
 8425 *
 8426 * when wc->stage == UPDATE_BACKREF, this function updates
 8427 * back refs for pointers in the block.
 8428 *
 8429 * NOTE: return value 1 means we should stop walking down.
 8430 */
 8431static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
 8432				   struct btrfs_root *root,
 8433				   struct btrfs_path *path,
 8434				   struct walk_control *wc, int lookup_info)
 8435{
 
 8436	int level = wc->level;
 8437	struct extent_buffer *eb = path->nodes[level];
 8438	u64 flag = BTRFS_BLOCK_FLAG_FULL_BACKREF;
 8439	int ret;
 8440
 8441	if (wc->stage == UPDATE_BACKREF &&
 8442	    btrfs_header_owner(eb) != root->root_key.objectid)
 8443		return 1;
 8444
 8445	/*
 8446	 * when reference count of tree block is 1, it won't increase
 8447	 * again. once full backref flag is set, we never clear it.
 8448	 */
 8449	if (lookup_info &&
 8450	    ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
 8451	     (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
 8452		BUG_ON(!path->locks[level]);
 8453		ret = btrfs_lookup_extent_info(trans, root,
 8454					       eb->start, level, 1,
 8455					       &wc->refs[level],
 8456					       &wc->flags[level]);
 8457		BUG_ON(ret == -ENOMEM);
 8458		if (ret)
 8459			return ret;
 8460		BUG_ON(wc->refs[level] == 0);
 
 
 
 
 8461	}
 8462
 8463	if (wc->stage == DROP_REFERENCE) {
 8464		if (wc->refs[level] > 1)
 8465			return 1;
 8466
 8467		if (path->locks[level] && !wc->keep_locks) {
 8468			btrfs_tree_unlock_rw(eb, path->locks[level]);
 8469			path->locks[level] = 0;
 8470		}
 8471		return 0;
 8472	}
 8473
 8474	/* wc->stage == UPDATE_BACKREF */
 8475	if (!(wc->flags[level] & flag)) {
 8476		BUG_ON(!path->locks[level]);
 8477		ret = btrfs_inc_ref(trans, root, eb, 1);
 8478		BUG_ON(ret); /* -ENOMEM */
 
 
 
 8479		ret = btrfs_dec_ref(trans, root, eb, 0);
 8480		BUG_ON(ret); /* -ENOMEM */
 8481		ret = btrfs_set_disk_extent_flags(trans, root, eb->start,
 8482						  eb->len, flag,
 8483						  btrfs_header_level(eb), 0);
 8484		BUG_ON(ret); /* -ENOMEM */
 
 
 
 
 8485		wc->flags[level] |= flag;
 8486	}
 8487
 8488	/*
 8489	 * the block is shared by multiple trees, so it's not good to
 8490	 * keep the tree lock
 8491	 */
 8492	if (path->locks[level] && level > 0) {
 8493		btrfs_tree_unlock_rw(eb, path->locks[level]);
 8494		path->locks[level] = 0;
 8495	}
 8496	return 0;
 8497}
 8498
 8499/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8500 * helper to process tree block pointer.
 8501 *
 8502 * when wc->stage == DROP_REFERENCE, this function checks
 8503 * reference count of the block pointed to. if the block
 8504 * is shared and we need update back refs for the subtree
 8505 * rooted at the block, this function changes wc->stage to
 8506 * UPDATE_BACKREF. if the block is shared and there is no
 8507 * need to update back, this function drops the reference
 8508 * to the block.
 8509 *
 8510 * NOTE: return value 1 means we should stop walking down.
 8511 */
 8512static noinline int do_walk_down(struct btrfs_trans_handle *trans,
 8513				 struct btrfs_root *root,
 8514				 struct btrfs_path *path,
 8515				 struct walk_control *wc, int *lookup_info)
 8516{
 
 8517	u64 bytenr;
 8518	u64 generation;
 8519	u64 parent;
 8520	u32 blocksize;
 8521	struct btrfs_key key;
 8522	struct extent_buffer *next;
 8523	int level = wc->level;
 8524	int reada = 0;
 8525	int ret = 0;
 8526	bool need_account = false;
 8527
 8528	generation = btrfs_node_ptr_generation(path->nodes[level],
 8529					       path->slots[level]);
 8530	/*
 8531	 * if the lower level block was created before the snapshot
 8532	 * was created, we know there is no need to update back refs
 8533	 * for the subtree
 8534	 */
 8535	if (wc->stage == UPDATE_BACKREF &&
 8536	    generation <= root->root_key.offset) {
 8537		*lookup_info = 1;
 8538		return 1;
 8539	}
 8540
 8541	bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]);
 8542	blocksize = root->nodesize;
 8543
 8544	next = btrfs_find_tree_block(root->fs_info, bytenr);
 8545	if (!next) {
 8546		next = btrfs_find_create_tree_block(root, bytenr);
 8547		if (!next)
 8548			return -ENOMEM;
 8549		btrfs_set_buffer_lockdep_class(root->root_key.objectid, next,
 8550					       level - 1);
 8551		reada = 1;
 8552	}
 8553	btrfs_tree_lock(next);
 8554	btrfs_set_lock_blocking(next);
 8555
 8556	ret = btrfs_lookup_extent_info(trans, root, bytenr, level - 1, 1,
 8557				       &wc->refs[level - 1],
 8558				       &wc->flags[level - 1]);
 8559	if (ret < 0) {
 8560		btrfs_tree_unlock(next);
 8561		return ret;
 8562	}
 8563
 8564	if (unlikely(wc->refs[level - 1] == 0)) {
 8565		btrfs_err(root->fs_info, "Missing references.");
 8566		BUG();
 
 
 8567	}
 8568	*lookup_info = 0;
 8569
 8570	if (wc->stage == DROP_REFERENCE) {
 8571		if (wc->refs[level - 1] > 1) {
 8572			need_account = true;
 8573			if (level == 1 &&
 8574			    (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF))
 8575				goto skip;
 8576
 8577			if (!wc->update_ref ||
 8578			    generation <= root->root_key.offset)
 8579				goto skip;
 8580
 8581			btrfs_node_key_to_cpu(path->nodes[level], &key,
 8582					      path->slots[level]);
 8583			ret = btrfs_comp_cpu_keys(&key, &wc->update_progress);
 8584			if (ret < 0)
 8585				goto skip;
 8586
 8587			wc->stage = UPDATE_BACKREF;
 8588			wc->shared_level = level - 1;
 8589		}
 8590	} else {
 8591		if (level == 1 &&
 8592		    (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF))
 8593			goto skip;
 8594	}
 8595
 8596	if (!btrfs_buffer_uptodate(next, generation, 0)) {
 8597		btrfs_tree_unlock(next);
 8598		free_extent_buffer(next);
 8599		next = NULL;
 8600		*lookup_info = 1;
 8601	}
 8602
 8603	if (!next) {
 8604		if (reada && level == 1)
 8605			reada_walk_down(trans, root, wc, path);
 8606		next = read_tree_block(root, bytenr, generation);
 8607		if (IS_ERR(next)) {
 8608			return PTR_ERR(next);
 8609		} else if (!extent_buffer_uptodate(next)) {
 8610			free_extent_buffer(next);
 8611			return -EIO;
 8612		}
 8613		btrfs_tree_lock(next);
 8614		btrfs_set_lock_blocking(next);
 8615	}
 8616
 8617	level--;
 8618	BUG_ON(level != btrfs_header_level(next));
 
 
 
 
 
 8619	path->nodes[level] = next;
 8620	path->slots[level] = 0;
 8621	path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 8622	wc->level = level;
 8623	if (wc->level == 1)
 8624		wc->reada_slot = 0;
 8625	return 0;
 8626skip:
 
 
 
 8627	wc->refs[level - 1] = 0;
 8628	wc->flags[level - 1] = 0;
 8629	if (wc->stage == DROP_REFERENCE) {
 8630		if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) {
 8631			parent = path->nodes[level]->start;
 8632		} else {
 8633			BUG_ON(root->root_key.objectid !=
 8634			       btrfs_header_owner(path->nodes[level]));
 8635			parent = 0;
 8636		}
 8637
 8638		if (need_account) {
 8639			ret = account_shared_subtree(trans, root, next,
 8640						     generation, level - 1);
 8641			if (ret) {
 8642				btrfs_err_rl(root->fs_info,
 8643					"Error "
 8644					"%d accounting shared subtree. Quota "
 8645					"is out of sync, rescan required.",
 8646					ret);
 8647			}
 8648		}
 8649		ret = btrfs_free_extent(trans, root, bytenr, blocksize, parent,
 8650				root->root_key.objectid, level - 1, 0);
 8651		BUG_ON(ret); /* -ENOMEM */
 8652	}
 8653	btrfs_tree_unlock(next);
 8654	free_extent_buffer(next);
 8655	*lookup_info = 1;
 8656	return 1;
 8657}
 8658
 8659/*
 8660 * helper to process tree block while walking up the tree.
 8661 *
 8662 * when wc->stage == DROP_REFERENCE, this function drops
 8663 * reference count on the block.
 8664 *
 8665 * when wc->stage == UPDATE_BACKREF, this function changes
 8666 * wc->stage back to DROP_REFERENCE if we changed wc->stage
 8667 * to UPDATE_BACKREF previously while processing the block.
 8668 *
 8669 * NOTE: return value 1 means we should stop walking up.
 8670 */
 8671static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
 8672				 struct btrfs_root *root,
 8673				 struct btrfs_path *path,
 8674				 struct walk_control *wc)
 8675{
 8676	int ret;
 
 8677	int level = wc->level;
 8678	struct extent_buffer *eb = path->nodes[level];
 8679	u64 parent = 0;
 8680
 8681	if (wc->stage == UPDATE_BACKREF) {
 8682		BUG_ON(wc->shared_level < level);
 8683		if (level < wc->shared_level)
 8684			goto out;
 8685
 8686		ret = find_next_key(path, level + 1, &wc->update_progress);
 8687		if (ret > 0)
 8688			wc->update_ref = 0;
 8689
 8690		wc->stage = DROP_REFERENCE;
 8691		wc->shared_level = -1;
 8692		path->slots[level] = 0;
 8693
 8694		/*
 8695		 * check reference count again if the block isn't locked.
 8696		 * we should start walking down the tree again if reference
 8697		 * count is one.
 8698		 */
 8699		if (!path->locks[level]) {
 8700			BUG_ON(level == 0);
 8701			btrfs_tree_lock(eb);
 8702			btrfs_set_lock_blocking(eb);
 8703			path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 8704
 8705			ret = btrfs_lookup_extent_info(trans, root,
 8706						       eb->start, level, 1,
 8707						       &wc->refs[level],
 8708						       &wc->flags[level]);
 
 8709			if (ret < 0) {
 8710				btrfs_tree_unlock_rw(eb, path->locks[level]);
 8711				path->locks[level] = 0;
 8712				return ret;
 8713			}
 8714			BUG_ON(wc->refs[level] == 0);
 
 
 
 
 
 8715			if (wc->refs[level] == 1) {
 8716				btrfs_tree_unlock_rw(eb, path->locks[level]);
 8717				path->locks[level] = 0;
 8718				return 1;
 8719			}
 8720		}
 8721	}
 8722
 8723	/* wc->stage == DROP_REFERENCE */
 8724	BUG_ON(wc->refs[level] > 1 && !path->locks[level]);
 8725
 8726	if (wc->refs[level] == 1) {
 8727		if (level == 0) {
 8728			if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
 8729				ret = btrfs_dec_ref(trans, root, eb, 1);
 8730			else
 8731				ret = btrfs_dec_ref(trans, root, eb, 0);
 8732			BUG_ON(ret); /* -ENOMEM */
 8733			ret = account_leaf_items(trans, root, eb);
 8734			if (ret) {
 8735				btrfs_err_rl(root->fs_info,
 8736					"error "
 8737					"%d accounting leaf items. Quota "
 8738					"is out of sync, rescan required.",
 8739					ret);
 
 
 
 
 
 8740			}
 8741		}
 8742		/* make block locked assertion in clean_tree_block happy */
 8743		if (!path->locks[level] &&
 8744		    btrfs_header_generation(eb) == trans->transid) {
 8745			btrfs_tree_lock(eb);
 8746			btrfs_set_lock_blocking(eb);
 8747			path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 8748		}
 8749		clean_tree_block(trans, root->fs_info, eb);
 8750	}
 8751
 8752	if (eb == root->node) {
 8753		if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
 8754			parent = eb->start;
 8755		else
 8756			BUG_ON(root->root_key.objectid !=
 8757			       btrfs_header_owner(eb));
 8758	} else {
 8759		if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
 8760			parent = path->nodes[level + 1]->start;
 8761		else
 8762			BUG_ON(root->root_key.objectid !=
 8763			       btrfs_header_owner(path->nodes[level + 1]));
 8764	}
 8765
 8766	btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1);
 
 
 
 8767out:
 8768	wc->refs[level] = 0;
 8769	wc->flags[level] = 0;
 8770	return 0;
 
 
 
 
 
 8771}
 8772
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8773static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
 8774				   struct btrfs_root *root,
 8775				   struct btrfs_path *path,
 8776				   struct walk_control *wc)
 8777{
 8778	int level = wc->level;
 8779	int lookup_info = 1;
 8780	int ret;
 8781
 
 8782	while (level >= 0) {
 8783		ret = walk_down_proc(trans, root, path, wc, lookup_info);
 8784		if (ret > 0)
 8785			break;
 8786
 8787		if (level == 0)
 8788			break;
 8789
 8790		if (path->slots[level] >=
 8791		    btrfs_header_nritems(path->nodes[level]))
 8792			break;
 8793
 8794		ret = do_walk_down(trans, root, path, wc, &lookup_info);
 8795		if (ret > 0) {
 8796			path->slots[level]++;
 8797			continue;
 8798		} else if (ret < 0)
 8799			return ret;
 8800		level = wc->level;
 8801	}
 8802	return 0;
 8803}
 8804
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8805static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
 8806				 struct btrfs_root *root,
 8807				 struct btrfs_path *path,
 8808				 struct walk_control *wc, int max_level)
 8809{
 8810	int level = wc->level;
 8811	int ret;
 8812
 8813	path->slots[level] = btrfs_header_nritems(path->nodes[level]);
 8814	while (level < max_level && path->nodes[level]) {
 8815		wc->level = level;
 8816		if (path->slots[level] + 1 <
 8817		    btrfs_header_nritems(path->nodes[level])) {
 8818			path->slots[level]++;
 8819			return 0;
 8820		} else {
 8821			ret = walk_up_proc(trans, root, path, wc);
 8822			if (ret > 0)
 8823				return 0;
 
 
 8824
 8825			if (path->locks[level]) {
 8826				btrfs_tree_unlock_rw(path->nodes[level],
 8827						     path->locks[level]);
 8828				path->locks[level] = 0;
 8829			}
 8830			free_extent_buffer(path->nodes[level]);
 8831			path->nodes[level] = NULL;
 8832			level++;
 8833		}
 8834	}
 8835	return 1;
 8836}
 8837
 8838/*
 8839 * drop a subvolume tree.
 8840 *
 8841 * this function traverses the tree freeing any blocks that only
 8842 * referenced by the tree.
 8843 *
 8844 * when a shared tree block is found. this function decreases its
 8845 * reference count by one. if update_ref is true, this function
 8846 * also make sure backrefs for the shared block and all lower level
 8847 * blocks are properly updated.
 8848 *
 8849 * If called with for_reloc == 0, may exit early with -EAGAIN
 8850 */
 8851int btrfs_drop_snapshot(struct btrfs_root *root,
 8852			 struct btrfs_block_rsv *block_rsv, int update_ref,
 8853			 int for_reloc)
 8854{
 
 
 8855	struct btrfs_path *path;
 8856	struct btrfs_trans_handle *trans;
 8857	struct btrfs_root *tree_root = root->fs_info->tree_root;
 8858	struct btrfs_root_item *root_item = &root->root_item;
 8859	struct walk_control *wc;
 8860	struct btrfs_key key;
 8861	int err = 0;
 8862	int ret;
 8863	int level;
 8864	bool root_dropped = false;
 
 8865
 8866	btrfs_debug(root->fs_info, "Drop subvolume %llu", root->objectid);
 8867
 8868	path = btrfs_alloc_path();
 8869	if (!path) {
 8870		err = -ENOMEM;
 8871		goto out;
 8872	}
 8873
 8874	wc = kzalloc(sizeof(*wc), GFP_NOFS);
 8875	if (!wc) {
 8876		btrfs_free_path(path);
 8877		err = -ENOMEM;
 8878		goto out;
 8879	}
 8880
 8881	trans = btrfs_start_transaction(tree_root, 0);
 
 
 
 
 
 
 
 8882	if (IS_ERR(trans)) {
 8883		err = PTR_ERR(trans);
 8884		goto out_free;
 8885	}
 8886
 8887	if (block_rsv)
 8888		trans->block_rsv = block_rsv;
 
 
 
 
 
 
 
 
 
 
 
 
 8889
 8890	if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
 8891		level = btrfs_header_level(root->node);
 8892		path->nodes[level] = btrfs_lock_root_node(root);
 8893		btrfs_set_lock_blocking(path->nodes[level]);
 8894		path->slots[level] = 0;
 8895		path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 8896		memset(&wc->update_progress, 0,
 8897		       sizeof(wc->update_progress));
 8898	} else {
 8899		btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
 8900		memcpy(&wc->update_progress, &key,
 8901		       sizeof(wc->update_progress));
 8902
 8903		level = root_item->drop_level;
 8904		BUG_ON(level == 0);
 8905		path->lowest_level = level;
 8906		ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
 8907		path->lowest_level = 0;
 8908		if (ret < 0) {
 8909			err = ret;
 8910			goto out_end_trans;
 8911		}
 8912		WARN_ON(ret > 0);
 
 8913
 8914		/*
 8915		 * unlock our path, this is safe because only this
 8916		 * function is allowed to delete this snapshot
 8917		 */
 8918		btrfs_unlock_up_safe(path, 0);
 8919
 8920		level = btrfs_header_level(root->node);
 8921		while (1) {
 8922			btrfs_tree_lock(path->nodes[level]);
 8923			btrfs_set_lock_blocking(path->nodes[level]);
 8924			path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 8925
 8926			ret = btrfs_lookup_extent_info(trans, root,
 
 
 
 
 8927						path->nodes[level]->start,
 8928						level, 1, &wc->refs[level],
 8929						&wc->flags[level]);
 8930			if (ret < 0) {
 8931				err = ret;
 8932				goto out_end_trans;
 8933			}
 8934			BUG_ON(wc->refs[level] == 0);
 8935
 8936			if (level == root_item->drop_level)
 8937				break;
 8938
 8939			btrfs_tree_unlock(path->nodes[level]);
 8940			path->locks[level] = 0;
 8941			WARN_ON(wc->refs[level] != 1);
 8942			level--;
 8943		}
 8944	}
 8945
 
 8946	wc->level = level;
 8947	wc->shared_level = -1;
 8948	wc->stage = DROP_REFERENCE;
 8949	wc->update_ref = update_ref;
 8950	wc->keep_locks = 0;
 8951	wc->for_reloc = for_reloc;
 8952	wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
 8953
 8954	while (1) {
 8955
 8956		ret = walk_down_tree(trans, root, path, wc);
 8957		if (ret < 0) {
 8958			err = ret;
 8959			break;
 8960		}
 8961
 8962		ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL);
 8963		if (ret < 0) {
 8964			err = ret;
 8965			break;
 8966		}
 8967
 8968		if (ret > 0) {
 8969			BUG_ON(wc->stage != DROP_REFERENCE);
 
 8970			break;
 8971		}
 8972
 8973		if (wc->stage == DROP_REFERENCE) {
 8974			level = wc->level;
 8975			btrfs_node_key(path->nodes[level],
 8976				       &root_item->drop_progress,
 8977				       path->slots[level]);
 8978			root_item->drop_level = level;
 8979		}
 
 
 8980
 8981		BUG_ON(wc->level == 0);
 8982		if (btrfs_should_end_transaction(trans, tree_root) ||
 8983		    (!for_reloc && btrfs_need_cleaner_sleep(root))) {
 8984			ret = btrfs_update_root(trans, tree_root,
 8985						&root->root_key,
 8986						root_item);
 8987			if (ret) {
 8988				btrfs_abort_transaction(trans, tree_root, ret);
 8989				err = ret;
 8990				goto out_end_trans;
 8991			}
 8992
 8993			btrfs_end_transaction_throttle(trans, tree_root);
 8994			if (!for_reloc && btrfs_need_cleaner_sleep(root)) {
 8995				pr_debug("BTRFS: drop snapshot early exit\n");
 8996				err = -EAGAIN;
 
 
 
 
 8997				goto out_free;
 8998			}
 8999
 9000			trans = btrfs_start_transaction(tree_root, 0);
 
 
 
 
 
 
 
 
 9001			if (IS_ERR(trans)) {
 9002				err = PTR_ERR(trans);
 9003				goto out_free;
 9004			}
 9005			if (block_rsv)
 9006				trans->block_rsv = block_rsv;
 9007		}
 9008	}
 9009	btrfs_release_path(path);
 9010	if (err)
 9011		goto out_end_trans;
 9012
 9013	ret = btrfs_del_root(trans, tree_root, &root->root_key);
 9014	if (ret) {
 9015		btrfs_abort_transaction(trans, tree_root, ret);
 9016		goto out_end_trans;
 9017	}
 9018
 9019	if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) {
 9020		ret = btrfs_find_root(tree_root, &root->root_key, path,
 9021				      NULL, NULL);
 9022		if (ret < 0) {
 9023			btrfs_abort_transaction(trans, tree_root, ret);
 9024			err = ret;
 9025			goto out_end_trans;
 9026		} else if (ret > 0) {
 9027			/* if we fail to delete the orphan item this time
 
 
 9028			 * around, it'll get picked up the next time.
 9029			 *
 9030			 * The most common failure here is just -ENOENT.
 9031			 */
 9032			btrfs_del_orphan_item(trans, tree_root,
 9033					      root->root_key.objectid);
 9034		}
 9035	}
 9036
 9037	if (test_bit(BTRFS_ROOT_IN_RADIX, &root->state)) {
 
 
 
 
 
 
 
 
 9038		btrfs_add_dropped_root(trans, root);
 9039	} else {
 9040		free_extent_buffer(root->node);
 9041		free_extent_buffer(root->commit_root);
 9042		btrfs_put_fs_root(root);
 9043	}
 9044	root_dropped = true;
 9045out_end_trans:
 9046	btrfs_end_transaction_throttle(trans, tree_root);
 
 
 
 9047out_free:
 9048	kfree(wc);
 9049	btrfs_free_path(path);
 9050out:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 9051	/*
 9052	 * So if we need to stop dropping the snapshot for whatever reason we
 9053	 * need to make sure to add it back to the dead root list so that we
 9054	 * keep trying to do the work later.  This also cleans up roots if we
 9055	 * don't have it in the radix (like when we recover after a power fail
 9056	 * or unmount) so we don't leak memory.
 9057	 */
 9058	if (!for_reloc && root_dropped == false)
 9059		btrfs_add_dead_root(root);
 9060	if (err && err != -EAGAIN)
 9061		btrfs_std_error(root->fs_info, err, NULL);
 9062	return err;
 9063}
 9064
 9065/*
 9066 * drop subtree rooted at tree block 'node'.
 9067 *
 9068 * NOTE: this function will unlock and release tree block 'node'
 9069 * only used by relocation code
 9070 */
 9071int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
 9072			struct btrfs_root *root,
 9073			struct extent_buffer *node,
 9074			struct extent_buffer *parent)
 9075{
 
 9076	struct btrfs_path *path;
 9077	struct walk_control *wc;
 9078	int level;
 9079	int parent_level;
 9080	int ret = 0;
 9081	int wret;
 9082
 9083	BUG_ON(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID);
 9084
 9085	path = btrfs_alloc_path();
 9086	if (!path)
 9087		return -ENOMEM;
 9088
 9089	wc = kzalloc(sizeof(*wc), GFP_NOFS);
 9090	if (!wc) {
 9091		btrfs_free_path(path);
 9092		return -ENOMEM;
 9093	}
 9094
 9095	btrfs_assert_tree_locked(parent);
 9096	parent_level = btrfs_header_level(parent);
 9097	extent_buffer_get(parent);
 9098	path->nodes[parent_level] = parent;
 9099	path->slots[parent_level] = btrfs_header_nritems(parent);
 9100
 9101	btrfs_assert_tree_locked(node);
 9102	level = btrfs_header_level(node);
 9103	path->nodes[level] = node;
 9104	path->slots[level] = 0;
 9105	path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING;
 9106
 9107	wc->refs[parent_level] = 1;
 9108	wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF;
 9109	wc->level = level;
 9110	wc->shared_level = -1;
 9111	wc->stage = DROP_REFERENCE;
 9112	wc->update_ref = 0;
 9113	wc->keep_locks = 1;
 9114	wc->for_reloc = 1;
 9115	wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(root);
 9116
 9117	while (1) {
 9118		wret = walk_down_tree(trans, root, path, wc);
 9119		if (wret < 0) {
 9120			ret = wret;
 9121			break;
 9122		}
 9123
 9124		wret = walk_up_tree(trans, root, path, wc, parent_level);
 9125		if (wret < 0)
 9126			ret = wret;
 9127		if (wret != 0)
 9128			break;
 9129	}
 9130
 9131	kfree(wc);
 9132	btrfs_free_path(path);
 9133	return ret;
 9134}
 9135
 9136static u64 update_block_group_flags(struct btrfs_root *root, u64 flags)
 9137{
 9138	u64 num_devices;
 9139	u64 stripped;
 9140
 9141	/*
 9142	 * if restripe for this chunk_type is on pick target profile and
 9143	 * return, otherwise do the usual balance
 9144	 */
 9145	stripped = get_restripe_target(root->fs_info, flags);
 9146	if (stripped)
 9147		return extended_to_chunk(stripped);
 9148
 9149	num_devices = root->fs_info->fs_devices->rw_devices;
 9150
 9151	stripped = BTRFS_BLOCK_GROUP_RAID0 |
 9152		BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6 |
 9153		BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID10;
 9154
 9155	if (num_devices == 1) {
 9156		stripped |= BTRFS_BLOCK_GROUP_DUP;
 9157		stripped = flags & ~stripped;
 9158
 9159		/* turn raid0 into single device chunks */
 9160		if (flags & BTRFS_BLOCK_GROUP_RAID0)
 9161			return stripped;
 9162
 9163		/* turn mirroring into duplication */
 9164		if (flags & (BTRFS_BLOCK_GROUP_RAID1 |
 9165			     BTRFS_BLOCK_GROUP_RAID10))
 9166			return stripped | BTRFS_BLOCK_GROUP_DUP;
 9167	} else {
 9168		/* they already had raid on here, just return */
 9169		if (flags & stripped)
 9170			return flags;
 9171
 9172		stripped |= BTRFS_BLOCK_GROUP_DUP;
 9173		stripped = flags & ~stripped;
 9174
 9175		/* switch duplicated blocks with raid1 */
 9176		if (flags & BTRFS_BLOCK_GROUP_DUP)
 9177			return stripped | BTRFS_BLOCK_GROUP_RAID1;
 9178
 9179		/* this is drive concat, leave it alone */
 9180	}
 9181
 9182	return flags;
 9183}
 9184
 9185static int inc_block_group_ro(struct btrfs_block_group_cache *cache, int force)
 9186{
 9187	struct btrfs_space_info *sinfo = cache->space_info;
 9188	u64 num_bytes;
 9189	u64 min_allocable_bytes;
 9190	int ret = -ENOSPC;
 9191
 9192	/*
 9193	 * We need some metadata space and system metadata space for
 9194	 * allocating chunks in some corner cases until we force to set
 9195	 * it to be readonly.
 9196	 */
 9197	if ((sinfo->flags &
 9198	     (BTRFS_BLOCK_GROUP_SYSTEM | BTRFS_BLOCK_GROUP_METADATA)) &&
 9199	    !force)
 9200		min_allocable_bytes = SZ_1M;
 9201	else
 9202		min_allocable_bytes = 0;
 9203
 9204	spin_lock(&sinfo->lock);
 9205	spin_lock(&cache->lock);
 9206
 9207	if (cache->ro) {
 9208		cache->ro++;
 9209		ret = 0;
 9210		goto out;
 9211	}
 9212
 9213	num_bytes = cache->key.offset - cache->reserved - cache->pinned -
 9214		    cache->bytes_super - btrfs_block_group_used(&cache->item);
 9215
 9216	if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
 9217	    sinfo->bytes_may_use + sinfo->bytes_readonly + num_bytes +
 9218	    min_allocable_bytes <= sinfo->total_bytes) {
 9219		sinfo->bytes_readonly += num_bytes;
 9220		cache->ro++;
 9221		list_add_tail(&cache->ro_list, &sinfo->ro_bgs);
 9222		ret = 0;
 9223	}
 9224out:
 9225	spin_unlock(&cache->lock);
 9226	spin_unlock(&sinfo->lock);
 9227	return ret;
 9228}
 9229
 9230int btrfs_inc_block_group_ro(struct btrfs_root *root,
 9231			     struct btrfs_block_group_cache *cache)
 9232
 9233{
 9234	struct btrfs_trans_handle *trans;
 9235	u64 alloc_flags;
 9236	int ret;
 9237
 9238again:
 9239	trans = btrfs_join_transaction(root);
 9240	if (IS_ERR(trans))
 9241		return PTR_ERR(trans);
 9242
 9243	/*
 9244	 * we're not allowed to set block groups readonly after the dirty
 9245	 * block groups cache has started writing.  If it already started,
 9246	 * back off and let this transaction commit
 9247	 */
 9248	mutex_lock(&root->fs_info->ro_block_group_mutex);
 9249	if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) {
 9250		u64 transid = trans->transid;
 9251
 9252		mutex_unlock(&root->fs_info->ro_block_group_mutex);
 9253		btrfs_end_transaction(trans, root);
 9254
 9255		ret = btrfs_wait_for_commit(root, transid);
 9256		if (ret)
 9257			return ret;
 9258		goto again;
 9259	}
 9260
 9261	/*
 9262	 * if we are changing raid levels, try to allocate a corresponding
 9263	 * block group with the new raid level.
 9264	 */
 9265	alloc_flags = update_block_group_flags(root, cache->flags);
 9266	if (alloc_flags != cache->flags) {
 9267		ret = do_chunk_alloc(trans, root, alloc_flags,
 9268				     CHUNK_ALLOC_FORCE);
 9269		/*
 9270		 * ENOSPC is allowed here, we may have enough space
 9271		 * already allocated at the new raid level to
 9272		 * carry on
 9273		 */
 9274		if (ret == -ENOSPC)
 9275			ret = 0;
 9276		if (ret < 0)
 9277			goto out;
 9278	}
 9279
 9280	ret = inc_block_group_ro(cache, 0);
 9281	if (!ret)
 9282		goto out;
 9283	alloc_flags = get_alloc_profile(root, cache->space_info->flags);
 9284	ret = do_chunk_alloc(trans, root, alloc_flags,
 9285			     CHUNK_ALLOC_FORCE);
 9286	if (ret < 0)
 9287		goto out;
 9288	ret = inc_block_group_ro(cache, 0);
 9289out:
 9290	if (cache->flags & BTRFS_BLOCK_GROUP_SYSTEM) {
 9291		alloc_flags = update_block_group_flags(root, cache->flags);
 9292		lock_chunks(root->fs_info->chunk_root);
 9293		check_system_chunk(trans, root, alloc_flags);
 9294		unlock_chunks(root->fs_info->chunk_root);
 9295	}
 9296	mutex_unlock(&root->fs_info->ro_block_group_mutex);
 9297
 9298	btrfs_end_transaction(trans, root);
 9299	return ret;
 9300}
 9301
 9302int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans,
 9303			    struct btrfs_root *root, u64 type)
 9304{
 9305	u64 alloc_flags = get_alloc_profile(root, type);
 9306	return do_chunk_alloc(trans, root, alloc_flags,
 9307			      CHUNK_ALLOC_FORCE);
 9308}
 9309
 9310/*
 9311 * helper to account the unused space of all the readonly block group in the
 9312 * space_info. takes mirrors into account.
 9313 */
 9314u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo)
 9315{
 9316	struct btrfs_block_group_cache *block_group;
 9317	u64 free_bytes = 0;
 9318	int factor;
 9319
 9320	/* It's df, we don't care if it's racey */
 9321	if (list_empty(&sinfo->ro_bgs))
 9322		return 0;
 9323
 9324	spin_lock(&sinfo->lock);
 9325	list_for_each_entry(block_group, &sinfo->ro_bgs, ro_list) {
 9326		spin_lock(&block_group->lock);
 9327
 9328		if (!block_group->ro) {
 9329			spin_unlock(&block_group->lock);
 9330			continue;
 9331		}
 9332
 9333		if (block_group->flags & (BTRFS_BLOCK_GROUP_RAID1 |
 9334					  BTRFS_BLOCK_GROUP_RAID10 |
 9335					  BTRFS_BLOCK_GROUP_DUP))
 9336			factor = 2;
 9337		else
 9338			factor = 1;
 9339
 9340		free_bytes += (block_group->key.offset -
 9341			       btrfs_block_group_used(&block_group->item)) *
 9342			       factor;
 9343
 9344		spin_unlock(&block_group->lock);
 9345	}
 9346	spin_unlock(&sinfo->lock);
 9347
 9348	return free_bytes;
 9349}
 9350
 9351void btrfs_dec_block_group_ro(struct btrfs_root *root,
 9352			      struct btrfs_block_group_cache *cache)
 9353{
 9354	struct btrfs_space_info *sinfo = cache->space_info;
 9355	u64 num_bytes;
 9356
 9357	BUG_ON(!cache->ro);
 9358
 9359	spin_lock(&sinfo->lock);
 9360	spin_lock(&cache->lock);
 9361	if (!--cache->ro) {
 9362		num_bytes = cache->key.offset - cache->reserved -
 9363			    cache->pinned - cache->bytes_super -
 9364			    btrfs_block_group_used(&cache->item);
 9365		sinfo->bytes_readonly -= num_bytes;
 9366		list_del_init(&cache->ro_list);
 9367	}
 9368	spin_unlock(&cache->lock);
 9369	spin_unlock(&sinfo->lock);
 9370}
 9371
 9372/*
 9373 * checks to see if its even possible to relocate this block group.
 9374 *
 9375 * @return - -1 if it's not a good idea to relocate this block group, 0 if its
 9376 * ok to go ahead and try.
 9377 */
 9378int btrfs_can_relocate(struct btrfs_root *root, u64 bytenr)
 9379{
 9380	struct btrfs_block_group_cache *block_group;
 9381	struct btrfs_space_info *space_info;
 9382	struct btrfs_fs_devices *fs_devices = root->fs_info->fs_devices;
 9383	struct btrfs_device *device;
 9384	struct btrfs_trans_handle *trans;
 9385	u64 min_free;
 9386	u64 dev_min = 1;
 9387	u64 dev_nr = 0;
 9388	u64 target;
 9389	int debug;
 9390	int index;
 9391	int full = 0;
 9392	int ret = 0;
 9393
 9394	debug = btrfs_test_opt(root, ENOSPC_DEBUG);
 9395
 9396	block_group = btrfs_lookup_block_group(root->fs_info, bytenr);
 9397
 9398	/* odd, couldn't find the block group, leave it alone */
 9399	if (!block_group) {
 9400		if (debug)
 9401			btrfs_warn(root->fs_info,
 9402				   "can't find block group for bytenr %llu",
 9403				   bytenr);
 9404		return -1;
 9405	}
 9406
 9407	min_free = btrfs_block_group_used(&block_group->item);
 9408
 9409	/* no bytes used, we're good */
 9410	if (!min_free)
 9411		goto out;
 9412
 9413	space_info = block_group->space_info;
 9414	spin_lock(&space_info->lock);
 9415
 9416	full = space_info->full;
 9417
 9418	/*
 9419	 * if this is the last block group we have in this space, we can't
 9420	 * relocate it unless we're able to allocate a new chunk below.
 9421	 *
 9422	 * Otherwise, we need to make sure we have room in the space to handle
 9423	 * all of the extents from this block group.  If we can, we're good
 9424	 */
 9425	if ((space_info->total_bytes != block_group->key.offset) &&
 9426	    (space_info->bytes_used + space_info->bytes_reserved +
 9427	     space_info->bytes_pinned + space_info->bytes_readonly +
 9428	     min_free < space_info->total_bytes)) {
 9429		spin_unlock(&space_info->lock);
 9430		goto out;
 9431	}
 9432	spin_unlock(&space_info->lock);
 9433
 9434	/*
 9435	 * ok we don't have enough space, but maybe we have free space on our
 9436	 * devices to allocate new chunks for relocation, so loop through our
 9437	 * alloc devices and guess if we have enough space.  if this block
 9438	 * group is going to be restriped, run checks against the target
 9439	 * profile instead of the current one.
 9440	 */
 9441	ret = -1;
 9442
 9443	/*
 9444	 * index:
 9445	 *      0: raid10
 9446	 *      1: raid1
 9447	 *      2: dup
 9448	 *      3: raid0
 9449	 *      4: single
 9450	 */
 9451	target = get_restripe_target(root->fs_info, block_group->flags);
 9452	if (target) {
 9453		index = __get_raid_index(extended_to_chunk(target));
 9454	} else {
 9455		/*
 9456		 * this is just a balance, so if we were marked as full
 9457		 * we know there is no space for a new chunk
 9458		 */
 9459		if (full) {
 9460			if (debug)
 9461				btrfs_warn(root->fs_info,
 9462					"no space to alloc new chunk for block group %llu",
 9463					block_group->key.objectid);
 9464			goto out;
 9465		}
 9466
 9467		index = get_block_group_index(block_group);
 9468	}
 9469
 9470	if (index == BTRFS_RAID_RAID10) {
 9471		dev_min = 4;
 9472		/* Divide by 2 */
 9473		min_free >>= 1;
 9474	} else if (index == BTRFS_RAID_RAID1) {
 9475		dev_min = 2;
 9476	} else if (index == BTRFS_RAID_DUP) {
 9477		/* Multiply by 2 */
 9478		min_free <<= 1;
 9479	} else if (index == BTRFS_RAID_RAID0) {
 9480		dev_min = fs_devices->rw_devices;
 9481		min_free = div64_u64(min_free, dev_min);
 9482	}
 9483
 9484	/* We need to do this so that we can look at pending chunks */
 9485	trans = btrfs_join_transaction(root);
 9486	if (IS_ERR(trans)) {
 9487		ret = PTR_ERR(trans);
 9488		goto out;
 9489	}
 9490
 9491	mutex_lock(&root->fs_info->chunk_mutex);
 9492	list_for_each_entry(device, &fs_devices->alloc_list, dev_alloc_list) {
 9493		u64 dev_offset;
 9494
 9495		/*
 9496		 * check to make sure we can actually find a chunk with enough
 9497		 * space to fit our block group in.
 9498		 */
 9499		if (device->total_bytes > device->bytes_used + min_free &&
 9500		    !device->is_tgtdev_for_dev_replace) {
 9501			ret = find_free_dev_extent(trans, device, min_free,
 9502						   &dev_offset, NULL);
 9503			if (!ret)
 9504				dev_nr++;
 9505
 9506			if (dev_nr >= dev_min)
 9507				break;
 9508
 9509			ret = -1;
 9510		}
 9511	}
 9512	if (debug && ret == -1)
 9513		btrfs_warn(root->fs_info,
 9514			"no space to allocate a new chunk for block group %llu",
 9515			block_group->key.objectid);
 9516	mutex_unlock(&root->fs_info->chunk_mutex);
 9517	btrfs_end_transaction(trans, root);
 9518out:
 9519	btrfs_put_block_group(block_group);
 9520	return ret;
 9521}
 9522
 9523static int find_first_block_group(struct btrfs_root *root,
 9524		struct btrfs_path *path, struct btrfs_key *key)
 9525{
 9526	int ret = 0;
 9527	struct btrfs_key found_key;
 9528	struct extent_buffer *leaf;
 9529	int slot;
 9530
 9531	ret = btrfs_search_slot(NULL, root, key, path, 0, 0);
 9532	if (ret < 0)
 9533		goto out;
 9534
 9535	while (1) {
 9536		slot = path->slots[0];
 9537		leaf = path->nodes[0];
 9538		if (slot >= btrfs_header_nritems(leaf)) {
 9539			ret = btrfs_next_leaf(root, path);
 9540			if (ret == 0)
 9541				continue;
 9542			if (ret < 0)
 9543				goto out;
 9544			break;
 9545		}
 9546		btrfs_item_key_to_cpu(leaf, &found_key, slot);
 9547
 9548		if (found_key.objectid >= key->objectid &&
 9549		    found_key.type == BTRFS_BLOCK_GROUP_ITEM_KEY) {
 9550			ret = 0;
 9551			goto out;
 9552		}
 9553		path->slots[0]++;
 9554	}
 9555out:
 9556	return ret;
 9557}
 9558
 9559void btrfs_put_block_group_cache(struct btrfs_fs_info *info)
 9560{
 9561	struct btrfs_block_group_cache *block_group;
 9562	u64 last = 0;
 9563
 9564	while (1) {
 9565		struct inode *inode;
 9566
 9567		block_group = btrfs_lookup_first_block_group(info, last);
 9568		while (block_group) {
 9569			spin_lock(&block_group->lock);
 9570			if (block_group->iref)
 9571				break;
 9572			spin_unlock(&block_group->lock);
 9573			block_group = next_block_group(info->tree_root,
 9574						       block_group);
 9575		}
 9576		if (!block_group) {
 9577			if (last == 0)
 9578				break;
 9579			last = 0;
 9580			continue;
 9581		}
 9582
 9583		inode = block_group->inode;
 9584		block_group->iref = 0;
 9585		block_group->inode = NULL;
 9586		spin_unlock(&block_group->lock);
 9587		iput(inode);
 9588		last = block_group->key.objectid + block_group->key.offset;
 9589		btrfs_put_block_group(block_group);
 9590	}
 9591}
 9592
 9593int btrfs_free_block_groups(struct btrfs_fs_info *info)
 9594{
 9595	struct btrfs_block_group_cache *block_group;
 9596	struct btrfs_space_info *space_info;
 9597	struct btrfs_caching_control *caching_ctl;
 9598	struct rb_node *n;
 9599
 9600	down_write(&info->commit_root_sem);
 9601	while (!list_empty(&info->caching_block_groups)) {
 9602		caching_ctl = list_entry(info->caching_block_groups.next,
 9603					 struct btrfs_caching_control, list);
 9604		list_del(&caching_ctl->list);
 9605		put_caching_control(caching_ctl);
 9606	}
 9607	up_write(&info->commit_root_sem);
 9608
 9609	spin_lock(&info->unused_bgs_lock);
 9610	while (!list_empty(&info->unused_bgs)) {
 9611		block_group = list_first_entry(&info->unused_bgs,
 9612					       struct btrfs_block_group_cache,
 9613					       bg_list);
 9614		list_del_init(&block_group->bg_list);
 9615		btrfs_put_block_group(block_group);
 9616	}
 9617	spin_unlock(&info->unused_bgs_lock);
 9618
 9619	spin_lock(&info->block_group_cache_lock);
 9620	while ((n = rb_last(&info->block_group_cache_tree)) != NULL) {
 9621		block_group = rb_entry(n, struct btrfs_block_group_cache,
 9622				       cache_node);
 9623		rb_erase(&block_group->cache_node,
 9624			 &info->block_group_cache_tree);
 9625		RB_CLEAR_NODE(&block_group->cache_node);
 9626		spin_unlock(&info->block_group_cache_lock);
 9627
 9628		down_write(&block_group->space_info->groups_sem);
 9629		list_del(&block_group->list);
 9630		up_write(&block_group->space_info->groups_sem);
 9631
 9632		if (block_group->cached == BTRFS_CACHE_STARTED)
 9633			wait_block_group_cache_done(block_group);
 9634
 9635		/*
 9636		 * We haven't cached this block group, which means we could
 9637		 * possibly have excluded extents on this block group.
 9638		 */
 9639		if (block_group->cached == BTRFS_CACHE_NO ||
 9640		    block_group->cached == BTRFS_CACHE_ERROR)
 9641			free_excluded_extents(info->extent_root, block_group);
 9642
 9643		btrfs_remove_free_space_cache(block_group);
 9644		btrfs_put_block_group(block_group);
 9645
 9646		spin_lock(&info->block_group_cache_lock);
 9647	}
 9648	spin_unlock(&info->block_group_cache_lock);
 9649
 9650	/* now that all the block groups are freed, go through and
 9651	 * free all the space_info structs.  This is only called during
 9652	 * the final stages of unmount, and so we know nobody is
 9653	 * using them.  We call synchronize_rcu() once before we start,
 9654	 * just to be on the safe side.
 9655	 */
 9656	synchronize_rcu();
 9657
 9658	release_global_block_rsv(info);
 9659
 9660	while (!list_empty(&info->space_info)) {
 9661		int i;
 9662
 9663		space_info = list_entry(info->space_info.next,
 9664					struct btrfs_space_info,
 9665					list);
 9666		if (btrfs_test_opt(info->tree_root, ENOSPC_DEBUG)) {
 9667			if (WARN_ON(space_info->bytes_pinned > 0 ||
 9668			    space_info->bytes_reserved > 0 ||
 9669			    space_info->bytes_may_use > 0)) {
 9670				dump_space_info(space_info, 0, 0);
 9671			}
 9672		}
 9673		list_del(&space_info->list);
 9674		for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
 9675			struct kobject *kobj;
 9676			kobj = space_info->block_group_kobjs[i];
 9677			space_info->block_group_kobjs[i] = NULL;
 9678			if (kobj) {
 9679				kobject_del(kobj);
 9680				kobject_put(kobj);
 9681			}
 9682		}
 9683		kobject_del(&space_info->kobj);
 9684		kobject_put(&space_info->kobj);
 9685	}
 9686	return 0;
 9687}
 9688
 9689static void __link_block_group(struct btrfs_space_info *space_info,
 9690			       struct btrfs_block_group_cache *cache)
 9691{
 9692	int index = get_block_group_index(cache);
 9693	bool first = false;
 9694
 9695	down_write(&space_info->groups_sem);
 9696	if (list_empty(&space_info->block_groups[index]))
 9697		first = true;
 9698	list_add_tail(&cache->list, &space_info->block_groups[index]);
 9699	up_write(&space_info->groups_sem);
 9700
 9701	if (first) {
 9702		struct raid_kobject *rkobj;
 9703		int ret;
 9704
 9705		rkobj = kzalloc(sizeof(*rkobj), GFP_NOFS);
 9706		if (!rkobj)
 9707			goto out_err;
 9708		rkobj->raid_type = index;
 9709		kobject_init(&rkobj->kobj, &btrfs_raid_ktype);
 9710		ret = kobject_add(&rkobj->kobj, &space_info->kobj,
 9711				  "%s", get_raid_name(index));
 9712		if (ret) {
 9713			kobject_put(&rkobj->kobj);
 9714			goto out_err;
 9715		}
 9716		space_info->block_group_kobjs[index] = &rkobj->kobj;
 9717	}
 9718
 9719	return;
 9720out_err:
 9721	pr_warn("BTRFS: failed to add kobject for block cache. ignoring.\n");
 9722}
 9723
 9724static struct btrfs_block_group_cache *
 9725btrfs_create_block_group_cache(struct btrfs_root *root, u64 start, u64 size)
 9726{
 9727	struct btrfs_block_group_cache *cache;
 9728
 9729	cache = kzalloc(sizeof(*cache), GFP_NOFS);
 9730	if (!cache)
 9731		return NULL;
 9732
 9733	cache->free_space_ctl = kzalloc(sizeof(*cache->free_space_ctl),
 9734					GFP_NOFS);
 9735	if (!cache->free_space_ctl) {
 9736		kfree(cache);
 9737		return NULL;
 9738	}
 9739
 9740	cache->key.objectid = start;
 9741	cache->key.offset = size;
 9742	cache->key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
 9743
 9744	cache->sectorsize = root->sectorsize;
 9745	cache->fs_info = root->fs_info;
 9746	cache->full_stripe_len = btrfs_full_stripe_len(root,
 9747					       &root->fs_info->mapping_tree,
 9748					       start);
 9749	set_free_space_tree_thresholds(cache);
 9750
 9751	atomic_set(&cache->count, 1);
 9752	spin_lock_init(&cache->lock);
 9753	init_rwsem(&cache->data_rwsem);
 9754	INIT_LIST_HEAD(&cache->list);
 9755	INIT_LIST_HEAD(&cache->cluster_list);
 9756	INIT_LIST_HEAD(&cache->bg_list);
 9757	INIT_LIST_HEAD(&cache->ro_list);
 9758	INIT_LIST_HEAD(&cache->dirty_list);
 9759	INIT_LIST_HEAD(&cache->io_list);
 9760	btrfs_init_free_space_ctl(cache);
 9761	atomic_set(&cache->trimming, 0);
 9762	mutex_init(&cache->free_space_lock);
 9763
 9764	return cache;
 9765}
 9766
 9767int btrfs_read_block_groups(struct btrfs_root *root)
 9768{
 9769	struct btrfs_path *path;
 9770	int ret;
 9771	struct btrfs_block_group_cache *cache;
 9772	struct btrfs_fs_info *info = root->fs_info;
 9773	struct btrfs_space_info *space_info;
 9774	struct btrfs_key key;
 9775	struct btrfs_key found_key;
 9776	struct extent_buffer *leaf;
 9777	int need_clear = 0;
 9778	u64 cache_gen;
 9779
 9780	root = info->extent_root;
 9781	key.objectid = 0;
 9782	key.offset = 0;
 9783	key.type = BTRFS_BLOCK_GROUP_ITEM_KEY;
 9784	path = btrfs_alloc_path();
 9785	if (!path)
 9786		return -ENOMEM;
 9787	path->reada = READA_FORWARD;
 9788
 9789	cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy);
 9790	if (btrfs_test_opt(root, SPACE_CACHE) &&
 9791	    btrfs_super_generation(root->fs_info->super_copy) != cache_gen)
 9792		need_clear = 1;
 9793	if (btrfs_test_opt(root, CLEAR_CACHE))
 9794		need_clear = 1;
 9795
 9796	while (1) {
 9797		ret = find_first_block_group(root, path, &key);
 9798		if (ret > 0)
 9799			break;
 9800		if (ret != 0)
 9801			goto error;
 9802
 9803		leaf = path->nodes[0];
 9804		btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
 9805
 9806		cache = btrfs_create_block_group_cache(root, found_key.objectid,
 9807						       found_key.offset);
 9808		if (!cache) {
 9809			ret = -ENOMEM;
 9810			goto error;
 9811		}
 9812
 9813		if (need_clear) {
 9814			/*
 9815			 * When we mount with old space cache, we need to
 9816			 * set BTRFS_DC_CLEAR and set dirty flag.
 9817			 *
 9818			 * a) Setting 'BTRFS_DC_CLEAR' makes sure that we
 9819			 *    truncate the old free space cache inode and
 9820			 *    setup a new one.
 9821			 * b) Setting 'dirty flag' makes sure that we flush
 9822			 *    the new space cache info onto disk.
 9823			 */
 9824			if (btrfs_test_opt(root, SPACE_CACHE))
 9825				cache->disk_cache_state = BTRFS_DC_CLEAR;
 9826		}
 9827
 9828		read_extent_buffer(leaf, &cache->item,
 9829				   btrfs_item_ptr_offset(leaf, path->slots[0]),
 9830				   sizeof(cache->item));
 9831		cache->flags = btrfs_block_group_flags(&cache->item);
 9832
 9833		key.objectid = found_key.objectid + found_key.offset;
 9834		btrfs_release_path(path);
 9835
 9836		/*
 9837		 * We need to exclude the super stripes now so that the space
 9838		 * info has super bytes accounted for, otherwise we'll think
 9839		 * we have more space than we actually do.
 9840		 */
 9841		ret = exclude_super_stripes(root, cache);
 9842		if (ret) {
 9843			/*
 9844			 * We may have excluded something, so call this just in
 9845			 * case.
 9846			 */
 9847			free_excluded_extents(root, cache);
 9848			btrfs_put_block_group(cache);
 9849			goto error;
 9850		}
 9851
 9852		/*
 9853		 * check for two cases, either we are full, and therefore
 9854		 * don't need to bother with the caching work since we won't
 9855		 * find any space, or we are empty, and we can just add all
 9856		 * the space in and be done with it.  This saves us _alot_ of
 9857		 * time, particularly in the full case.
 9858		 */
 9859		if (found_key.offset == btrfs_block_group_used(&cache->item)) {
 9860			cache->last_byte_to_unpin = (u64)-1;
 9861			cache->cached = BTRFS_CACHE_FINISHED;
 9862			free_excluded_extents(root, cache);
 9863		} else if (btrfs_block_group_used(&cache->item) == 0) {
 9864			cache->last_byte_to_unpin = (u64)-1;
 9865			cache->cached = BTRFS_CACHE_FINISHED;
 9866			add_new_free_space(cache, root->fs_info,
 9867					   found_key.objectid,
 9868					   found_key.objectid +
 9869					   found_key.offset);
 9870			free_excluded_extents(root, cache);
 9871		}
 9872
 9873		ret = btrfs_add_block_group_cache(root->fs_info, cache);
 9874		if (ret) {
 9875			btrfs_remove_free_space_cache(cache);
 9876			btrfs_put_block_group(cache);
 9877			goto error;
 9878		}
 9879
 9880		ret = update_space_info(info, cache->flags, found_key.offset,
 9881					btrfs_block_group_used(&cache->item),
 9882					&space_info);
 9883		if (ret) {
 9884			btrfs_remove_free_space_cache(cache);
 9885			spin_lock(&info->block_group_cache_lock);
 9886			rb_erase(&cache->cache_node,
 9887				 &info->block_group_cache_tree);
 9888			RB_CLEAR_NODE(&cache->cache_node);
 9889			spin_unlock(&info->block_group_cache_lock);
 9890			btrfs_put_block_group(cache);
 9891			goto error;
 9892		}
 9893
 9894		cache->space_info = space_info;
 9895		spin_lock(&cache->space_info->lock);
 9896		cache->space_info->bytes_readonly += cache->bytes_super;
 9897		spin_unlock(&cache->space_info->lock);
 9898
 9899		__link_block_group(space_info, cache);
 9900
 9901		set_avail_alloc_bits(root->fs_info, cache->flags);
 9902		if (btrfs_chunk_readonly(root, cache->key.objectid)) {
 9903			inc_block_group_ro(cache, 1);
 9904		} else if (btrfs_block_group_used(&cache->item) == 0) {
 9905			spin_lock(&info->unused_bgs_lock);
 9906			/* Should always be true but just in case. */
 9907			if (list_empty(&cache->bg_list)) {
 9908				btrfs_get_block_group(cache);
 9909				list_add_tail(&cache->bg_list,
 9910					      &info->unused_bgs);
 9911			}
 9912			spin_unlock(&info->unused_bgs_lock);
 9913		}
 9914	}
 9915
 9916	list_for_each_entry_rcu(space_info, &root->fs_info->space_info, list) {
 9917		if (!(get_alloc_profile(root, space_info->flags) &
 9918		      (BTRFS_BLOCK_GROUP_RAID10 |
 9919		       BTRFS_BLOCK_GROUP_RAID1 |
 9920		       BTRFS_BLOCK_GROUP_RAID5 |
 9921		       BTRFS_BLOCK_GROUP_RAID6 |
 9922		       BTRFS_BLOCK_GROUP_DUP)))
 9923			continue;
 9924		/*
 9925		 * avoid allocating from un-mirrored block group if there are
 9926		 * mirrored block groups.
 9927		 */
 9928		list_for_each_entry(cache,
 9929				&space_info->block_groups[BTRFS_RAID_RAID0],
 9930				list)
 9931			inc_block_group_ro(cache, 1);
 9932		list_for_each_entry(cache,
 9933				&space_info->block_groups[BTRFS_RAID_SINGLE],
 9934				list)
 9935			inc_block_group_ro(cache, 1);
 9936	}
 9937
 9938	init_global_block_rsv(info);
 9939	ret = 0;
 9940error:
 9941	btrfs_free_path(path);
 9942	return ret;
 9943}
 9944
 9945void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans,
 9946				       struct btrfs_root *root)
 9947{
 9948	struct btrfs_block_group_cache *block_group, *tmp;
 9949	struct btrfs_root *extent_root = root->fs_info->extent_root;
 9950	struct btrfs_block_group_item item;
 9951	struct btrfs_key key;
 9952	int ret = 0;
 9953	bool can_flush_pending_bgs = trans->can_flush_pending_bgs;
 9954
 9955	trans->can_flush_pending_bgs = false;
 9956	list_for_each_entry_safe(block_group, tmp, &trans->new_bgs, bg_list) {
 9957		if (ret)
 9958			goto next;
 9959
 9960		spin_lock(&block_group->lock);
 9961		memcpy(&item, &block_group->item, sizeof(item));
 9962		memcpy(&key, &block_group->key, sizeof(key));
 9963		spin_unlock(&block_group->lock);
 9964
 9965		ret = btrfs_insert_item(trans, extent_root, &key, &item,
 9966					sizeof(item));
 9967		if (ret)
 9968			btrfs_abort_transaction(trans, extent_root, ret);
 9969		ret = btrfs_finish_chunk_alloc(trans, extent_root,
 9970					       key.objectid, key.offset);
 9971		if (ret)
 9972			btrfs_abort_transaction(trans, extent_root, ret);
 9973		add_block_group_free_space(trans, root->fs_info, block_group);
 9974		/* already aborted the transaction if it failed. */
 9975next:
 9976		list_del_init(&block_group->bg_list);
 9977	}
 9978	trans->can_flush_pending_bgs = can_flush_pending_bgs;
 9979}
 9980
 9981int btrfs_make_block_group(struct btrfs_trans_handle *trans,
 9982			   struct btrfs_root *root, u64 bytes_used,
 9983			   u64 type, u64 chunk_objectid, u64 chunk_offset,
 9984			   u64 size)
 9985{
 9986	int ret;
 9987	struct btrfs_root *extent_root;
 9988	struct btrfs_block_group_cache *cache;
 9989
 9990	extent_root = root->fs_info->extent_root;
 9991
 9992	btrfs_set_log_full_commit(root->fs_info, trans);
 9993
 9994	cache = btrfs_create_block_group_cache(root, chunk_offset, size);
 9995	if (!cache)
 9996		return -ENOMEM;
 9997
 9998	btrfs_set_block_group_used(&cache->item, bytes_used);
 9999	btrfs_set_block_group_chunk_objectid(&cache->item, chunk_objectid);
10000	btrfs_set_block_group_flags(&cache->item, type);
10001
10002	cache->flags = type;
10003	cache->last_byte_to_unpin = (u64)-1;
10004	cache->cached = BTRFS_CACHE_FINISHED;
10005	cache->needs_free_space = 1;
10006	ret = exclude_super_stripes(root, cache);
10007	if (ret) {
10008		/*
10009		 * We may have excluded something, so call this just in
10010		 * case.
10011		 */
10012		free_excluded_extents(root, cache);
10013		btrfs_put_block_group(cache);
10014		return ret;
10015	}
10016
10017	add_new_free_space(cache, root->fs_info, chunk_offset,
10018			   chunk_offset + size);
10019
10020	free_excluded_extents(root, cache);
10021
10022#ifdef CONFIG_BTRFS_DEBUG
10023	if (btrfs_should_fragment_free_space(root, cache)) {
10024		u64 new_bytes_used = size - bytes_used;
10025
10026		bytes_used += new_bytes_used >> 1;
10027		fragment_free_space(root, cache);
10028	}
10029#endif
10030	/*
10031	 * Call to ensure the corresponding space_info object is created and
10032	 * assigned to our block group, but don't update its counters just yet.
10033	 * We want our bg to be added to the rbtree with its ->space_info set.
10034	 */
10035	ret = update_space_info(root->fs_info, cache->flags, 0, 0,
10036				&cache->space_info);
10037	if (ret) {
10038		btrfs_remove_free_space_cache(cache);
10039		btrfs_put_block_group(cache);
10040		return ret;
10041	}
10042
10043	ret = btrfs_add_block_group_cache(root->fs_info, cache);
10044	if (ret) {
10045		btrfs_remove_free_space_cache(cache);
10046		btrfs_put_block_group(cache);
10047		return ret;
10048	}
10049
10050	/*
10051	 * Now that our block group has its ->space_info set and is inserted in
10052	 * the rbtree, update the space info's counters.
10053	 */
10054	ret = update_space_info(root->fs_info, cache->flags, size, bytes_used,
10055				&cache->space_info);
10056	if (ret) {
10057		btrfs_remove_free_space_cache(cache);
10058		spin_lock(&root->fs_info->block_group_cache_lock);
10059		rb_erase(&cache->cache_node,
10060			 &root->fs_info->block_group_cache_tree);
10061		RB_CLEAR_NODE(&cache->cache_node);
10062		spin_unlock(&root->fs_info->block_group_cache_lock);
10063		btrfs_put_block_group(cache);
10064		return ret;
10065	}
10066	update_global_block_rsv(root->fs_info);
10067
10068	spin_lock(&cache->space_info->lock);
10069	cache->space_info->bytes_readonly += cache->bytes_super;
10070	spin_unlock(&cache->space_info->lock);
10071
10072	__link_block_group(cache->space_info, cache);
10073
10074	list_add_tail(&cache->bg_list, &trans->new_bgs);
10075
10076	set_avail_alloc_bits(extent_root->fs_info, type);
10077
10078	return 0;
10079}
10080
10081static void clear_avail_alloc_bits(struct btrfs_fs_info *fs_info, u64 flags)
10082{
10083	u64 extra_flags = chunk_to_extended(flags) &
10084				BTRFS_EXTENDED_PROFILE_MASK;
10085
10086	write_seqlock(&fs_info->profiles_lock);
10087	if (flags & BTRFS_BLOCK_GROUP_DATA)
10088		fs_info->avail_data_alloc_bits &= ~extra_flags;
10089	if (flags & BTRFS_BLOCK_GROUP_METADATA)
10090		fs_info->avail_metadata_alloc_bits &= ~extra_flags;
10091	if (flags & BTRFS_BLOCK_GROUP_SYSTEM)
10092		fs_info->avail_system_alloc_bits &= ~extra_flags;
10093	write_sequnlock(&fs_info->profiles_lock);
10094}
10095
10096int btrfs_remove_block_group(struct btrfs_trans_handle *trans,
10097			     struct btrfs_root *root, u64 group_start,
10098			     struct extent_map *em)
10099{
10100	struct btrfs_path *path;
10101	struct btrfs_block_group_cache *block_group;
10102	struct btrfs_free_cluster *cluster;
10103	struct btrfs_root *tree_root = root->fs_info->tree_root;
10104	struct btrfs_key key;
10105	struct inode *inode;
10106	struct kobject *kobj = NULL;
10107	int ret;
10108	int index;
10109	int factor;
10110	struct btrfs_caching_control *caching_ctl = NULL;
10111	bool remove_em;
10112
10113	root = root->fs_info->extent_root;
10114
10115	block_group = btrfs_lookup_block_group(root->fs_info, group_start);
10116	BUG_ON(!block_group);
10117	BUG_ON(!block_group->ro);
10118
10119	/*
10120	 * Free the reserved super bytes from this block group before
10121	 * remove it.
10122	 */
10123	free_excluded_extents(root, block_group);
10124
10125	memcpy(&key, &block_group->key, sizeof(key));
10126	index = get_block_group_index(block_group);
10127	if (block_group->flags & (BTRFS_BLOCK_GROUP_DUP |
10128				  BTRFS_BLOCK_GROUP_RAID1 |
10129				  BTRFS_BLOCK_GROUP_RAID10))
10130		factor = 2;
10131	else
10132		factor = 1;
10133
10134	/* make sure this block group isn't part of an allocation cluster */
10135	cluster = &root->fs_info->data_alloc_cluster;
10136	spin_lock(&cluster->refill_lock);
10137	btrfs_return_cluster_to_free_space(block_group, cluster);
10138	spin_unlock(&cluster->refill_lock);
10139
10140	/*
10141	 * make sure this block group isn't part of a metadata
10142	 * allocation cluster
10143	 */
10144	cluster = &root->fs_info->meta_alloc_cluster;
10145	spin_lock(&cluster->refill_lock);
10146	btrfs_return_cluster_to_free_space(block_group, cluster);
10147	spin_unlock(&cluster->refill_lock);
10148
10149	path = btrfs_alloc_path();
10150	if (!path) {
10151		ret = -ENOMEM;
10152		goto out;
10153	}
10154
10155	/*
10156	 * get the inode first so any iput calls done for the io_list
10157	 * aren't the final iput (no unlinks allowed now)
10158	 */
10159	inode = lookup_free_space_inode(tree_root, block_group, path);
10160
10161	mutex_lock(&trans->transaction->cache_write_mutex);
10162	/*
10163	 * make sure our free spache cache IO is done before remove the
10164	 * free space inode
10165	 */
10166	spin_lock(&trans->transaction->dirty_bgs_lock);
10167	if (!list_empty(&block_group->io_list)) {
10168		list_del_init(&block_group->io_list);
10169
10170		WARN_ON(!IS_ERR(inode) && inode != block_group->io_ctl.inode);
10171
10172		spin_unlock(&trans->transaction->dirty_bgs_lock);
10173		btrfs_wait_cache_io(root, trans, block_group,
10174				    &block_group->io_ctl, path,
10175				    block_group->key.objectid);
10176		btrfs_put_block_group(block_group);
10177		spin_lock(&trans->transaction->dirty_bgs_lock);
10178	}
10179
10180	if (!list_empty(&block_group->dirty_list)) {
10181		list_del_init(&block_group->dirty_list);
10182		btrfs_put_block_group(block_group);
10183	}
10184	spin_unlock(&trans->transaction->dirty_bgs_lock);
10185	mutex_unlock(&trans->transaction->cache_write_mutex);
10186
10187	if (!IS_ERR(inode)) {
10188		ret = btrfs_orphan_add(trans, inode);
10189		if (ret) {
10190			btrfs_add_delayed_iput(inode);
10191			goto out;
10192		}
10193		clear_nlink(inode);
10194		/* One for the block groups ref */
10195		spin_lock(&block_group->lock);
10196		if (block_group->iref) {
10197			block_group->iref = 0;
10198			block_group->inode = NULL;
10199			spin_unlock(&block_group->lock);
10200			iput(inode);
10201		} else {
10202			spin_unlock(&block_group->lock);
10203		}
10204		/* One for our lookup ref */
10205		btrfs_add_delayed_iput(inode);
10206	}
10207
10208	key.objectid = BTRFS_FREE_SPACE_OBJECTID;
10209	key.offset = block_group->key.objectid;
10210	key.type = 0;
10211
10212	ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1);
10213	if (ret < 0)
10214		goto out;
10215	if (ret > 0)
10216		btrfs_release_path(path);
10217	if (ret == 0) {
10218		ret = btrfs_del_item(trans, tree_root, path);
10219		if (ret)
10220			goto out;
10221		btrfs_release_path(path);
10222	}
10223
10224	spin_lock(&root->fs_info->block_group_cache_lock);
10225	rb_erase(&block_group->cache_node,
10226		 &root->fs_info->block_group_cache_tree);
10227	RB_CLEAR_NODE(&block_group->cache_node);
10228
10229	if (root->fs_info->first_logical_byte == block_group->key.objectid)
10230		root->fs_info->first_logical_byte = (u64)-1;
10231	spin_unlock(&root->fs_info->block_group_cache_lock);
10232
10233	down_write(&block_group->space_info->groups_sem);
10234	/*
10235	 * we must use list_del_init so people can check to see if they
10236	 * are still on the list after taking the semaphore
10237	 */
10238	list_del_init(&block_group->list);
10239	if (list_empty(&block_group->space_info->block_groups[index])) {
10240		kobj = block_group->space_info->block_group_kobjs[index];
10241		block_group->space_info->block_group_kobjs[index] = NULL;
10242		clear_avail_alloc_bits(root->fs_info, block_group->flags);
10243	}
10244	up_write(&block_group->space_info->groups_sem);
10245	if (kobj) {
10246		kobject_del(kobj);
10247		kobject_put(kobj);
10248	}
10249
10250	if (block_group->has_caching_ctl)
10251		caching_ctl = get_caching_control(block_group);
10252	if (block_group->cached == BTRFS_CACHE_STARTED)
10253		wait_block_group_cache_done(block_group);
10254	if (block_group->has_caching_ctl) {
10255		down_write(&root->fs_info->commit_root_sem);
10256		if (!caching_ctl) {
10257			struct btrfs_caching_control *ctl;
10258
10259			list_for_each_entry(ctl,
10260				    &root->fs_info->caching_block_groups, list)
10261				if (ctl->block_group == block_group) {
10262					caching_ctl = ctl;
10263					atomic_inc(&caching_ctl->count);
10264					break;
10265				}
10266		}
10267		if (caching_ctl)
10268			list_del_init(&caching_ctl->list);
10269		up_write(&root->fs_info->commit_root_sem);
10270		if (caching_ctl) {
10271			/* Once for the caching bgs list and once for us. */
10272			put_caching_control(caching_ctl);
10273			put_caching_control(caching_ctl);
10274		}
10275	}
10276
10277	spin_lock(&trans->transaction->dirty_bgs_lock);
10278	if (!list_empty(&block_group->dirty_list)) {
10279		WARN_ON(1);
10280	}
10281	if (!list_empty(&block_group->io_list)) {
10282		WARN_ON(1);
10283	}
10284	spin_unlock(&trans->transaction->dirty_bgs_lock);
10285	btrfs_remove_free_space_cache(block_group);
10286
10287	spin_lock(&block_group->space_info->lock);
10288	list_del_init(&block_group->ro_list);
10289
10290	if (btrfs_test_opt(root, ENOSPC_DEBUG)) {
10291		WARN_ON(block_group->space_info->total_bytes
10292			< block_group->key.offset);
10293		WARN_ON(block_group->space_info->bytes_readonly
10294			< block_group->key.offset);
10295		WARN_ON(block_group->space_info->disk_total
10296			< block_group->key.offset * factor);
10297	}
10298	block_group->space_info->total_bytes -= block_group->key.offset;
10299	block_group->space_info->bytes_readonly -= block_group->key.offset;
10300	block_group->space_info->disk_total -= block_group->key.offset * factor;
10301
10302	spin_unlock(&block_group->space_info->lock);
10303
10304	memcpy(&key, &block_group->key, sizeof(key));
10305
10306	lock_chunks(root);
10307	if (!list_empty(&em->list)) {
10308		/* We're in the transaction->pending_chunks list. */
10309		free_extent_map(em);
10310	}
10311	spin_lock(&block_group->lock);
10312	block_group->removed = 1;
10313	/*
10314	 * At this point trimming can't start on this block group, because we
10315	 * removed the block group from the tree fs_info->block_group_cache_tree
10316	 * so no one can't find it anymore and even if someone already got this
10317	 * block group before we removed it from the rbtree, they have already
10318	 * incremented block_group->trimming - if they didn't, they won't find
10319	 * any free space entries because we already removed them all when we
10320	 * called btrfs_remove_free_space_cache().
10321	 *
10322	 * And we must not remove the extent map from the fs_info->mapping_tree
10323	 * to prevent the same logical address range and physical device space
10324	 * ranges from being reused for a new block group. This is because our
10325	 * fs trim operation (btrfs_trim_fs() / btrfs_ioctl_fitrim()) is
10326	 * completely transactionless, so while it is trimming a range the
10327	 * currently running transaction might finish and a new one start,
10328	 * allowing for new block groups to be created that can reuse the same
10329	 * physical device locations unless we take this special care.
10330	 *
10331	 * There may also be an implicit trim operation if the file system
10332	 * is mounted with -odiscard. The same protections must remain
10333	 * in place until the extents have been discarded completely when
10334	 * the transaction commit has completed.
10335	 */
10336	remove_em = (atomic_read(&block_group->trimming) == 0);
10337	/*
10338	 * Make sure a trimmer task always sees the em in the pinned_chunks list
10339	 * if it sees block_group->removed == 1 (needs to lock block_group->lock
10340	 * before checking block_group->removed).
10341	 */
10342	if (!remove_em) {
10343		/*
10344		 * Our em might be in trans->transaction->pending_chunks which
10345		 * is protected by fs_info->chunk_mutex ([lock|unlock]_chunks),
10346		 * and so is the fs_info->pinned_chunks list.
10347		 *
10348		 * So at this point we must be holding the chunk_mutex to avoid
10349		 * any races with chunk allocation (more specifically at
10350		 * volumes.c:contains_pending_extent()), to ensure it always
10351		 * sees the em, either in the pending_chunks list or in the
10352		 * pinned_chunks list.
10353		 */
10354		list_move_tail(&em->list, &root->fs_info->pinned_chunks);
10355	}
10356	spin_unlock(&block_group->lock);
10357
10358	if (remove_em) {
10359		struct extent_map_tree *em_tree;
10360
10361		em_tree = &root->fs_info->mapping_tree.map_tree;
10362		write_lock(&em_tree->lock);
10363		/*
10364		 * The em might be in the pending_chunks list, so make sure the
10365		 * chunk mutex is locked, since remove_extent_mapping() will
10366		 * delete us from that list.
10367		 */
10368		remove_extent_mapping(em_tree, em);
10369		write_unlock(&em_tree->lock);
10370		/* once for the tree */
10371		free_extent_map(em);
10372	}
10373
10374	unlock_chunks(root);
10375
10376	ret = remove_block_group_free_space(trans, root->fs_info, block_group);
10377	if (ret)
10378		goto out;
10379
10380	btrfs_put_block_group(block_group);
10381	btrfs_put_block_group(block_group);
10382
10383	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
10384	if (ret > 0)
10385		ret = -EIO;
10386	if (ret < 0)
10387		goto out;
10388
10389	ret = btrfs_del_item(trans, root, path);
10390out:
10391	btrfs_free_path(path);
10392	return ret;
10393}
10394
10395struct btrfs_trans_handle *
10396btrfs_start_trans_remove_block_group(struct btrfs_fs_info *fs_info,
10397				     const u64 chunk_offset)
10398{
10399	struct extent_map_tree *em_tree = &fs_info->mapping_tree.map_tree;
10400	struct extent_map *em;
10401	struct map_lookup *map;
10402	unsigned int num_items;
10403
10404	read_lock(&em_tree->lock);
10405	em = lookup_extent_mapping(em_tree, chunk_offset, 1);
10406	read_unlock(&em_tree->lock);
10407	ASSERT(em && em->start == chunk_offset);
10408
10409	/*
10410	 * We need to reserve 3 + N units from the metadata space info in order
10411	 * to remove a block group (done at btrfs_remove_chunk() and at
10412	 * btrfs_remove_block_group()), which are used for:
10413	 *
10414	 * 1 unit for adding the free space inode's orphan (located in the tree
10415	 * of tree roots).
10416	 * 1 unit for deleting the block group item (located in the extent
10417	 * tree).
10418	 * 1 unit for deleting the free space item (located in tree of tree
10419	 * roots).
10420	 * N units for deleting N device extent items corresponding to each
10421	 * stripe (located in the device tree).
10422	 *
10423	 * In order to remove a block group we also need to reserve units in the
10424	 * system space info in order to update the chunk tree (update one or
10425	 * more device items and remove one chunk item), but this is done at
10426	 * btrfs_remove_chunk() through a call to check_system_chunk().
10427	 */
10428	map = em->map_lookup;
10429	num_items = 3 + map->num_stripes;
10430	free_extent_map(em);
10431
10432	return btrfs_start_transaction_fallback_global_rsv(fs_info->extent_root,
10433							   num_items, 1);
10434}
10435
10436/*
10437 * Process the unused_bgs list and remove any that don't have any allocated
10438 * space inside of them.
10439 */
10440void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info)
10441{
10442	struct btrfs_block_group_cache *block_group;
10443	struct btrfs_space_info *space_info;
10444	struct btrfs_root *root = fs_info->extent_root;
10445	struct btrfs_trans_handle *trans;
10446	int ret = 0;
10447
10448	if (!fs_info->open)
10449		return;
10450
10451	spin_lock(&fs_info->unused_bgs_lock);
10452	while (!list_empty(&fs_info->unused_bgs)) {
10453		u64 start, end;
10454		int trimming;
10455
10456		block_group = list_first_entry(&fs_info->unused_bgs,
10457					       struct btrfs_block_group_cache,
10458					       bg_list);
10459		list_del_init(&block_group->bg_list);
10460
10461		space_info = block_group->space_info;
10462
10463		if (ret || btrfs_mixed_space_info(space_info)) {
10464			btrfs_put_block_group(block_group);
10465			continue;
10466		}
10467		spin_unlock(&fs_info->unused_bgs_lock);
10468
10469		mutex_lock(&fs_info->delete_unused_bgs_mutex);
10470
10471		/* Don't want to race with allocators so take the groups_sem */
10472		down_write(&space_info->groups_sem);
10473		spin_lock(&block_group->lock);
10474		if (block_group->reserved ||
10475		    btrfs_block_group_used(&block_group->item) ||
10476		    block_group->ro ||
10477		    list_is_singular(&block_group->list)) {
10478			/*
10479			 * We want to bail if we made new allocations or have
10480			 * outstanding allocations in this block group.  We do
10481			 * the ro check in case balance is currently acting on
10482			 * this block group.
10483			 */
10484			spin_unlock(&block_group->lock);
10485			up_write(&space_info->groups_sem);
10486			goto next;
10487		}
10488		spin_unlock(&block_group->lock);
10489
10490		/* We don't want to force the issue, only flip if it's ok. */
10491		ret = inc_block_group_ro(block_group, 0);
10492		up_write(&space_info->groups_sem);
10493		if (ret < 0) {
10494			ret = 0;
10495			goto next;
10496		}
10497
10498		/*
10499		 * Want to do this before we do anything else so we can recover
10500		 * properly if we fail to join the transaction.
10501		 */
10502		trans = btrfs_start_trans_remove_block_group(fs_info,
10503						     block_group->key.objectid);
10504		if (IS_ERR(trans)) {
10505			btrfs_dec_block_group_ro(root, block_group);
10506			ret = PTR_ERR(trans);
10507			goto next;
10508		}
10509
10510		/*
10511		 * We could have pending pinned extents for this block group,
10512		 * just delete them, we don't care about them anymore.
10513		 */
10514		start = block_group->key.objectid;
10515		end = start + block_group->key.offset - 1;
10516		/*
10517		 * Hold the unused_bg_unpin_mutex lock to avoid racing with
10518		 * btrfs_finish_extent_commit(). If we are at transaction N,
10519		 * another task might be running finish_extent_commit() for the
10520		 * previous transaction N - 1, and have seen a range belonging
10521		 * to the block group in freed_extents[] before we were able to
10522		 * clear the whole block group range from freed_extents[]. This
10523		 * means that task can lookup for the block group after we
10524		 * unpinned it from freed_extents[] and removed it, leading to
10525		 * a BUG_ON() at btrfs_unpin_extent_range().
10526		 */
10527		mutex_lock(&fs_info->unused_bg_unpin_mutex);
10528		ret = clear_extent_bits(&fs_info->freed_extents[0], start, end,
10529				  EXTENT_DIRTY, GFP_NOFS);
10530		if (ret) {
10531			mutex_unlock(&fs_info->unused_bg_unpin_mutex);
10532			btrfs_dec_block_group_ro(root, block_group);
10533			goto end_trans;
10534		}
10535		ret = clear_extent_bits(&fs_info->freed_extents[1], start, end,
10536				  EXTENT_DIRTY, GFP_NOFS);
10537		if (ret) {
10538			mutex_unlock(&fs_info->unused_bg_unpin_mutex);
10539			btrfs_dec_block_group_ro(root, block_group);
10540			goto end_trans;
10541		}
10542		mutex_unlock(&fs_info->unused_bg_unpin_mutex);
10543
10544		/* Reset pinned so btrfs_put_block_group doesn't complain */
10545		spin_lock(&space_info->lock);
10546		spin_lock(&block_group->lock);
10547
10548		space_info->bytes_pinned -= block_group->pinned;
10549		space_info->bytes_readonly += block_group->pinned;
10550		percpu_counter_add(&space_info->total_bytes_pinned,
10551				   -block_group->pinned);
10552		block_group->pinned = 0;
10553
10554		spin_unlock(&block_group->lock);
10555		spin_unlock(&space_info->lock);
10556
10557		/* DISCARD can flip during remount */
10558		trimming = btrfs_test_opt(root, DISCARD);
10559
10560		/* Implicit trim during transaction commit. */
10561		if (trimming)
10562			btrfs_get_block_group_trimming(block_group);
10563
10564		/*
10565		 * Btrfs_remove_chunk will abort the transaction if things go
10566		 * horribly wrong.
10567		 */
10568		ret = btrfs_remove_chunk(trans, root,
10569					 block_group->key.objectid);
10570
10571		if (ret) {
10572			if (trimming)
10573				btrfs_put_block_group_trimming(block_group);
10574			goto end_trans;
10575		}
10576
10577		/*
10578		 * If we're not mounted with -odiscard, we can just forget
10579		 * about this block group. Otherwise we'll need to wait
10580		 * until transaction commit to do the actual discard.
10581		 */
10582		if (trimming) {
10583			spin_lock(&fs_info->unused_bgs_lock);
10584			/*
10585			 * A concurrent scrub might have added us to the list
10586			 * fs_info->unused_bgs, so use a list_move operation
10587			 * to add the block group to the deleted_bgs list.
10588			 */
10589			list_move(&block_group->bg_list,
10590				  &trans->transaction->deleted_bgs);
10591			spin_unlock(&fs_info->unused_bgs_lock);
10592			btrfs_get_block_group(block_group);
10593		}
10594end_trans:
10595		btrfs_end_transaction(trans, root);
10596next:
10597		mutex_unlock(&fs_info->delete_unused_bgs_mutex);
10598		btrfs_put_block_group(block_group);
10599		spin_lock(&fs_info->unused_bgs_lock);
10600	}
10601	spin_unlock(&fs_info->unused_bgs_lock);
10602}
10603
10604int btrfs_init_space_info(struct btrfs_fs_info *fs_info)
10605{
10606	struct btrfs_space_info *space_info;
10607	struct btrfs_super_block *disk_super;
10608	u64 features;
10609	u64 flags;
10610	int mixed = 0;
10611	int ret;
10612
10613	disk_super = fs_info->super_copy;
10614	if (!btrfs_super_root(disk_super))
10615		return -EINVAL;
10616
10617	features = btrfs_super_incompat_flags(disk_super);
10618	if (features & BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS)
10619		mixed = 1;
10620
10621	flags = BTRFS_BLOCK_GROUP_SYSTEM;
10622	ret = update_space_info(fs_info, flags, 0, 0, &space_info);
10623	if (ret)
10624		goto out;
10625
10626	if (mixed) {
10627		flags = BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA;
10628		ret = update_space_info(fs_info, flags, 0, 0, &space_info);
10629	} else {
10630		flags = BTRFS_BLOCK_GROUP_METADATA;
10631		ret = update_space_info(fs_info, flags, 0, 0, &space_info);
10632		if (ret)
10633			goto out;
10634
10635		flags = BTRFS_BLOCK_GROUP_DATA;
10636		ret = update_space_info(fs_info, flags, 0, 0, &space_info);
10637	}
10638out:
10639	return ret;
10640}
10641
10642int btrfs_error_unpin_extent_range(struct btrfs_root *root, u64 start, u64 end)
10643{
10644	return unpin_extent_range(root, start, end, false);
10645}
10646
10647/*
10648 * It used to be that old block groups would be left around forever.
10649 * Iterating over them would be enough to trim unused space.  Since we
10650 * now automatically remove them, we also need to iterate over unallocated
10651 * space.
10652 *
10653 * We don't want a transaction for this since the discard may take a
10654 * substantial amount of time.  We don't require that a transaction be
10655 * running, but we do need to take a running transaction into account
10656 * to ensure that we're not discarding chunks that were released in
10657 * the current transaction.
10658 *
10659 * Holding the chunks lock will prevent other threads from allocating
10660 * or releasing chunks, but it won't prevent a running transaction
10661 * from committing and releasing the memory that the pending chunks
10662 * list head uses.  For that, we need to take a reference to the
10663 * transaction.
 
 
10664 */
10665static int btrfs_trim_free_extents(struct btrfs_device *device,
10666				   u64 minlen, u64 *trimmed)
10667{
10668	u64 start = 0, len = 0;
10669	int ret;
10670
10671	*trimmed = 0;
10672
10673	/* Not writeable = nothing to do. */
10674	if (!device->writeable)
 
 
 
 
10675		return 0;
10676
10677	/* No free space = nothing to do. */
10678	if (device->total_bytes <= device->bytes_used)
10679		return 0;
10680
10681	ret = 0;
10682
10683	while (1) {
10684		struct btrfs_fs_info *fs_info = device->dev_root->fs_info;
10685		struct btrfs_transaction *trans;
10686		u64 bytes;
10687
10688		ret = mutex_lock_interruptible(&fs_info->chunk_mutex);
10689		if (ret)
10690			return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10691
10692		down_read(&fs_info->commit_root_sem);
 
10693
10694		spin_lock(&fs_info->trans_lock);
10695		trans = fs_info->running_transaction;
10696		if (trans)
10697			atomic_inc(&trans->use_count);
10698		spin_unlock(&fs_info->trans_lock);
10699
10700		ret = find_free_dev_extent_start(trans, device, minlen, start,
10701						 &start, &len);
10702		if (trans)
10703			btrfs_put_transaction(trans);
10704
10705		if (ret) {
10706			up_read(&fs_info->commit_root_sem);
 
 
10707			mutex_unlock(&fs_info->chunk_mutex);
10708			if (ret == -ENOSPC)
10709				ret = 0;
10710			break;
10711		}
10712
10713		ret = btrfs_issue_discard(device->bdev, start, len, &bytes);
10714		up_read(&fs_info->commit_root_sem);
 
 
 
10715		mutex_unlock(&fs_info->chunk_mutex);
10716
10717		if (ret)
10718			break;
10719
10720		start += len;
10721		*trimmed += bytes;
10722
10723		if (fatal_signal_pending(current)) {
10724			ret = -ERESTARTSYS;
10725			break;
10726		}
10727
10728		cond_resched();
10729	}
10730
10731	return ret;
10732}
10733
10734int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
 
 
 
 
 
 
 
 
 
10735{
10736	struct btrfs_fs_info *fs_info = root->fs_info;
10737	struct btrfs_block_group_cache *cache = NULL;
10738	struct btrfs_device *device;
10739	struct list_head *devices;
10740	u64 group_trimmed;
 
10741	u64 start;
10742	u64 end;
10743	u64 trimmed = 0;
10744	u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
 
 
 
10745	int ret = 0;
10746
 
 
 
10747	/*
10748	 * try to trim all FS space, our block group may start from non-zero.
 
10749	 */
10750	if (range->len == total_bytes)
10751		cache = btrfs_lookup_first_block_group(fs_info, range->start);
10752	else
10753		cache = btrfs_lookup_block_group(fs_info, range->start);
10754
10755	while (cache) {
10756		if (cache->key.objectid >= (range->start + range->len)) {
 
10757			btrfs_put_block_group(cache);
10758			break;
10759		}
10760
10761		start = max(range->start, cache->key.objectid);
10762		end = min(range->start + range->len,
10763				cache->key.objectid + cache->key.offset);
10764
10765		if (end - start >= range->minlen) {
10766			if (!block_group_cache_done(cache)) {
10767				ret = cache_block_group(cache, 0);
10768				if (ret) {
10769					btrfs_put_block_group(cache);
10770					break;
10771				}
10772				ret = wait_block_group_cache_done(cache);
10773				if (ret) {
10774					btrfs_put_block_group(cache);
10775					break;
10776				}
10777			}
10778			ret = btrfs_trim_block_group(cache,
10779						     &group_trimmed,
10780						     start,
10781						     end,
10782						     range->minlen);
10783
10784			trimmed += group_trimmed;
10785			if (ret) {
10786				btrfs_put_block_group(cache);
10787				break;
 
10788			}
10789		}
10790
10791		cache = next_block_group(fs_info->tree_root, cache);
10792	}
10793
10794	mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
10795	devices = &root->fs_info->fs_devices->alloc_list;
10796	list_for_each_entry(device, devices, dev_alloc_list) {
10797		ret = btrfs_trim_free_extents(device, range->minlen,
10798					      &group_trimmed);
10799		if (ret)
10800			break;
 
 
 
 
10801
10802		trimmed += group_trimmed;
 
 
 
 
 
10803	}
10804	mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
10805
 
 
 
 
10806	range->len = trimmed;
10807	return ret;
10808}
10809
10810/*
10811 * btrfs_{start,end}_write_no_snapshoting() are similar to
10812 * mnt_{want,drop}_write(), they are used to prevent some tasks from writing
10813 * data into the page cache through nocow before the subvolume is snapshoted,
10814 * but flush the data into disk after the snapshot creation, or to prevent
10815 * operations while snapshoting is ongoing and that cause the snapshot to be
10816 * inconsistent (writes followed by expanding truncates for example).
10817 */
10818void btrfs_end_write_no_snapshoting(struct btrfs_root *root)
10819{
10820	percpu_counter_dec(&root->subv_writers->counter);
10821	/*
10822	 * Make sure counter is updated before we wake up waiters.
10823	 */
10824	smp_mb();
10825	if (waitqueue_active(&root->subv_writers->wait))
10826		wake_up(&root->subv_writers->wait);
10827}
10828
10829int btrfs_start_write_no_snapshoting(struct btrfs_root *root)
10830{
10831	if (atomic_read(&root->will_be_snapshoted))
10832		return 0;
10833
10834	percpu_counter_inc(&root->subv_writers->counter);
10835	/*
10836	 * Make sure counter is updated before we check for snapshot creation.
10837	 */
10838	smp_mb();
10839	if (atomic_read(&root->will_be_snapshoted)) {
10840		btrfs_end_write_no_snapshoting(root);
10841		return 0;
10842	}
10843	return 1;
10844}
10845
10846static int wait_snapshoting_atomic_t(atomic_t *a)
10847{
10848	schedule();
10849	return 0;
10850}
10851
10852void btrfs_wait_for_snapshot_creation(struct btrfs_root *root)
10853{
10854	while (true) {
10855		int ret;
10856
10857		ret = btrfs_start_write_no_snapshoting(root);
10858		if (ret)
10859			break;
10860		wait_on_atomic_t(&root->will_be_snapshoted,
10861				 wait_snapshoting_atomic_t,
10862				 TASK_UNINTERRUPTIBLE);
10863	}
10864}
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) 2007 Oracle.  All rights reserved.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   4 */
   5
   6#include <linux/sched.h>
   7#include <linux/sched/signal.h>
   8#include <linux/pagemap.h>
   9#include <linux/writeback.h>
  10#include <linux/blkdev.h>
  11#include <linux/sort.h>
  12#include <linux/rcupdate.h>
  13#include <linux/kthread.h>
  14#include <linux/slab.h>
  15#include <linux/ratelimit.h>
  16#include <linux/percpu_counter.h>
  17#include <linux/lockdep.h>
  18#include <linux/crc32c.h>
  19#include "ctree.h"
  20#include "extent-tree.h"
  21#include "transaction.h"
  22#include "disk-io.h"
  23#include "print-tree.h"
  24#include "volumes.h"
  25#include "raid56.h"
  26#include "locking.h"
  27#include "free-space-cache.h"
  28#include "free-space-tree.h"
 
 
  29#include "qgroup.h"
  30#include "ref-verify.h"
  31#include "space-info.h"
  32#include "block-rsv.h"
  33#include "discard.h"
  34#include "zoned.h"
  35#include "dev-replace.h"
  36#include "fs.h"
  37#include "accessors.h"
  38#include "root-tree.h"
  39#include "file-item.h"
  40#include "orphan.h"
  41#include "tree-checker.h"
  42#include "raid-stripe-tree.h"
  43
  44#undef SCRAMBLE_DELAYED_REFS
  45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  46
 
 
 
  47static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
  48			       struct btrfs_delayed_ref_head *href,
  49			       struct btrfs_delayed_ref_node *node,
  50			       struct btrfs_delayed_extent_op *extra_op);
 
 
  51static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
  52				    struct extent_buffer *leaf,
  53				    struct btrfs_extent_item *ei);
  54static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
 
  55				      u64 parent, u64 root_objectid,
  56				      u64 flags, u64 owner, u64 offset,
  57				      struct btrfs_key *ins, int ref_mod, u64 oref_root);
  58static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
  59				     struct btrfs_delayed_ref_node *node,
  60				     struct btrfs_delayed_extent_op *extent_op);
 
 
 
 
 
  61static int find_next_key(struct btrfs_path *path, int level,
  62			 struct btrfs_key *key);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  63
  64static int block_group_bits(struct btrfs_block_group *cache, u64 bits)
  65{
  66	return (cache->flags & bits) == bits;
  67}
  68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  69/* simple helper to search for an existing data extent at a given offset */
  70int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len)
  71{
  72	struct btrfs_root *root = btrfs_extent_root(fs_info, start);
  73	int ret;
  74	struct btrfs_key key;
  75	struct btrfs_path *path;
  76
  77	path = btrfs_alloc_path();
  78	if (!path)
  79		return -ENOMEM;
  80
  81	key.objectid = start;
  82	key.offset = len;
  83	key.type = BTRFS_EXTENT_ITEM_KEY;
  84	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
 
  85	btrfs_free_path(path);
  86	return ret;
  87}
  88
  89/*
  90 * helper function to lookup reference count and flags of a tree block.
  91 *
  92 * the head node for delayed ref is used to store the sum of all the
  93 * reference count modifications queued up in the rbtree. the head
  94 * node may also store the extent flags to set. This way you can check
  95 * to see what the reference count and extent flags would be if all of
  96 * the delayed refs are not processed.
  97 */
  98int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
  99			     struct btrfs_fs_info *fs_info, u64 bytenr,
 100			     u64 offset, int metadata, u64 *refs, u64 *flags,
 101			     u64 *owning_root)
 102{
 103	struct btrfs_root *extent_root;
 104	struct btrfs_delayed_ref_head *head;
 105	struct btrfs_delayed_ref_root *delayed_refs;
 106	struct btrfs_path *path;
 
 
 107	struct btrfs_key key;
 
 108	u64 num_refs;
 109	u64 extent_flags;
 110	u64 owner = 0;
 111	int ret;
 112
 113	/*
 114	 * If we don't have skinny metadata, don't bother doing anything
 115	 * different
 116	 */
 117	if (metadata && !btrfs_fs_incompat(fs_info, SKINNY_METADATA)) {
 118		offset = fs_info->nodesize;
 119		metadata = 0;
 120	}
 121
 122	path = btrfs_alloc_path();
 123	if (!path)
 124		return -ENOMEM;
 125
 
 
 
 
 
 126search_again:
 127	key.objectid = bytenr;
 128	key.offset = offset;
 129	if (metadata)
 130		key.type = BTRFS_METADATA_ITEM_KEY;
 131	else
 132		key.type = BTRFS_EXTENT_ITEM_KEY;
 133
 134	extent_root = btrfs_extent_root(fs_info, bytenr);
 135	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
 136	if (ret < 0)
 137		goto out_free;
 138
 139	if (ret > 0 && key.type == BTRFS_METADATA_ITEM_KEY) {
 140		if (path->slots[0]) {
 141			path->slots[0]--;
 142			btrfs_item_key_to_cpu(path->nodes[0], &key,
 143					      path->slots[0]);
 144			if (key.objectid == bytenr &&
 145			    key.type == BTRFS_EXTENT_ITEM_KEY &&
 146			    key.offset == fs_info->nodesize)
 147				ret = 0;
 148		}
 149	}
 150
 151	if (ret == 0) {
 152		struct extent_buffer *leaf = path->nodes[0];
 153		struct btrfs_extent_item *ei;
 154		const u32 item_size = btrfs_item_size(leaf, path->slots[0]);
 155
 156		if (unlikely(item_size < sizeof(*ei))) {
 157			ret = -EUCLEAN;
 158			btrfs_err(fs_info,
 159			"unexpected extent item size, has %u expect >= %zu",
 160				  item_size, sizeof(*ei));
 161			btrfs_abort_transaction(trans, ret);
 162			goto out_free;
 163		}
 164
 165		ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 166		num_refs = btrfs_extent_refs(leaf, ei);
 167		if (unlikely(num_refs == 0)) {
 168			ret = -EUCLEAN;
 169			btrfs_err(fs_info,
 170		"unexpected zero reference count for extent item (%llu %u %llu)",
 171				  key.objectid, key.type, key.offset);
 172			btrfs_abort_transaction(trans, ret);
 173			goto out_free;
 174		}
 175		extent_flags = btrfs_extent_flags(leaf, ei);
 176		owner = btrfs_get_extent_owner_root(fs_info, leaf, path->slots[0]);
 177	} else {
 178		num_refs = 0;
 179		extent_flags = 0;
 180		ret = 0;
 181	}
 182
 
 
 
 183	delayed_refs = &trans->transaction->delayed_refs;
 184	spin_lock(&delayed_refs->lock);
 185	head = btrfs_find_delayed_ref_head(fs_info, delayed_refs, bytenr);
 186	if (head) {
 187		if (!mutex_trylock(&head->mutex)) {
 188			refcount_inc(&head->refs);
 189			spin_unlock(&delayed_refs->lock);
 190
 191			btrfs_release_path(path);
 192
 193			/*
 194			 * Mutex was contended, block until it's released and try
 195			 * again
 196			 */
 197			mutex_lock(&head->mutex);
 198			mutex_unlock(&head->mutex);
 199			btrfs_put_delayed_ref_head(head);
 200			goto search_again;
 201		}
 202		spin_lock(&head->lock);
 203		if (head->extent_op && head->extent_op->update_flags)
 204			extent_flags |= head->extent_op->flags_to_set;
 
 
 205
 206		num_refs += head->ref_mod;
 207		spin_unlock(&head->lock);
 208		mutex_unlock(&head->mutex);
 209	}
 210	spin_unlock(&delayed_refs->lock);
 211
 212	WARN_ON(num_refs == 0);
 213	if (refs)
 214		*refs = num_refs;
 215	if (flags)
 216		*flags = extent_flags;
 217	if (owning_root)
 218		*owning_root = owner;
 219out_free:
 220	btrfs_free_path(path);
 221	return ret;
 222}
 223
 224/*
 225 * Back reference rules.  Back refs have three main goals:
 226 *
 227 * 1) differentiate between all holders of references to an extent so that
 228 *    when a reference is dropped we can make sure it was a valid reference
 229 *    before freeing the extent.
 230 *
 231 * 2) Provide enough information to quickly find the holders of an extent
 232 *    if we notice a given block is corrupted or bad.
 233 *
 234 * 3) Make it easy to migrate blocks for FS shrinking or storage pool
 235 *    maintenance.  This is actually the same as #2, but with a slightly
 236 *    different use case.
 237 *
 238 * There are two kinds of back refs. The implicit back refs is optimized
 239 * for pointers in non-shared tree blocks. For a given pointer in a block,
 240 * back refs of this kind provide information about the block's owner tree
 241 * and the pointer's key. These information allow us to find the block by
 242 * b-tree searching. The full back refs is for pointers in tree blocks not
 243 * referenced by their owner trees. The location of tree block is recorded
 244 * in the back refs. Actually the full back refs is generic, and can be
 245 * used in all cases the implicit back refs is used. The major shortcoming
 246 * of the full back refs is its overhead. Every time a tree block gets
 247 * COWed, we have to update back refs entry for all pointers in it.
 248 *
 249 * For a newly allocated tree block, we use implicit back refs for
 250 * pointers in it. This means most tree related operations only involve
 251 * implicit back refs. For a tree block created in old transaction, the
 252 * only way to drop a reference to it is COW it. So we can detect the
 253 * event that tree block loses its owner tree's reference and do the
 254 * back refs conversion.
 255 *
 256 * When a tree block is COWed through a tree, there are four cases:
 257 *
 258 * The reference count of the block is one and the tree is the block's
 259 * owner tree. Nothing to do in this case.
 260 *
 261 * The reference count of the block is one and the tree is not the
 262 * block's owner tree. In this case, full back refs is used for pointers
 263 * in the block. Remove these full back refs, add implicit back refs for
 264 * every pointers in the new block.
 265 *
 266 * The reference count of the block is greater than one and the tree is
 267 * the block's owner tree. In this case, implicit back refs is used for
 268 * pointers in the block. Add full back refs for every pointers in the
 269 * block, increase lower level extents' reference counts. The original
 270 * implicit back refs are entailed to the new block.
 271 *
 272 * The reference count of the block is greater than one and the tree is
 273 * not the block's owner tree. Add implicit back refs for every pointer in
 274 * the new block, increase lower level extents' reference count.
 275 *
 276 * Back Reference Key composing:
 277 *
 278 * The key objectid corresponds to the first byte in the extent,
 279 * The key type is used to differentiate between types of back refs.
 280 * There are different meanings of the key offset for different types
 281 * of back refs.
 282 *
 283 * File extents can be referenced by:
 284 *
 285 * - multiple snapshots, subvolumes, or different generations in one subvol
 286 * - different files inside a single subvolume
 287 * - different offsets inside a file (bookend extents in file.c)
 288 *
 289 * The extent ref structure for the implicit back refs has fields for:
 290 *
 291 * - Objectid of the subvolume root
 292 * - objectid of the file holding the reference
 293 * - original offset in the file
 294 * - how many bookend extents
 295 *
 296 * The key offset for the implicit back refs is hash of the first
 297 * three fields.
 298 *
 299 * The extent ref structure for the full back refs has field for:
 300 *
 301 * - number of pointers in the tree leaf
 302 *
 303 * The key offset for the implicit back refs is the first byte of
 304 * the tree leaf
 305 *
 306 * When a file extent is allocated, The implicit back refs is used.
 307 * the fields are filled in:
 308 *
 309 *     (root_key.objectid, inode objectid, offset in file, 1)
 310 *
 311 * When a file extent is removed file truncation, we find the
 312 * corresponding implicit back refs and check the following fields:
 313 *
 314 *     (btrfs_header_owner(leaf), inode objectid, offset in file)
 315 *
 316 * Btree extents can be referenced by:
 317 *
 318 * - Different subvolumes
 319 *
 320 * Both the implicit back refs and the full back refs for tree blocks
 321 * only consist of key. The key offset for the implicit back refs is
 322 * objectid of block's owner tree. The key offset for the full back refs
 323 * is the first byte of parent block.
 324 *
 325 * When implicit back refs is used, information about the lowest key and
 326 * level of the tree block are required. These information are stored in
 327 * tree block info structure.
 328 */
 329
 330/*
 331 * is_data == BTRFS_REF_TYPE_BLOCK, tree block type is required,
 332 * is_data == BTRFS_REF_TYPE_DATA, data type is requiried,
 333 * is_data == BTRFS_REF_TYPE_ANY, either type is OK.
 334 */
 335int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb,
 336				     struct btrfs_extent_inline_ref *iref,
 337				     enum btrfs_inline_ref_type is_data)
 338{
 339	struct btrfs_fs_info *fs_info = eb->fs_info;
 340	int type = btrfs_extent_inline_ref_type(eb, iref);
 341	u64 offset = btrfs_extent_inline_ref_offset(eb, iref);
 342
 343	if (type == BTRFS_EXTENT_OWNER_REF_KEY) {
 344		ASSERT(btrfs_fs_incompat(fs_info, SIMPLE_QUOTA));
 345		return type;
 346	}
 347
 348	if (type == BTRFS_TREE_BLOCK_REF_KEY ||
 349	    type == BTRFS_SHARED_BLOCK_REF_KEY ||
 350	    type == BTRFS_SHARED_DATA_REF_KEY ||
 351	    type == BTRFS_EXTENT_DATA_REF_KEY) {
 352		if (is_data == BTRFS_REF_TYPE_BLOCK) {
 353			if (type == BTRFS_TREE_BLOCK_REF_KEY)
 354				return type;
 355			if (type == BTRFS_SHARED_BLOCK_REF_KEY) {
 356				ASSERT(fs_info);
 357				/*
 358				 * Every shared one has parent tree block,
 359				 * which must be aligned to sector size.
 360				 */
 361				if (offset && IS_ALIGNED(offset, fs_info->sectorsize))
 362					return type;
 363			}
 364		} else if (is_data == BTRFS_REF_TYPE_DATA) {
 365			if (type == BTRFS_EXTENT_DATA_REF_KEY)
 366				return type;
 367			if (type == BTRFS_SHARED_DATA_REF_KEY) {
 368				ASSERT(fs_info);
 369				/*
 370				 * Every shared one has parent tree block,
 371				 * which must be aligned to sector size.
 372				 */
 373				if (offset &&
 374				    IS_ALIGNED(offset, fs_info->sectorsize))
 375					return type;
 376			}
 377		} else {
 378			ASSERT(is_data == BTRFS_REF_TYPE_ANY);
 379			return type;
 
 380		}
 381	}
 
 382
 383	WARN_ON(1);
 384	btrfs_print_leaf(eb);
 385	btrfs_err(fs_info,
 386		  "eb %llu iref 0x%lx invalid extent inline ref type %d",
 387		  eb->start, (unsigned long)iref, type);
 388
 389	return BTRFS_REF_TYPE_INVALID;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 390}
 
 391
 392u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset)
 393{
 394	u32 high_crc = ~(u32)0;
 395	u32 low_crc = ~(u32)0;
 396	__le64 lenum;
 397
 398	lenum = cpu_to_le64(root_objectid);
 399	high_crc = crc32c(high_crc, &lenum, sizeof(lenum));
 400	lenum = cpu_to_le64(owner);
 401	low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
 402	lenum = cpu_to_le64(offset);
 403	low_crc = crc32c(low_crc, &lenum, sizeof(lenum));
 404
 405	return ((u64)high_crc << 31) ^ (u64)low_crc;
 406}
 407
 408static u64 hash_extent_data_ref_item(struct extent_buffer *leaf,
 409				     struct btrfs_extent_data_ref *ref)
 410{
 411	return hash_extent_data_ref(btrfs_extent_data_ref_root(leaf, ref),
 412				    btrfs_extent_data_ref_objectid(leaf, ref),
 413				    btrfs_extent_data_ref_offset(leaf, ref));
 414}
 415
 416static int match_extent_data_ref(struct extent_buffer *leaf,
 417				 struct btrfs_extent_data_ref *ref,
 418				 u64 root_objectid, u64 owner, u64 offset)
 419{
 420	if (btrfs_extent_data_ref_root(leaf, ref) != root_objectid ||
 421	    btrfs_extent_data_ref_objectid(leaf, ref) != owner ||
 422	    btrfs_extent_data_ref_offset(leaf, ref) != offset)
 423		return 0;
 424	return 1;
 425}
 426
 427static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
 
 428					   struct btrfs_path *path,
 429					   u64 bytenr, u64 parent,
 430					   u64 root_objectid,
 431					   u64 owner, u64 offset)
 432{
 433	struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
 434	struct btrfs_key key;
 435	struct btrfs_extent_data_ref *ref;
 436	struct extent_buffer *leaf;
 437	u32 nritems;
 
 438	int recow;
 439	int ret;
 440
 441	key.objectid = bytenr;
 442	if (parent) {
 443		key.type = BTRFS_SHARED_DATA_REF_KEY;
 444		key.offset = parent;
 445	} else {
 446		key.type = BTRFS_EXTENT_DATA_REF_KEY;
 447		key.offset = hash_extent_data_ref(root_objectid,
 448						  owner, offset);
 449	}
 450again:
 451	recow = 0;
 452	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 453	if (ret < 0)
 454		return ret;
 
 
 455
 456	if (parent) {
 457		if (ret)
 458			return -ENOENT;
 459		return 0;
 
 
 
 
 
 
 
 
 
 
 
 460	}
 461
 462	ret = -ENOENT;
 463	leaf = path->nodes[0];
 464	nritems = btrfs_header_nritems(leaf);
 465	while (1) {
 466		if (path->slots[0] >= nritems) {
 467			ret = btrfs_next_leaf(root, path);
 468			if (ret) {
 469				if (ret > 0)
 470					return -ENOENT;
 471				return ret;
 472			}
 473
 474			leaf = path->nodes[0];
 475			nritems = btrfs_header_nritems(leaf);
 476			recow = 1;
 477		}
 478
 479		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 480		if (key.objectid != bytenr ||
 481		    key.type != BTRFS_EXTENT_DATA_REF_KEY)
 482			goto fail;
 483
 484		ref = btrfs_item_ptr(leaf, path->slots[0],
 485				     struct btrfs_extent_data_ref);
 486
 487		if (match_extent_data_ref(leaf, ref, root_objectid,
 488					  owner, offset)) {
 489			if (recow) {
 490				btrfs_release_path(path);
 491				goto again;
 492			}
 493			ret = 0;
 494			break;
 495		}
 496		path->slots[0]++;
 497	}
 498fail:
 499	return ret;
 500}
 501
 502static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
 
 503					   struct btrfs_path *path,
 504					   struct btrfs_delayed_ref_node *node,
 505					   u64 bytenr)
 
 506{
 507	struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
 508	struct btrfs_key key;
 509	struct extent_buffer *leaf;
 510	u64 owner = btrfs_delayed_ref_owner(node);
 511	u64 offset = btrfs_delayed_ref_offset(node);
 512	u32 size;
 513	u32 num_refs;
 514	int ret;
 515
 516	key.objectid = bytenr;
 517	if (node->parent) {
 518		key.type = BTRFS_SHARED_DATA_REF_KEY;
 519		key.offset = node->parent;
 520		size = sizeof(struct btrfs_shared_data_ref);
 521	} else {
 522		key.type = BTRFS_EXTENT_DATA_REF_KEY;
 523		key.offset = hash_extent_data_ref(node->ref_root, owner, offset);
 
 524		size = sizeof(struct btrfs_extent_data_ref);
 525	}
 526
 527	ret = btrfs_insert_empty_item(trans, root, path, &key, size);
 528	if (ret && ret != -EEXIST)
 529		goto fail;
 530
 531	leaf = path->nodes[0];
 532	if (node->parent) {
 533		struct btrfs_shared_data_ref *ref;
 534		ref = btrfs_item_ptr(leaf, path->slots[0],
 535				     struct btrfs_shared_data_ref);
 536		if (ret == 0) {
 537			btrfs_set_shared_data_ref_count(leaf, ref, node->ref_mod);
 538		} else {
 539			num_refs = btrfs_shared_data_ref_count(leaf, ref);
 540			num_refs += node->ref_mod;
 541			btrfs_set_shared_data_ref_count(leaf, ref, num_refs);
 542		}
 543	} else {
 544		struct btrfs_extent_data_ref *ref;
 545		while (ret == -EEXIST) {
 546			ref = btrfs_item_ptr(leaf, path->slots[0],
 547					     struct btrfs_extent_data_ref);
 548			if (match_extent_data_ref(leaf, ref, node->ref_root,
 549						  owner, offset))
 550				break;
 551			btrfs_release_path(path);
 552			key.offset++;
 553			ret = btrfs_insert_empty_item(trans, root, path, &key,
 554						      size);
 555			if (ret && ret != -EEXIST)
 556				goto fail;
 557
 558			leaf = path->nodes[0];
 559		}
 560		ref = btrfs_item_ptr(leaf, path->slots[0],
 561				     struct btrfs_extent_data_ref);
 562		if (ret == 0) {
 563			btrfs_set_extent_data_ref_root(leaf, ref, node->ref_root);
 
 564			btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
 565			btrfs_set_extent_data_ref_offset(leaf, ref, offset);
 566			btrfs_set_extent_data_ref_count(leaf, ref, node->ref_mod);
 567		} else {
 568			num_refs = btrfs_extent_data_ref_count(leaf, ref);
 569			num_refs += node->ref_mod;
 570			btrfs_set_extent_data_ref_count(leaf, ref, num_refs);
 571		}
 572	}
 573	btrfs_mark_buffer_dirty(trans, leaf);
 574	ret = 0;
 575fail:
 576	btrfs_release_path(path);
 577	return ret;
 578}
 579
 580static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
 581					   struct btrfs_root *root,
 582					   struct btrfs_path *path,
 583					   int refs_to_drop)
 584{
 585	struct btrfs_key key;
 586	struct btrfs_extent_data_ref *ref1 = NULL;
 587	struct btrfs_shared_data_ref *ref2 = NULL;
 588	struct extent_buffer *leaf;
 589	u32 num_refs = 0;
 590	int ret = 0;
 591
 592	leaf = path->nodes[0];
 593	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 594
 595	if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
 596		ref1 = btrfs_item_ptr(leaf, path->slots[0],
 597				      struct btrfs_extent_data_ref);
 598		num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 599	} else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
 600		ref2 = btrfs_item_ptr(leaf, path->slots[0],
 601				      struct btrfs_shared_data_ref);
 602		num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 
 
 
 
 
 
 
 603	} else {
 604		btrfs_err(trans->fs_info,
 605			  "unrecognized backref key (%llu %u %llu)",
 606			  key.objectid, key.type, key.offset);
 607		btrfs_abort_transaction(trans, -EUCLEAN);
 608		return -EUCLEAN;
 609	}
 610
 611	BUG_ON(num_refs < refs_to_drop);
 612	num_refs -= refs_to_drop;
 613
 614	if (num_refs == 0) {
 615		ret = btrfs_del_item(trans, root, path);
 
 616	} else {
 617		if (key.type == BTRFS_EXTENT_DATA_REF_KEY)
 618			btrfs_set_extent_data_ref_count(leaf, ref1, num_refs);
 619		else if (key.type == BTRFS_SHARED_DATA_REF_KEY)
 620			btrfs_set_shared_data_ref_count(leaf, ref2, num_refs);
 621		btrfs_mark_buffer_dirty(trans, leaf);
 
 
 
 
 
 
 
 
 622	}
 623	return ret;
 624}
 625
 626static noinline u32 extent_data_ref_count(struct btrfs_path *path,
 627					  struct btrfs_extent_inline_ref *iref)
 628{
 629	struct btrfs_key key;
 630	struct extent_buffer *leaf;
 631	struct btrfs_extent_data_ref *ref1;
 632	struct btrfs_shared_data_ref *ref2;
 633	u32 num_refs = 0;
 634	int type;
 635
 636	leaf = path->nodes[0];
 637	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 638
 639	if (iref) {
 640		/*
 641		 * If type is invalid, we should have bailed out earlier than
 642		 * this call.
 643		 */
 644		type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_DATA);
 645		ASSERT(type != BTRFS_REF_TYPE_INVALID);
 646		if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 647			ref1 = (struct btrfs_extent_data_ref *)(&iref->offset);
 648			num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 649		} else {
 650			ref2 = (struct btrfs_shared_data_ref *)(iref + 1);
 651			num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 652		}
 653	} else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
 654		ref1 = btrfs_item_ptr(leaf, path->slots[0],
 655				      struct btrfs_extent_data_ref);
 656		num_refs = btrfs_extent_data_ref_count(leaf, ref1);
 657	} else if (key.type == BTRFS_SHARED_DATA_REF_KEY) {
 658		ref2 = btrfs_item_ptr(leaf, path->slots[0],
 659				      struct btrfs_shared_data_ref);
 660		num_refs = btrfs_shared_data_ref_count(leaf, ref2);
 
 
 
 
 
 
 
 661	} else {
 662		WARN_ON(1);
 663	}
 664	return num_refs;
 665}
 666
 667static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
 
 668					  struct btrfs_path *path,
 669					  u64 bytenr, u64 parent,
 670					  u64 root_objectid)
 671{
 672	struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
 673	struct btrfs_key key;
 674	int ret;
 675
 676	key.objectid = bytenr;
 677	if (parent) {
 678		key.type = BTRFS_SHARED_BLOCK_REF_KEY;
 679		key.offset = parent;
 680	} else {
 681		key.type = BTRFS_TREE_BLOCK_REF_KEY;
 682		key.offset = root_objectid;
 683	}
 684
 685	ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 686	if (ret > 0)
 687		ret = -ENOENT;
 
 
 
 
 
 
 
 
 
 688	return ret;
 689}
 690
 691static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
 
 692					  struct btrfs_path *path,
 693					  struct btrfs_delayed_ref_node *node,
 694					  u64 bytenr)
 695{
 696	struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
 697	struct btrfs_key key;
 698	int ret;
 699
 700	key.objectid = bytenr;
 701	if (node->parent) {
 702		key.type = BTRFS_SHARED_BLOCK_REF_KEY;
 703		key.offset = node->parent;
 704	} else {
 705		key.type = BTRFS_TREE_BLOCK_REF_KEY;
 706		key.offset = node->ref_root;
 707	}
 708
 709	ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
 710	btrfs_release_path(path);
 711	return ret;
 712}
 713
 714static inline int extent_ref_type(u64 parent, u64 owner)
 715{
 716	int type;
 717	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
 718		if (parent > 0)
 719			type = BTRFS_SHARED_BLOCK_REF_KEY;
 720		else
 721			type = BTRFS_TREE_BLOCK_REF_KEY;
 722	} else {
 723		if (parent > 0)
 724			type = BTRFS_SHARED_DATA_REF_KEY;
 725		else
 726			type = BTRFS_EXTENT_DATA_REF_KEY;
 727	}
 728	return type;
 729}
 730
 731static int find_next_key(struct btrfs_path *path, int level,
 732			 struct btrfs_key *key)
 733
 734{
 735	for (; level < BTRFS_MAX_LEVEL; level++) {
 736		if (!path->nodes[level])
 737			break;
 738		if (path->slots[level] + 1 >=
 739		    btrfs_header_nritems(path->nodes[level]))
 740			continue;
 741		if (level == 0)
 742			btrfs_item_key_to_cpu(path->nodes[level], key,
 743					      path->slots[level] + 1);
 744		else
 745			btrfs_node_key_to_cpu(path->nodes[level], key,
 746					      path->slots[level] + 1);
 747		return 0;
 748	}
 749	return 1;
 750}
 751
 752/*
 753 * look for inline back ref. if back ref is found, *ref_ret is set
 754 * to the address of inline back ref, and 0 is returned.
 755 *
 756 * if back ref isn't found, *ref_ret is set to the address where it
 757 * should be inserted, and -ENOENT is returned.
 758 *
 759 * if insert is true and there are too many inline back refs, the path
 760 * points to the extent item, and -EAGAIN is returned.
 761 *
 762 * NOTE: inline back refs are ordered in the same way that back ref
 763 *	 items in the tree are ordered.
 764 */
 765static noinline_for_stack
 766int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
 
 767				 struct btrfs_path *path,
 768				 struct btrfs_extent_inline_ref **ref_ret,
 769				 u64 bytenr, u64 num_bytes,
 770				 u64 parent, u64 root_objectid,
 771				 u64 owner, u64 offset, int insert)
 772{
 773	struct btrfs_fs_info *fs_info = trans->fs_info;
 774	struct btrfs_root *root = btrfs_extent_root(fs_info, bytenr);
 775	struct btrfs_key key;
 776	struct extent_buffer *leaf;
 777	struct btrfs_extent_item *ei;
 778	struct btrfs_extent_inline_ref *iref;
 779	u64 flags;
 780	u64 item_size;
 781	unsigned long ptr;
 782	unsigned long end;
 783	int extra_size;
 784	int type;
 785	int want;
 786	int ret;
 787	bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
 788	int needed;
 
 789
 790	key.objectid = bytenr;
 791	key.type = BTRFS_EXTENT_ITEM_KEY;
 792	key.offset = num_bytes;
 793
 794	want = extent_ref_type(parent, owner);
 795	if (insert) {
 796		extra_size = btrfs_extent_inline_ref_size(want);
 797		path->search_for_extension = 1;
 798	} else
 799		extra_size = -1;
 800
 801	/*
 802	 * Owner is our level, so we can just add one to get the level for the
 803	 * block we are interested in.
 804	 */
 805	if (skinny_metadata && owner < BTRFS_FIRST_FREE_OBJECTID) {
 806		key.type = BTRFS_METADATA_ITEM_KEY;
 807		key.offset = owner;
 808	}
 809
 810again:
 811	ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
 812	if (ret < 0)
 
 813		goto out;
 
 814
 815	/*
 816	 * We may be a newly converted file system which still has the old fat
 817	 * extent entries for metadata, so try and see if we have one of those.
 818	 */
 819	if (ret > 0 && skinny_metadata) {
 820		skinny_metadata = false;
 821		if (path->slots[0]) {
 822			path->slots[0]--;
 823			btrfs_item_key_to_cpu(path->nodes[0], &key,
 824					      path->slots[0]);
 825			if (key.objectid == bytenr &&
 826			    key.type == BTRFS_EXTENT_ITEM_KEY &&
 827			    key.offset == num_bytes)
 828				ret = 0;
 829		}
 830		if (ret) {
 831			key.objectid = bytenr;
 832			key.type = BTRFS_EXTENT_ITEM_KEY;
 833			key.offset = num_bytes;
 834			btrfs_release_path(path);
 835			goto again;
 836		}
 837	}
 838
 839	if (ret && !insert) {
 840		ret = -ENOENT;
 841		goto out;
 842	} else if (WARN_ON(ret)) {
 843		btrfs_print_leaf(path->nodes[0]);
 844		btrfs_err(fs_info,
 845"extent item not found for insert, bytenr %llu num_bytes %llu parent %llu root_objectid %llu owner %llu offset %llu",
 846			  bytenr, num_bytes, parent, root_objectid, owner,
 847			  offset);
 848		ret = -EUCLEAN;
 849		goto out;
 850	}
 851
 852	leaf = path->nodes[0];
 853	item_size = btrfs_item_size(leaf, path->slots[0]);
 854	if (unlikely(item_size < sizeof(*ei))) {
 855		ret = -EUCLEAN;
 856		btrfs_err(fs_info,
 857			  "unexpected extent item size, has %llu expect >= %zu",
 858			  item_size, sizeof(*ei));
 859		btrfs_abort_transaction(trans, ret);
 860		goto out;
 
 
 
 
 
 
 
 861	}
 
 
 862
 863	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
 864	flags = btrfs_extent_flags(leaf, ei);
 865
 866	ptr = (unsigned long)(ei + 1);
 867	end = (unsigned long)ei + item_size;
 868
 869	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK && !skinny_metadata) {
 870		ptr += sizeof(struct btrfs_tree_block_info);
 871		BUG_ON(ptr > end);
 872	}
 873
 874	if (owner >= BTRFS_FIRST_FREE_OBJECTID)
 875		needed = BTRFS_REF_TYPE_DATA;
 876	else
 877		needed = BTRFS_REF_TYPE_BLOCK;
 878
 879	ret = -ENOENT;
 880	while (ptr < end) {
 881		iref = (struct btrfs_extent_inline_ref *)ptr;
 882		type = btrfs_get_extent_inline_ref_type(leaf, iref, needed);
 883		if (type == BTRFS_EXTENT_OWNER_REF_KEY) {
 884			ASSERT(btrfs_fs_incompat(fs_info, SIMPLE_QUOTA));
 885			ptr += btrfs_extent_inline_ref_size(type);
 886			continue;
 887		}
 888		if (type == BTRFS_REF_TYPE_INVALID) {
 889			ret = -EUCLEAN;
 890			goto out;
 891		}
 892
 893		if (want < type)
 894			break;
 895		if (want > type) {
 896			ptr += btrfs_extent_inline_ref_size(type);
 897			continue;
 898		}
 899
 900		if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 901			struct btrfs_extent_data_ref *dref;
 902			dref = (struct btrfs_extent_data_ref *)(&iref->offset);
 903			if (match_extent_data_ref(leaf, dref, root_objectid,
 904						  owner, offset)) {
 905				ret = 0;
 906				break;
 907			}
 908			if (hash_extent_data_ref_item(leaf, dref) <
 909			    hash_extent_data_ref(root_objectid, owner, offset))
 910				break;
 911		} else {
 912			u64 ref_offset;
 913			ref_offset = btrfs_extent_inline_ref_offset(leaf, iref);
 914			if (parent > 0) {
 915				if (parent == ref_offset) {
 916					ret = 0;
 917					break;
 918				}
 919				if (ref_offset < parent)
 920					break;
 921			} else {
 922				if (root_objectid == ref_offset) {
 923					ret = 0;
 924					break;
 925				}
 926				if (ref_offset < root_objectid)
 927					break;
 928			}
 929		}
 930		ptr += btrfs_extent_inline_ref_size(type);
 931	}
 932
 933	if (unlikely(ptr > end)) {
 934		ret = -EUCLEAN;
 935		btrfs_print_leaf(path->nodes[0]);
 936		btrfs_crit(fs_info,
 937"overrun extent record at slot %d while looking for inline extent for root %llu owner %llu offset %llu parent %llu",
 938			   path->slots[0], root_objectid, owner, offset, parent);
 939		goto out;
 940	}
 941
 942	if (ret == -ENOENT && insert) {
 943		if (item_size + extra_size >=
 944		    BTRFS_MAX_EXTENT_ITEM_SIZE(root)) {
 945			ret = -EAGAIN;
 946			goto out;
 947		}
 948
 949		if (path->slots[0] + 1 < btrfs_header_nritems(path->nodes[0])) {
 950			struct btrfs_key tmp_key;
 951
 952			btrfs_item_key_to_cpu(path->nodes[0], &tmp_key, path->slots[0] + 1);
 953			if (tmp_key.objectid == bytenr &&
 954			    tmp_key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
 955				ret = -EAGAIN;
 956				goto out;
 957			}
 958			goto out_no_entry;
 959		}
 960
 961		if (!path->keep_locks) {
 962			btrfs_release_path(path);
 963			path->keep_locks = 1;
 964			goto again;
 965		}
 966
 967		/*
 968		 * To add new inline back ref, we have to make sure
 969		 * there is no corresponding back ref item.
 970		 * For simplicity, we just do not add new inline back
 971		 * ref if there is any kind of item for this block
 972		 */
 973		if (find_next_key(path, 0, &key) == 0 &&
 974		    key.objectid == bytenr &&
 975		    key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
 976			ret = -EAGAIN;
 977			goto out;
 978		}
 979	}
 980out_no_entry:
 981	*ref_ret = (struct btrfs_extent_inline_ref *)ptr;
 982out:
 983	if (path->keep_locks) {
 984		path->keep_locks = 0;
 985		btrfs_unlock_up_safe(path, 1);
 986	}
 987	if (insert)
 988		path->search_for_extension = 0;
 989	return ret;
 990}
 991
 992/*
 993 * helper to add new inline back ref
 994 */
 995static noinline_for_stack
 996void setup_inline_extent_backref(struct btrfs_trans_handle *trans,
 997				 struct btrfs_path *path,
 998				 struct btrfs_extent_inline_ref *iref,
 999				 u64 parent, u64 root_objectid,
1000				 u64 owner, u64 offset, int refs_to_add,
1001				 struct btrfs_delayed_extent_op *extent_op)
1002{
1003	struct extent_buffer *leaf;
1004	struct btrfs_extent_item *ei;
1005	unsigned long ptr;
1006	unsigned long end;
1007	unsigned long item_offset;
1008	u64 refs;
1009	int size;
1010	int type;
1011
1012	leaf = path->nodes[0];
1013	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1014	item_offset = (unsigned long)iref - (unsigned long)ei;
1015
1016	type = extent_ref_type(parent, owner);
1017	size = btrfs_extent_inline_ref_size(type);
1018
1019	btrfs_extend_item(trans, path, size);
1020
1021	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1022	refs = btrfs_extent_refs(leaf, ei);
1023	refs += refs_to_add;
1024	btrfs_set_extent_refs(leaf, ei, refs);
1025	if (extent_op)
1026		__run_delayed_extent_op(extent_op, leaf, ei);
1027
1028	ptr = (unsigned long)ei + item_offset;
1029	end = (unsigned long)ei + btrfs_item_size(leaf, path->slots[0]);
1030	if (ptr < end - size)
1031		memmove_extent_buffer(leaf, ptr + size, ptr,
1032				      end - size - ptr);
1033
1034	iref = (struct btrfs_extent_inline_ref *)ptr;
1035	btrfs_set_extent_inline_ref_type(leaf, iref, type);
1036	if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1037		struct btrfs_extent_data_ref *dref;
1038		dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1039		btrfs_set_extent_data_ref_root(leaf, dref, root_objectid);
1040		btrfs_set_extent_data_ref_objectid(leaf, dref, owner);
1041		btrfs_set_extent_data_ref_offset(leaf, dref, offset);
1042		btrfs_set_extent_data_ref_count(leaf, dref, refs_to_add);
1043	} else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1044		struct btrfs_shared_data_ref *sref;
1045		sref = (struct btrfs_shared_data_ref *)(iref + 1);
1046		btrfs_set_shared_data_ref_count(leaf, sref, refs_to_add);
1047		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1048	} else if (type == BTRFS_SHARED_BLOCK_REF_KEY) {
1049		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
1050	} else {
1051		btrfs_set_extent_inline_ref_offset(leaf, iref, root_objectid);
1052	}
1053	btrfs_mark_buffer_dirty(trans, leaf);
1054}
1055
1056static int lookup_extent_backref(struct btrfs_trans_handle *trans,
 
1057				 struct btrfs_path *path,
1058				 struct btrfs_extent_inline_ref **ref_ret,
1059				 u64 bytenr, u64 num_bytes, u64 parent,
1060				 u64 root_objectid, u64 owner, u64 offset)
1061{
1062	int ret;
1063
1064	ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr,
1065					   num_bytes, parent, root_objectid,
1066					   owner, offset, 0);
1067	if (ret != -ENOENT)
1068		return ret;
1069
1070	btrfs_release_path(path);
1071	*ref_ret = NULL;
1072
1073	if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1074		ret = lookup_tree_block_ref(trans, path, bytenr, parent,
1075					    root_objectid);
1076	} else {
1077		ret = lookup_extent_data_ref(trans, path, bytenr, parent,
1078					     root_objectid, owner, offset);
1079	}
1080	return ret;
1081}
1082
1083/*
1084 * helper to update/remove inline back ref
1085 */
1086static noinline_for_stack int update_inline_extent_backref(
1087				  struct btrfs_trans_handle *trans,
1088				  struct btrfs_path *path,
1089				  struct btrfs_extent_inline_ref *iref,
1090				  int refs_to_mod,
1091				  struct btrfs_delayed_extent_op *extent_op)
 
1092{
1093	struct extent_buffer *leaf = path->nodes[0];
1094	struct btrfs_fs_info *fs_info = leaf->fs_info;
1095	struct btrfs_extent_item *ei;
1096	struct btrfs_extent_data_ref *dref = NULL;
1097	struct btrfs_shared_data_ref *sref = NULL;
1098	unsigned long ptr;
1099	unsigned long end;
1100	u32 item_size;
1101	int size;
1102	int type;
1103	u64 refs;
1104
 
1105	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1106	refs = btrfs_extent_refs(leaf, ei);
1107	if (unlikely(refs_to_mod < 0 && refs + refs_to_mod <= 0)) {
1108		struct btrfs_key key;
1109		u32 extent_size;
1110
1111		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1112		if (key.type == BTRFS_METADATA_ITEM_KEY)
1113			extent_size = fs_info->nodesize;
1114		else
1115			extent_size = key.offset;
1116		btrfs_print_leaf(leaf);
1117		btrfs_err(fs_info,
1118	"invalid refs_to_mod for extent %llu num_bytes %u, has %d expect >= -%llu",
1119			  key.objectid, extent_size, refs_to_mod, refs);
1120		return -EUCLEAN;
1121	}
1122	refs += refs_to_mod;
1123	btrfs_set_extent_refs(leaf, ei, refs);
1124	if (extent_op)
1125		__run_delayed_extent_op(extent_op, leaf, ei);
1126
1127	type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_ANY);
1128	/*
1129	 * Function btrfs_get_extent_inline_ref_type() has already printed
1130	 * error messages.
1131	 */
1132	if (unlikely(type == BTRFS_REF_TYPE_INVALID))
1133		return -EUCLEAN;
1134
1135	if (type == BTRFS_EXTENT_DATA_REF_KEY) {
1136		dref = (struct btrfs_extent_data_ref *)(&iref->offset);
1137		refs = btrfs_extent_data_ref_count(leaf, dref);
1138	} else if (type == BTRFS_SHARED_DATA_REF_KEY) {
1139		sref = (struct btrfs_shared_data_ref *)(iref + 1);
1140		refs = btrfs_shared_data_ref_count(leaf, sref);
1141	} else {
1142		refs = 1;
1143		/*
1144		 * For tree blocks we can only drop one ref for it, and tree
1145		 * blocks should not have refs > 1.
1146		 *
1147		 * Furthermore if we're inserting a new inline backref, we
1148		 * won't reach this path either. That would be
1149		 * setup_inline_extent_backref().
1150		 */
1151		if (unlikely(refs_to_mod != -1)) {
1152			struct btrfs_key key;
1153
1154			btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1155
1156			btrfs_print_leaf(leaf);
1157			btrfs_err(fs_info,
1158			"invalid refs_to_mod for tree block %llu, has %d expect -1",
1159				  key.objectid, refs_to_mod);
1160			return -EUCLEAN;
1161		}
1162	}
1163
1164	if (unlikely(refs_to_mod < 0 && refs < -refs_to_mod)) {
1165		struct btrfs_key key;
1166		u32 extent_size;
1167
1168		btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1169		if (key.type == BTRFS_METADATA_ITEM_KEY)
1170			extent_size = fs_info->nodesize;
1171		else
1172			extent_size = key.offset;
1173		btrfs_print_leaf(leaf);
1174		btrfs_err(fs_info,
1175"invalid refs_to_mod for backref entry, iref %lu extent %llu num_bytes %u, has %d expect >= -%llu",
1176			  (unsigned long)iref, key.objectid, extent_size,
1177			  refs_to_mod, refs);
1178		return -EUCLEAN;
1179	}
1180	refs += refs_to_mod;
1181
1182	if (refs > 0) {
1183		if (type == BTRFS_EXTENT_DATA_REF_KEY)
1184			btrfs_set_extent_data_ref_count(leaf, dref, refs);
1185		else
1186			btrfs_set_shared_data_ref_count(leaf, sref, refs);
1187	} else {
 
1188		size =  btrfs_extent_inline_ref_size(type);
1189		item_size = btrfs_item_size(leaf, path->slots[0]);
1190		ptr = (unsigned long)iref;
1191		end = (unsigned long)ei + item_size;
1192		if (ptr + size < end)
1193			memmove_extent_buffer(leaf, ptr, ptr + size,
1194					      end - ptr - size);
1195		item_size -= size;
1196		btrfs_truncate_item(trans, path, item_size, 1);
1197	}
1198	btrfs_mark_buffer_dirty(trans, leaf);
1199	return 0;
1200}
1201
1202static noinline_for_stack
1203int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
 
1204				 struct btrfs_path *path,
1205				 u64 bytenr, u64 num_bytes, u64 parent,
1206				 u64 root_objectid, u64 owner,
1207				 u64 offset, int refs_to_add,
1208				 struct btrfs_delayed_extent_op *extent_op)
1209{
1210	struct btrfs_extent_inline_ref *iref;
1211	int ret;
1212
1213	ret = lookup_inline_extent_backref(trans, path, &iref, bytenr,
1214					   num_bytes, parent, root_objectid,
1215					   owner, offset, 1);
1216	if (ret == 0) {
1217		/*
1218		 * We're adding refs to a tree block we already own, this
1219		 * should not happen at all.
1220		 */
1221		if (owner < BTRFS_FIRST_FREE_OBJECTID) {
1222			btrfs_print_leaf(path->nodes[0]);
1223			btrfs_crit(trans->fs_info,
1224"adding refs to an existing tree ref, bytenr %llu num_bytes %llu root_objectid %llu slot %u",
1225				   bytenr, num_bytes, root_objectid, path->slots[0]);
1226			return -EUCLEAN;
1227		}
1228		ret = update_inline_extent_backref(trans, path, iref,
1229						   refs_to_add, extent_op);
1230	} else if (ret == -ENOENT) {
1231		setup_inline_extent_backref(trans, path, iref, parent,
1232					    root_objectid, owner, offset,
1233					    refs_to_add, extent_op);
1234		ret = 0;
1235	}
1236	return ret;
1237}
1238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1239static int remove_extent_backref(struct btrfs_trans_handle *trans,
1240				 struct btrfs_root *root,
1241				 struct btrfs_path *path,
1242				 struct btrfs_extent_inline_ref *iref,
1243				 int refs_to_drop, int is_data)
1244{
1245	int ret = 0;
1246
1247	BUG_ON(!is_data && refs_to_drop != 1);
1248	if (iref)
1249		ret = update_inline_extent_backref(trans, path, iref,
1250						   -refs_to_drop, NULL);
1251	else if (is_data)
1252		ret = remove_extent_data_ref(trans, root, path, refs_to_drop);
1253	else
 
 
1254		ret = btrfs_del_item(trans, root, path);
 
1255	return ret;
1256}
1257
 
1258static int btrfs_issue_discard(struct block_device *bdev, u64 start, u64 len,
1259			       u64 *discarded_bytes)
1260{
1261	int j, ret = 0;
1262	u64 bytes_left, end;
1263	u64 aligned_start = ALIGN(start, 1 << SECTOR_SHIFT);
1264
1265	/* Adjust the range to be aligned to 512B sectors if necessary. */
1266	if (start != aligned_start) {
1267		len -= aligned_start - start;
1268		len = round_down(len, 1 << SECTOR_SHIFT);
1269		start = aligned_start;
1270	}
1271
1272	*discarded_bytes = 0;
1273
1274	if (!len)
1275		return 0;
1276
1277	end = start + len;
1278	bytes_left = len;
1279
1280	/* Skip any superblocks on this device. */
1281	for (j = 0; j < BTRFS_SUPER_MIRROR_MAX; j++) {
1282		u64 sb_start = btrfs_sb_offset(j);
1283		u64 sb_end = sb_start + BTRFS_SUPER_INFO_SIZE;
1284		u64 size = sb_start - start;
1285
1286		if (!in_range(sb_start, start, bytes_left) &&
1287		    !in_range(sb_end, start, bytes_left) &&
1288		    !in_range(start, sb_start, BTRFS_SUPER_INFO_SIZE))
1289			continue;
1290
1291		/*
1292		 * Superblock spans beginning of range.  Adjust start and
1293		 * try again.
1294		 */
1295		if (sb_start <= start) {
1296			start += sb_end - start;
1297			if (start > end) {
1298				bytes_left = 0;
1299				break;
1300			}
1301			bytes_left = end - start;
1302			continue;
1303		}
1304
1305		if (size) {
1306			ret = blkdev_issue_discard(bdev, start >> SECTOR_SHIFT,
1307						   size >> SECTOR_SHIFT,
1308						   GFP_NOFS);
1309			if (!ret)
1310				*discarded_bytes += size;
1311			else if (ret != -EOPNOTSUPP)
1312				return ret;
1313		}
1314
1315		start = sb_end;
1316		if (start > end) {
1317			bytes_left = 0;
1318			break;
1319		}
1320		bytes_left = end - start;
1321	}
1322
1323	while (bytes_left) {
1324		u64 bytes_to_discard = min(BTRFS_MAX_DISCARD_CHUNK_SIZE, bytes_left);
1325
1326		ret = blkdev_issue_discard(bdev, start >> SECTOR_SHIFT,
1327					   bytes_to_discard >> SECTOR_SHIFT,
1328					   GFP_NOFS);
1329
1330		if (ret) {
1331			if (ret != -EOPNOTSUPP)
1332				break;
1333			continue;
1334		}
1335
1336		start += bytes_to_discard;
1337		bytes_left -= bytes_to_discard;
1338		*discarded_bytes += bytes_to_discard;
1339
1340		if (btrfs_trim_interrupted()) {
1341			ret = -ERESTARTSYS;
1342			break;
1343		}
1344	}
1345
1346	return ret;
1347}
1348
1349static int do_discard_extent(struct btrfs_discard_stripe *stripe, u64 *bytes)
1350{
1351	struct btrfs_device *dev = stripe->dev;
1352	struct btrfs_fs_info *fs_info = dev->fs_info;
1353	struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
1354	u64 phys = stripe->physical;
1355	u64 len = stripe->length;
1356	u64 discarded = 0;
1357	int ret = 0;
1358
1359	/* Zone reset on a zoned filesystem */
1360	if (btrfs_can_zone_reset(dev, phys, len)) {
1361		u64 src_disc;
1362
1363		ret = btrfs_reset_device_zone(dev, phys, len, &discarded);
1364		if (ret)
1365			goto out;
1366
1367		if (!btrfs_dev_replace_is_ongoing(dev_replace) ||
1368		    dev != dev_replace->srcdev)
1369			goto out;
1370
1371		src_disc = discarded;
1372
1373		/* Send to replace target as well */
1374		ret = btrfs_reset_device_zone(dev_replace->tgtdev, phys, len,
1375					      &discarded);
1376		discarded += src_disc;
1377	} else if (bdev_max_discard_sectors(stripe->dev->bdev)) {
1378		ret = btrfs_issue_discard(dev->bdev, phys, len, &discarded);
1379	} else {
1380		ret = 0;
1381		*bytes = 0;
1382	}
1383
1384out:
1385	*bytes = discarded;
1386	return ret;
1387}
1388
1389int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
1390			 u64 num_bytes, u64 *actual_bytes)
1391{
1392	int ret = 0;
1393	u64 discarded_bytes = 0;
1394	u64 end = bytenr + num_bytes;
1395	u64 cur = bytenr;
1396
1397	/*
1398	 * Avoid races with device replace and make sure the devices in the
1399	 * stripes don't go away while we are discarding.
1400	 */
1401	btrfs_bio_counter_inc_blocked(fs_info);
1402	while (cur < end) {
1403		struct btrfs_discard_stripe *stripes;
1404		unsigned int num_stripes;
1405		int i;
1406
1407		num_bytes = end - cur;
1408		stripes = btrfs_map_discard(fs_info, cur, &num_bytes, &num_stripes);
1409		if (IS_ERR(stripes)) {
1410			ret = PTR_ERR(stripes);
1411			if (ret == -EOPNOTSUPP)
1412				ret = 0;
1413			break;
1414		}
1415
1416		for (i = 0; i < num_stripes; i++) {
1417			struct btrfs_discard_stripe *stripe = stripes + i;
1418			u64 bytes;
1419
1420			if (!stripe->dev->bdev) {
1421				ASSERT(btrfs_test_opt(fs_info, DEGRADED));
1422				continue;
1423			}
1424
1425			if (!test_bit(BTRFS_DEV_STATE_WRITEABLE,
1426					&stripe->dev->dev_state))
1427				continue;
 
 
 
 
 
1428
1429			ret = do_discard_extent(stripe, &bytes);
1430			if (ret) {
1431				/*
1432				 * Keep going if discard is not supported by the
1433				 * device.
1434				 */
1435				if (ret != -EOPNOTSUPP)
1436					break;
1437				ret = 0;
1438			} else {
1439				discarded_bytes += bytes;
1440			}
1441		}
1442		kfree(stripes);
1443		if (ret)
1444			break;
1445		cur += num_bytes;
1446	}
1447	btrfs_bio_counter_dec(fs_info);
1448	if (actual_bytes)
1449		*actual_bytes = discarded_bytes;
 
 
 
 
1450	return ret;
1451}
1452
1453/* Can return -ENOMEM */
1454int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1455			 struct btrfs_ref *generic_ref)
 
 
1456{
1457	struct btrfs_fs_info *fs_info = trans->fs_info;
1458	int ret;
 
1459
1460	ASSERT(generic_ref->type != BTRFS_REF_NOT_SET &&
1461	       generic_ref->action);
1462	BUG_ON(generic_ref->type == BTRFS_REF_METADATA &&
1463	       generic_ref->ref_root == BTRFS_TREE_LOG_OBJECTID);
1464
1465	if (generic_ref->type == BTRFS_REF_METADATA)
1466		ret = btrfs_add_delayed_tree_ref(trans, generic_ref, NULL);
1467	else
1468		ret = btrfs_add_delayed_data_ref(trans, generic_ref, 0);
1469
1470	btrfs_ref_tree_mod(fs_info, generic_ref);
1471
 
 
 
 
 
 
 
 
 
 
 
1472	return ret;
1473}
1474
1475/*
1476 * Insert backreference for a given extent.
1477 *
1478 * The counterpart is in __btrfs_free_extent(), with examples and more details
1479 * how it works.
1480 *
1481 * @trans:	    Handle of transaction
1482 *
1483 * @node:	    The delayed ref node used to get the bytenr/length for
1484 *		    extent whose references are incremented.
1485 *
1486 * @extent_op       Pointer to a structure, holding information necessary when
1487 *                  updating a tree block's flags
1488 *
1489 */
1490static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
 
1491				  struct btrfs_delayed_ref_node *node,
 
 
1492				  struct btrfs_delayed_extent_op *extent_op)
1493{
 
1494	struct btrfs_path *path;
1495	struct extent_buffer *leaf;
1496	struct btrfs_extent_item *item;
1497	struct btrfs_key key;
1498	u64 bytenr = node->bytenr;
1499	u64 num_bytes = node->num_bytes;
1500	u64 owner = btrfs_delayed_ref_owner(node);
1501	u64 offset = btrfs_delayed_ref_offset(node);
1502	u64 refs;
1503	int refs_to_add = node->ref_mod;
1504	int ret;
1505
1506	path = btrfs_alloc_path();
1507	if (!path)
1508		return -ENOMEM;
1509
 
 
1510	/* this will setup the path even if it fails to insert the back ref */
1511	ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes,
1512					   node->parent, node->ref_root, owner,
1513					   offset, refs_to_add, extent_op);
 
1514	if ((ret < 0 && ret != -EAGAIN) || !ret)
1515		goto out;
1516
1517	/*
1518	 * Ok we had -EAGAIN which means we didn't have space to insert and
1519	 * inline extent ref, so just update the reference count and add a
1520	 * normal backref.
1521	 */
1522	leaf = path->nodes[0];
1523	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1524	item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1525	refs = btrfs_extent_refs(leaf, item);
1526	btrfs_set_extent_refs(leaf, item, refs + refs_to_add);
1527	if (extent_op)
1528		__run_delayed_extent_op(extent_op, leaf, item);
1529
1530	btrfs_mark_buffer_dirty(trans, leaf);
1531	btrfs_release_path(path);
1532
 
 
1533	/* now insert the actual backref */
1534	if (owner < BTRFS_FIRST_FREE_OBJECTID)
1535		ret = insert_tree_block_ref(trans, path, node, bytenr);
1536	else
1537		ret = insert_extent_data_ref(trans, path, node, bytenr);
1538
1539	if (ret)
1540		btrfs_abort_transaction(trans, ret);
1541out:
1542	btrfs_free_path(path);
1543	return ret;
1544}
1545
1546static void free_head_ref_squota_rsv(struct btrfs_fs_info *fs_info,
1547				     struct btrfs_delayed_ref_head *href)
1548{
1549	u64 root = href->owning_root;
1550
1551	/*
1552	 * Don't check must_insert_reserved, as this is called from contexts
1553	 * where it has already been unset.
1554	 */
1555	if (btrfs_qgroup_mode(fs_info) != BTRFS_QGROUP_MODE_SIMPLE ||
1556	    !href->is_data || !is_fstree(root))
1557		return;
1558
1559	btrfs_qgroup_free_refroot(fs_info, root, href->reserved_bytes,
1560				  BTRFS_QGROUP_RSV_DATA);
1561}
1562
1563static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
1564				struct btrfs_delayed_ref_head *href,
1565				struct btrfs_delayed_ref_node *node,
1566				struct btrfs_delayed_extent_op *extent_op,
1567				bool insert_reserved)
1568{
1569	int ret = 0;
 
 
1570	u64 parent = 0;
 
1571	u64 flags = 0;
1572
1573	trace_run_delayed_data_ref(trans->fs_info, node);
 
 
 
 
 
1574
1575	if (node->type == BTRFS_SHARED_DATA_REF_KEY)
1576		parent = node->parent;
 
1577
1578	if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
1579		struct btrfs_key key;
1580		struct btrfs_squota_delta delta = {
1581			.root = href->owning_root,
1582			.num_bytes = node->num_bytes,
1583			.is_data = true,
1584			.is_inc	= true,
1585			.generation = trans->transid,
1586		};
1587		u64 owner = btrfs_delayed_ref_owner(node);
1588		u64 offset = btrfs_delayed_ref_offset(node);
1589
1590		if (extent_op)
1591			flags |= extent_op->flags_to_set;
1592
1593		key.objectid = node->bytenr;
1594		key.type = BTRFS_EXTENT_ITEM_KEY;
1595		key.offset = node->num_bytes;
1596
1597		ret = alloc_reserved_file_extent(trans, parent, node->ref_root,
1598						 flags, owner, offset, &key,
1599						 node->ref_mod,
1600						 href->owning_root);
1601		free_head_ref_squota_rsv(trans->fs_info, href);
1602		if (!ret)
1603			ret = btrfs_record_squota_delta(trans->fs_info, &delta);
1604	} else if (node->action == BTRFS_ADD_DELAYED_REF) {
1605		ret = __btrfs_inc_extent_ref(trans, node, extent_op);
 
 
 
1606	} else if (node->action == BTRFS_DROP_DELAYED_REF) {
1607		ret = __btrfs_free_extent(trans, href, node, extent_op);
 
 
 
1608	} else {
1609		BUG();
1610	}
1611	return ret;
1612}
1613
1614static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
1615				    struct extent_buffer *leaf,
1616				    struct btrfs_extent_item *ei)
1617{
1618	u64 flags = btrfs_extent_flags(leaf, ei);
1619	if (extent_op->update_flags) {
1620		flags |= extent_op->flags_to_set;
1621		btrfs_set_extent_flags(leaf, ei, flags);
1622	}
1623
1624	if (extent_op->update_key) {
1625		struct btrfs_tree_block_info *bi;
1626		BUG_ON(!(flags & BTRFS_EXTENT_FLAG_TREE_BLOCK));
1627		bi = (struct btrfs_tree_block_info *)(ei + 1);
1628		btrfs_set_tree_block_key(leaf, bi, &extent_op->key);
1629	}
1630}
1631
1632static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
1633				 struct btrfs_delayed_ref_head *head,
 
1634				 struct btrfs_delayed_extent_op *extent_op)
1635{
1636	struct btrfs_fs_info *fs_info = trans->fs_info;
1637	struct btrfs_root *root;
1638	struct btrfs_key key;
1639	struct btrfs_path *path;
1640	struct btrfs_extent_item *ei;
1641	struct extent_buffer *leaf;
1642	u32 item_size;
1643	int ret;
1644	int metadata = 1;
 
1645
1646	if (TRANS_ABORTED(trans))
1647		return 0;
1648
1649	if (!btrfs_fs_incompat(fs_info, SKINNY_METADATA))
1650		metadata = 0;
1651
1652	path = btrfs_alloc_path();
1653	if (!path)
1654		return -ENOMEM;
1655
1656	key.objectid = head->bytenr;
1657
1658	if (metadata) {
1659		key.type = BTRFS_METADATA_ITEM_KEY;
1660		key.offset = head->level;
1661	} else {
1662		key.type = BTRFS_EXTENT_ITEM_KEY;
1663		key.offset = head->num_bytes;
1664	}
1665
1666	root = btrfs_extent_root(fs_info, key.objectid);
1667again:
1668	ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
 
 
 
1669	if (ret < 0) {
 
1670		goto out;
1671	} else if (ret > 0) {
 
1672		if (metadata) {
1673			if (path->slots[0] > 0) {
1674				path->slots[0]--;
1675				btrfs_item_key_to_cpu(path->nodes[0], &key,
1676						      path->slots[0]);
1677				if (key.objectid == head->bytenr &&
1678				    key.type == BTRFS_EXTENT_ITEM_KEY &&
1679				    key.offset == head->num_bytes)
1680					ret = 0;
1681			}
1682			if (ret > 0) {
1683				btrfs_release_path(path);
1684				metadata = 0;
1685
1686				key.objectid = head->bytenr;
1687				key.offset = head->num_bytes;
1688				key.type = BTRFS_EXTENT_ITEM_KEY;
1689				goto again;
1690			}
1691		} else {
1692			ret = -EUCLEAN;
1693			btrfs_err(fs_info,
1694		  "missing extent item for extent %llu num_bytes %llu level %d",
1695				  head->bytenr, head->num_bytes, head->level);
1696			goto out;
1697		}
1698	}
1699
1700	leaf = path->nodes[0];
1701	item_size = btrfs_item_size(leaf, path->slots[0]);
1702
1703	if (unlikely(item_size < sizeof(*ei))) {
1704		ret = -EUCLEAN;
1705		btrfs_err(fs_info,
1706			  "unexpected extent item size, has %u expect >= %zu",
1707			  item_size, sizeof(*ei));
1708		btrfs_abort_transaction(trans, ret);
1709		goto out;
 
 
1710	}
1711
 
1712	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
1713	__run_delayed_extent_op(extent_op, leaf, ei);
1714
1715	btrfs_mark_buffer_dirty(trans, leaf);
1716out:
1717	btrfs_free_path(path);
1718	return ret;
1719}
1720
1721static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
1722				struct btrfs_delayed_ref_head *href,
1723				struct btrfs_delayed_ref_node *node,
1724				struct btrfs_delayed_extent_op *extent_op,
1725				bool insert_reserved)
1726{
1727	int ret = 0;
1728	struct btrfs_fs_info *fs_info = trans->fs_info;
 
1729	u64 parent = 0;
1730	u64 ref_root = 0;
 
 
1731
1732	trace_run_delayed_tree_ref(trans->fs_info, node);
 
1733
1734	if (node->type == BTRFS_SHARED_BLOCK_REF_KEY)
1735		parent = node->parent;
1736	ref_root = node->ref_root;
1737
1738	if (unlikely(node->ref_mod != 1)) {
1739		btrfs_err(trans->fs_info,
1740	"btree block %llu has %d references rather than 1: action %d ref_root %llu parent %llu",
1741			  node->bytenr, node->ref_mod, node->action, ref_root,
1742			  parent);
1743		return -EUCLEAN;
 
1744	}
 
 
1745	if (node->action == BTRFS_ADD_DELAYED_REF && insert_reserved) {
1746		struct btrfs_squota_delta delta = {
1747			.root = href->owning_root,
1748			.num_bytes = fs_info->nodesize,
1749			.is_data = false,
1750			.is_inc = true,
1751			.generation = trans->transid,
1752		};
1753
1754		ret = alloc_reserved_tree_block(trans, node, extent_op);
1755		if (!ret)
1756			btrfs_record_squota_delta(fs_info, &delta);
1757	} else if (node->action == BTRFS_ADD_DELAYED_REF) {
1758		ret = __btrfs_inc_extent_ref(trans, node, extent_op);
 
 
 
1759	} else if (node->action == BTRFS_DROP_DELAYED_REF) {
1760		ret = __btrfs_free_extent(trans, href, node, extent_op);
 
 
1761	} else {
1762		BUG();
1763	}
1764	return ret;
1765}
1766
1767/* helper function to actually process a single delayed ref entry */
1768static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
1769			       struct btrfs_delayed_ref_head *href,
1770			       struct btrfs_delayed_ref_node *node,
1771			       struct btrfs_delayed_extent_op *extent_op,
1772			       bool insert_reserved)
1773{
1774	int ret = 0;
1775
1776	if (TRANS_ABORTED(trans)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1777		if (insert_reserved) {
1778			btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1779			free_head_ref_squota_rsv(trans->fs_info, href);
 
 
 
 
 
1780		}
1781		return 0;
 
 
 
 
 
1782	}
1783
1784	if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
1785	    node->type == BTRFS_SHARED_BLOCK_REF_KEY)
1786		ret = run_delayed_tree_ref(trans, href, node, extent_op,
1787					   insert_reserved);
1788	else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
1789		 node->type == BTRFS_SHARED_DATA_REF_KEY)
1790		ret = run_delayed_data_ref(trans, href, node, extent_op,
1791					   insert_reserved);
1792	else if (node->type == BTRFS_EXTENT_OWNER_REF_KEY)
1793		ret = 0;
1794	else
1795		BUG();
1796	if (ret && insert_reserved)
1797		btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1798	if (ret < 0)
1799		btrfs_err(trans->fs_info,
1800"failed to run delayed ref for logical %llu num_bytes %llu type %u action %u ref_mod %d: %d",
1801			  node->bytenr, node->num_bytes, node->type,
1802			  node->action, node->ref_mod, ret);
1803	return ret;
1804}
1805
1806static inline struct btrfs_delayed_ref_node *
1807select_delayed_ref(struct btrfs_delayed_ref_head *head)
1808{
1809	struct btrfs_delayed_ref_node *ref;
1810
1811	if (RB_EMPTY_ROOT(&head->ref_tree.rb_root))
1812		return NULL;
1813
1814	/*
1815	 * Select a delayed ref of type BTRFS_ADD_DELAYED_REF first.
1816	 * This is to prevent a ref count from going down to zero, which deletes
1817	 * the extent item from the extent tree, when there still are references
1818	 * to add, which would fail because they would not find the extent item.
1819	 */
1820	if (!list_empty(&head->ref_add_list))
1821		return list_first_entry(&head->ref_add_list,
1822				struct btrfs_delayed_ref_node, add_list);
1823
1824	ref = rb_entry(rb_first_cached(&head->ref_tree),
1825		       struct btrfs_delayed_ref_node, ref_node);
1826	ASSERT(list_empty(&ref->add_list));
1827	return ref;
1828}
1829
1830static struct btrfs_delayed_extent_op *cleanup_extent_op(
1831				struct btrfs_delayed_ref_head *head)
1832{
1833	struct btrfs_delayed_extent_op *extent_op = head->extent_op;
1834
1835	if (!extent_op)
1836		return NULL;
1837
1838	if (head->must_insert_reserved) {
1839		head->extent_op = NULL;
1840		btrfs_free_delayed_extent_op(extent_op);
1841		return NULL;
1842	}
1843	return extent_op;
1844}
1845
1846static int run_and_cleanup_extent_op(struct btrfs_trans_handle *trans,
1847				     struct btrfs_delayed_ref_head *head)
1848{
1849	struct btrfs_delayed_extent_op *extent_op;
1850	int ret;
1851
1852	extent_op = cleanup_extent_op(head);
1853	if (!extent_op)
1854		return 0;
1855	head->extent_op = NULL;
1856	spin_unlock(&head->lock);
1857	ret = run_delayed_extent_op(trans, head, extent_op);
1858	btrfs_free_delayed_extent_op(extent_op);
1859	return ret ? ret : 1;
1860}
1861
1862u64 btrfs_cleanup_ref_head_accounting(struct btrfs_fs_info *fs_info,
1863				  struct btrfs_delayed_ref_root *delayed_refs,
1864				  struct btrfs_delayed_ref_head *head)
 
 
 
 
1865{
1866	u64 ret = 0;
1867
1868	/*
1869	 * We had csum deletions accounted for in our delayed refs rsv, we need
1870	 * to drop the csum leaves for this update from our delayed_refs_rsv.
1871	 */
1872	if (head->total_ref_mod < 0 && head->is_data) {
1873		int nr_csums;
1874
1875		spin_lock(&delayed_refs->lock);
1876		delayed_refs->pending_csums -= head->num_bytes;
1877		spin_unlock(&delayed_refs->lock);
1878		nr_csums = btrfs_csum_bytes_to_leaves(fs_info, head->num_bytes);
1879
1880		btrfs_delayed_refs_rsv_release(fs_info, 0, nr_csums);
1881
1882		ret = btrfs_calc_delayed_ref_csum_bytes(fs_info, nr_csums);
1883	}
1884	/* must_insert_reserved can be set only if we didn't run the head ref. */
1885	if (head->must_insert_reserved)
1886		free_head_ref_squota_rsv(fs_info, head);
1887
1888	return ret;
1889}
1890
1891static int cleanup_ref_head(struct btrfs_trans_handle *trans,
1892			    struct btrfs_delayed_ref_head *head,
1893			    u64 *bytes_released)
1894{
1895
1896	struct btrfs_fs_info *fs_info = trans->fs_info;
1897	struct btrfs_delayed_ref_root *delayed_refs;
 
 
 
 
 
1898	int ret;
 
 
 
1899
1900	delayed_refs = &trans->transaction->delayed_refs;
 
 
 
 
1901
1902	ret = run_and_cleanup_extent_op(trans, head);
1903	if (ret < 0) {
1904		btrfs_unselect_ref_head(delayed_refs, head);
1905		btrfs_debug(fs_info, "run_delayed_extent_op returned %d", ret);
1906		return ret;
1907	} else if (ret) {
1908		return ret;
1909	}
1910
1911	/*
1912	 * Need to drop our head ref lock and re-acquire the delayed ref lock
1913	 * and then re-check to make sure nobody got added.
1914	 */
1915	spin_unlock(&head->lock);
1916	spin_lock(&delayed_refs->lock);
1917	spin_lock(&head->lock);
1918	if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root) || head->extent_op) {
1919		spin_unlock(&head->lock);
1920		spin_unlock(&delayed_refs->lock);
1921		return 1;
1922	}
1923	btrfs_delete_ref_head(fs_info, delayed_refs, head);
1924	spin_unlock(&head->lock);
1925	spin_unlock(&delayed_refs->lock);
1926
1927	if (head->must_insert_reserved) {
1928		btrfs_pin_extent(trans, head->bytenr, head->num_bytes, 1);
1929		if (head->is_data) {
1930			struct btrfs_root *csum_root;
1931
1932			csum_root = btrfs_csum_root(fs_info, head->bytenr);
1933			ret = btrfs_del_csums(trans, csum_root, head->bytenr,
1934					      head->num_bytes);
1935		}
1936	}
1937
1938	*bytes_released += btrfs_cleanup_ref_head_accounting(fs_info, delayed_refs, head);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1939
1940	trace_run_delayed_ref_head(fs_info, head, 0);
1941	btrfs_delayed_ref_unlock(head);
1942	btrfs_put_delayed_ref_head(head);
1943	return ret;
1944}
1945
1946static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
1947					   struct btrfs_delayed_ref_head *locked_ref,
1948					   u64 *bytes_released)
1949{
1950	struct btrfs_fs_info *fs_info = trans->fs_info;
1951	struct btrfs_delayed_ref_root *delayed_refs;
1952	struct btrfs_delayed_extent_op *extent_op;
1953	struct btrfs_delayed_ref_node *ref;
1954	bool must_insert_reserved;
1955	int ret;
1956
1957	delayed_refs = &trans->transaction->delayed_refs;
1958
1959	lockdep_assert_held(&locked_ref->mutex);
1960	lockdep_assert_held(&locked_ref->lock);
1961
1962	while ((ref = select_delayed_ref(locked_ref))) {
1963		if (ref->seq &&
1964		    btrfs_check_delayed_seq(fs_info, ref->seq)) {
1965			spin_unlock(&locked_ref->lock);
1966			btrfs_unselect_ref_head(delayed_refs, locked_ref);
1967			return -EAGAIN;
1968		}
1969
1970		rb_erase_cached(&ref->ref_node, &locked_ref->ref_tree);
1971		RB_CLEAR_NODE(&ref->ref_node);
1972		if (!list_empty(&ref->add_list))
1973			list_del(&ref->add_list);
1974		/*
1975		 * When we play the delayed ref, also correct the ref_mod on
1976		 * head
1977		 */
1978		switch (ref->action) {
1979		case BTRFS_ADD_DELAYED_REF:
1980		case BTRFS_ADD_DELAYED_EXTENT:
1981			locked_ref->ref_mod -= ref->ref_mod;
1982			break;
1983		case BTRFS_DROP_DELAYED_REF:
1984			locked_ref->ref_mod += ref->ref_mod;
1985			break;
1986		default:
1987			WARN_ON(1);
1988		}
1989
1990		/*
1991		 * Record the must_insert_reserved flag before we drop the
1992		 * spin lock.
1993		 */
1994		must_insert_reserved = locked_ref->must_insert_reserved;
1995		/*
1996		 * Unsetting this on the head ref relinquishes ownership of
1997		 * the rsv_bytes, so it is critical that every possible code
1998		 * path from here forward frees all reserves including qgroup
1999		 * reserve.
2000		 */
2001		locked_ref->must_insert_reserved = false;
2002
2003		extent_op = locked_ref->extent_op;
2004		locked_ref->extent_op = NULL;
2005		spin_unlock(&locked_ref->lock);
2006
2007		ret = run_one_delayed_ref(trans, locked_ref, ref, extent_op,
2008					  must_insert_reserved);
2009		btrfs_delayed_refs_rsv_release(fs_info, 1, 0);
2010		*bytes_released += btrfs_calc_delayed_ref_bytes(fs_info, 1);
2011
2012		btrfs_free_delayed_extent_op(extent_op);
2013		if (ret) {
2014			btrfs_unselect_ref_head(delayed_refs, locked_ref);
2015			btrfs_put_delayed_ref(ref);
2016			return ret;
2017		}
2018
2019		btrfs_put_delayed_ref(ref);
2020		cond_resched();
 
 
 
2021
2022		spin_lock(&locked_ref->lock);
2023		btrfs_merge_delayed_refs(fs_info, delayed_refs, locked_ref);
2024	}
 
2025
2026	return 0;
2027}
 
 
 
2028
2029/*
2030 * Returns 0 on success or if called with an already aborted transaction.
2031 * Returns -ENOMEM or -EIO on failure and will abort the transaction.
2032 */
2033static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2034					     u64 min_bytes)
2035{
2036	struct btrfs_fs_info *fs_info = trans->fs_info;
2037	struct btrfs_delayed_ref_root *delayed_refs;
2038	struct btrfs_delayed_ref_head *locked_ref = NULL;
2039	int ret;
2040	unsigned long count = 0;
2041	unsigned long max_count = 0;
2042	u64 bytes_processed = 0;
2043
2044	delayed_refs = &trans->transaction->delayed_refs;
2045	if (min_bytes == 0) {
2046		max_count = delayed_refs->num_heads_ready;
2047		min_bytes = U64_MAX;
2048	}
2049
2050	do {
2051		if (!locked_ref) {
2052			locked_ref = btrfs_select_ref_head(fs_info, delayed_refs);
2053			if (IS_ERR_OR_NULL(locked_ref)) {
2054				if (PTR_ERR(locked_ref) == -EAGAIN) {
2055					continue;
2056				} else {
2057					break;
2058				}
 
2059			}
2060			count++;
2061		}
2062		/*
2063		 * We need to try and merge add/drops of the same ref since we
2064		 * can run into issues with relocate dropping the implicit ref
2065		 * and then it being added back again before the drop can
2066		 * finish.  If we merged anything we need to re-loop so we can
2067		 * get a good ref.
2068		 * Or we can get node references of the same type that weren't
2069		 * merged when created due to bumps in the tree mod seq, and
2070		 * we need to merge them to prevent adding an inline extent
2071		 * backref before dropping it (triggering a BUG_ON at
2072		 * insert_inline_extent_backref()).
2073		 */
2074		spin_lock(&locked_ref->lock);
2075		btrfs_merge_delayed_refs(fs_info, delayed_refs, locked_ref);
2076
2077		ret = btrfs_run_delayed_refs_for_head(trans, locked_ref, &bytes_processed);
2078		if (ret < 0 && ret != -EAGAIN) {
2079			/*
2080			 * Error, btrfs_run_delayed_refs_for_head already
2081			 * unlocked everything so just bail out
 
2082			 */
2083			return ret;
2084		} else if (!ret) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2085			/*
2086			 * Success, perform the usual cleanup of a processed
2087			 * head
2088			 */
2089			ret = cleanup_ref_head(trans, locked_ref, &bytes_processed);
2090			if (ret > 0 ) {
2091				/* We dropped our lock, we need to loop. */
2092				ret = 0;
2093				continue;
2094			} else if (ret) {
2095				return ret;
 
 
 
2096			}
2097		}
 
 
 
 
 
 
 
 
 
 
 
 
 
2098
2099		/*
2100		 * Either success case or btrfs_run_delayed_refs_for_head
2101		 * returned -EAGAIN, meaning we need to select another head
 
 
2102		 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2103
2104		locked_ref = NULL;
2105		cond_resched();
2106	} while ((min_bytes != U64_MAX && bytes_processed < min_bytes) ||
2107		 (max_count > 0 && count < max_count) ||
2108		 locked_ref);
 
 
 
2109
 
 
 
 
 
 
 
 
 
2110	return 0;
2111}
2112
2113#ifdef SCRAMBLE_DELAYED_REFS
2114/*
2115 * Normally delayed refs get processed in ascending bytenr order. This
2116 * correlates in most cases to the order added. To expose dependencies on this
2117 * order, we start to process the tree in the middle instead of the beginning
2118 */
2119static u64 find_middle(struct rb_root *root)
2120{
2121	struct rb_node *n = root->rb_node;
2122	struct btrfs_delayed_ref_node *entry;
2123	int alt = 1;
2124	u64 middle;
2125	u64 first = 0, last = 0;
2126
2127	n = rb_first(root);
2128	if (n) {
2129		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2130		first = entry->bytenr;
2131	}
2132	n = rb_last(root);
2133	if (n) {
2134		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2135		last = entry->bytenr;
2136	}
2137	n = root->rb_node;
2138
2139	while (n) {
2140		entry = rb_entry(n, struct btrfs_delayed_ref_node, rb_node);
2141		WARN_ON(!entry->in_tree);
2142
2143		middle = entry->bytenr;
2144
2145		if (alt)
2146			n = n->rb_left;
2147		else
2148			n = n->rb_right;
2149
2150		alt = 1 - alt;
2151	}
2152	return middle;
2153}
2154#endif
2155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2156/*
2157 * Start processing the delayed reference count updates and extent insertions
2158 * we have queued up so far.
2159 *
2160 * @trans:	Transaction handle.
2161 * @min_bytes:	How many bytes of delayed references to process. After this
2162 *		many bytes we stop processing delayed references if there are
2163 *		any more. If 0 it means to run all existing delayed references,
2164 *		but not new ones added after running all existing ones.
2165 *		Use (u64)-1 (U64_MAX) to run all existing delayed references
2166 *		plus any new ones that are added.
2167 *
2168 * Returns 0 on success or if called with an aborted transaction
2169 * Returns <0 on error and aborts the transaction
2170 */
2171int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, u64 min_bytes)
 
2172{
2173	struct btrfs_fs_info *fs_info = trans->fs_info;
2174	struct btrfs_delayed_ref_root *delayed_refs;
 
2175	int ret;
 
 
2176
2177	/* We'll clean this up in btrfs_cleanup_transaction */
2178	if (TRANS_ABORTED(trans))
2179		return 0;
2180
2181	if (test_bit(BTRFS_FS_CREATING_FREE_SPACE_TREE, &fs_info->flags))
2182		return 0;
2183
 
 
 
2184	delayed_refs = &trans->transaction->delayed_refs;
 
 
 
2185again:
2186#ifdef SCRAMBLE_DELAYED_REFS
2187	delayed_refs->run_delayed_start = find_middle(&delayed_refs->root);
2188#endif
2189	ret = __btrfs_run_delayed_refs(trans, min_bytes);
 
2190	if (ret < 0) {
2191		btrfs_abort_transaction(trans, ret);
2192		return ret;
2193	}
2194
2195	if (min_bytes == U64_MAX) {
2196		btrfs_create_pending_block_groups(trans);
 
2197
2198		spin_lock(&delayed_refs->lock);
2199		if (xa_empty(&delayed_refs->head_refs)) {
 
2200			spin_unlock(&delayed_refs->lock);
2201			return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2202		}
2203		spin_unlock(&delayed_refs->lock);
2204
2205		cond_resched();
2206		goto again;
2207	}
2208
 
 
2209	return 0;
2210}
2211
2212int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2213				struct extent_buffer *eb, u64 flags)
 
 
2214{
2215	struct btrfs_delayed_extent_op *extent_op;
2216	int ret;
2217
2218	extent_op = btrfs_alloc_delayed_extent_op();
2219	if (!extent_op)
2220		return -ENOMEM;
2221
2222	extent_op->flags_to_set = flags;
2223	extent_op->update_flags = true;
2224	extent_op->update_key = false;
 
 
2225
2226	ret = btrfs_add_delayed_extent_op(trans, eb->start, eb->len,
2227					  btrfs_header_level(eb), extent_op);
2228	if (ret)
2229		btrfs_free_delayed_extent_op(extent_op);
2230	return ret;
2231}
2232
2233static noinline int check_delayed_ref(struct btrfs_root *root,
 
2234				      struct btrfs_path *path,
2235				      u64 objectid, u64 offset, u64 bytenr)
2236{
2237	struct btrfs_delayed_ref_head *head;
2238	struct btrfs_delayed_ref_node *ref;
 
2239	struct btrfs_delayed_ref_root *delayed_refs;
2240	struct btrfs_transaction *cur_trans;
2241	struct rb_node *node;
2242	int ret = 0;
2243
2244	spin_lock(&root->fs_info->trans_lock);
2245	cur_trans = root->fs_info->running_transaction;
2246	if (cur_trans)
2247		refcount_inc(&cur_trans->use_count);
2248	spin_unlock(&root->fs_info->trans_lock);
2249	if (!cur_trans)
2250		return 0;
2251
2252	delayed_refs = &cur_trans->delayed_refs;
2253	spin_lock(&delayed_refs->lock);
2254	head = btrfs_find_delayed_ref_head(root->fs_info, delayed_refs, bytenr);
2255	if (!head) {
2256		spin_unlock(&delayed_refs->lock);
2257		btrfs_put_transaction(cur_trans);
2258		return 0;
2259	}
2260
2261	if (!mutex_trylock(&head->mutex)) {
2262		if (path->nowait) {
2263			spin_unlock(&delayed_refs->lock);
2264			btrfs_put_transaction(cur_trans);
2265			return -EAGAIN;
2266		}
2267
2268		refcount_inc(&head->refs);
2269		spin_unlock(&delayed_refs->lock);
2270
2271		btrfs_release_path(path);
2272
2273		/*
2274		 * Mutex was contended, block until it's released and let
2275		 * caller try again
2276		 */
2277		mutex_lock(&head->mutex);
2278		mutex_unlock(&head->mutex);
2279		btrfs_put_delayed_ref_head(head);
2280		btrfs_put_transaction(cur_trans);
2281		return -EAGAIN;
2282	}
2283	spin_unlock(&delayed_refs->lock);
2284
2285	spin_lock(&head->lock);
2286	/*
2287	 * XXX: We should replace this with a proper search function in the
2288	 * future.
2289	 */
2290	for (node = rb_first_cached(&head->ref_tree); node;
2291	     node = rb_next(node)) {
2292		u64 ref_owner;
2293		u64 ref_offset;
2294
2295		ref = rb_entry(node, struct btrfs_delayed_ref_node, ref_node);
2296		/* If it's a shared ref we know a cross reference exists */
2297		if (ref->type != BTRFS_EXTENT_DATA_REF_KEY) {
2298			ret = 1;
2299			break;
2300		}
2301
2302		ref_owner = btrfs_delayed_ref_owner(ref);
2303		ref_offset = btrfs_delayed_ref_offset(ref);
2304
2305		/*
2306		 * If our ref doesn't match the one we're currently looking at
2307		 * then we have a cross reference.
2308		 */
2309		if (ref->ref_root != btrfs_root_id(root) ||
2310		    ref_owner != objectid || ref_offset != offset) {
 
2311			ret = 1;
2312			break;
2313		}
2314	}
2315	spin_unlock(&head->lock);
2316	mutex_unlock(&head->mutex);
2317	btrfs_put_transaction(cur_trans);
2318	return ret;
2319}
2320
2321static noinline int check_committed_ref(struct btrfs_root *root,
 
2322					struct btrfs_path *path,
2323					u64 objectid, u64 offset, u64 bytenr,
2324					bool strict)
2325{
2326	struct btrfs_fs_info *fs_info = root->fs_info;
2327	struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr);
2328	struct extent_buffer *leaf;
2329	struct btrfs_extent_data_ref *ref;
2330	struct btrfs_extent_inline_ref *iref;
2331	struct btrfs_extent_item *ei;
2332	struct btrfs_key key;
2333	u32 item_size;
2334	u32 expected_size;
2335	int type;
2336	int ret;
2337
2338	key.objectid = bytenr;
2339	key.offset = (u64)-1;
2340	key.type = BTRFS_EXTENT_ITEM_KEY;
2341
2342	ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
2343	if (ret < 0)
2344		goto out;
2345	if (ret == 0) {
2346		/*
2347		 * Key with offset -1 found, there would have to exist an extent
2348		 * item with such offset, but this is out of the valid range.
2349		 */
2350		ret = -EUCLEAN;
2351		goto out;
2352	}
2353
2354	ret = -ENOENT;
2355	if (path->slots[0] == 0)
2356		goto out;
2357
2358	path->slots[0]--;
2359	leaf = path->nodes[0];
2360	btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
2361
2362	if (key.objectid != bytenr || key.type != BTRFS_EXTENT_ITEM_KEY)
2363		goto out;
2364
2365	ret = 1;
2366	item_size = btrfs_item_size(leaf, path->slots[0]);
2367	ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
2368	expected_size = sizeof(*ei) + btrfs_extent_inline_ref_size(BTRFS_EXTENT_DATA_REF_KEY);
2369
2370	/* No inline refs; we need to bail before checking for owner ref. */
2371	if (item_size == sizeof(*ei))
2372		goto out;
2373
2374	/* Check for an owner ref; skip over it to the real inline refs. */
2375	iref = (struct btrfs_extent_inline_ref *)(ei + 1);
2376	type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_DATA);
2377	if (btrfs_fs_incompat(fs_info, SIMPLE_QUOTA) && type == BTRFS_EXTENT_OWNER_REF_KEY) {
2378		expected_size += btrfs_extent_inline_ref_size(BTRFS_EXTENT_OWNER_REF_KEY);
2379		iref = (struct btrfs_extent_inline_ref *)(iref + 1);
2380	}
 
 
2381
2382	/* If extent item has more than 1 inline ref then it's shared */
2383	if (item_size != expected_size)
2384		goto out;
2385
2386	/*
2387	 * If extent created before last snapshot => it's shared unless the
2388	 * snapshot has been deleted. Use the heuristic if strict is false.
2389	 */
2390	if (!strict &&
2391	    (btrfs_extent_generation(leaf, ei) <=
2392	     btrfs_root_last_snapshot(&root->root_item)))
2393		goto out;
2394
2395	/* If this extent has SHARED_DATA_REF then it's shared */
2396	type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_DATA);
2397	if (type != BTRFS_EXTENT_DATA_REF_KEY)
2398		goto out;
2399
2400	ref = (struct btrfs_extent_data_ref *)(&iref->offset);
2401	if (btrfs_extent_refs(leaf, ei) !=
2402	    btrfs_extent_data_ref_count(leaf, ref) ||
2403	    btrfs_extent_data_ref_root(leaf, ref) != btrfs_root_id(root) ||
 
2404	    btrfs_extent_data_ref_objectid(leaf, ref) != objectid ||
2405	    btrfs_extent_data_ref_offset(leaf, ref) != offset)
2406		goto out;
2407
2408	ret = 0;
2409out:
2410	return ret;
2411}
2412
2413int btrfs_cross_ref_exist(struct btrfs_root *root, u64 objectid, u64 offset,
2414			  u64 bytenr, bool strict, struct btrfs_path *path)
 
2415{
 
2416	int ret;
 
 
 
 
 
2417
2418	do {
2419		ret = check_committed_ref(root, path, objectid,
2420					  offset, bytenr, strict);
2421		if (ret && ret != -ENOENT)
2422			goto out;
2423
2424		ret = check_delayed_ref(root, path, objectid, offset, bytenr);
2425	} while (ret == -EAGAIN && !path->nowait);
 
2426
 
 
 
 
 
 
 
2427out:
2428	btrfs_release_path(path);
2429	if (btrfs_is_data_reloc_root(root))
2430		WARN_ON(ret > 0);
2431	return ret;
2432}
2433
2434static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
2435			   struct btrfs_root *root,
2436			   struct extent_buffer *buf,
2437			   int full_backref, int inc)
2438{
2439	struct btrfs_fs_info *fs_info = root->fs_info;
 
2440	u64 parent;
2441	u64 ref_root;
2442	u32 nritems;
2443	struct btrfs_key key;
2444	struct btrfs_file_extent_item *fi;
2445	bool for_reloc = btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC);
2446	int i;
2447	int action;
2448	int level;
2449	int ret = 0;
 
 
2450
2451	if (btrfs_is_testing(fs_info))
 
2452		return 0;
2453
2454	ref_root = btrfs_header_owner(buf);
2455	nritems = btrfs_header_nritems(buf);
2456	level = btrfs_header_level(buf);
2457
2458	if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && level == 0)
2459		return 0;
2460
 
 
 
 
 
2461	if (full_backref)
2462		parent = buf->start;
2463	else
2464		parent = 0;
2465	if (inc)
2466		action = BTRFS_ADD_DELAYED_REF;
2467	else
2468		action = BTRFS_DROP_DELAYED_REF;
2469
2470	for (i = 0; i < nritems; i++) {
2471		struct btrfs_ref ref = {
2472			.action = action,
2473			.parent = parent,
2474			.ref_root = ref_root,
2475		};
2476
2477		if (level == 0) {
2478			btrfs_item_key_to_cpu(buf, &key, i);
2479			if (key.type != BTRFS_EXTENT_DATA_KEY)
2480				continue;
2481			fi = btrfs_item_ptr(buf, i,
2482					    struct btrfs_file_extent_item);
2483			if (btrfs_file_extent_type(buf, fi) ==
2484			    BTRFS_FILE_EXTENT_INLINE)
2485				continue;
2486			ref.bytenr = btrfs_file_extent_disk_bytenr(buf, fi);
2487			if (ref.bytenr == 0)
2488				continue;
2489
2490			ref.num_bytes = btrfs_file_extent_disk_num_bytes(buf, fi);
2491			ref.owning_root = ref_root;
2492
2493			key.offset -= btrfs_file_extent_offset(buf, fi);
2494			btrfs_init_data_ref(&ref, key.objectid, key.offset,
2495					    btrfs_root_id(root), for_reloc);
2496			if (inc)
2497				ret = btrfs_inc_extent_ref(trans, &ref);
2498			else
2499				ret = btrfs_free_extent(trans, &ref);
2500			if (ret)
2501				goto fail;
2502		} else {
2503			/* We don't know the owning_root, leave as 0. */
2504			ref.bytenr = btrfs_node_blockptr(buf, i);
2505			ref.num_bytes = fs_info->nodesize;
2506
2507			btrfs_init_tree_ref(&ref, level - 1,
2508					    btrfs_root_id(root), for_reloc);
2509			if (inc)
2510				ret = btrfs_inc_extent_ref(trans, &ref);
2511			else
2512				ret = btrfs_free_extent(trans, &ref);
2513			if (ret)
2514				goto fail;
2515		}
2516	}
2517	return 0;
2518fail:
2519	return ret;
2520}
2521
2522int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2523		  struct extent_buffer *buf, int full_backref)
2524{
2525	return __btrfs_mod_ref(trans, root, buf, full_backref, 1);
2526}
2527
2528int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2529		  struct extent_buffer *buf, int full_backref)
2530{
2531	return __btrfs_mod_ref(trans, root, buf, full_backref, 0);
2532}
2533
2534static u64 get_alloc_profile_by_root(struct btrfs_root *root, int data)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2535{
2536	struct btrfs_fs_info *fs_info = root->fs_info;
2537	u64 flags;
2538	u64 ret;
2539
2540	if (data)
2541		flags = BTRFS_BLOCK_GROUP_DATA;
2542	else if (root == fs_info->chunk_root)
2543		flags = BTRFS_BLOCK_GROUP_SYSTEM;
2544	else
2545		flags = BTRFS_BLOCK_GROUP_METADATA;
2546
2547	ret = btrfs_get_alloc_profile(fs_info, flags);
2548	return ret;
2549}
2550
2551static u64 first_logical_byte(struct btrfs_fs_info *fs_info)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2552{
2553	struct rb_node *leftmost;
2554	u64 bytenr = 0;
 
 
2555
2556	read_lock(&fs_info->block_group_cache_lock);
2557	/* Get the block group with the lowest logical start address. */
2558	leftmost = rb_first_cached(&fs_info->block_group_cache_tree);
2559	if (leftmost) {
2560		struct btrfs_block_group *bg;
2561
2562		bg = rb_entry(leftmost, struct btrfs_block_group, cache_node);
2563		bytenr = bg->start;
 
 
 
2564	}
2565	read_unlock(&fs_info->block_group_cache_lock);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2566
2567	return bytenr;
2568}
2569
2570static int pin_down_extent(struct btrfs_trans_handle *trans,
2571			   struct btrfs_block_group *cache,
2572			   u64 bytenr, u64 num_bytes, int reserved)
2573{
2574	struct btrfs_fs_info *fs_info = cache->fs_info;
2575
2576	spin_lock(&cache->space_info->lock);
2577	spin_lock(&cache->lock);
2578	cache->pinned += num_bytes;
2579	btrfs_space_info_update_bytes_pinned(fs_info, cache->space_info,
2580					     num_bytes);
2581	if (reserved) {
2582		cache->reserved -= num_bytes;
2583		cache->space_info->bytes_reserved -= num_bytes;
2584	}
2585	spin_unlock(&cache->lock);
2586	spin_unlock(&cache->space_info->lock);
2587
2588	set_extent_bit(&trans->transaction->pinned_extents, bytenr,
2589		       bytenr + num_bytes - 1, EXTENT_DIRTY, NULL);
 
 
2590	return 0;
2591}
2592
2593int btrfs_pin_extent(struct btrfs_trans_handle *trans,
 
 
 
2594		     u64 bytenr, u64 num_bytes, int reserved)
2595{
2596	struct btrfs_block_group *cache;
2597
2598	cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
2599	BUG_ON(!cache); /* Logic error */
2600
2601	pin_down_extent(trans, cache, bytenr, num_bytes, reserved);
2602
2603	btrfs_put_block_group(cache);
2604	return 0;
2605}
2606
2607int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
2608				    const struct extent_buffer *eb)
 
 
 
2609{
2610	struct btrfs_block_group *cache;
2611	int ret;
2612
2613	cache = btrfs_lookup_block_group(trans->fs_info, eb->start);
2614	if (!cache)
2615		return -EINVAL;
2616
2617	/*
2618	 * Fully cache the free space first so that our pin removes the free space
2619	 * from the cache.
 
 
2620	 */
2621	ret = btrfs_cache_block_group(cache, true);
2622	if (ret)
2623		goto out;
2624
2625	pin_down_extent(trans, cache, eb->start, eb->len, 0);
2626
2627	/* remove us from the free space cache (if we're there at all) */
2628	ret = btrfs_remove_free_space(cache, eb->start, eb->len);
2629out:
2630	btrfs_put_block_group(cache);
2631	return ret;
2632}
2633
2634static int __exclude_logged_extent(struct btrfs_fs_info *fs_info,
2635				   u64 start, u64 num_bytes)
2636{
2637	int ret;
2638	struct btrfs_block_group *block_group;
 
2639
2640	block_group = btrfs_lookup_block_group(fs_info, start);
2641	if (!block_group)
2642		return -EINVAL;
2643
2644	ret = btrfs_cache_block_group(block_group, true);
2645	if (ret)
2646		goto out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2647
2648	ret = btrfs_remove_free_space(block_group, start, num_bytes);
2649out:
 
 
 
 
 
 
 
2650	btrfs_put_block_group(block_group);
2651	return ret;
2652}
2653
2654int btrfs_exclude_logged_extents(struct extent_buffer *eb)
 
2655{
2656	struct btrfs_fs_info *fs_info = eb->fs_info;
2657	struct btrfs_file_extent_item *item;
2658	struct btrfs_key key;
2659	int found_type;
2660	int i;
2661	int ret = 0;
2662
2663	if (!btrfs_fs_incompat(fs_info, MIXED_GROUPS))
2664		return 0;
2665
2666	for (i = 0; i < btrfs_header_nritems(eb); i++) {
2667		btrfs_item_key_to_cpu(eb, &key, i);
2668		if (key.type != BTRFS_EXTENT_DATA_KEY)
2669			continue;
2670		item = btrfs_item_ptr(eb, i, struct btrfs_file_extent_item);
2671		found_type = btrfs_file_extent_type(eb, item);
2672		if (found_type == BTRFS_FILE_EXTENT_INLINE)
2673			continue;
2674		if (btrfs_file_extent_disk_bytenr(eb, item) == 0)
2675			continue;
2676		key.objectid = btrfs_file_extent_disk_bytenr(eb, item);
2677		key.offset = btrfs_file_extent_disk_num_bytes(eb, item);
2678		ret = __exclude_logged_extent(fs_info, key.objectid, key.offset);
2679		if (ret)
2680			break;
2681	}
2682
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2683	return ret;
2684}
2685
2686static void
2687btrfs_inc_block_group_reservations(struct btrfs_block_group *bg)
2688{
2689	atomic_inc(&bg->reservations);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2690}
2691
2692/*
2693 * Returns the free cluster for the given space info and sets empty_cluster to
2694 * what it should be based on the mount options.
2695 */
2696static struct btrfs_free_cluster *
2697fetch_cluster_info(struct btrfs_fs_info *fs_info,
2698		   struct btrfs_space_info *space_info, u64 *empty_cluster)
2699{
2700	struct btrfs_free_cluster *ret = NULL;
 
2701
2702	*empty_cluster = 0;
2703	if (btrfs_mixed_space_info(space_info))
2704		return ret;
2705
 
 
2706	if (space_info->flags & BTRFS_BLOCK_GROUP_METADATA) {
2707		ret = &fs_info->meta_alloc_cluster;
2708		if (btrfs_test_opt(fs_info, SSD))
2709			*empty_cluster = SZ_2M;
2710		else
2711			*empty_cluster = SZ_64K;
2712	} else if ((space_info->flags & BTRFS_BLOCK_GROUP_DATA) &&
2713		   btrfs_test_opt(fs_info, SSD_SPREAD)) {
2714		*empty_cluster = SZ_2M;
2715		ret = &fs_info->data_alloc_cluster;
2716	}
2717
2718	return ret;
2719}
2720
2721static int unpin_extent_range(struct btrfs_fs_info *fs_info,
2722			      u64 start, u64 end,
2723			      const bool return_free_space)
2724{
2725	struct btrfs_block_group *cache = NULL;
 
2726	struct btrfs_space_info *space_info;
2727	struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
2728	struct btrfs_free_cluster *cluster = NULL;
2729	u64 len;
2730	u64 total_unpinned = 0;
2731	u64 empty_cluster = 0;
2732	bool readonly;
2733	int ret = 0;
2734
2735	while (start <= end) {
2736		readonly = false;
2737		if (!cache ||
2738		    start >= cache->start + cache->length) {
2739			if (cache)
2740				btrfs_put_block_group(cache);
2741			total_unpinned = 0;
2742			cache = btrfs_lookup_block_group(fs_info, start);
2743			if (cache == NULL) {
2744				/* Logic error, something removed the block group. */
2745				ret = -EUCLEAN;
2746				goto out;
2747			}
2748
2749			cluster = fetch_cluster_info(fs_info,
2750						     cache->space_info,
2751						     &empty_cluster);
2752			empty_cluster <<= 1;
2753		}
2754
2755		len = cache->start + cache->length - start;
2756		len = min(len, end + 1 - start);
2757
2758		if (return_free_space)
2759			btrfs_add_free_space(cache, start, len);
 
 
 
2760
2761		start += len;
2762		total_unpinned += len;
2763		space_info = cache->space_info;
2764
2765		/*
2766		 * If this space cluster has been marked as fragmented and we've
2767		 * unpinned enough in this block group to potentially allow a
2768		 * cluster to be created inside of it go ahead and clear the
2769		 * fragmented check.
2770		 */
2771		if (cluster && cluster->fragmented &&
2772		    total_unpinned > empty_cluster) {
2773			spin_lock(&cluster->lock);
2774			cluster->fragmented = 0;
2775			spin_unlock(&cluster->lock);
2776		}
2777
2778		spin_lock(&space_info->lock);
2779		spin_lock(&cache->lock);
2780		cache->pinned -= len;
2781		btrfs_space_info_update_bytes_pinned(fs_info, space_info, -len);
2782		space_info->max_extent_size = 0;
 
2783		if (cache->ro) {
2784			space_info->bytes_readonly += len;
2785			readonly = true;
2786		} else if (btrfs_is_zoned(fs_info)) {
2787			/* Need reset before reusing in a zoned block group */
2788			btrfs_space_info_update_bytes_zone_unusable(fs_info, space_info,
2789								    len);
2790			readonly = true;
2791		}
2792		spin_unlock(&cache->lock);
2793		if (!readonly && return_free_space &&
2794		    global_rsv->space_info == space_info) {
2795			spin_lock(&global_rsv->lock);
2796			if (!global_rsv->full) {
2797				u64 to_add = min(len, global_rsv->size -
2798						      global_rsv->reserved);
2799
2800				global_rsv->reserved += to_add;
2801				btrfs_space_info_update_bytes_may_use(fs_info,
2802						space_info, to_add);
2803				if (global_rsv->reserved >= global_rsv->size)
2804					global_rsv->full = 1;
2805				len -= to_add;
2806			}
2807			spin_unlock(&global_rsv->lock);
2808		}
2809		/* Add to any tickets we may have */
2810		if (!readonly && return_free_space && len)
2811			btrfs_try_granting_tickets(fs_info, space_info);
2812		spin_unlock(&space_info->lock);
2813	}
2814
2815	if (cache)
2816		btrfs_put_block_group(cache);
2817out:
2818	return ret;
2819}
2820
2821int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)
 
2822{
2823	struct btrfs_fs_info *fs_info = trans->fs_info;
2824	struct btrfs_block_group *block_group, *tmp;
2825	struct list_head *deleted_bgs;
2826	struct extent_io_tree *unpin;
2827	u64 start;
2828	u64 end;
2829	int ret;
2830
2831	unpin = &trans->transaction->pinned_extents;
2832
2833	while (!TRANS_ABORTED(trans)) {
2834		struct extent_state *cached_state = NULL;
2835
 
2836		mutex_lock(&fs_info->unused_bg_unpin_mutex);
2837		if (!find_first_extent_bit(unpin, 0, &start, &end,
2838					   EXTENT_DIRTY, &cached_state)) {
 
2839			mutex_unlock(&fs_info->unused_bg_unpin_mutex);
2840			break;
2841		}
2842
2843		if (btrfs_test_opt(fs_info, DISCARD_SYNC))
2844			ret = btrfs_discard_extent(fs_info, start,
2845						   end + 1 - start, NULL);
2846
2847		clear_extent_dirty(unpin, start, end, &cached_state);
2848		ret = unpin_extent_range(fs_info, start, end, true);
2849		BUG_ON(ret);
2850		mutex_unlock(&fs_info->unused_bg_unpin_mutex);
2851		free_extent_state(cached_state);
2852		cond_resched();
2853	}
2854
2855	if (btrfs_test_opt(fs_info, DISCARD_ASYNC)) {
2856		btrfs_discard_calc_delay(&fs_info->discard_ctl);
2857		btrfs_discard_schedule_work(&fs_info->discard_ctl, true);
2858	}
2859
2860	/*
2861	 * Transaction is finished.  We don't need the lock anymore.  We
2862	 * do need to clean up the block groups in case of a transaction
2863	 * abort.
2864	 */
2865	deleted_bgs = &trans->transaction->deleted_bgs;
2866	list_for_each_entry_safe(block_group, tmp, deleted_bgs, bg_list) {
2867		u64 trimmed = 0;
2868
2869		ret = -EROFS;
2870		if (!TRANS_ABORTED(trans))
2871			ret = btrfs_discard_extent(fs_info,
2872						   block_group->start,
2873						   block_group->length,
2874						   &trimmed);
2875
2876		list_del_init(&block_group->bg_list);
2877		btrfs_unfreeze_block_group(block_group);
2878		btrfs_put_block_group(block_group);
2879
2880		if (ret) {
2881			const char *errstr = btrfs_decode_error(ret);
2882			btrfs_warn(fs_info,
2883			   "discard failed while removing blockgroup: errno=%d %s",
2884				   ret, errstr);
2885		}
2886	}
2887
2888	return 0;
2889}
2890
2891/*
2892 * Parse an extent item's inline extents looking for a simple quotas owner ref.
2893 *
2894 * @fs_info:	the btrfs_fs_info for this mount
2895 * @leaf:	a leaf in the extent tree containing the extent item
2896 * @slot:	the slot in the leaf where the extent item is found
2897 *
2898 * Returns the objectid of the root that originally allocated the extent item
2899 * if the inline owner ref is expected and present, otherwise 0.
2900 *
2901 * If an extent item has an owner ref item, it will be the first inline ref
2902 * item. Therefore the logic is to check whether there are any inline ref
2903 * items, then check the type of the first one.
2904 */
2905u64 btrfs_get_extent_owner_root(struct btrfs_fs_info *fs_info,
2906				struct extent_buffer *leaf, int slot)
2907{
2908	struct btrfs_extent_item *ei;
2909	struct btrfs_extent_inline_ref *iref;
2910	struct btrfs_extent_owner_ref *oref;
2911	unsigned long ptr;
2912	unsigned long end;
2913	int type;
2914
2915	if (!btrfs_fs_incompat(fs_info, SIMPLE_QUOTA))
2916		return 0;
2917
2918	ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item);
2919	ptr = (unsigned long)(ei + 1);
2920	end = (unsigned long)ei + btrfs_item_size(leaf, slot);
2921
2922	/* No inline ref items of any kind, can't check type. */
2923	if (ptr == end)
2924		return 0;
2925
2926	iref = (struct btrfs_extent_inline_ref *)ptr;
2927	type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_ANY);
2928
2929	/* We found an owner ref, get the root out of it. */
2930	if (type == BTRFS_EXTENT_OWNER_REF_KEY) {
2931		oref = (struct btrfs_extent_owner_ref *)(&iref->offset);
2932		return btrfs_extent_owner_ref_root_id(leaf, oref);
2933	}
2934
2935	/* We have inline refs, but not an owner ref. */
2936	return 0;
2937}
2938
2939static int do_free_extent_accounting(struct btrfs_trans_handle *trans,
2940				     u64 bytenr, struct btrfs_squota_delta *delta)
2941{
2942	int ret;
2943	u64 num_bytes = delta->num_bytes;
2944
2945	if (delta->is_data) {
2946		struct btrfs_root *csum_root;
2947
2948		csum_root = btrfs_csum_root(trans->fs_info, bytenr);
2949		ret = btrfs_del_csums(trans, csum_root, bytenr, num_bytes);
2950		if (ret) {
2951			btrfs_abort_transaction(trans, ret);
2952			return ret;
2953		}
2954
2955		ret = btrfs_delete_raid_extent(trans, bytenr, num_bytes);
2956		if (ret) {
2957			btrfs_abort_transaction(trans, ret);
2958			return ret;
2959		}
2960	}
2961
2962	ret = btrfs_record_squota_delta(trans->fs_info, delta);
2963	if (ret) {
2964		btrfs_abort_transaction(trans, ret);
2965		return ret;
2966	}
2967
2968	ret = add_to_free_space_tree(trans, bytenr, num_bytes);
2969	if (ret) {
2970		btrfs_abort_transaction(trans, ret);
2971		return ret;
2972	}
2973
2974	ret = btrfs_update_block_group(trans, bytenr, num_bytes, false);
2975	if (ret)
2976		btrfs_abort_transaction(trans, ret);
2977
2978	return ret;
2979}
2980
2981#define abort_and_dump(trans, path, fmt, args...)	\
2982({							\
2983	btrfs_abort_transaction(trans, -EUCLEAN);	\
2984	btrfs_print_leaf(path->nodes[0]);		\
2985	btrfs_crit(trans->fs_info, fmt, ##args);	\
2986})
2987
2988/*
2989 * Drop one or more refs of @node.
2990 *
2991 * 1. Locate the extent refs.
2992 *    It's either inline in EXTENT/METADATA_ITEM or in keyed SHARED_* item.
2993 *    Locate it, then reduce the refs number or remove the ref line completely.
2994 *
2995 * 2. Update the refs count in EXTENT/METADATA_ITEM
2996 *
2997 * Inline backref case:
2998 *
2999 * in extent tree we have:
3000 *
3001 * 	item 0 key (13631488 EXTENT_ITEM 1048576) itemoff 16201 itemsize 82
3002 *		refs 2 gen 6 flags DATA
3003 *		extent data backref root FS_TREE objectid 258 offset 0 count 1
3004 *		extent data backref root FS_TREE objectid 257 offset 0 count 1
3005 *
3006 * This function gets called with:
3007 *
3008 *    node->bytenr = 13631488
3009 *    node->num_bytes = 1048576
3010 *    root_objectid = FS_TREE
3011 *    owner_objectid = 257
3012 *    owner_offset = 0
3013 *    refs_to_drop = 1
3014 *
3015 * Then we should get some like:
3016 *
3017 * 	item 0 key (13631488 EXTENT_ITEM 1048576) itemoff 16201 itemsize 82
3018 *		refs 1 gen 6 flags DATA
3019 *		extent data backref root FS_TREE objectid 258 offset 0 count 1
3020 *
3021 * Keyed backref case:
3022 *
3023 * in extent tree we have:
3024 *
3025 *	item 0 key (13631488 EXTENT_ITEM 1048576) itemoff 3971 itemsize 24
3026 *		refs 754 gen 6 flags DATA
3027 *	[...]
3028 *	item 2 key (13631488 EXTENT_DATA_REF <HASH>) itemoff 3915 itemsize 28
3029 *		extent data backref root FS_TREE objectid 866 offset 0 count 1
3030 *
3031 * This function get called with:
3032 *
3033 *    node->bytenr = 13631488
3034 *    node->num_bytes = 1048576
3035 *    root_objectid = FS_TREE
3036 *    owner_objectid = 866
3037 *    owner_offset = 0
3038 *    refs_to_drop = 1
3039 *
3040 * Then we should get some like:
3041 *
3042 *	item 0 key (13631488 EXTENT_ITEM 1048576) itemoff 3971 itemsize 24
3043 *		refs 753 gen 6 flags DATA
3044 *
3045 * And that (13631488 EXTENT_DATA_REF <HASH>) gets removed.
3046 */
3047static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
3048			       struct btrfs_delayed_ref_head *href,
3049			       struct btrfs_delayed_ref_node *node,
3050			       struct btrfs_delayed_extent_op *extent_op)
 
 
3051{
3052	struct btrfs_fs_info *info = trans->fs_info;
3053	struct btrfs_key key;
3054	struct btrfs_path *path;
3055	struct btrfs_root *extent_root;
 
3056	struct extent_buffer *leaf;
3057	struct btrfs_extent_item *ei;
3058	struct btrfs_extent_inline_ref *iref;
3059	int ret;
3060	int is_data;
3061	int extent_slot = 0;
3062	int found_extent = 0;
3063	int num_to_del = 1;
3064	int refs_to_drop = node->ref_mod;
3065	u32 item_size;
3066	u64 refs;
3067	u64 bytenr = node->bytenr;
3068	u64 num_bytes = node->num_bytes;
3069	u64 owner_objectid = btrfs_delayed_ref_owner(node);
3070	u64 owner_offset = btrfs_delayed_ref_offset(node);
3071	bool skinny_metadata = btrfs_fs_incompat(info, SKINNY_METADATA);
3072	u64 delayed_ref_root = href->owning_root;
3073
3074	extent_root = btrfs_extent_root(info, bytenr);
3075	ASSERT(extent_root);
3076
3077	path = btrfs_alloc_path();
3078	if (!path)
3079		return -ENOMEM;
3080
 
 
 
3081	is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
3082
3083	if (!is_data && refs_to_drop != 1) {
3084		btrfs_crit(info,
3085"invalid refs_to_drop, dropping more than 1 refs for tree block %llu refs_to_drop %u",
3086			   node->bytenr, refs_to_drop);
3087		ret = -EINVAL;
3088		btrfs_abort_transaction(trans, ret);
3089		goto out;
3090	}
3091
3092	if (is_data)
3093		skinny_metadata = false;
3094
3095	ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes,
3096				    node->parent, node->ref_root, owner_objectid,
 
3097				    owner_offset);
3098	if (ret == 0) {
3099		/*
3100		 * Either the inline backref or the SHARED_DATA_REF/
3101		 * SHARED_BLOCK_REF is found
3102		 *
3103		 * Here is a quick path to locate EXTENT/METADATA_ITEM.
3104		 * It's possible the EXTENT/METADATA_ITEM is near current slot.
3105		 */
3106		extent_slot = path->slots[0];
3107		while (extent_slot >= 0) {
3108			btrfs_item_key_to_cpu(path->nodes[0], &key,
3109					      extent_slot);
3110			if (key.objectid != bytenr)
3111				break;
3112			if (key.type == BTRFS_EXTENT_ITEM_KEY &&
3113			    key.offset == num_bytes) {
3114				found_extent = 1;
3115				break;
3116			}
3117			if (key.type == BTRFS_METADATA_ITEM_KEY &&
3118			    key.offset == owner_objectid) {
3119				found_extent = 1;
3120				break;
3121			}
3122
3123			/* Quick path didn't find the EXTENT/METADATA_ITEM */
3124			if (path->slots[0] - extent_slot > 5)
3125				break;
3126			extent_slot--;
3127		}
3128
 
 
 
 
3129		if (!found_extent) {
3130			if (iref) {
3131				abort_and_dump(trans, path,
3132"invalid iref slot %u, no EXTENT/METADATA_ITEM found but has inline extent ref",
3133					   path->slots[0]);
3134				ret = -EUCLEAN;
3135				goto out;
3136			}
3137			/* Must be SHARED_* item, remove the backref first */
3138			ret = remove_extent_backref(trans, extent_root, path,
3139						    NULL, refs_to_drop, is_data);
 
3140			if (ret) {
3141				btrfs_abort_transaction(trans, ret);
3142				goto out;
3143			}
3144			btrfs_release_path(path);
 
3145
3146			/* Slow path to locate EXTENT/METADATA_ITEM */
3147			key.objectid = bytenr;
3148			key.type = BTRFS_EXTENT_ITEM_KEY;
3149			key.offset = num_bytes;
3150
3151			if (!is_data && skinny_metadata) {
3152				key.type = BTRFS_METADATA_ITEM_KEY;
3153				key.offset = owner_objectid;
3154			}
3155
3156			ret = btrfs_search_slot(trans, extent_root,
3157						&key, path, -1, 1);
3158			if (ret > 0 && skinny_metadata && path->slots[0]) {
3159				/*
3160				 * Couldn't find our skinny metadata item,
3161				 * see if we have ye olde extent item.
3162				 */
3163				path->slots[0]--;
3164				btrfs_item_key_to_cpu(path->nodes[0], &key,
3165						      path->slots[0]);
3166				if (key.objectid == bytenr &&
3167				    key.type == BTRFS_EXTENT_ITEM_KEY &&
3168				    key.offset == num_bytes)
3169					ret = 0;
3170			}
3171
3172			if (ret > 0 && skinny_metadata) {
3173				skinny_metadata = false;
3174				key.objectid = bytenr;
3175				key.type = BTRFS_EXTENT_ITEM_KEY;
3176				key.offset = num_bytes;
3177				btrfs_release_path(path);
3178				ret = btrfs_search_slot(trans, extent_root,
3179							&key, path, -1, 1);
3180			}
3181
3182			if (ret) {
 
 
3183				if (ret > 0)
3184					btrfs_print_leaf(path->nodes[0]);
3185				btrfs_err(info,
3186			"umm, got %d back from search, was looking for %llu, slot %d",
3187					  ret, bytenr, path->slots[0]);
3188			}
3189			if (ret < 0) {
3190				btrfs_abort_transaction(trans, ret);
3191				goto out;
3192			}
3193			extent_slot = path->slots[0];
3194		}
3195	} else if (WARN_ON(ret == -ENOENT)) {
3196		abort_and_dump(trans, path,
3197"unable to find ref byte nr %llu parent %llu root %llu owner %llu offset %llu slot %d",
3198			       bytenr, node->parent, node->ref_root, owner_objectid,
3199			       owner_offset, path->slots[0]);
 
 
3200		goto out;
3201	} else {
3202		btrfs_abort_transaction(trans, ret);
3203		goto out;
3204	}
3205
3206	leaf = path->nodes[0];
3207	item_size = btrfs_item_size(leaf, extent_slot);
3208	if (unlikely(item_size < sizeof(*ei))) {
3209		ret = -EUCLEAN;
3210		btrfs_err(trans->fs_info,
3211			  "unexpected extent item size, has %u expect >= %zu",
3212			  item_size, sizeof(*ei));
3213		btrfs_abort_transaction(trans, ret);
3214		goto out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3215	}
 
 
3216	ei = btrfs_item_ptr(leaf, extent_slot,
3217			    struct btrfs_extent_item);
3218	if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID &&
3219	    key.type == BTRFS_EXTENT_ITEM_KEY) {
3220		struct btrfs_tree_block_info *bi;
3221
3222		if (item_size < sizeof(*ei) + sizeof(*bi)) {
3223			abort_and_dump(trans, path,
3224"invalid extent item size for key (%llu, %u, %llu) slot %u owner %llu, has %u expect >= %zu",
3225				       key.objectid, key.type, key.offset,
3226				       path->slots[0], owner_objectid, item_size,
3227				       sizeof(*ei) + sizeof(*bi));
3228			ret = -EUCLEAN;
3229			goto out;
3230		}
3231		bi = (struct btrfs_tree_block_info *)(ei + 1);
3232		WARN_ON(owner_objectid != btrfs_tree_block_level(leaf, bi));
3233	}
3234
3235	refs = btrfs_extent_refs(leaf, ei);
3236	if (refs < refs_to_drop) {
3237		abort_and_dump(trans, path,
3238		"trying to drop %d refs but we only have %llu for bytenr %llu slot %u",
3239			       refs_to_drop, refs, bytenr, path->slots[0]);
3240		ret = -EUCLEAN;
3241		goto out;
3242	}
3243	refs -= refs_to_drop;
3244
3245	if (refs > 0) {
3246		if (extent_op)
3247			__run_delayed_extent_op(extent_op, leaf, ei);
3248		/*
3249		 * In the case of inline back ref, reference count will
3250		 * be updated by remove_extent_backref
3251		 */
3252		if (iref) {
3253			if (!found_extent) {
3254				abort_and_dump(trans, path,
3255"invalid iref, got inlined extent ref but no EXTENT/METADATA_ITEM found, slot %u",
3256					       path->slots[0]);
3257				ret = -EUCLEAN;
3258				goto out;
3259			}
3260		} else {
3261			btrfs_set_extent_refs(leaf, ei, refs);
3262			btrfs_mark_buffer_dirty(trans, leaf);
3263		}
3264		if (found_extent) {
3265			ret = remove_extent_backref(trans, extent_root, path,
3266						    iref, refs_to_drop, is_data);
 
3267			if (ret) {
3268				btrfs_abort_transaction(trans, ret);
3269				goto out;
3270			}
3271		}
 
 
3272	} else {
3273		struct btrfs_squota_delta delta = {
3274			.root = delayed_ref_root,
3275			.num_bytes = num_bytes,
3276			.is_data = is_data,
3277			.is_inc = false,
3278			.generation = btrfs_extent_generation(leaf, ei),
3279		};
3280
3281		/* In this branch refs == 1 */
3282		if (found_extent) {
3283			if (is_data && refs_to_drop !=
3284			    extent_data_ref_count(path, iref)) {
3285				abort_and_dump(trans, path,
3286		"invalid refs_to_drop, current refs %u refs_to_drop %u slot %u",
3287					       extent_data_ref_count(path, iref),
3288					       refs_to_drop, path->slots[0]);
3289				ret = -EUCLEAN;
3290				goto out;
3291			}
3292			if (iref) {
3293				if (path->slots[0] != extent_slot) {
3294					abort_and_dump(trans, path,
3295"invalid iref, extent item key (%llu %u %llu) slot %u doesn't have wanted iref",
3296						       key.objectid, key.type,
3297						       key.offset, path->slots[0]);
3298					ret = -EUCLEAN;
3299					goto out;
3300				}
3301			} else {
3302				/*
3303				 * No inline ref, we must be at SHARED_* item,
3304				 * And it's single ref, it must be:
3305				 * |	extent_slot	  ||extent_slot + 1|
3306				 * [ EXTENT/METADATA_ITEM ][ SHARED_* ITEM ]
3307				 */
3308				if (path->slots[0] != extent_slot + 1) {
3309					abort_and_dump(trans, path,
3310	"invalid SHARED_* item slot %u, previous item is not EXTENT/METADATA_ITEM",
3311						       path->slots[0]);
3312					ret = -EUCLEAN;
3313					goto out;
3314				}
3315				path->slots[0] = extent_slot;
3316				num_to_del = 2;
3317			}
3318		}
3319		/*
3320		 * We can't infer the data owner from the delayed ref, so we need
3321		 * to try to get it from the owning ref item.
3322		 *
3323		 * If it is not present, then that extent was not written under
3324		 * simple quotas mode, so we don't need to account for its deletion.
3325		 */
3326		if (is_data)
3327			delta.root = btrfs_get_extent_owner_root(trans->fs_info,
3328								 leaf, extent_slot);
3329
 
3330		ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
3331				      num_to_del);
3332		if (ret) {
3333			btrfs_abort_transaction(trans, ret);
3334			goto out;
3335		}
3336		btrfs_release_path(path);
3337
3338		ret = do_free_extent_accounting(trans, bytenr, &delta);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3339	}
3340	btrfs_release_path(path);
3341
3342out:
3343	btrfs_free_path(path);
3344	return ret;
3345}
3346
3347/*
3348 * when we free an block, it is possible (and likely) that we free the last
3349 * delayed ref for that extent as well.  This searches the delayed ref tree for
3350 * a given extent, and if there are no other delayed refs to be processed, it
3351 * removes it from the tree.
3352 */
3353static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
3354				      u64 bytenr)
3355{
3356	struct btrfs_fs_info *fs_info = trans->fs_info;
3357	struct btrfs_delayed_ref_head *head;
3358	struct btrfs_delayed_ref_root *delayed_refs;
3359	int ret = 0;
3360
3361	delayed_refs = &trans->transaction->delayed_refs;
3362	spin_lock(&delayed_refs->lock);
3363	head = btrfs_find_delayed_ref_head(fs_info, delayed_refs, bytenr);
3364	if (!head)
3365		goto out_delayed_unlock;
3366
3367	spin_lock(&head->lock);
3368	if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root))
3369		goto out;
3370
3371	if (cleanup_extent_op(head) != NULL)
3372		goto out;
 
 
 
 
3373
3374	/*
3375	 * waiting for the lock here would deadlock.  If someone else has it
3376	 * locked they are already in the process of dropping it anyway
3377	 */
3378	if (!mutex_trylock(&head->mutex))
3379		goto out;
3380
3381	btrfs_delete_ref_head(fs_info, delayed_refs, head);
3382	head->processing = false;
 
 
 
 
 
 
3383
 
 
 
 
 
 
 
 
3384	spin_unlock(&head->lock);
3385	spin_unlock(&delayed_refs->lock);
3386
3387	BUG_ON(head->extent_op);
3388	if (head->must_insert_reserved)
3389		ret = 1;
3390
3391	btrfs_cleanup_ref_head_accounting(fs_info, delayed_refs, head);
3392	mutex_unlock(&head->mutex);
3393	btrfs_put_delayed_ref_head(head);
3394	return ret;
3395out:
3396	spin_unlock(&head->lock);
3397
3398out_delayed_unlock:
3399	spin_unlock(&delayed_refs->lock);
3400	return 0;
3401}
3402
3403int btrfs_free_tree_block(struct btrfs_trans_handle *trans,
3404			  u64 root_id,
3405			  struct extent_buffer *buf,
3406			  u64 parent, int last_ref)
3407{
3408	struct btrfs_fs_info *fs_info = trans->fs_info;
3409	struct btrfs_block_group *bg;
3410	int ret;
3411
3412	if (root_id != BTRFS_TREE_LOG_OBJECTID) {
3413		struct btrfs_ref generic_ref = {
3414			.action = BTRFS_DROP_DELAYED_REF,
3415			.bytenr = buf->start,
3416			.num_bytes = buf->len,
3417			.parent = parent,
3418			.owning_root = btrfs_header_owner(buf),
3419			.ref_root = root_id,
3420		};
3421
3422		/*
3423		 * Assert that the extent buffer is not cleared due to
3424		 * EXTENT_BUFFER_ZONED_ZEROOUT. Please refer
3425		 * btrfs_clear_buffer_dirty() and btree_csum_one_bio() for
3426		 * detail.
3427		 */
3428		ASSERT(btrfs_header_bytenr(buf) != 0);
3429
3430		btrfs_init_tree_ref(&generic_ref, btrfs_header_level(buf), 0, false);
3431		btrfs_ref_tree_mod(fs_info, &generic_ref);
3432		ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL);
3433		if (ret < 0)
3434			return ret;
3435	}
3436
3437	if (!last_ref)
3438		return 0;
3439
3440	if (btrfs_header_generation(buf) != trans->transid)
3441		goto out;
3442
3443	if (root_id != BTRFS_TREE_LOG_OBJECTID) {
3444		ret = check_ref_cleanup(trans, buf->start);
3445		if (!ret)
3446			goto out;
3447	}
3448
3449	bg = btrfs_lookup_block_group(fs_info, buf->start);
3450
3451	if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) {
3452		pin_down_extent(trans, bg, buf->start, buf->len, 1);
3453		btrfs_put_block_group(bg);
3454		goto out;
3455	}
3456
3457	/*
3458	 * If there are tree mod log users we may have recorded mod log
3459	 * operations for this node.  If we re-allocate this node we
3460	 * could replay operations on this node that happened when it
3461	 * existed in a completely different root.  For example if it
3462	 * was part of root A, then was reallocated to root B, and we
3463	 * are doing a btrfs_old_search_slot(root b), we could replay
3464	 * operations that happened when the block was part of root A,
3465	 * giving us an inconsistent view of the btree.
3466	 *
3467	 * We are safe from races here because at this point no other
3468	 * node or root points to this extent buffer, so if after this
3469	 * check a new tree mod log user joins we will not have an
3470	 * existing log of operations on this node that we have to
3471	 * contend with.
3472	 */
3473
3474	if (test_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags)
3475		     || btrfs_is_zoned(fs_info)) {
3476		pin_down_extent(trans, bg, buf->start, buf->len, 1);
3477		btrfs_put_block_group(bg);
3478		goto out;
3479	}
3480
3481	WARN_ON(test_bit(EXTENT_BUFFER_DIRTY, &buf->bflags));
3482
3483	btrfs_add_free_space(bg, buf->start, buf->len);
3484	btrfs_free_reserved_bytes(bg, buf->len, 0);
3485	btrfs_put_block_group(bg);
3486	trace_btrfs_reserved_extent_free(fs_info, buf->start, buf->len);
3487
3488out:
 
 
 
 
3489
3490	/*
3491	 * Deleting the buffer, clear the corrupt flag since it doesn't
3492	 * matter anymore.
3493	 */
3494	clear_bit(EXTENT_BUFFER_CORRUPT, &buf->bflags);
3495	return 0;
3496}
3497
3498/* Can return -ENOMEM */
3499int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref)
 
 
3500{
3501	struct btrfs_fs_info *fs_info = trans->fs_info;
3502	int ret;
 
3503
3504	if (btrfs_is_testing(fs_info))
3505		return 0;
3506
 
 
3507	/*
3508	 * tree log blocks never actually go into the extent allocation
3509	 * tree, just update pinning info and exit early.
3510	 */
3511	if (ref->ref_root == BTRFS_TREE_LOG_OBJECTID) {
3512		btrfs_pin_extent(trans, ref->bytenr, ref->num_bytes, 1);
 
 
3513		ret = 0;
3514	} else if (ref->type == BTRFS_REF_METADATA) {
3515		ret = btrfs_add_delayed_tree_ref(trans, ref, NULL);
 
 
 
3516	} else {
3517		ret = btrfs_add_delayed_data_ref(trans, ref, 0);
 
 
 
 
3518	}
 
 
3519
3520	if (ref->ref_root != BTRFS_TREE_LOG_OBJECTID)
3521		btrfs_ref_tree_mod(fs_info, ref);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3522
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3523	return ret;
3524}
3525
3526enum btrfs_loop_type {
3527	/*
3528	 * Start caching block groups but do not wait for progress or for them
3529	 * to be done.
3530	 */
3531	LOOP_CACHING_NOWAIT,
 
 
 
 
 
 
 
 
 
 
 
3532
3533	/*
3534	 * Wait for the block group free_space >= the space we're waiting for if
3535	 * the block group isn't cached.
3536	 */
3537	LOOP_CACHING_WAIT,
3538
3539	/*
3540	 * Allow allocations to happen from block groups that do not yet have a
3541	 * size classification.
3542	 */
3543	LOOP_UNSET_SIZE_CLASS,
 
 
 
 
3544
3545	/*
3546	 * Allocate a chunk and then retry the allocation.
3547	 */
3548	LOOP_ALLOC_CHUNK,
3549
3550	/*
3551	 * Ignore the size class restrictions for this allocation.
3552	 */
3553	LOOP_WRONG_SIZE_CLASS,
3554
3555	/*
3556	 * Ignore the empty size, only try to allocate the number of bytes
3557	 * needed for this allocation.
3558	 */
3559	LOOP_NO_EMPTY_SIZE,
3560};
3561
3562static inline void
3563btrfs_lock_block_group(struct btrfs_block_group *cache,
3564		       int delalloc)
3565{
3566	if (delalloc)
3567		down_read(&cache->data_rwsem);
3568}
3569
3570static inline void btrfs_grab_block_group(struct btrfs_block_group *cache,
 
3571		       int delalloc)
3572{
3573	btrfs_get_block_group(cache);
3574	if (delalloc)
3575		down_read(&cache->data_rwsem);
3576}
3577
3578static struct btrfs_block_group *btrfs_lock_cluster(
3579		   struct btrfs_block_group *block_group,
3580		   struct btrfs_free_cluster *cluster,
3581		   int delalloc)
3582	__acquires(&cluster->refill_lock)
3583{
3584	struct btrfs_block_group *used_bg = NULL;
3585
 
3586	spin_lock(&cluster->refill_lock);
3587	while (1) {
3588		used_bg = cluster->block_group;
3589		if (!used_bg)
3590			return NULL;
3591
3592		if (used_bg == block_group)
3593			return used_bg;
3594
3595		btrfs_get_block_group(used_bg);
 
 
3596
3597		if (!delalloc)
3598			return used_bg;
 
3599
3600		if (down_read_trylock(&used_bg->data_rwsem))
3601			return used_bg;
3602
3603		spin_unlock(&cluster->refill_lock);
3604
3605		/* We should only have one-level nested. */
3606		down_read_nested(&used_bg->data_rwsem, SINGLE_DEPTH_NESTING);
3607
3608		spin_lock(&cluster->refill_lock);
3609		if (used_bg == cluster->block_group)
3610			return used_bg;
3611
3612		up_read(&used_bg->data_rwsem);
3613		btrfs_put_block_group(used_bg);
3614	}
 
3615}
3616
3617static inline void
3618btrfs_release_block_group(struct btrfs_block_group *cache,
3619			 int delalloc)
3620{
3621	if (delalloc)
3622		up_read(&cache->data_rwsem);
3623	btrfs_put_block_group(cache);
3624}
3625
3626/*
3627 * Helper function for find_free_extent().
 
 
 
 
 
3628 *
3629 * Return -ENOENT to inform caller that we need fallback to unclustered mode.
3630 * Return >0 to inform caller that we find nothing
3631 * Return 0 means we have found a location and set ffe_ctl->found_offset.
3632 */
3633static int find_free_extent_clustered(struct btrfs_block_group *bg,
3634				      struct find_free_extent_ctl *ffe_ctl,
3635				      struct btrfs_block_group **cluster_bg_ret)
3636{
3637	struct btrfs_block_group *cluster_bg;
3638	struct btrfs_free_cluster *last_ptr = ffe_ctl->last_ptr;
3639	u64 aligned_cluster;
3640	u64 offset;
3641	int ret;
3642
3643	cluster_bg = btrfs_lock_cluster(bg, last_ptr, ffe_ctl->delalloc);
3644	if (!cluster_bg)
3645		goto refill_cluster;
3646	if (cluster_bg != bg && (cluster_bg->ro ||
3647	    !block_group_bits(cluster_bg, ffe_ctl->flags)))
3648		goto release_cluster;
3649
3650	offset = btrfs_alloc_from_cluster(cluster_bg, last_ptr,
3651			ffe_ctl->num_bytes, cluster_bg->start,
3652			&ffe_ctl->max_extent_size);
3653	if (offset) {
3654		/* We have a block, we're done */
3655		spin_unlock(&last_ptr->refill_lock);
3656		trace_btrfs_reserve_extent_cluster(cluster_bg, ffe_ctl);
3657		*cluster_bg_ret = cluster_bg;
3658		ffe_ctl->found_offset = offset;
3659		return 0;
3660	}
3661	WARN_ON(last_ptr->block_group != cluster_bg);
3662
3663release_cluster:
3664	/*
3665	 * If we are on LOOP_NO_EMPTY_SIZE, we can't set up a new clusters, so
3666	 * lets just skip it and let the allocator find whatever block it can
3667	 * find. If we reach this point, we will have tried the cluster
3668	 * allocator plenty of times and not have found anything, so we are
3669	 * likely way too fragmented for the clustering stuff to find anything.
3670	 *
3671	 * However, if the cluster is taken from the current block group,
3672	 * release the cluster first, so that we stand a better chance of
3673	 * succeeding in the unclustered allocation.
3674	 */
3675	if (ffe_ctl->loop >= LOOP_NO_EMPTY_SIZE && cluster_bg != bg) {
3676		spin_unlock(&last_ptr->refill_lock);
3677		btrfs_release_block_group(cluster_bg, ffe_ctl->delalloc);
3678		return -ENOENT;
3679	}
3680
3681	/* This cluster didn't work out, free it and start over */
3682	btrfs_return_cluster_to_free_space(NULL, last_ptr);
3683
3684	if (cluster_bg != bg)
3685		btrfs_release_block_group(cluster_bg, ffe_ctl->delalloc);
3686
3687refill_cluster:
3688	if (ffe_ctl->loop >= LOOP_NO_EMPTY_SIZE) {
3689		spin_unlock(&last_ptr->refill_lock);
3690		return -ENOENT;
3691	}
3692
3693	aligned_cluster = max_t(u64,
3694			ffe_ctl->empty_cluster + ffe_ctl->empty_size,
3695			bg->full_stripe_len);
3696	ret = btrfs_find_space_cluster(bg, last_ptr, ffe_ctl->search_start,
3697			ffe_ctl->num_bytes, aligned_cluster);
3698	if (ret == 0) {
3699		/* Now pull our allocation out of this cluster */
3700		offset = btrfs_alloc_from_cluster(bg, last_ptr,
3701				ffe_ctl->num_bytes, ffe_ctl->search_start,
3702				&ffe_ctl->max_extent_size);
3703		if (offset) {
3704			/* We found one, proceed */
3705			spin_unlock(&last_ptr->refill_lock);
3706			ffe_ctl->found_offset = offset;
3707			trace_btrfs_reserve_extent_cluster(bg, ffe_ctl);
3708			return 0;
3709		}
3710	}
3711	/*
3712	 * At this point we either didn't find a cluster or we weren't able to
3713	 * allocate a block from our cluster.  Free the cluster we've been
3714	 * trying to use, and go to the next block group.
3715	 */
3716	btrfs_return_cluster_to_free_space(NULL, last_ptr);
3717	spin_unlock(&last_ptr->refill_lock);
3718	return 1;
3719}
3720
3721/*
3722 * Return >0 to inform caller that we find nothing
3723 * Return 0 when we found an free extent and set ffe_ctrl->found_offset
3724 */
3725static int find_free_extent_unclustered(struct btrfs_block_group *bg,
3726					struct find_free_extent_ctl *ffe_ctl)
 
 
3727{
3728	struct btrfs_free_cluster *last_ptr = ffe_ctl->last_ptr;
3729	u64 offset;
3730
3731	/*
3732	 * We are doing an unclustered allocation, set the fragmented flag so
3733	 * we don't bother trying to setup a cluster again until we get more
3734	 * space.
3735	 */
3736	if (unlikely(last_ptr)) {
3737		spin_lock(&last_ptr->lock);
3738		last_ptr->fragmented = 1;
3739		spin_unlock(&last_ptr->lock);
3740	}
3741	if (ffe_ctl->cached) {
3742		struct btrfs_free_space_ctl *free_space_ctl;
3743
3744		free_space_ctl = bg->free_space_ctl;
3745		spin_lock(&free_space_ctl->tree_lock);
3746		if (free_space_ctl->free_space <
3747		    ffe_ctl->num_bytes + ffe_ctl->empty_cluster +
3748		    ffe_ctl->empty_size) {
3749			ffe_ctl->total_free_space = max_t(u64,
3750					ffe_ctl->total_free_space,
3751					free_space_ctl->free_space);
3752			spin_unlock(&free_space_ctl->tree_lock);
3753			return 1;
3754		}
3755		spin_unlock(&free_space_ctl->tree_lock);
3756	}
3757
3758	offset = btrfs_find_space_for_alloc(bg, ffe_ctl->search_start,
3759			ffe_ctl->num_bytes, ffe_ctl->empty_size,
3760			&ffe_ctl->max_extent_size);
3761	if (!offset)
3762		return 1;
3763	ffe_ctl->found_offset = offset;
3764	return 0;
3765}
3766
3767static int do_allocation_clustered(struct btrfs_block_group *block_group,
3768				   struct find_free_extent_ctl *ffe_ctl,
3769				   struct btrfs_block_group **bg_ret)
3770{
3771	int ret;
3772
3773	/* We want to try and use the cluster allocator, so lets look there */
3774	if (ffe_ctl->last_ptr && ffe_ctl->use_cluster) {
3775		ret = find_free_extent_clustered(block_group, ffe_ctl, bg_ret);
3776		if (ret >= 0)
3777			return ret;
3778		/* ret == -ENOENT case falls through */
3779	}
3780
3781	return find_free_extent_unclustered(block_group, ffe_ctl);
3782}
3783
3784/*
3785 * Tree-log block group locking
3786 * ============================
3787 *
3788 * fs_info::treelog_bg_lock protects the fs_info::treelog_bg which
3789 * indicates the starting address of a block group, which is reserved only
3790 * for tree-log metadata.
3791 *
3792 * Lock nesting
3793 * ============
3794 *
3795 * space_info::lock
3796 *   block_group::lock
3797 *     fs_info::treelog_bg_lock
3798 */
3799
3800/*
3801 * Simple allocator for sequential-only block group. It only allows sequential
3802 * allocation. No need to play with trees. This function also reserves the
3803 * bytes as in btrfs_add_reserved_bytes.
3804 */
3805static int do_allocation_zoned(struct btrfs_block_group *block_group,
3806			       struct find_free_extent_ctl *ffe_ctl,
3807			       struct btrfs_block_group **bg_ret)
3808{
3809	struct btrfs_fs_info *fs_info = block_group->fs_info;
3810	struct btrfs_space_info *space_info = block_group->space_info;
3811	struct btrfs_free_space_ctl *ctl = block_group->free_space_ctl;
3812	u64 start = block_group->start;
3813	u64 num_bytes = ffe_ctl->num_bytes;
3814	u64 avail;
3815	u64 bytenr = block_group->start;
3816	u64 log_bytenr;
3817	u64 data_reloc_bytenr;
3818	int ret = 0;
3819	bool skip = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3820
3821	ASSERT(btrfs_is_zoned(block_group->fs_info));
 
 
 
3822
3823	/*
3824	 * Do not allow non-tree-log blocks in the dedicated tree-log block
3825	 * group, and vice versa.
3826	 */
3827	spin_lock(&fs_info->treelog_bg_lock);
3828	log_bytenr = fs_info->treelog_bg;
3829	if (log_bytenr && ((ffe_ctl->for_treelog && bytenr != log_bytenr) ||
3830			   (!ffe_ctl->for_treelog && bytenr == log_bytenr)))
3831		skip = true;
3832	spin_unlock(&fs_info->treelog_bg_lock);
3833	if (skip)
3834		return 1;
3835
3836	/*
3837	 * Do not allow non-relocation blocks in the dedicated relocation block
3838	 * group, and vice versa.
3839	 */
3840	spin_lock(&fs_info->relocation_bg_lock);
3841	data_reloc_bytenr = fs_info->data_reloc_bg;
3842	if (data_reloc_bytenr &&
3843	    ((ffe_ctl->for_data_reloc && bytenr != data_reloc_bytenr) ||
3844	     (!ffe_ctl->for_data_reloc && bytenr == data_reloc_bytenr)))
3845		skip = true;
3846	spin_unlock(&fs_info->relocation_bg_lock);
3847	if (skip)
3848		return 1;
3849
3850	/* Check RO and no space case before trying to activate it */
3851	spin_lock(&block_group->lock);
3852	if (block_group->ro || btrfs_zoned_bg_is_full(block_group)) {
3853		ret = 1;
3854		/*
3855		 * May need to clear fs_info->{treelog,data_reloc}_bg.
3856		 * Return the error after taking the locks.
3857		 */
3858	}
3859	spin_unlock(&block_group->lock);
3860
3861	/* Metadata block group is activated at write time. */
3862	if (!ret && (block_group->flags & BTRFS_BLOCK_GROUP_DATA) &&
3863	    !btrfs_zone_activate(block_group)) {
3864		ret = 1;
3865		/*
3866		 * May need to clear fs_info->{treelog,data_reloc}_bg.
3867		 * Return the error after taking the locks.
3868		 */
3869	}
3870
3871	spin_lock(&space_info->lock);
3872	spin_lock(&block_group->lock);
3873	spin_lock(&fs_info->treelog_bg_lock);
3874	spin_lock(&fs_info->relocation_bg_lock);
3875
3876	if (ret)
3877		goto out;
3878
3879	ASSERT(!ffe_ctl->for_treelog ||
3880	       block_group->start == fs_info->treelog_bg ||
3881	       fs_info->treelog_bg == 0);
3882	ASSERT(!ffe_ctl->for_data_reloc ||
3883	       block_group->start == fs_info->data_reloc_bg ||
3884	       fs_info->data_reloc_bg == 0);
3885
3886	if (block_group->ro ||
3887	    (!ffe_ctl->for_data_reloc &&
3888	     test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags))) {
3889		ret = 1;
3890		goto out;
3891	}
3892
3893	/*
3894	 * Do not allow currently using block group to be tree-log dedicated
3895	 * block group.
3896	 */
3897	if (ffe_ctl->for_treelog && !fs_info->treelog_bg &&
3898	    (block_group->used || block_group->reserved)) {
3899		ret = 1;
3900		goto out;
3901	}
3902
3903	/*
3904	 * Do not allow currently used block group to be the data relocation
3905	 * dedicated block group.
3906	 */
3907	if (ffe_ctl->for_data_reloc && !fs_info->data_reloc_bg &&
3908	    (block_group->used || block_group->reserved)) {
3909		ret = 1;
3910		goto out;
3911	}
3912
3913	WARN_ON_ONCE(block_group->alloc_offset > block_group->zone_capacity);
3914	avail = block_group->zone_capacity - block_group->alloc_offset;
3915	if (avail < num_bytes) {
3916		if (ffe_ctl->max_extent_size < avail) {
3917			/*
3918			 * With sequential allocator, free space is always
3919			 * contiguous
3920			 */
3921			ffe_ctl->max_extent_size = avail;
3922			ffe_ctl->total_free_space = avail;
3923		}
3924		ret = 1;
3925		goto out;
3926	}
3927
3928	if (ffe_ctl->for_treelog && !fs_info->treelog_bg)
3929		fs_info->treelog_bg = block_group->start;
3930
3931	if (ffe_ctl->for_data_reloc) {
3932		if (!fs_info->data_reloc_bg)
3933			fs_info->data_reloc_bg = block_group->start;
3934		/*
3935		 * Do not allow allocations from this block group, unless it is
3936		 * for data relocation. Compared to increasing the ->ro, setting
3937		 * the ->zoned_data_reloc_ongoing flag still allows nocow
3938		 * writers to come in. See btrfs_inc_nocow_writers().
3939		 *
3940		 * We need to disable an allocation to avoid an allocation of
3941		 * regular (non-relocation data) extent. With mix of relocation
3942		 * extents and regular extents, we can dispatch WRITE commands
3943		 * (for relocation extents) and ZONE APPEND commands (for
3944		 * regular extents) at the same time to the same zone, which
3945		 * easily break the write pointer.
3946		 *
3947		 * Also, this flag avoids this block group to be zone finished.
3948		 */
3949		set_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_flags);
3950	}
3951
3952	ffe_ctl->found_offset = start + block_group->alloc_offset;
3953	block_group->alloc_offset += num_bytes;
3954	spin_lock(&ctl->tree_lock);
3955	ctl->free_space -= num_bytes;
3956	spin_unlock(&ctl->tree_lock);
3957
3958	/*
3959	 * We do not check if found_offset is aligned to stripesize. The
3960	 * address is anyway rewritten when using zone append writing.
3961	 */
3962
3963	ffe_ctl->search_start = ffe_ctl->found_offset;
3964
3965out:
3966	if (ret && ffe_ctl->for_treelog)
3967		fs_info->treelog_bg = 0;
3968	if (ret && ffe_ctl->for_data_reloc)
3969		fs_info->data_reloc_bg = 0;
3970	spin_unlock(&fs_info->relocation_bg_lock);
3971	spin_unlock(&fs_info->treelog_bg_lock);
3972	spin_unlock(&block_group->lock);
3973	spin_unlock(&space_info->lock);
3974	return ret;
3975}
3976
3977static int do_allocation(struct btrfs_block_group *block_group,
3978			 struct find_free_extent_ctl *ffe_ctl,
3979			 struct btrfs_block_group **bg_ret)
3980{
3981	switch (ffe_ctl->policy) {
3982	case BTRFS_EXTENT_ALLOC_CLUSTERED:
3983		return do_allocation_clustered(block_group, ffe_ctl, bg_ret);
3984	case BTRFS_EXTENT_ALLOC_ZONED:
3985		return do_allocation_zoned(block_group, ffe_ctl, bg_ret);
3986	default:
3987		BUG();
3988	}
3989}
3990
3991static void release_block_group(struct btrfs_block_group *block_group,
3992				struct find_free_extent_ctl *ffe_ctl,
3993				int delalloc)
3994{
3995	switch (ffe_ctl->policy) {
3996	case BTRFS_EXTENT_ALLOC_CLUSTERED:
3997		ffe_ctl->retry_uncached = false;
3998		break;
3999	case BTRFS_EXTENT_ALLOC_ZONED:
4000		/* Nothing to do */
4001		break;
4002	default:
4003		BUG();
4004	}
4005
4006	BUG_ON(btrfs_bg_flags_to_raid_index(block_group->flags) !=
4007	       ffe_ctl->index);
4008	btrfs_release_block_group(block_group, delalloc);
4009}
4010
4011static void found_extent_clustered(struct find_free_extent_ctl *ffe_ctl,
4012				   struct btrfs_key *ins)
4013{
4014	struct btrfs_free_cluster *last_ptr = ffe_ctl->last_ptr;
4015
4016	if (!ffe_ctl->use_cluster && last_ptr) {
4017		spin_lock(&last_ptr->lock);
4018		last_ptr->window_start = ins->objectid;
4019		spin_unlock(&last_ptr->lock);
4020	}
4021}
4022
4023static void found_extent(struct find_free_extent_ctl *ffe_ctl,
4024			 struct btrfs_key *ins)
4025{
4026	switch (ffe_ctl->policy) {
4027	case BTRFS_EXTENT_ALLOC_CLUSTERED:
4028		found_extent_clustered(ffe_ctl, ins);
4029		break;
4030	case BTRFS_EXTENT_ALLOC_ZONED:
4031		/* Nothing to do */
4032		break;
4033	default:
4034		BUG();
4035	}
4036}
4037
4038static int can_allocate_chunk_zoned(struct btrfs_fs_info *fs_info,
4039				    struct find_free_extent_ctl *ffe_ctl)
4040{
4041	/* Block group's activeness is not a requirement for METADATA block groups. */
4042	if (!(ffe_ctl->flags & BTRFS_BLOCK_GROUP_DATA))
4043		return 0;
4044
4045	/* If we can activate new zone, just allocate a chunk and use it */
4046	if (btrfs_can_activate_zone(fs_info->fs_devices, ffe_ctl->flags))
4047		return 0;
4048
4049	/*
4050	 * We already reached the max active zones. Try to finish one block
4051	 * group to make a room for a new block group. This is only possible
4052	 * for a data block group because btrfs_zone_finish() may need to wait
4053	 * for a running transaction which can cause a deadlock for metadata
4054	 * allocation.
4055	 */
4056	if (ffe_ctl->flags & BTRFS_BLOCK_GROUP_DATA) {
4057		int ret = btrfs_zone_finish_one_bg(fs_info);
4058
4059		if (ret == 1)
4060			return 0;
4061		else if (ret < 0)
4062			return ret;
4063	}
4064
4065	/*
4066	 * If we have enough free space left in an already active block group
4067	 * and we can't activate any other zone now, do not allow allocating a
4068	 * new chunk and let find_free_extent() retry with a smaller size.
4069	 */
4070	if (ffe_ctl->max_extent_size >= ffe_ctl->min_alloc_size)
4071		return -ENOSPC;
4072
4073	/*
4074	 * Even min_alloc_size is not left in any block groups. Since we cannot
4075	 * activate a new block group, allocating it may not help. Let's tell a
4076	 * caller to try again and hope it progress something by writing some
4077	 * parts of the region. That is only possible for data block groups,
4078	 * where a part of the region can be written.
4079	 */
4080	if (ffe_ctl->flags & BTRFS_BLOCK_GROUP_DATA)
4081		return -EAGAIN;
4082
4083	/*
4084	 * We cannot activate a new block group and no enough space left in any
4085	 * block groups. So, allocating a new block group may not help. But,
4086	 * there is nothing to do anyway, so let's go with it.
4087	 */
4088	return 0;
4089}
4090
4091static int can_allocate_chunk(struct btrfs_fs_info *fs_info,
4092			      struct find_free_extent_ctl *ffe_ctl)
4093{
4094	switch (ffe_ctl->policy) {
4095	case BTRFS_EXTENT_ALLOC_CLUSTERED:
4096		return 0;
4097	case BTRFS_EXTENT_ALLOC_ZONED:
4098		return can_allocate_chunk_zoned(fs_info, ffe_ctl);
4099	default:
4100		BUG();
4101	}
4102}
4103
4104/*
4105 * Return >0 means caller needs to re-search for free extent
4106 * Return 0 means we have the needed free extent.
4107 * Return <0 means we failed to locate any free extent.
4108 */
4109static int find_free_extent_update_loop(struct btrfs_fs_info *fs_info,
4110					struct btrfs_key *ins,
4111					struct find_free_extent_ctl *ffe_ctl,
4112					bool full_search)
4113{
4114	struct btrfs_root *root = fs_info->chunk_root;
4115	int ret;
4116
4117	if ((ffe_ctl->loop == LOOP_CACHING_NOWAIT) &&
4118	    ffe_ctl->have_caching_bg && !ffe_ctl->orig_have_caching_bg)
4119		ffe_ctl->orig_have_caching_bg = true;
4120
4121	if (ins->objectid) {
4122		found_extent(ffe_ctl, ins);
4123		return 0;
4124	}
4125
4126	if (ffe_ctl->loop >= LOOP_CACHING_WAIT && ffe_ctl->have_caching_bg)
4127		return 1;
4128
4129	ffe_ctl->index++;
4130	if (ffe_ctl->index < BTRFS_NR_RAID_TYPES)
4131		return 1;
4132
4133	/* See the comments for btrfs_loop_type for an explanation of the phases. */
4134	if (ffe_ctl->loop < LOOP_NO_EMPTY_SIZE) {
4135		ffe_ctl->index = 0;
4136		/*
4137		 * We want to skip the LOOP_CACHING_WAIT step if we don't have
4138		 * any uncached bgs and we've already done a full search
4139		 * through.
4140		 */
4141		if (ffe_ctl->loop == LOOP_CACHING_NOWAIT &&
4142		    (!ffe_ctl->orig_have_caching_bg && full_search))
4143			ffe_ctl->loop++;
4144		ffe_ctl->loop++;
4145
4146		if (ffe_ctl->loop == LOOP_ALLOC_CHUNK) {
4147			struct btrfs_trans_handle *trans;
4148			int exist = 0;
4149
4150			/* Check if allocation policy allows to create a new chunk */
4151			ret = can_allocate_chunk(fs_info, ffe_ctl);
4152			if (ret)
4153				return ret;
4154
4155			trans = current->journal_info;
4156			if (trans)
4157				exist = 1;
4158			else
4159				trans = btrfs_join_transaction(root);
4160
4161			if (IS_ERR(trans)) {
4162				ret = PTR_ERR(trans);
4163				return ret;
4164			}
4165
4166			ret = btrfs_chunk_alloc(trans, ffe_ctl->flags,
4167						CHUNK_ALLOC_FORCE_FOR_EXTENT);
4168
4169			/* Do not bail out on ENOSPC since we can do more. */
4170			if (ret == -ENOSPC) {
4171				ret = 0;
4172				ffe_ctl->loop++;
4173			}
4174			else if (ret < 0)
4175				btrfs_abort_transaction(trans, ret);
4176			else
4177				ret = 0;
4178			if (!exist)
4179				btrfs_end_transaction(trans);
4180			if (ret)
4181				return ret;
4182		}
4183
4184		if (ffe_ctl->loop == LOOP_NO_EMPTY_SIZE) {
4185			if (ffe_ctl->policy != BTRFS_EXTENT_ALLOC_CLUSTERED)
4186				return -ENOSPC;
4187
4188			/*
4189			 * Don't loop again if we already have no empty_size and
4190			 * no empty_cluster.
4191			 */
4192			if (ffe_ctl->empty_size == 0 &&
4193			    ffe_ctl->empty_cluster == 0)
4194				return -ENOSPC;
4195			ffe_ctl->empty_size = 0;
4196			ffe_ctl->empty_cluster = 0;
4197		}
4198		return 1;
4199	}
4200	return -ENOSPC;
4201}
4202
4203static bool find_free_extent_check_size_class(struct find_free_extent_ctl *ffe_ctl,
4204					      struct btrfs_block_group *bg)
4205{
4206	if (ffe_ctl->policy == BTRFS_EXTENT_ALLOC_ZONED)
4207		return true;
4208	if (!btrfs_block_group_should_use_size_class(bg))
4209		return true;
4210	if (ffe_ctl->loop >= LOOP_WRONG_SIZE_CLASS)
4211		return true;
4212	if (ffe_ctl->loop >= LOOP_UNSET_SIZE_CLASS &&
4213	    bg->size_class == BTRFS_BG_SZ_NONE)
4214		return true;
4215	return ffe_ctl->size_class == bg->size_class;
4216}
4217
4218static int prepare_allocation_clustered(struct btrfs_fs_info *fs_info,
4219					struct find_free_extent_ctl *ffe_ctl,
4220					struct btrfs_space_info *space_info,
4221					struct btrfs_key *ins)
4222{
4223	/*
4224	 * If our free space is heavily fragmented we may not be able to make
4225	 * big contiguous allocations, so instead of doing the expensive search
4226	 * for free space, simply return ENOSPC with our max_extent_size so we
4227	 * can go ahead and search for a more manageable chunk.
4228	 *
4229	 * If our max_extent_size is large enough for our allocation simply
4230	 * disable clustering since we will likely not be able to find enough
4231	 * space to create a cluster and induce latency trying.
4232	 */
4233	if (space_info->max_extent_size) {
4234		spin_lock(&space_info->lock);
4235		if (space_info->max_extent_size &&
4236		    ffe_ctl->num_bytes > space_info->max_extent_size) {
4237			ins->offset = space_info->max_extent_size;
4238			spin_unlock(&space_info->lock);
4239			return -ENOSPC;
4240		} else if (space_info->max_extent_size) {
4241			ffe_ctl->use_cluster = false;
4242		}
4243		spin_unlock(&space_info->lock);
4244	}
4245
4246	ffe_ctl->last_ptr = fetch_cluster_info(fs_info, space_info,
4247					       &ffe_ctl->empty_cluster);
4248	if (ffe_ctl->last_ptr) {
4249		struct btrfs_free_cluster *last_ptr = ffe_ctl->last_ptr;
4250
4251		spin_lock(&last_ptr->lock);
4252		if (last_ptr->block_group)
4253			ffe_ctl->hint_byte = last_ptr->window_start;
4254		if (last_ptr->fragmented) {
4255			/*
4256			 * We still set window_start so we can keep track of the
4257			 * last place we found an allocation to try and save
4258			 * some time.
4259			 */
4260			ffe_ctl->hint_byte = last_ptr->window_start;
4261			ffe_ctl->use_cluster = false;
4262		}
4263		spin_unlock(&last_ptr->lock);
4264	}
4265
4266	return 0;
4267}
4268
4269static int prepare_allocation_zoned(struct btrfs_fs_info *fs_info,
4270				    struct find_free_extent_ctl *ffe_ctl)
4271{
4272	if (ffe_ctl->for_treelog) {
4273		spin_lock(&fs_info->treelog_bg_lock);
4274		if (fs_info->treelog_bg)
4275			ffe_ctl->hint_byte = fs_info->treelog_bg;
4276		spin_unlock(&fs_info->treelog_bg_lock);
4277	} else if (ffe_ctl->for_data_reloc) {
4278		spin_lock(&fs_info->relocation_bg_lock);
4279		if (fs_info->data_reloc_bg)
4280			ffe_ctl->hint_byte = fs_info->data_reloc_bg;
4281		spin_unlock(&fs_info->relocation_bg_lock);
4282	} else if (ffe_ctl->flags & BTRFS_BLOCK_GROUP_DATA) {
4283		struct btrfs_block_group *block_group;
4284
4285		spin_lock(&fs_info->zone_active_bgs_lock);
4286		list_for_each_entry(block_group, &fs_info->zone_active_bgs, active_bg_list) {
4287			/*
4288			 * No lock is OK here because avail is monotinically
4289			 * decreasing, and this is just a hint.
4290			 */
4291			u64 avail = block_group->zone_capacity - block_group->alloc_offset;
4292
4293			if (block_group_bits(block_group, ffe_ctl->flags) &&
4294			    avail >= ffe_ctl->num_bytes) {
4295				ffe_ctl->hint_byte = block_group->start;
4296				break;
4297			}
4298		}
4299		spin_unlock(&fs_info->zone_active_bgs_lock);
4300	}
4301
4302	return 0;
4303}
4304
4305static int prepare_allocation(struct btrfs_fs_info *fs_info,
4306			      struct find_free_extent_ctl *ffe_ctl,
4307			      struct btrfs_space_info *space_info,
4308			      struct btrfs_key *ins)
4309{
4310	switch (ffe_ctl->policy) {
4311	case BTRFS_EXTENT_ALLOC_CLUSTERED:
4312		return prepare_allocation_clustered(fs_info, ffe_ctl,
4313						    space_info, ins);
4314	case BTRFS_EXTENT_ALLOC_ZONED:
4315		return prepare_allocation_zoned(fs_info, ffe_ctl);
4316	default:
4317		BUG();
4318	}
4319}
4320
4321/*
4322 * walks the btree of allocated extents and find a hole of a given size.
4323 * The key ins is changed to record the hole:
4324 * ins->objectid == start position
4325 * ins->flags = BTRFS_EXTENT_ITEM_KEY
4326 * ins->offset == the size of the hole.
4327 * Any available blocks before search_start are skipped.
4328 *
4329 * If there is no suitable free space, we will record the max size of
4330 * the free space extent currently.
4331 *
4332 * The overall logic and call chain:
4333 *
4334 * find_free_extent()
4335 * |- Iterate through all block groups
4336 * |  |- Get a valid block group
4337 * |  |- Try to do clustered allocation in that block group
4338 * |  |- Try to do unclustered allocation in that block group
4339 * |  |- Check if the result is valid
4340 * |  |  |- If valid, then exit
4341 * |  |- Jump to next block group
4342 * |
4343 * |- Push harder to find free extents
4344 *    |- If not found, re-iterate all block groups
4345 */
4346static noinline int find_free_extent(struct btrfs_root *root,
4347				     struct btrfs_key *ins,
4348				     struct find_free_extent_ctl *ffe_ctl)
4349{
4350	struct btrfs_fs_info *fs_info = root->fs_info;
4351	int ret = 0;
4352	int cache_block_group_error = 0;
4353	struct btrfs_block_group *block_group = NULL;
4354	struct btrfs_space_info *space_info;
4355	bool full_search = false;
4356
4357	WARN_ON(ffe_ctl->num_bytes < fs_info->sectorsize);
4358
4359	ffe_ctl->search_start = 0;
4360	/* For clustered allocation */
4361	ffe_ctl->empty_cluster = 0;
4362	ffe_ctl->last_ptr = NULL;
4363	ffe_ctl->use_cluster = true;
4364	ffe_ctl->have_caching_bg = false;
4365	ffe_ctl->orig_have_caching_bg = false;
4366	ffe_ctl->index = btrfs_bg_flags_to_raid_index(ffe_ctl->flags);
4367	ffe_ctl->loop = 0;
4368	ffe_ctl->retry_uncached = false;
4369	ffe_ctl->cached = 0;
4370	ffe_ctl->max_extent_size = 0;
4371	ffe_ctl->total_free_space = 0;
4372	ffe_ctl->found_offset = 0;
4373	ffe_ctl->policy = BTRFS_EXTENT_ALLOC_CLUSTERED;
4374	ffe_ctl->size_class = btrfs_calc_block_group_size_class(ffe_ctl->num_bytes);
4375
4376	if (btrfs_is_zoned(fs_info))
4377		ffe_ctl->policy = BTRFS_EXTENT_ALLOC_ZONED;
4378
4379	ins->type = BTRFS_EXTENT_ITEM_KEY;
4380	ins->objectid = 0;
4381	ins->offset = 0;
4382
4383	trace_find_free_extent(root, ffe_ctl);
4384
4385	space_info = btrfs_find_space_info(fs_info, ffe_ctl->flags);
4386	if (!space_info) {
4387		btrfs_err(fs_info, "No space info for %llu", ffe_ctl->flags);
4388		return -ENOSPC;
4389	}
4390
4391	ret = prepare_allocation(fs_info, ffe_ctl, space_info, ins);
4392	if (ret < 0)
4393		return ret;
4394
4395	ffe_ctl->search_start = max(ffe_ctl->search_start,
4396				    first_logical_byte(fs_info));
4397	ffe_ctl->search_start = max(ffe_ctl->search_start, ffe_ctl->hint_byte);
4398	if (ffe_ctl->search_start == ffe_ctl->hint_byte) {
4399		block_group = btrfs_lookup_block_group(fs_info,
4400						       ffe_ctl->search_start);
4401		/*
4402		 * we don't want to use the block group if it doesn't match our
4403		 * allocation bits, or if its not cached.
4404		 *
4405		 * However if we are re-searching with an ideal block group
4406		 * picked out then we don't care that the block group is cached.
4407		 */
4408		if (block_group && block_group_bits(block_group, ffe_ctl->flags) &&
4409		    block_group->cached != BTRFS_CACHE_NO) {
4410			down_read(&space_info->groups_sem);
4411			if (list_empty(&block_group->list) ||
4412			    block_group->ro) {
4413				/*
4414				 * someone is removing this block group,
4415				 * we can't jump into the have_block_group
4416				 * target because our list pointers are not
4417				 * valid
4418				 */
4419				btrfs_put_block_group(block_group);
4420				up_read(&space_info->groups_sem);
4421			} else {
4422				ffe_ctl->index = btrfs_bg_flags_to_raid_index(
4423							block_group->flags);
4424				btrfs_lock_block_group(block_group,
4425						       ffe_ctl->delalloc);
4426				ffe_ctl->hinted = true;
4427				goto have_block_group;
4428			}
4429		} else if (block_group) {
4430			btrfs_put_block_group(block_group);
4431		}
4432	}
4433search:
4434	trace_find_free_extent_search_loop(root, ffe_ctl);
4435	ffe_ctl->have_caching_bg = false;
4436	if (ffe_ctl->index == btrfs_bg_flags_to_raid_index(ffe_ctl->flags) ||
4437	    ffe_ctl->index == 0)
4438		full_search = true;
4439	down_read(&space_info->groups_sem);
4440	list_for_each_entry(block_group,
4441			    &space_info->block_groups[ffe_ctl->index], list) {
4442		struct btrfs_block_group *bg_ret;
4443
4444		ffe_ctl->hinted = false;
4445		/* If the block group is read-only, we can skip it entirely. */
4446		if (unlikely(block_group->ro)) {
4447			if (ffe_ctl->for_treelog)
4448				btrfs_clear_treelog_bg(block_group);
4449			if (ffe_ctl->for_data_reloc)
4450				btrfs_clear_data_reloc_bg(block_group);
4451			continue;
4452		}
4453
4454		btrfs_grab_block_group(block_group, ffe_ctl->delalloc);
4455		ffe_ctl->search_start = block_group->start;
4456
4457		/*
4458		 * this can happen if we end up cycling through all the
4459		 * raid types, but we want to make sure we only allocate
4460		 * for the proper type.
4461		 */
4462		if (!block_group_bits(block_group, ffe_ctl->flags)) {
4463			u64 extra = BTRFS_BLOCK_GROUP_DUP |
4464				BTRFS_BLOCK_GROUP_RAID1_MASK |
4465				BTRFS_BLOCK_GROUP_RAID56_MASK |
 
4466				BTRFS_BLOCK_GROUP_RAID10;
4467
4468			/*
4469			 * if they asked for extra copies and this block group
4470			 * doesn't provide them, bail.  This does allow us to
4471			 * fill raid0 from raid1.
4472			 */
4473			if ((ffe_ctl->flags & extra) && !(block_group->flags & extra))
4474				goto loop;
 
4475
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4476			/*
4477			 * This block group has different flags than we want.
4478			 * It's possible that we have MIXED_GROUP flag but no
4479			 * block group is mixed.  Just skip such block group.
4480			 */
4481			btrfs_release_block_group(block_group, ffe_ctl->delalloc);
4482			continue;
4483		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4484
4485have_block_group:
4486		trace_find_free_extent_have_block_group(root, ffe_ctl, block_group);
4487		ffe_ctl->cached = btrfs_block_group_done(block_group);
4488		if (unlikely(!ffe_ctl->cached)) {
4489			ffe_ctl->have_caching_bg = true;
4490			ret = btrfs_cache_block_group(block_group, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4491
4492			/*
4493			 * If we get ENOMEM here or something else we want to
4494			 * try other block groups, because it may not be fatal.
4495			 * However if we can't find anything else we need to
4496			 * save our return here so that we return the actual
4497			 * error that caused problems, not ENOSPC.
4498			 */
4499			if (ret < 0) {
4500				if (!cache_block_group_error)
4501					cache_block_group_error = ret;
4502				ret = 0;
4503				goto loop;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4504			}
4505			ret = 0;
4506		}
4507
4508		if (unlikely(block_group->cached == BTRFS_CACHE_ERROR)) {
4509			if (!cache_block_group_error)
4510				cache_block_group_error = -EIO;
 
 
 
 
 
4511			goto loop;
4512		}
4513
4514		if (!find_free_extent_check_size_class(ffe_ctl, block_group))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4515			goto loop;
 
 
4516
4517		bg_ret = NULL;
4518		ret = do_allocation(block_group, ffe_ctl, &bg_ret);
4519		if (ret > 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4520			goto loop;
4521
4522		if (bg_ret && bg_ret != block_group) {
4523			btrfs_release_block_group(block_group, ffe_ctl->delalloc);
4524			block_group = bg_ret;
4525		}
4526
4527		/* Checks */
4528		ffe_ctl->search_start = round_up(ffe_ctl->found_offset,
4529						 fs_info->stripesize);
4530
4531		/* move on to the next group */
4532		if (ffe_ctl->search_start + ffe_ctl->num_bytes >
4533		    block_group->start + block_group->length) {
4534			btrfs_add_free_space_unused(block_group,
4535					    ffe_ctl->found_offset,
4536					    ffe_ctl->num_bytes);
4537			goto loop;
4538		}
4539
4540		if (ffe_ctl->found_offset < ffe_ctl->search_start)
4541			btrfs_add_free_space_unused(block_group,
4542					ffe_ctl->found_offset,
4543					ffe_ctl->search_start - ffe_ctl->found_offset);
4544
4545		ret = btrfs_add_reserved_bytes(block_group, ffe_ctl->ram_bytes,
4546					       ffe_ctl->num_bytes,
4547					       ffe_ctl->delalloc,
4548					       ffe_ctl->loop >= LOOP_WRONG_SIZE_CLASS);
4549		if (ret == -EAGAIN) {
4550			btrfs_add_free_space_unused(block_group,
4551					ffe_ctl->found_offset,
4552					ffe_ctl->num_bytes);
4553			goto loop;
4554		}
4555		btrfs_inc_block_group_reservations(block_group);
4556
4557		/* we are all good, lets return */
4558		ins->objectid = ffe_ctl->search_start;
4559		ins->offset = ffe_ctl->num_bytes;
4560
4561		trace_btrfs_reserve_extent(block_group, ffe_ctl);
4562		btrfs_release_block_group(block_group, ffe_ctl->delalloc);
 
4563		break;
4564loop:
4565		if (!ffe_ctl->cached && ffe_ctl->loop > LOOP_CACHING_NOWAIT &&
4566		    !ffe_ctl->retry_uncached) {
4567			ffe_ctl->retry_uncached = true;
4568			btrfs_wait_block_group_cache_progress(block_group,
4569						ffe_ctl->num_bytes +
4570						ffe_ctl->empty_cluster +
4571						ffe_ctl->empty_size);
4572			goto have_block_group;
4573		}
4574		release_block_group(block_group, ffe_ctl, ffe_ctl->delalloc);
4575		cond_resched();
4576	}
4577	up_read(&space_info->groups_sem);
4578
4579	ret = find_free_extent_update_loop(fs_info, ins, ffe_ctl, full_search);
4580	if (ret > 0)
 
 
 
 
 
 
4581		goto search;
4582
4583	if (ret == -ENOSPC && !cache_block_group_error) {
4584		/*
4585		 * Use ffe_ctl->total_free_space as fallback if we can't find
4586		 * any contiguous hole.
4587		 */
4588		if (!ffe_ctl->max_extent_size)
4589			ffe_ctl->max_extent_size = ffe_ctl->total_free_space;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4590		spin_lock(&space_info->lock);
4591		space_info->max_extent_size = ffe_ctl->max_extent_size;
4592		spin_unlock(&space_info->lock);
4593		ins->offset = ffe_ctl->max_extent_size;
4594	} else if (ret == -ENOSPC) {
4595		ret = cache_block_group_error;
4596	}
4597	return ret;
4598}
4599
4600/*
4601 * Entry point to the extent allocator. Tries to find a hole that is at least
4602 * as big as @num_bytes.
4603 *
4604 * @root           -	The root that will contain this extent
4605 *
4606 * @ram_bytes      -	The amount of space in ram that @num_bytes take. This
4607 *			is used for accounting purposes. This value differs
4608 *			from @num_bytes only in the case of compressed extents.
4609 *
4610 * @num_bytes      -	Number of bytes to allocate on-disk.
4611 *
4612 * @min_alloc_size -	Indicates the minimum amount of space that the
4613 *			allocator should try to satisfy. In some cases
4614 *			@num_bytes may be larger than what is required and if
4615 *			the filesystem is fragmented then allocation fails.
4616 *			However, the presence of @min_alloc_size gives a
4617 *			chance to try and satisfy the smaller allocation.
4618 *
4619 * @empty_size     -	A hint that you plan on doing more COW. This is the
4620 *			size in bytes the allocator should try to find free
4621 *			next to the block it returns.  This is just a hint and
4622 *			may be ignored by the allocator.
4623 *
4624 * @hint_byte      -	Hint to the allocator to start searching above the byte
4625 *			address passed. It might be ignored.
4626 *
4627 * @ins            -	This key is modified to record the found hole. It will
4628 *			have the following values:
4629 *			ins->objectid == start position
4630 *			ins->flags = BTRFS_EXTENT_ITEM_KEY
4631 *			ins->offset == the size of the hole.
4632 *
4633 * @is_data        -	Boolean flag indicating whether an extent is
4634 *			allocated for data (true) or metadata (false)
4635 *
4636 * @delalloc       -	Boolean flag indicating whether this allocation is for
4637 *			delalloc or not. If 'true' data_rwsem of block groups
4638 *			is going to be acquired.
4639 *
4640 *
4641 * Returns 0 when an allocation succeeded or < 0 when an error occurred. In
4642 * case -ENOSPC is returned then @ins->offset will contain the size of the
4643 * largest available hole the allocator managed to find.
4644 */
4645int btrfs_reserve_extent(struct btrfs_root *root, u64 ram_bytes,
4646			 u64 num_bytes, u64 min_alloc_size,
4647			 u64 empty_size, u64 hint_byte,
4648			 struct btrfs_key *ins, int is_data, int delalloc)
4649{
4650	struct btrfs_fs_info *fs_info = root->fs_info;
4651	struct find_free_extent_ctl ffe_ctl = {};
4652	bool final_tried = num_bytes == min_alloc_size;
4653	u64 flags;
4654	int ret;
4655	bool for_treelog = (btrfs_root_id(root) == BTRFS_TREE_LOG_OBJECTID);
4656	bool for_data_reloc = (btrfs_is_data_reloc_root(root) && is_data);
4657
4658	flags = get_alloc_profile_by_root(root, is_data);
4659again:
4660	WARN_ON(num_bytes < fs_info->sectorsize);
 
 
4661
4662	ffe_ctl.ram_bytes = ram_bytes;
4663	ffe_ctl.num_bytes = num_bytes;
4664	ffe_ctl.min_alloc_size = min_alloc_size;
4665	ffe_ctl.empty_size = empty_size;
4666	ffe_ctl.flags = flags;
4667	ffe_ctl.delalloc = delalloc;
4668	ffe_ctl.hint_byte = hint_byte;
4669	ffe_ctl.for_treelog = for_treelog;
4670	ffe_ctl.for_data_reloc = for_data_reloc;
4671
4672	ret = find_free_extent(root, ins, &ffe_ctl);
4673	if (!ret && !is_data) {
4674		btrfs_dec_block_group_reservations(fs_info, ins->objectid);
4675	} else if (ret == -ENOSPC) {
4676		if (!final_tried && ins->offset) {
4677			num_bytes = min(num_bytes >> 1, ins->offset);
4678			num_bytes = round_down(num_bytes,
4679					       fs_info->sectorsize);
4680			num_bytes = max(num_bytes, min_alloc_size);
4681			ram_bytes = num_bytes;
4682			if (num_bytes == min_alloc_size)
4683				final_tried = true;
4684			goto again;
4685		} else if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) {
4686			struct btrfs_space_info *sinfo;
4687
4688			sinfo = btrfs_find_space_info(fs_info, flags);
4689			btrfs_err(fs_info,
4690	"allocation failed flags %llu, wanted %llu tree-log %d, relocation: %d",
4691				  flags, num_bytes, for_treelog, for_data_reloc);
4692			if (sinfo)
4693				btrfs_dump_space_info(fs_info, sinfo,
4694						      num_bytes, 1);
4695		}
4696	}
4697
4698	return ret;
4699}
4700
4701int btrfs_free_reserved_extent(struct btrfs_fs_info *fs_info,
4702			       u64 start, u64 len, int delalloc)
 
4703{
4704	struct btrfs_block_group *cache;
 
4705
4706	cache = btrfs_lookup_block_group(fs_info, start);
4707	if (!cache) {
4708		btrfs_err(fs_info, "Unable to find block group for %llu",
4709			  start);
4710		return -ENOSPC;
4711	}
4712
4713	btrfs_add_free_space(cache, start, len);
4714	btrfs_free_reserved_bytes(cache, len, delalloc);
4715	trace_btrfs_reserved_extent_free(fs_info, start, len);
 
 
 
 
 
4716
4717	btrfs_put_block_group(cache);
4718	return 0;
4719}
4720
4721int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans,
4722			      const struct extent_buffer *eb)
4723{
4724	struct btrfs_block_group *cache;
4725	int ret = 0;
4726
4727	cache = btrfs_lookup_block_group(trans->fs_info, eb->start);
4728	if (!cache) {
4729		btrfs_err(trans->fs_info, "unable to find block group for %llu",
4730			  eb->start);
4731		return -ENOSPC;
4732	}
4733
4734	ret = pin_down_extent(trans, cache, eb->start, eb->len, 1);
4735	btrfs_put_block_group(cache);
4736	return ret;
4737}
4738
4739static int alloc_reserved_extent(struct btrfs_trans_handle *trans, u64 bytenr,
4740				 u64 num_bytes)
4741{
4742	struct btrfs_fs_info *fs_info = trans->fs_info;
4743	int ret;
4744
4745	ret = remove_from_free_space_tree(trans, bytenr, num_bytes);
4746	if (ret)
4747		return ret;
4748
4749	ret = btrfs_update_block_group(trans, bytenr, num_bytes, true);
4750	if (ret) {
4751		ASSERT(!ret);
4752		btrfs_err(fs_info, "update block group failed for %llu %llu",
4753			  bytenr, num_bytes);
4754		return ret;
4755	}
4756
4757	trace_btrfs_reserved_extent_alloc(fs_info, bytenr, num_bytes);
4758	return 0;
4759}
4760
4761static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
 
4762				      u64 parent, u64 root_objectid,
4763				      u64 flags, u64 owner, u64 offset,
4764				      struct btrfs_key *ins, int ref_mod, u64 oref_root)
4765{
4766	struct btrfs_fs_info *fs_info = trans->fs_info;
4767	struct btrfs_root *extent_root;
4768	int ret;
 
4769	struct btrfs_extent_item *extent_item;
4770	struct btrfs_extent_owner_ref *oref;
4771	struct btrfs_extent_inline_ref *iref;
4772	struct btrfs_path *path;
4773	struct extent_buffer *leaf;
4774	int type;
4775	u32 size;
4776	const bool simple_quota = (btrfs_qgroup_mode(fs_info) == BTRFS_QGROUP_MODE_SIMPLE);
4777
4778	if (parent > 0)
4779		type = BTRFS_SHARED_DATA_REF_KEY;
4780	else
4781		type = BTRFS_EXTENT_DATA_REF_KEY;
4782
4783	size = sizeof(*extent_item);
4784	if (simple_quota)
4785		size += btrfs_extent_inline_ref_size(BTRFS_EXTENT_OWNER_REF_KEY);
4786	size += btrfs_extent_inline_ref_size(type);
4787
4788	path = btrfs_alloc_path();
4789	if (!path)
4790		return -ENOMEM;
4791
4792	extent_root = btrfs_extent_root(fs_info, ins->objectid);
4793	ret = btrfs_insert_empty_item(trans, extent_root, path, ins, size);
 
4794	if (ret) {
4795		btrfs_free_path(path);
4796		return ret;
4797	}
4798
4799	leaf = path->nodes[0];
4800	extent_item = btrfs_item_ptr(leaf, path->slots[0],
4801				     struct btrfs_extent_item);
4802	btrfs_set_extent_refs(leaf, extent_item, ref_mod);
4803	btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4804	btrfs_set_extent_flags(leaf, extent_item,
4805			       flags | BTRFS_EXTENT_FLAG_DATA);
4806
4807	iref = (struct btrfs_extent_inline_ref *)(extent_item + 1);
4808	if (simple_quota) {
4809		btrfs_set_extent_inline_ref_type(leaf, iref, BTRFS_EXTENT_OWNER_REF_KEY);
4810		oref = (struct btrfs_extent_owner_ref *)(&iref->offset);
4811		btrfs_set_extent_owner_ref_root_id(leaf, oref, oref_root);
4812		iref = (struct btrfs_extent_inline_ref *)(oref + 1);
4813	}
4814	btrfs_set_extent_inline_ref_type(leaf, iref, type);
4815
4816	if (parent > 0) {
4817		struct btrfs_shared_data_ref *ref;
4818		ref = (struct btrfs_shared_data_ref *)(iref + 1);
4819		btrfs_set_extent_inline_ref_offset(leaf, iref, parent);
4820		btrfs_set_shared_data_ref_count(leaf, ref, ref_mod);
4821	} else {
4822		struct btrfs_extent_data_ref *ref;
4823		ref = (struct btrfs_extent_data_ref *)(&iref->offset);
4824		btrfs_set_extent_data_ref_root(leaf, ref, root_objectid);
4825		btrfs_set_extent_data_ref_objectid(leaf, ref, owner);
4826		btrfs_set_extent_data_ref_offset(leaf, ref, offset);
4827		btrfs_set_extent_data_ref_count(leaf, ref, ref_mod);
4828	}
4829
4830	btrfs_mark_buffer_dirty(trans, path->nodes[0]);
4831	btrfs_free_path(path);
4832
4833	return alloc_reserved_extent(trans, ins->objectid, ins->offset);
 
 
 
 
 
 
 
 
 
 
 
 
4834}
4835
4836static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4837				     struct btrfs_delayed_ref_node *node,
4838				     struct btrfs_delayed_extent_op *extent_op)
 
 
4839{
4840	struct btrfs_fs_info *fs_info = trans->fs_info;
4841	struct btrfs_root *extent_root;
4842	int ret;
 
4843	struct btrfs_extent_item *extent_item;
4844	struct btrfs_key extent_key;
4845	struct btrfs_tree_block_info *block_info;
4846	struct btrfs_extent_inline_ref *iref;
4847	struct btrfs_path *path;
4848	struct extent_buffer *leaf;
4849	u32 size = sizeof(*extent_item) + sizeof(*iref);
4850	const u64 flags = (extent_op ? extent_op->flags_to_set : 0);
4851	/* The owner of a tree block is the level. */
4852	int level = btrfs_delayed_ref_owner(node);
4853	bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
4854
4855	extent_key.objectid = node->bytenr;
4856	if (skinny_metadata) {
4857		/* The owner of a tree block is the level. */
4858		extent_key.offset = level;
4859		extent_key.type = BTRFS_METADATA_ITEM_KEY;
4860	} else {
4861		extent_key.offset = node->num_bytes;
4862		extent_key.type = BTRFS_EXTENT_ITEM_KEY;
4863		size += sizeof(*block_info);
4864	}
4865
4866	path = btrfs_alloc_path();
4867	if (!path)
 
 
4868		return -ENOMEM;
 
4869
4870	extent_root = btrfs_extent_root(fs_info, extent_key.objectid);
4871	ret = btrfs_insert_empty_item(trans, extent_root, path, &extent_key,
4872				      size);
4873	if (ret) {
4874		btrfs_free_path(path);
 
 
4875		return ret;
4876	}
4877
4878	leaf = path->nodes[0];
4879	extent_item = btrfs_item_ptr(leaf, path->slots[0],
4880				     struct btrfs_extent_item);
4881	btrfs_set_extent_refs(leaf, extent_item, 1);
4882	btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4883	btrfs_set_extent_flags(leaf, extent_item,
4884			       flags | BTRFS_EXTENT_FLAG_TREE_BLOCK);
4885
4886	if (skinny_metadata) {
4887		iref = (struct btrfs_extent_inline_ref *)(extent_item + 1);
 
4888	} else {
4889		block_info = (struct btrfs_tree_block_info *)(extent_item + 1);
4890		btrfs_set_tree_block_key(leaf, block_info, &extent_op->key);
4891		btrfs_set_tree_block_level(leaf, block_info, level);
4892		iref = (struct btrfs_extent_inline_ref *)(block_info + 1);
4893	}
4894
4895	if (node->type == BTRFS_SHARED_BLOCK_REF_KEY) {
 
4896		btrfs_set_extent_inline_ref_type(leaf, iref,
4897						 BTRFS_SHARED_BLOCK_REF_KEY);
4898		btrfs_set_extent_inline_ref_offset(leaf, iref, node->parent);
4899	} else {
4900		btrfs_set_extent_inline_ref_type(leaf, iref,
4901						 BTRFS_TREE_BLOCK_REF_KEY);
4902		btrfs_set_extent_inline_ref_offset(leaf, iref, node->ref_root);
4903	}
4904
4905	btrfs_mark_buffer_dirty(trans, leaf);
4906	btrfs_free_path(path);
4907
4908	return alloc_reserved_extent(trans, node->bytenr, fs_info->nodesize);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4909}
4910
4911int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4912				     struct btrfs_root *root, u64 owner,
 
4913				     u64 offset, u64 ram_bytes,
4914				     struct btrfs_key *ins)
4915{
4916	struct btrfs_ref generic_ref = {
4917		.action = BTRFS_ADD_DELAYED_EXTENT,
4918		.bytenr = ins->objectid,
4919		.num_bytes = ins->offset,
4920		.owning_root = btrfs_root_id(root),
4921		.ref_root = btrfs_root_id(root),
4922	};
4923
4924	ASSERT(generic_ref.ref_root != BTRFS_TREE_LOG_OBJECTID);
4925
4926	if (btrfs_is_data_reloc_root(root) && is_fstree(root->relocation_src_root))
4927		generic_ref.owning_root = root->relocation_src_root;
4928
4929	btrfs_init_data_ref(&generic_ref, owner, offset, 0, false);
4930	btrfs_ref_tree_mod(root->fs_info, &generic_ref);
4931
4932	return btrfs_add_delayed_data_ref(trans, &generic_ref, ram_bytes);
4933}
4934
4935/*
4936 * this is used by the tree logging recovery code.  It records that
4937 * an extent has been allocated and makes sure to clear the free
4938 * space cache bits as well
4939 */
4940int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
 
4941				   u64 root_objectid, u64 owner, u64 offset,
4942				   struct btrfs_key *ins)
4943{
4944	struct btrfs_fs_info *fs_info = trans->fs_info;
4945	int ret;
4946	struct btrfs_block_group *block_group;
4947	struct btrfs_space_info *space_info;
4948	struct btrfs_squota_delta delta = {
4949		.root = root_objectid,
4950		.num_bytes = ins->offset,
4951		.generation = trans->transid,
4952		.is_data = true,
4953		.is_inc = true,
4954	};
4955
4956	/*
4957	 * Mixed block groups will exclude before processing the log so we only
4958	 * need to do the exclude dance if this fs isn't mixed.
4959	 */
4960	if (!btrfs_fs_incompat(fs_info, MIXED_GROUPS)) {
4961		ret = __exclude_logged_extent(fs_info, ins->objectid,
4962					      ins->offset);
4963		if (ret)
4964			return ret;
4965	}
4966
4967	block_group = btrfs_lookup_block_group(fs_info, ins->objectid);
4968	if (!block_group)
4969		return -EINVAL;
4970
4971	space_info = block_group->space_info;
4972	spin_lock(&space_info->lock);
4973	spin_lock(&block_group->lock);
4974	space_info->bytes_reserved += ins->offset;
4975	block_group->reserved += ins->offset;
4976	spin_unlock(&block_group->lock);
4977	spin_unlock(&space_info->lock);
4978
4979	ret = alloc_reserved_file_extent(trans, 0, root_objectid, 0, owner,
4980					 offset, ins, 1, root_objectid);
4981	if (ret)
4982		btrfs_pin_extent(trans, ins->objectid, ins->offset, 1);
4983	ret = btrfs_record_squota_delta(fs_info, &delta);
4984	btrfs_put_block_group(block_group);
4985	return ret;
4986}
4987
4988#ifdef CONFIG_BTRFS_DEBUG
4989/*
4990 * Extra safety check in case the extent tree is corrupted and extent allocator
4991 * chooses to use a tree block which is already used and locked.
4992 */
4993static bool check_eb_lock_owner(const struct extent_buffer *eb)
4994{
4995	if (eb->lock_owner == current->pid) {
4996		btrfs_err_rl(eb->fs_info,
4997"tree block %llu owner %llu already locked by pid=%d, extent tree corruption detected",
4998			     eb->start, btrfs_header_owner(eb), current->pid);
4999		return true;
5000	}
5001	return false;
5002}
5003#else
5004static bool check_eb_lock_owner(struct extent_buffer *eb)
5005{
5006	return false;
5007}
5008#endif
5009
5010static struct extent_buffer *
5011btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
5012		      u64 bytenr, int level, u64 owner,
5013		      enum btrfs_lock_nesting nest)
5014{
5015	struct btrfs_fs_info *fs_info = root->fs_info;
5016	struct extent_buffer *buf;
5017	u64 lockdep_owner = owner;
5018
5019	buf = btrfs_find_create_tree_block(fs_info, bytenr, owner, level);
5020	if (IS_ERR(buf))
5021		return buf;
5022
5023	if (check_eb_lock_owner(buf)) {
5024		free_extent_buffer(buf);
5025		return ERR_PTR(-EUCLEAN);
5026	}
5027
5028	/*
5029	 * The reloc trees are just snapshots, so we need them to appear to be
5030	 * just like any other fs tree WRT lockdep.
5031	 *
5032	 * The exception however is in replace_path() in relocation, where we
5033	 * hold the lock on the original fs root and then search for the reloc
5034	 * root.  At that point we need to make sure any reloc root buffers are
5035	 * set to the BTRFS_TREE_RELOC_OBJECTID lockdep class in order to make
5036	 * lockdep happy.
5037	 */
5038	if (lockdep_owner == BTRFS_TREE_RELOC_OBJECTID &&
5039	    !test_bit(BTRFS_ROOT_RESET_LOCKDEP_CLASS, &root->state))
5040		lockdep_owner = BTRFS_FS_TREE_OBJECTID;
5041
5042	/* btrfs_clear_buffer_dirty() accesses generation field. */
 
 
5043	btrfs_set_header_generation(buf, trans->transid);
5044
5045	/*
5046	 * This needs to stay, because we could allocate a freed block from an
5047	 * old tree into a new tree, so we need to make sure this new block is
5048	 * set to the appropriate level and owner.
5049	 */
5050	btrfs_set_buffer_lockdep_class(lockdep_owner, buf, level);
5051
5052	btrfs_tree_lock_nested(buf, nest);
5053	btrfs_clear_buffer_dirty(trans, buf);
5054	clear_bit(EXTENT_BUFFER_STALE, &buf->bflags);
5055	clear_bit(EXTENT_BUFFER_ZONED_ZEROOUT, &buf->bflags);
5056
 
5057	set_extent_buffer_uptodate(buf);
5058
5059	memzero_extent_buffer(buf, 0, sizeof(struct btrfs_header));
5060	btrfs_set_header_level(buf, level);
5061	btrfs_set_header_bytenr(buf, buf->start);
5062	btrfs_set_header_generation(buf, trans->transid);
5063	btrfs_set_header_backref_rev(buf, BTRFS_MIXED_BACKREF_REV);
5064	btrfs_set_header_owner(buf, owner);
5065	write_extent_buffer_fsid(buf, fs_info->fs_devices->metadata_uuid);
5066	write_extent_buffer_chunk_tree_uuid(buf, fs_info->chunk_tree_uuid);
5067	if (btrfs_root_id(root) == BTRFS_TREE_LOG_OBJECTID) {
5068		buf->log_index = root->log_transid % 2;
5069		/*
5070		 * we allow two log transactions at a time, use different
5071		 * EXTENT bit to differentiate dirty pages.
5072		 */
5073		if (buf->log_index == 0)
5074			set_extent_bit(&root->dirty_log_pages, buf->start,
5075				       buf->start + buf->len - 1,
5076				       EXTENT_DIRTY, NULL);
5077		else
5078			set_extent_bit(&root->dirty_log_pages, buf->start,
5079				       buf->start + buf->len - 1,
5080				       EXTENT_NEW, NULL);
5081	} else {
5082		buf->log_index = -1;
5083		set_extent_bit(&trans->transaction->dirty_pages, buf->start,
5084			       buf->start + buf->len - 1, EXTENT_DIRTY, NULL);
5085	}
 
5086	/* this returns a buffer locked for blocking */
5087	return buf;
5088}
5089
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5090/*
5091 * finds a free extent and does all the dirty work required for allocation
5092 * returns the tree buffer or an ERR_PTR on error.
5093 */
5094struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
5095					     struct btrfs_root *root,
5096					     u64 parent, u64 root_objectid,
5097					     const struct btrfs_disk_key *key,
5098					     int level, u64 hint,
5099					     u64 empty_size,
5100					     u64 reloc_src_root,
5101					     enum btrfs_lock_nesting nest)
5102{
5103	struct btrfs_fs_info *fs_info = root->fs_info;
5104	struct btrfs_key ins;
5105	struct btrfs_block_rsv *block_rsv;
5106	struct extent_buffer *buf;
 
5107	u64 flags = 0;
5108	int ret;
5109	u32 blocksize = fs_info->nodesize;
5110	bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
5111	u64 owning_root;
5112
5113#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
5114	if (btrfs_is_testing(fs_info)) {
5115		buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr,
5116					    level, root_objectid, nest);
5117		if (!IS_ERR(buf))
5118			root->alloc_bytenr += blocksize;
5119		return buf;
5120	}
5121#endif
5122
5123	block_rsv = btrfs_use_block_rsv(trans, root, blocksize);
5124	if (IS_ERR(block_rsv))
5125		return ERR_CAST(block_rsv);
5126
5127	ret = btrfs_reserve_extent(root, blocksize, blocksize, blocksize,
5128				   empty_size, hint, &ins, 0, 0);
5129	if (ret)
5130		goto out_unuse;
5131
5132	buf = btrfs_init_new_buffer(trans, root, ins.objectid, level,
5133				    root_objectid, nest);
5134	if (IS_ERR(buf)) {
5135		ret = PTR_ERR(buf);
5136		goto out_free_reserved;
5137	}
5138	owning_root = btrfs_header_owner(buf);
5139
5140	if (root_objectid == BTRFS_TREE_RELOC_OBJECTID) {
5141		if (parent == 0)
5142			parent = ins.objectid;
5143		flags |= BTRFS_BLOCK_FLAG_FULL_BACKREF;
5144		owning_root = reloc_src_root;
5145	} else
5146		BUG_ON(parent > 0);
5147
5148	if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
5149		struct btrfs_delayed_extent_op *extent_op;
5150		struct btrfs_ref generic_ref = {
5151			.action = BTRFS_ADD_DELAYED_EXTENT,
5152			.bytenr = ins.objectid,
5153			.num_bytes = ins.offset,
5154			.parent = parent,
5155			.owning_root = owning_root,
5156			.ref_root = root_objectid,
5157		};
5158
5159		if (!skinny_metadata || flags != 0) {
5160			extent_op = btrfs_alloc_delayed_extent_op();
5161			if (!extent_op) {
5162				ret = -ENOMEM;
5163				goto out_free_buf;
5164			}
5165			if (key)
5166				memcpy(&extent_op->key, key, sizeof(extent_op->key));
5167			else
5168				memset(&extent_op->key, 0, sizeof(extent_op->key));
5169			extent_op->flags_to_set = flags;
5170			extent_op->update_key = (skinny_metadata ? false : true);
5171			extent_op->update_flags = (flags != 0);
5172		} else {
5173			extent_op = NULL;
5174		}
5175
5176		btrfs_init_tree_ref(&generic_ref, level, btrfs_root_id(root), false);
5177		btrfs_ref_tree_mod(fs_info, &generic_ref);
5178		ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, extent_op);
5179		if (ret) {
5180			btrfs_free_delayed_extent_op(extent_op);
5181			goto out_free_buf;
5182		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5183	}
5184	return buf;
5185
 
 
5186out_free_buf:
5187	btrfs_tree_unlock(buf);
5188	free_extent_buffer(buf);
5189out_free_reserved:
5190	btrfs_free_reserved_extent(fs_info, ins.objectid, ins.offset, 0);
5191out_unuse:
5192	btrfs_unuse_block_rsv(fs_info, block_rsv, blocksize);
5193	return ERR_PTR(ret);
5194}
5195
5196struct walk_control {
5197	u64 refs[BTRFS_MAX_LEVEL];
5198	u64 flags[BTRFS_MAX_LEVEL];
5199	struct btrfs_key update_progress;
5200	struct btrfs_key drop_progress;
5201	int drop_level;
5202	int stage;
5203	int level;
5204	int shared_level;
5205	int update_ref;
5206	int keep_locks;
5207	int reada_slot;
5208	int reada_count;
5209	int restarted;
5210	/* Indicate that extent info needs to be looked up when walking the tree. */
5211	int lookup_info;
5212};
5213
5214/*
5215 * This is our normal stage.  We are traversing blocks the current snapshot owns
5216 * and we are dropping any of our references to any children we are able to, and
5217 * then freeing the block once we've processed all of the children.
5218 */
5219#define DROP_REFERENCE	1
5220
5221/*
5222 * We enter this stage when we have to walk into a child block (meaning we can't
5223 * simply drop our reference to it from our current parent node) and there are
5224 * more than one reference on it.  If we are the owner of any of the children
5225 * blocks from the current parent node then we have to do the FULL_BACKREF dance
5226 * on them in order to drop our normal ref and add the shared ref.
5227 */
5228#define UPDATE_BACKREF	2
5229
5230/*
5231 * Decide if we need to walk down into this node to adjust the references.
5232 *
5233 * @root:	the root we are currently deleting
5234 * @wc:		the walk control for this deletion
5235 * @eb:		the parent eb that we're currently visiting
5236 * @refs:	the number of refs for wc->level - 1
5237 * @flags:	the flags for wc->level - 1
5238 * @slot:	the slot in the eb that we're currently checking
5239 *
5240 * This is meant to be called when we're evaluating if a node we point to at
5241 * wc->level should be read and walked into, or if we can simply delete our
5242 * reference to it.  We return true if we should walk into the node, false if we
5243 * can skip it.
5244 *
5245 * We have assertions in here to make sure this is called correctly.  We assume
5246 * that sanity checking on the blocks read to this point has been done, so any
5247 * corrupted file systems must have been caught before calling this function.
5248 */
5249static bool visit_node_for_delete(struct btrfs_root *root, struct walk_control *wc,
5250				  struct extent_buffer *eb, u64 flags, int slot)
5251{
5252	struct btrfs_key key;
5253	u64 generation;
5254	int level = wc->level;
5255
5256	ASSERT(level > 0);
5257	ASSERT(wc->refs[level - 1] > 0);
5258
5259	/*
5260	 * The update backref stage we only want to skip if we already have
5261	 * FULL_BACKREF set, otherwise we need to read.
5262	 */
5263	if (wc->stage == UPDATE_BACKREF) {
5264		if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)
5265			return false;
5266		return true;
5267	}
5268
5269	/*
5270	 * We're the last ref on this block, we must walk into it and process
5271	 * any refs it's pointing at.
5272	 */
5273	if (wc->refs[level - 1] == 1)
5274		return true;
5275
5276	/*
5277	 * If we're already FULL_BACKREF then we know we can just drop our
5278	 * current reference.
5279	 */
5280	if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF)
5281		return false;
5282
5283	/*
5284	 * This block is older than our creation generation, we can drop our
5285	 * reference to it.
5286	 */
5287	generation = btrfs_node_ptr_generation(eb, slot);
5288	if (!wc->update_ref || generation <= btrfs_root_origin_generation(root))
5289		return false;
5290
5291	/*
5292	 * This block was processed from a previous snapshot deletion run, we
5293	 * can skip it.
5294	 */
5295	btrfs_node_key_to_cpu(eb, &key, slot);
5296	if (btrfs_comp_cpu_keys(&key, &wc->update_progress) < 0)
5297		return false;
5298
5299	/* All other cases we need to wander into the node. */
5300	return true;
5301}
5302
5303static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
5304				     struct btrfs_root *root,
5305				     struct walk_control *wc,
5306				     struct btrfs_path *path)
5307{
5308	struct btrfs_fs_info *fs_info = root->fs_info;
5309	u64 bytenr;
5310	u64 generation;
5311	u64 refs;
5312	u64 flags;
5313	u32 nritems;
 
 
5314	struct extent_buffer *eb;
5315	int ret;
5316	int slot;
5317	int nread = 0;
5318
5319	if (path->slots[wc->level] < wc->reada_slot) {
5320		wc->reada_count = wc->reada_count * 2 / 3;
5321		wc->reada_count = max(wc->reada_count, 2);
5322	} else {
5323		wc->reada_count = wc->reada_count * 3 / 2;
5324		wc->reada_count = min_t(int, wc->reada_count,
5325					BTRFS_NODEPTRS_PER_BLOCK(fs_info));
5326	}
5327
5328	eb = path->nodes[wc->level];
5329	nritems = btrfs_header_nritems(eb);
 
5330
5331	for (slot = path->slots[wc->level]; slot < nritems; slot++) {
5332		if (nread >= wc->reada_count)
5333			break;
5334
5335		cond_resched();
5336		bytenr = btrfs_node_blockptr(eb, slot);
5337		generation = btrfs_node_ptr_generation(eb, slot);
5338
5339		if (slot == path->slots[wc->level])
5340			goto reada;
5341
5342		if (wc->stage == UPDATE_BACKREF &&
5343		    generation <= btrfs_root_origin_generation(root))
5344			continue;
5345
5346		/* We don't lock the tree block, it's OK to be racy here */
5347		ret = btrfs_lookup_extent_info(trans, fs_info, bytenr,
5348					       wc->level - 1, 1, &refs,
5349					       &flags, NULL);
5350		/* We don't care about errors in readahead. */
5351		if (ret < 0)
5352			continue;
 
5353
5354		/*
5355		 * This could be racey, it's conceivable that we raced and end
5356		 * up with a bogus refs count, if that's the case just skip, if
5357		 * we are actually corrupt we will notice when we look up
5358		 * everything again with our locks.
5359		 */
5360		if (refs == 0)
5361			continue;
5362
5363		/* If we don't need to visit this node don't reada. */
5364		if (!visit_node_for_delete(root, wc, eb, flags, slot))
5365			continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
5366reada:
5367		btrfs_readahead_node_child(eb, slot);
5368		nread++;
5369	}
5370	wc->reada_slot = slot;
5371}
5372
5373/*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5374 * helper to process tree block while walking down the tree.
5375 *
5376 * when wc->stage == UPDATE_BACKREF, this function updates
5377 * back refs for pointers in the block.
5378 *
5379 * NOTE: return value 1 means we should stop walking down.
5380 */
5381static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
5382				   struct btrfs_root *root,
5383				   struct btrfs_path *path,
5384				   struct walk_control *wc)
5385{
5386	struct btrfs_fs_info *fs_info = root->fs_info;
5387	int level = wc->level;
5388	struct extent_buffer *eb = path->nodes[level];
5389	u64 flag = BTRFS_BLOCK_FLAG_FULL_BACKREF;
5390	int ret;
5391
5392	if (wc->stage == UPDATE_BACKREF && btrfs_header_owner(eb) != btrfs_root_id(root))
 
5393		return 1;
5394
5395	/*
5396	 * when reference count of tree block is 1, it won't increase
5397	 * again. once full backref flag is set, we never clear it.
5398	 */
5399	if (wc->lookup_info &&
5400	    ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
5401	     (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
5402		ASSERT(path->locks[level]);
5403		ret = btrfs_lookup_extent_info(trans, fs_info,
5404					       eb->start, level, 1,
5405					       &wc->refs[level],
5406					       &wc->flags[level],
5407					       NULL);
5408		if (ret)
5409			return ret;
5410		if (unlikely(wc->refs[level] == 0)) {
5411			btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
5412				  eb->start);
5413			return -EUCLEAN;
5414		}
5415	}
5416
5417	if (wc->stage == DROP_REFERENCE) {
5418		if (wc->refs[level] > 1)
5419			return 1;
5420
5421		if (path->locks[level] && !wc->keep_locks) {
5422			btrfs_tree_unlock_rw(eb, path->locks[level]);
5423			path->locks[level] = 0;
5424		}
5425		return 0;
5426	}
5427
5428	/* wc->stage == UPDATE_BACKREF */
5429	if (!(wc->flags[level] & flag)) {
5430		ASSERT(path->locks[level]);
5431		ret = btrfs_inc_ref(trans, root, eb, 1);
5432		if (ret) {
5433			btrfs_abort_transaction(trans, ret);
5434			return ret;
5435		}
5436		ret = btrfs_dec_ref(trans, root, eb, 0);
5437		if (ret) {
5438			btrfs_abort_transaction(trans, ret);
5439			return ret;
5440		}
5441		ret = btrfs_set_disk_extent_flags(trans, eb, flag);
5442		if (ret) {
5443			btrfs_abort_transaction(trans, ret);
5444			return ret;
5445		}
5446		wc->flags[level] |= flag;
5447	}
5448
5449	/*
5450	 * the block is shared by multiple trees, so it's not good to
5451	 * keep the tree lock
5452	 */
5453	if (path->locks[level] && level > 0) {
5454		btrfs_tree_unlock_rw(eb, path->locks[level]);
5455		path->locks[level] = 0;
5456	}
5457	return 0;
5458}
5459
5460/*
5461 * This is used to verify a ref exists for this root to deal with a bug where we
5462 * would have a drop_progress key that hadn't been updated properly.
5463 */
5464static int check_ref_exists(struct btrfs_trans_handle *trans,
5465			    struct btrfs_root *root, u64 bytenr, u64 parent,
5466			    int level)
5467{
5468	struct btrfs_delayed_ref_root *delayed_refs;
5469	struct btrfs_delayed_ref_head *head;
5470	struct btrfs_path *path;
5471	struct btrfs_extent_inline_ref *iref;
5472	int ret;
5473	bool exists = false;
5474
5475	path = btrfs_alloc_path();
5476	if (!path)
5477		return -ENOMEM;
5478again:
5479	ret = lookup_extent_backref(trans, path, &iref, bytenr,
5480				    root->fs_info->nodesize, parent,
5481				    btrfs_root_id(root), level, 0);
5482	if (ret != -ENOENT) {
5483		/*
5484		 * If we get 0 then we found our reference, return 1, else
5485		 * return the error if it's not -ENOENT;
5486		 */
5487		btrfs_free_path(path);
5488		return (ret < 0 ) ? ret : 1;
5489	}
5490
5491	/*
5492	 * We could have a delayed ref with this reference, so look it up while
5493	 * we're holding the path open to make sure we don't race with the
5494	 * delayed ref running.
5495	 */
5496	delayed_refs = &trans->transaction->delayed_refs;
5497	spin_lock(&delayed_refs->lock);
5498	head = btrfs_find_delayed_ref_head(root->fs_info, delayed_refs, bytenr);
5499	if (!head)
5500		goto out;
5501	if (!mutex_trylock(&head->mutex)) {
5502		/*
5503		 * We're contended, means that the delayed ref is running, get a
5504		 * reference and wait for the ref head to be complete and then
5505		 * try again.
5506		 */
5507		refcount_inc(&head->refs);
5508		spin_unlock(&delayed_refs->lock);
5509
5510		btrfs_release_path(path);
5511
5512		mutex_lock(&head->mutex);
5513		mutex_unlock(&head->mutex);
5514		btrfs_put_delayed_ref_head(head);
5515		goto again;
5516	}
5517
5518	exists = btrfs_find_delayed_tree_ref(head, root->root_key.objectid, parent);
5519	mutex_unlock(&head->mutex);
5520out:
5521	spin_unlock(&delayed_refs->lock);
5522	btrfs_free_path(path);
5523	return exists ? 1 : 0;
5524}
5525
5526/*
5527 * We may not have an uptodate block, so if we are going to walk down into this
5528 * block we need to drop the lock, read it off of the disk, re-lock it and
5529 * return to continue dropping the snapshot.
5530 */
5531static int check_next_block_uptodate(struct btrfs_trans_handle *trans,
5532				     struct btrfs_root *root,
5533				     struct btrfs_path *path,
5534				     struct walk_control *wc,
5535				     struct extent_buffer *next)
5536{
5537	struct btrfs_tree_parent_check check = { 0 };
5538	u64 generation;
5539	int level = wc->level;
5540	int ret;
5541
5542	btrfs_assert_tree_write_locked(next);
5543
5544	generation = btrfs_node_ptr_generation(path->nodes[level], path->slots[level]);
5545
5546	if (btrfs_buffer_uptodate(next, generation, 0))
5547		return 0;
5548
5549	check.level = level - 1;
5550	check.transid = generation;
5551	check.owner_root = btrfs_root_id(root);
5552	check.has_first_key = true;
5553	btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, path->slots[level]);
5554
5555	btrfs_tree_unlock(next);
5556	if (level == 1)
5557		reada_walk_down(trans, root, wc, path);
5558	ret = btrfs_read_extent_buffer(next, &check);
5559	if (ret) {
5560		free_extent_buffer(next);
5561		return ret;
5562	}
5563	btrfs_tree_lock(next);
5564	wc->lookup_info = 1;
5565	return 0;
5566}
5567
5568/*
5569 * If we determine that we don't have to visit wc->level - 1 then we need to
5570 * determine if we can drop our reference.
5571 *
5572 * If we are UPDATE_BACKREF then we will not, we need to update our backrefs.
5573 *
5574 * If we are DROP_REFERENCE this will figure out if we need to drop our current
5575 * reference, skipping it if we dropped it from a previous incompleted drop, or
5576 * dropping it if we still have a reference to it.
5577 */
5578static int maybe_drop_reference(struct btrfs_trans_handle *trans, struct btrfs_root *root,
5579				struct btrfs_path *path, struct walk_control *wc,
5580				struct extent_buffer *next, u64 owner_root)
5581{
5582	struct btrfs_ref ref = {
5583		.action = BTRFS_DROP_DELAYED_REF,
5584		.bytenr = next->start,
5585		.num_bytes = root->fs_info->nodesize,
5586		.owning_root = owner_root,
5587		.ref_root = btrfs_root_id(root),
5588	};
5589	int level = wc->level;
5590	int ret;
5591
5592	/* We are UPDATE_BACKREF, we're not dropping anything. */
5593	if (wc->stage == UPDATE_BACKREF)
5594		return 0;
5595
5596	if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) {
5597		ref.parent = path->nodes[level]->start;
5598	} else {
5599		ASSERT(btrfs_root_id(root) == btrfs_header_owner(path->nodes[level]));
5600		if (btrfs_root_id(root) != btrfs_header_owner(path->nodes[level])) {
5601			btrfs_err(root->fs_info, "mismatched block owner");
5602			return -EIO;
5603		}
5604	}
5605
5606	/*
5607	 * If we had a drop_progress we need to verify the refs are set as
5608	 * expected.  If we find our ref then we know that from here on out
5609	 * everything should be correct, and we can clear the
5610	 * ->restarted flag.
5611	 */
5612	if (wc->restarted) {
5613		ret = check_ref_exists(trans, root, next->start, ref.parent,
5614				       level - 1);
5615		if (ret <= 0)
5616			return ret;
5617		ret = 0;
5618		wc->restarted = 0;
5619	}
5620
5621	/*
5622	 * Reloc tree doesn't contribute to qgroup numbers, and we have already
5623	 * accounted them at merge time (replace_path), thus we could skip
5624	 * expensive subtree trace here.
5625	 */
5626	if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID &&
5627	    wc->refs[level - 1] > 1) {
5628		u64 generation = btrfs_node_ptr_generation(path->nodes[level],
5629							   path->slots[level]);
5630
5631		ret = btrfs_qgroup_trace_subtree(trans, next, generation, level - 1);
5632		if (ret) {
5633			btrfs_err_rl(root->fs_info,
5634"error %d accounting shared subtree, quota is out of sync, rescan required",
5635				     ret);
5636		}
5637	}
5638
5639	/*
5640	 * We need to update the next key in our walk control so we can update
5641	 * the drop_progress key accordingly.  We don't care if find_next_key
5642	 * doesn't find a key because that means we're at the end and are going
5643	 * to clean up now.
5644	 */
5645	wc->drop_level = level;
5646	find_next_key(path, level, &wc->drop_progress);
5647
5648	btrfs_init_tree_ref(&ref, level - 1, 0, false);
5649	return btrfs_free_extent(trans, &ref);
5650}
5651
5652/*
5653 * helper to process tree block pointer.
5654 *
5655 * when wc->stage == DROP_REFERENCE, this function checks
5656 * reference count of the block pointed to. if the block
5657 * is shared and we need update back refs for the subtree
5658 * rooted at the block, this function changes wc->stage to
5659 * UPDATE_BACKREF. if the block is shared and there is no
5660 * need to update back, this function drops the reference
5661 * to the block.
5662 *
5663 * NOTE: return value 1 means we should stop walking down.
5664 */
5665static noinline int do_walk_down(struct btrfs_trans_handle *trans,
5666				 struct btrfs_root *root,
5667				 struct btrfs_path *path,
5668				 struct walk_control *wc)
5669{
5670	struct btrfs_fs_info *fs_info = root->fs_info;
5671	u64 bytenr;
5672	u64 generation;
5673	u64 owner_root = 0;
 
 
5674	struct extent_buffer *next;
5675	int level = wc->level;
 
5676	int ret = 0;
 
5677
5678	generation = btrfs_node_ptr_generation(path->nodes[level],
5679					       path->slots[level]);
5680	/*
5681	 * if the lower level block was created before the snapshot
5682	 * was created, we know there is no need to update back refs
5683	 * for the subtree
5684	 */
5685	if (wc->stage == UPDATE_BACKREF &&
5686	    generation <= btrfs_root_origin_generation(root)) {
5687		wc->lookup_info = 1;
5688		return 1;
5689	}
5690
5691	bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]);
 
5692
5693	next = btrfs_find_create_tree_block(fs_info, bytenr, btrfs_root_id(root),
5694					    level - 1);
5695	if (IS_ERR(next))
5696		return PTR_ERR(next);
5697
 
 
 
 
5698	btrfs_tree_lock(next);
 
5699
5700	ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1,
5701				       &wc->refs[level - 1],
5702				       &wc->flags[level - 1],
5703				       &owner_root);
5704	if (ret < 0)
5705		goto out_unlock;
 
5706
5707	if (unlikely(wc->refs[level - 1] == 0)) {
5708		btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
5709			  bytenr);
5710		ret = -EUCLEAN;
5711		goto out_unlock;
5712	}
5713	wc->lookup_info = 0;
5714
5715	/* If we don't have to walk into this node skip it. */
5716	if (!visit_node_for_delete(root, wc, path->nodes[level],
5717				   wc->flags[level - 1], path->slots[level]))
5718		goto skip;
 
 
 
 
 
 
 
 
 
 
 
 
5719
5720	/*
5721	 * We have to walk down into this node, and if we're currently at the
5722	 * DROP_REFERNCE stage and this block is shared then we need to switch
5723	 * to the UPDATE_BACKREF stage in order to convert to FULL_BACKREF.
5724	 */
5725	if (wc->stage == DROP_REFERENCE && wc->refs[level - 1] > 1) {
5726		wc->stage = UPDATE_BACKREF;
5727		wc->shared_level = level - 1;
 
 
 
 
 
 
5728	}
5729
5730	ret = check_next_block_uptodate(trans, root, path, wc, next);
5731	if (ret)
5732		return ret;
 
 
 
 
 
 
 
 
 
 
5733
5734	level--;
5735	ASSERT(level == btrfs_header_level(next));
5736	if (level != btrfs_header_level(next)) {
5737		btrfs_err(root->fs_info, "mismatched level");
5738		ret = -EIO;
5739		goto out_unlock;
5740	}
5741	path->nodes[level] = next;
5742	path->slots[level] = 0;
5743	path->locks[level] = BTRFS_WRITE_LOCK;
5744	wc->level = level;
5745	if (wc->level == 1)
5746		wc->reada_slot = 0;
5747	return 0;
5748skip:
5749	ret = maybe_drop_reference(trans, root, path, wc, next, owner_root);
5750	if (ret)
5751		goto out_unlock;
5752	wc->refs[level - 1] = 0;
5753	wc->flags[level - 1] = 0;
5754	wc->lookup_info = 1;
5755	ret = 1;
 
 
 
 
 
 
5756
5757out_unlock:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5758	btrfs_tree_unlock(next);
5759	free_extent_buffer(next);
5760
5761	return ret;
5762}
5763
5764/*
5765 * helper to process tree block while walking up the tree.
5766 *
5767 * when wc->stage == DROP_REFERENCE, this function drops
5768 * reference count on the block.
5769 *
5770 * when wc->stage == UPDATE_BACKREF, this function changes
5771 * wc->stage back to DROP_REFERENCE if we changed wc->stage
5772 * to UPDATE_BACKREF previously while processing the block.
5773 *
5774 * NOTE: return value 1 means we should stop walking up.
5775 */
5776static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
5777				 struct btrfs_root *root,
5778				 struct btrfs_path *path,
5779				 struct walk_control *wc)
5780{
5781	struct btrfs_fs_info *fs_info = root->fs_info;
5782	int ret = 0;
5783	int level = wc->level;
5784	struct extent_buffer *eb = path->nodes[level];
5785	u64 parent = 0;
5786
5787	if (wc->stage == UPDATE_BACKREF) {
5788		ASSERT(wc->shared_level >= level);
5789		if (level < wc->shared_level)
5790			goto out;
5791
5792		ret = find_next_key(path, level + 1, &wc->update_progress);
5793		if (ret > 0)
5794			wc->update_ref = 0;
5795
5796		wc->stage = DROP_REFERENCE;
5797		wc->shared_level = -1;
5798		path->slots[level] = 0;
5799
5800		/*
5801		 * check reference count again if the block isn't locked.
5802		 * we should start walking down the tree again if reference
5803		 * count is one.
5804		 */
5805		if (!path->locks[level]) {
5806			ASSERT(level > 0);
5807			btrfs_tree_lock(eb);
5808			path->locks[level] = BTRFS_WRITE_LOCK;
 
5809
5810			ret = btrfs_lookup_extent_info(trans, fs_info,
5811						       eb->start, level, 1,
5812						       &wc->refs[level],
5813						       &wc->flags[level],
5814						       NULL);
5815			if (ret < 0) {
5816				btrfs_tree_unlock_rw(eb, path->locks[level]);
5817				path->locks[level] = 0;
5818				return ret;
5819			}
5820			if (unlikely(wc->refs[level] == 0)) {
5821				btrfs_tree_unlock_rw(eb, path->locks[level]);
5822				btrfs_err(fs_info, "bytenr %llu has 0 references, expect > 0",
5823					  eb->start);
5824				return -EUCLEAN;
5825			}
5826			if (wc->refs[level] == 1) {
5827				btrfs_tree_unlock_rw(eb, path->locks[level]);
5828				path->locks[level] = 0;
5829				return 1;
5830			}
5831		}
5832	}
5833
5834	/* wc->stage == DROP_REFERENCE */
5835	ASSERT(path->locks[level] || wc->refs[level] == 1);
5836
5837	if (wc->refs[level] == 1) {
5838		if (level == 0) {
5839			if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
5840				ret = btrfs_dec_ref(trans, root, eb, 1);
5841			else
5842				ret = btrfs_dec_ref(trans, root, eb, 0);
 
 
5843			if (ret) {
5844				btrfs_abort_transaction(trans, ret);
5845				return ret;
5846			}
5847			if (is_fstree(btrfs_root_id(root))) {
5848				ret = btrfs_qgroup_trace_leaf_items(trans, eb);
5849				if (ret) {
5850					btrfs_err_rl(fs_info,
5851	"error %d accounting leaf items, quota is out of sync, rescan required",
5852					     ret);
5853				}
5854			}
5855		}
5856		/* Make block locked assertion in btrfs_clear_buffer_dirty happy. */
5857		if (!path->locks[level]) {
 
5858			btrfs_tree_lock(eb);
5859			path->locks[level] = BTRFS_WRITE_LOCK;
 
5860		}
5861		btrfs_clear_buffer_dirty(trans, eb);
5862	}
5863
5864	if (eb == root->node) {
5865		if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
5866			parent = eb->start;
5867		else if (btrfs_root_id(root) != btrfs_header_owner(eb))
5868			goto owner_mismatch;
 
5869	} else {
5870		if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF)
5871			parent = path->nodes[level + 1]->start;
5872		else if (btrfs_root_id(root) !=
5873			 btrfs_header_owner(path->nodes[level + 1]))
5874			goto owner_mismatch;
5875	}
5876
5877	ret = btrfs_free_tree_block(trans, btrfs_root_id(root), eb, parent,
5878				    wc->refs[level] == 1);
5879	if (ret < 0)
5880		btrfs_abort_transaction(trans, ret);
5881out:
5882	wc->refs[level] = 0;
5883	wc->flags[level] = 0;
5884	return ret;
5885
5886owner_mismatch:
5887	btrfs_err_rl(fs_info, "unexpected tree owner, have %llu expect %llu",
5888		     btrfs_header_owner(eb), btrfs_root_id(root));
5889	return -EUCLEAN;
5890}
5891
5892/*
5893 * walk_down_tree consists of two steps.
5894 *
5895 * walk_down_proc().  Look up the reference count and reference of our current
5896 * wc->level.  At this point path->nodes[wc->level] should be populated and
5897 * uptodate, and in most cases should already be locked.  If we are in
5898 * DROP_REFERENCE and our refcount is > 1 then we've entered a shared node and
5899 * we can walk back up the tree.  If we are UPDATE_BACKREF we have to set
5900 * FULL_BACKREF on this node if it's not already set, and then do the
5901 * FULL_BACKREF conversion dance, which is to drop the root reference and add
5902 * the shared reference to all of this nodes children.
5903 *
5904 * do_walk_down().  This is where we actually start iterating on the children of
5905 * our current path->nodes[wc->level].  For DROP_REFERENCE that means dropping
5906 * our reference to the children that return false from visit_node_for_delete(),
5907 * which has various conditions where we know we can just drop our reference
5908 * without visiting the node.  For UPDATE_BACKREF we will skip any children that
5909 * visit_node_for_delete() returns false for, only walking down when necessary.
5910 * The bulk of the work for UPDATE_BACKREF occurs in the walk_up_tree() part of
5911 * snapshot deletion.
5912 */
5913static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
5914				   struct btrfs_root *root,
5915				   struct btrfs_path *path,
5916				   struct walk_control *wc)
5917{
5918	int level = wc->level;
5919	int ret = 0;
 
5920
5921	wc->lookup_info = 1;
5922	while (level >= 0) {
5923		ret = walk_down_proc(trans, root, path, wc);
5924		if (ret)
5925			break;
5926
5927		if (level == 0)
5928			break;
5929
5930		if (path->slots[level] >=
5931		    btrfs_header_nritems(path->nodes[level]))
5932			break;
5933
5934		ret = do_walk_down(trans, root, path, wc);
5935		if (ret > 0) {
5936			path->slots[level]++;
5937			continue;
5938		} else if (ret < 0)
5939			break;
5940		level = wc->level;
5941	}
5942	return (ret == 1) ? 0 : ret;
5943}
5944
5945/*
5946 * walk_up_tree() is responsible for making sure we visit every slot on our
5947 * current node, and if we're at the end of that node then we call
5948 * walk_up_proc() on our current node which will do one of a few things based on
5949 * our stage.
5950 *
5951 * UPDATE_BACKREF.  If we wc->level is currently less than our wc->shared_level
5952 * then we need to walk back up the tree, and then going back down into the
5953 * other slots via walk_down_tree to update any other children from our original
5954 * wc->shared_level.  Once we're at or above our wc->shared_level we can switch
5955 * back to DROP_REFERENCE, lookup the current nodes refs and flags, and carry on.
5956 *
5957 * DROP_REFERENCE. If our refs == 1 then we're going to free this tree block.
5958 * If we're level 0 then we need to btrfs_dec_ref() on all of the data extents
5959 * in our current leaf.  After that we call btrfs_free_tree_block() on the
5960 * current node and walk up to the next node to walk down the next slot.
5961 */
5962static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
5963				 struct btrfs_root *root,
5964				 struct btrfs_path *path,
5965				 struct walk_control *wc, int max_level)
5966{
5967	int level = wc->level;
5968	int ret;
5969
5970	path->slots[level] = btrfs_header_nritems(path->nodes[level]);
5971	while (level < max_level && path->nodes[level]) {
5972		wc->level = level;
5973		if (path->slots[level] + 1 <
5974		    btrfs_header_nritems(path->nodes[level])) {
5975			path->slots[level]++;
5976			return 0;
5977		} else {
5978			ret = walk_up_proc(trans, root, path, wc);
5979			if (ret > 0)
5980				return 0;
5981			if (ret < 0)
5982				return ret;
5983
5984			if (path->locks[level]) {
5985				btrfs_tree_unlock_rw(path->nodes[level],
5986						     path->locks[level]);
5987				path->locks[level] = 0;
5988			}
5989			free_extent_buffer(path->nodes[level]);
5990			path->nodes[level] = NULL;
5991			level++;
5992		}
5993	}
5994	return 1;
5995}
5996
5997/*
5998 * drop a subvolume tree.
5999 *
6000 * this function traverses the tree freeing any blocks that only
6001 * referenced by the tree.
6002 *
6003 * when a shared tree block is found. this function decreases its
6004 * reference count by one. if update_ref is true, this function
6005 * also make sure backrefs for the shared block and all lower level
6006 * blocks are properly updated.
6007 *
6008 * If called with for_reloc == 0, may exit early with -EAGAIN
6009 */
6010int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
 
 
6011{
6012	const bool is_reloc_root = (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID);
6013	struct btrfs_fs_info *fs_info = root->fs_info;
6014	struct btrfs_path *path;
6015	struct btrfs_trans_handle *trans;
6016	struct btrfs_root *tree_root = fs_info->tree_root;
6017	struct btrfs_root_item *root_item = &root->root_item;
6018	struct walk_control *wc;
6019	struct btrfs_key key;
6020	const u64 rootid = btrfs_root_id(root);
6021	int ret = 0;
6022	int level;
6023	bool root_dropped = false;
6024	bool unfinished_drop = false;
6025
6026	btrfs_debug(fs_info, "Drop subvolume %llu", btrfs_root_id(root));
6027
6028	path = btrfs_alloc_path();
6029	if (!path) {
6030		ret = -ENOMEM;
6031		goto out;
6032	}
6033
6034	wc = kzalloc(sizeof(*wc), GFP_NOFS);
6035	if (!wc) {
6036		btrfs_free_path(path);
6037		ret = -ENOMEM;
6038		goto out;
6039	}
6040
6041	/*
6042	 * Use join to avoid potential EINTR from transaction start. See
6043	 * wait_reserve_ticket and the whole reservation callchain.
6044	 */
6045	if (for_reloc)
6046		trans = btrfs_join_transaction(tree_root);
6047	else
6048		trans = btrfs_start_transaction(tree_root, 0);
6049	if (IS_ERR(trans)) {
6050		ret = PTR_ERR(trans);
6051		goto out_free;
6052	}
6053
6054	ret = btrfs_run_delayed_items(trans);
6055	if (ret)
6056		goto out_end_trans;
6057
6058	/*
6059	 * This will help us catch people modifying the fs tree while we're
6060	 * dropping it.  It is unsafe to mess with the fs tree while it's being
6061	 * dropped as we unlock the root node and parent nodes as we walk down
6062	 * the tree, assuming nothing will change.  If something does change
6063	 * then we'll have stale information and drop references to blocks we've
6064	 * already dropped.
6065	 */
6066	set_bit(BTRFS_ROOT_DELETING, &root->state);
6067	unfinished_drop = test_bit(BTRFS_ROOT_UNFINISHED_DROP, &root->state);
6068
6069	if (btrfs_disk_key_objectid(&root_item->drop_progress) == 0) {
6070		level = btrfs_header_level(root->node);
6071		path->nodes[level] = btrfs_lock_root_node(root);
 
6072		path->slots[level] = 0;
6073		path->locks[level] = BTRFS_WRITE_LOCK;
6074		memset(&wc->update_progress, 0,
6075		       sizeof(wc->update_progress));
6076	} else {
6077		btrfs_disk_key_to_cpu(&key, &root_item->drop_progress);
6078		memcpy(&wc->update_progress, &key,
6079		       sizeof(wc->update_progress));
6080
6081		level = btrfs_root_drop_level(root_item);
6082		BUG_ON(level == 0);
6083		path->lowest_level = level;
6084		ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
6085		path->lowest_level = 0;
6086		if (ret < 0)
 
6087			goto out_end_trans;
6088
6089		WARN_ON(ret > 0);
6090		ret = 0;
6091
6092		/*
6093		 * unlock our path, this is safe because only this
6094		 * function is allowed to delete this snapshot
6095		 */
6096		btrfs_unlock_up_safe(path, 0);
6097
6098		level = btrfs_header_level(root->node);
6099		while (1) {
6100			btrfs_tree_lock(path->nodes[level]);
6101			path->locks[level] = BTRFS_WRITE_LOCK;
 
6102
6103			/*
6104			 * btrfs_lookup_extent_info() returns 0 for success,
6105			 * or < 0 for error.
6106			 */
6107			ret = btrfs_lookup_extent_info(trans, fs_info,
6108						path->nodes[level]->start,
6109						level, 1, &wc->refs[level],
6110						&wc->flags[level], NULL);
6111			if (ret < 0)
 
6112				goto out_end_trans;
6113
6114			BUG_ON(wc->refs[level] == 0);
6115
6116			if (level == btrfs_root_drop_level(root_item))
6117				break;
6118
6119			btrfs_tree_unlock(path->nodes[level]);
6120			path->locks[level] = 0;
6121			WARN_ON(wc->refs[level] != 1);
6122			level--;
6123		}
6124	}
6125
6126	wc->restarted = test_bit(BTRFS_ROOT_DEAD_TREE, &root->state);
6127	wc->level = level;
6128	wc->shared_level = -1;
6129	wc->stage = DROP_REFERENCE;
6130	wc->update_ref = update_ref;
6131	wc->keep_locks = 0;
6132	wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info);
 
6133
6134	while (1) {
6135
6136		ret = walk_down_tree(trans, root, path, wc);
6137		if (ret < 0) {
6138			btrfs_abort_transaction(trans, ret);
6139			break;
6140		}
6141
6142		ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL);
6143		if (ret < 0) {
6144			btrfs_abort_transaction(trans, ret);
6145			break;
6146		}
6147
6148		if (ret > 0) {
6149			BUG_ON(wc->stage != DROP_REFERENCE);
6150			ret = 0;
6151			break;
6152		}
6153
6154		if (wc->stage == DROP_REFERENCE) {
6155			wc->drop_level = wc->level;
6156			btrfs_node_key_to_cpu(path->nodes[wc->drop_level],
6157					      &wc->drop_progress,
6158					      path->slots[wc->drop_level]);
6159		}
6160		btrfs_cpu_key_to_disk(&root_item->drop_progress,
6161				      &wc->drop_progress);
6162		btrfs_set_root_drop_level(root_item, wc->drop_level);
6163
6164		BUG_ON(wc->level == 0);
6165		if (btrfs_should_end_transaction(trans) ||
6166		    (!for_reloc && btrfs_need_cleaner_sleep(fs_info))) {
6167			ret = btrfs_update_root(trans, tree_root,
6168						&root->root_key,
6169						root_item);
6170			if (ret) {
6171				btrfs_abort_transaction(trans, ret);
 
6172				goto out_end_trans;
6173			}
6174
6175			if (!is_reloc_root)
6176				btrfs_set_last_root_drop_gen(fs_info, trans->transid);
6177
6178			btrfs_end_transaction_throttle(trans);
6179			if (!for_reloc && btrfs_need_cleaner_sleep(fs_info)) {
6180				btrfs_debug(fs_info,
6181					    "drop snapshot early exit");
6182				ret = -EAGAIN;
6183				goto out_free;
6184			}
6185
6186		       /*
6187			* Use join to avoid potential EINTR from transaction
6188			* start. See wait_reserve_ticket and the whole
6189			* reservation callchain.
6190			*/
6191			if (for_reloc)
6192				trans = btrfs_join_transaction(tree_root);
6193			else
6194				trans = btrfs_start_transaction(tree_root, 0);
6195			if (IS_ERR(trans)) {
6196				ret = PTR_ERR(trans);
6197				goto out_free;
6198			}
 
 
6199		}
6200	}
6201	btrfs_release_path(path);
6202	if (ret)
6203		goto out_end_trans;
6204
6205	ret = btrfs_del_root(trans, &root->root_key);
6206	if (ret) {
6207		btrfs_abort_transaction(trans, ret);
6208		goto out_end_trans;
6209	}
6210
6211	if (!is_reloc_root) {
6212		ret = btrfs_find_root(tree_root, &root->root_key, path,
6213				      NULL, NULL);
6214		if (ret < 0) {
6215			btrfs_abort_transaction(trans, ret);
 
6216			goto out_end_trans;
6217		} else if (ret > 0) {
6218			ret = 0;
6219			/*
6220			 * If we fail to delete the orphan item this time
6221			 * around, it'll get picked up the next time.
6222			 *
6223			 * The most common failure here is just -ENOENT.
6224			 */
6225			btrfs_del_orphan_item(trans, tree_root, btrfs_root_id(root));
 
6226		}
6227	}
6228
6229	/*
6230	 * This subvolume is going to be completely dropped, and won't be
6231	 * recorded as dirty roots, thus pertrans meta rsv will not be freed at
6232	 * commit transaction time.  So free it here manually.
6233	 */
6234	btrfs_qgroup_convert_reserved_meta(root, INT_MAX);
6235	btrfs_qgroup_free_meta_all_pertrans(root);
6236
6237	if (test_bit(BTRFS_ROOT_IN_RADIX, &root->state))
6238		btrfs_add_dropped_root(trans, root);
6239	else
6240		btrfs_put_root(root);
 
 
 
6241	root_dropped = true;
6242out_end_trans:
6243	if (!is_reloc_root)
6244		btrfs_set_last_root_drop_gen(fs_info, trans->transid);
6245
6246	btrfs_end_transaction_throttle(trans);
6247out_free:
6248	kfree(wc);
6249	btrfs_free_path(path);
6250out:
6251	if (!ret && root_dropped) {
6252		ret = btrfs_qgroup_cleanup_dropped_subvolume(fs_info, rootid);
6253		if (ret < 0)
6254			btrfs_warn_rl(fs_info,
6255				      "failed to cleanup qgroup 0/%llu: %d",
6256				      rootid, ret);
6257		ret = 0;
6258	}
6259	/*
6260	 * We were an unfinished drop root, check to see if there are any
6261	 * pending, and if not clear and wake up any waiters.
6262	 */
6263	if (!ret && unfinished_drop)
6264		btrfs_maybe_wake_unfinished_drop(fs_info);
6265
6266	/*
6267	 * So if we need to stop dropping the snapshot for whatever reason we
6268	 * need to make sure to add it back to the dead root list so that we
6269	 * keep trying to do the work later.  This also cleans up roots if we
6270	 * don't have it in the radix (like when we recover after a power fail
6271	 * or unmount) so we don't leak memory.
6272	 */
6273	if (!for_reloc && !root_dropped)
6274		btrfs_add_dead_root(root);
6275	return ret;
 
 
6276}
6277
6278/*
6279 * drop subtree rooted at tree block 'node'.
6280 *
6281 * NOTE: this function will unlock and release tree block 'node'
6282 * only used by relocation code
6283 */
6284int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
6285			struct btrfs_root *root,
6286			struct extent_buffer *node,
6287			struct extent_buffer *parent)
6288{
6289	struct btrfs_fs_info *fs_info = root->fs_info;
6290	struct btrfs_path *path;
6291	struct walk_control *wc;
6292	int level;
6293	int parent_level;
6294	int ret = 0;
 
6295
6296	BUG_ON(btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID);
6297
6298	path = btrfs_alloc_path();
6299	if (!path)
6300		return -ENOMEM;
6301
6302	wc = kzalloc(sizeof(*wc), GFP_NOFS);
6303	if (!wc) {
6304		btrfs_free_path(path);
6305		return -ENOMEM;
6306	}
6307
6308	btrfs_assert_tree_write_locked(parent);
6309	parent_level = btrfs_header_level(parent);
6310	atomic_inc(&parent->refs);
6311	path->nodes[parent_level] = parent;
6312	path->slots[parent_level] = btrfs_header_nritems(parent);
6313
6314	btrfs_assert_tree_write_locked(node);
6315	level = btrfs_header_level(node);
6316	path->nodes[level] = node;
6317	path->slots[level] = 0;
6318	path->locks[level] = BTRFS_WRITE_LOCK;
6319
6320	wc->refs[parent_level] = 1;
6321	wc->flags[parent_level] = BTRFS_BLOCK_FLAG_FULL_BACKREF;
6322	wc->level = level;
6323	wc->shared_level = -1;
6324	wc->stage = DROP_REFERENCE;
6325	wc->update_ref = 0;
6326	wc->keep_locks = 1;
6327	wc->reada_count = BTRFS_NODEPTRS_PER_BLOCK(fs_info);
 
6328
6329	while (1) {
6330		ret = walk_down_tree(trans, root, path, wc);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6331		if (ret < 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6332			break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6333
6334		ret = walk_up_tree(trans, root, path, wc, parent_level);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6335		if (ret) {
6336			if (ret > 0)
6337				ret = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6338			break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6339		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6340	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6341
6342	kfree(wc);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6343	btrfs_free_path(path);
6344	return ret;
6345}
6346
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6347/*
6348 * Unpin the extent range in an error context and don't add the space back.
6349 * Errors are not propagated further.
6350 */
6351void btrfs_error_unpin_extent_range(struct btrfs_fs_info *fs_info, u64 start, u64 end)
6352{
6353	unpin_extent_range(fs_info, start, end, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6354}
6355
6356/*
6357 * It used to be that old block groups would be left around forever.
6358 * Iterating over them would be enough to trim unused space.  Since we
6359 * now automatically remove them, we also need to iterate over unallocated
6360 * space.
6361 *
6362 * We don't want a transaction for this since the discard may take a
6363 * substantial amount of time.  We don't require that a transaction be
6364 * running, but we do need to take a running transaction into account
6365 * to ensure that we're not discarding chunks that were released or
6366 * allocated in the current transaction.
6367 *
6368 * Holding the chunks lock will prevent other threads from allocating
6369 * or releasing chunks, but it won't prevent a running transaction
6370 * from committing and releasing the memory that the pending chunks
6371 * list head uses.  For that, we need to take a reference to the
6372 * transaction and hold the commit root sem.  We only need to hold
6373 * it while performing the free space search since we have already
6374 * held back allocations.
6375 */
6376static int btrfs_trim_free_extents(struct btrfs_device *device, u64 *trimmed)
 
6377{
6378	u64 start = BTRFS_DEVICE_RANGE_RESERVED, len = 0, end = 0;
6379	int ret;
6380
6381	*trimmed = 0;
6382
6383	/* Discard not supported = nothing to do. */
6384	if (!bdev_max_discard_sectors(device->bdev))
6385		return 0;
6386
6387	/* Not writable = nothing to do. */
6388	if (!test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state))
6389		return 0;
6390
6391	/* No free space = nothing to do. */
6392	if (device->total_bytes <= device->bytes_used)
6393		return 0;
6394
6395	ret = 0;
6396
6397	while (1) {
6398		struct btrfs_fs_info *fs_info = device->fs_info;
 
6399		u64 bytes;
6400
6401		ret = mutex_lock_interruptible(&fs_info->chunk_mutex);
6402		if (ret)
6403			break;
6404
6405		find_first_clear_extent_bit(&device->alloc_state, start,
6406					    &start, &end,
6407					    CHUNK_TRIMMED | CHUNK_ALLOCATED);
6408
6409		/* Check if there are any CHUNK_* bits left */
6410		if (start > device->total_bytes) {
6411			WARN_ON(IS_ENABLED(CONFIG_BTRFS_DEBUG));
6412			btrfs_warn_in_rcu(fs_info,
6413"ignoring attempt to trim beyond device size: offset %llu length %llu device %s device size %llu",
6414					  start, end - start + 1,
6415					  btrfs_dev_name(device),
6416					  device->total_bytes);
6417			mutex_unlock(&fs_info->chunk_mutex);
6418			ret = 0;
6419			break;
6420		}
6421
6422		/* Ensure we skip the reserved space on each device. */
6423		start = max_t(u64, start, BTRFS_DEVICE_RANGE_RESERVED);
6424
6425		/*
6426		 * If find_first_clear_extent_bit find a range that spans the
6427		 * end of the device it will set end to -1, in this case it's up
6428		 * to the caller to trim the value to the size of the device.
6429		 */
6430		end = min(end, device->total_bytes - 1);
 
 
 
 
6431
6432		len = end - start + 1;
6433
6434		/* We didn't find any extents */
6435		if (!len) {
6436			mutex_unlock(&fs_info->chunk_mutex);
6437			ret = 0;
 
6438			break;
6439		}
6440
6441		ret = btrfs_issue_discard(device->bdev, start, len,
6442					  &bytes);
6443		if (!ret)
6444			set_extent_bit(&device->alloc_state, start,
6445				       start + bytes - 1, CHUNK_TRIMMED, NULL);
6446		mutex_unlock(&fs_info->chunk_mutex);
6447
6448		if (ret)
6449			break;
6450
6451		start += len;
6452		*trimmed += bytes;
6453
6454		if (btrfs_trim_interrupted()) {
6455			ret = -ERESTARTSYS;
6456			break;
6457		}
6458
6459		cond_resched();
6460	}
6461
6462	return ret;
6463}
6464
6465/*
6466 * Trim the whole filesystem by:
6467 * 1) trimming the free space in each block group
6468 * 2) trimming the unallocated space on each device
6469 *
6470 * This will also continue trimming even if a block group or device encounters
6471 * an error.  The return value will be the last error, or 0 if nothing bad
6472 * happens.
6473 */
6474int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range)
6475{
6476	struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
6477	struct btrfs_block_group *cache = NULL;
6478	struct btrfs_device *device;
 
6479	u64 group_trimmed;
6480	u64 range_end = U64_MAX;
6481	u64 start;
6482	u64 end;
6483	u64 trimmed = 0;
6484	u64 bg_failed = 0;
6485	u64 dev_failed = 0;
6486	int bg_ret = 0;
6487	int dev_ret = 0;
6488	int ret = 0;
6489
6490	if (range->start == U64_MAX)
6491		return -EINVAL;
6492
6493	/*
6494	 * Check range overflow if range->len is set.
6495	 * The default range->len is U64_MAX.
6496	 */
6497	if (range->len != U64_MAX &&
6498	    check_add_overflow(range->start, range->len, &range_end))
6499		return -EINVAL;
 
6500
6501	cache = btrfs_lookup_first_block_group(fs_info, range->start);
6502	for (; cache; cache = btrfs_next_block_group(cache)) {
6503		if (cache->start >= range_end) {
6504			btrfs_put_block_group(cache);
6505			break;
6506		}
6507
6508		start = max(range->start, cache->start);
6509		end = min(range_end, cache->start + cache->length);
 
6510
6511		if (end - start >= range->minlen) {
6512			if (!btrfs_block_group_done(cache)) {
6513				ret = btrfs_cache_block_group(cache, true);
6514				if (ret) {
6515					bg_failed++;
6516					bg_ret = ret;
6517					continue;
 
 
 
 
6518				}
6519			}
6520			ret = btrfs_trim_block_group(cache,
6521						     &group_trimmed,
6522						     start,
6523						     end,
6524						     range->minlen);
6525
6526			trimmed += group_trimmed;
6527			if (ret) {
6528				bg_failed++;
6529				bg_ret = ret;
6530				continue;
6531			}
6532		}
 
 
6533	}
6534
6535	if (bg_failed)
6536		btrfs_warn(fs_info,
6537			"failed to trim %llu block group(s), last error %d",
6538			bg_failed, bg_ret);
6539
6540	mutex_lock(&fs_devices->device_list_mutex);
6541	list_for_each_entry(device, &fs_devices->devices, dev_list) {
6542		if (test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state))
6543			continue;
6544
6545		ret = btrfs_trim_free_extents(device, &group_trimmed);
6546
6547		trimmed += group_trimmed;
6548		if (ret) {
6549			dev_failed++;
6550			dev_ret = ret;
6551			break;
6552		}
6553	}
6554	mutex_unlock(&fs_devices->device_list_mutex);
6555
6556	if (dev_failed)
6557		btrfs_warn(fs_info,
6558			"failed to trim %llu device(s), last error %d",
6559			dev_failed, dev_ret);
6560	range->len = trimmed;
6561	if (bg_ret)
6562		return bg_ret;
6563	return dev_ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6564}