linux/fs/btrfs/delayed-ref.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2009 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
  19#include <linux/sched.h>
  20#include <linux/slab.h>
  21#include <linux/sort.h>
  22#include "ctree.h"
  23#include "delayed-ref.h"
  24#include "transaction.h"
  25
  26struct kmem_cache *btrfs_delayed_ref_head_cachep;
  27struct kmem_cache *btrfs_delayed_tree_ref_cachep;
  28struct kmem_cache *btrfs_delayed_data_ref_cachep;
  29struct kmem_cache *btrfs_delayed_extent_op_cachep;
  30/*
  31 * delayed back reference update tracking.  For subvolume trees
  32 * we queue up extent allocations and backref maintenance for
  33 * delayed processing.   This avoids deep call chains where we
  34 * add extents in the middle of btrfs_search_slot, and it allows
  35 * us to buffer up frequently modified backrefs in an rb tree instead
  36 * of hammering updates on the extent allocation tree.
  37 */
  38
  39/*
  40 * compare two delayed tree backrefs with same bytenr and type
  41 */
  42static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2,
  43                          struct btrfs_delayed_tree_ref *ref1, int type)
  44{
  45        if (type == BTRFS_TREE_BLOCK_REF_KEY) {
  46                if (ref1->root < ref2->root)
  47                        return -1;
  48                if (ref1->root > ref2->root)
  49                        return 1;
  50        } else {
  51                if (ref1->parent < ref2->parent)
  52                        return -1;
  53                if (ref1->parent > ref2->parent)
  54                        return 1;
  55        }
  56        return 0;
  57}
  58
  59/*
  60 * compare two delayed data backrefs with same bytenr and type
  61 */
  62static int comp_data_refs(struct btrfs_delayed_data_ref *ref2,
  63                          struct btrfs_delayed_data_ref *ref1)
  64{
  65        if (ref1->node.type == BTRFS_EXTENT_DATA_REF_KEY) {
  66                if (ref1->root < ref2->root)
  67                        return -1;
  68                if (ref1->root > ref2->root)
  69                        return 1;
  70                if (ref1->objectid < ref2->objectid)
  71                        return -1;
  72                if (ref1->objectid > ref2->objectid)
  73                        return 1;
  74                if (ref1->offset < ref2->offset)
  75                        return -1;
  76                if (ref1->offset > ref2->offset)
  77                        return 1;
  78        } else {
  79                if (ref1->parent < ref2->parent)
  80                        return -1;
  81                if (ref1->parent > ref2->parent)
  82                        return 1;
  83        }
  84        return 0;
  85}
  86
  87/*
  88 * entries in the rb tree are ordered by the byte number of the extent,
  89 * type of the delayed backrefs and content of delayed backrefs.
  90 */
  91static int comp_entry(struct btrfs_delayed_ref_node *ref2,
  92                      struct btrfs_delayed_ref_node *ref1,
  93                      bool compare_seq)
  94{
  95        if (ref1->bytenr < ref2->bytenr)
  96                return -1;
  97        if (ref1->bytenr > ref2->bytenr)
  98                return 1;
  99        if (ref1->is_head && ref2->is_head)
 100                return 0;
 101        if (ref2->is_head)
 102                return -1;
 103        if (ref1->is_head)
 104                return 1;
 105        if (ref1->type < ref2->type)
 106                return -1;
 107        if (ref1->type > ref2->type)
 108                return 1;
 109        if (ref1->no_quota > ref2->no_quota)
 110                return 1;
 111        if (ref1->no_quota < ref2->no_quota)
 112                return -1;
 113        /* merging of sequenced refs is not allowed */
 114        if (compare_seq) {
 115                if (ref1->seq < ref2->seq)
 116                        return -1;
 117                if (ref1->seq > ref2->seq)
 118                        return 1;
 119        }
 120        if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY ||
 121            ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) {
 122                return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2),
 123                                      btrfs_delayed_node_to_tree_ref(ref1),
 124                                      ref1->type);
 125        } else if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY ||
 126                   ref1->type == BTRFS_SHARED_DATA_REF_KEY) {
 127                return comp_data_refs(btrfs_delayed_node_to_data_ref(ref2),
 128                                      btrfs_delayed_node_to_data_ref(ref1));
 129        }
 130        BUG();
 131        return 0;
 132}
 133
 134/*
 135 * insert a new ref into the rbtree.  This returns any existing refs
 136 * for the same (bytenr,parent) tuple, or NULL if the new node was properly
 137 * inserted.
 138 */
 139static struct btrfs_delayed_ref_node *tree_insert(struct rb_root *root,
 140                                                  struct rb_node *node)
 141{
 142        struct rb_node **p = &root->rb_node;
 143        struct rb_node *parent_node = NULL;
 144        struct btrfs_delayed_ref_node *entry;
 145        struct btrfs_delayed_ref_node *ins;
 146        int cmp;
 147
 148        ins = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
 149        while (*p) {
 150                parent_node = *p;
 151                entry = rb_entry(parent_node, struct btrfs_delayed_ref_node,
 152                                 rb_node);
 153
 154                cmp = comp_entry(entry, ins, 1);
 155                if (cmp < 0)
 156                        p = &(*p)->rb_left;
 157                else if (cmp > 0)
 158                        p = &(*p)->rb_right;
 159                else
 160                        return entry;
 161        }
 162
 163        rb_link_node(node, parent_node, p);
 164        rb_insert_color(node, root);
 165        return NULL;
 166}
 167
 168/* insert a new ref to head ref rbtree */
 169static struct btrfs_delayed_ref_head *htree_insert(struct rb_root *root,
 170                                                   struct rb_node *node)
 171{
 172        struct rb_node **p = &root->rb_node;
 173        struct rb_node *parent_node = NULL;
 174        struct btrfs_delayed_ref_head *entry;
 175        struct btrfs_delayed_ref_head *ins;
 176        u64 bytenr;
 177
 178        ins = rb_entry(node, struct btrfs_delayed_ref_head, href_node);
 179        bytenr = ins->node.bytenr;
 180        while (*p) {
 181                parent_node = *p;
 182                entry = rb_entry(parent_node, struct btrfs_delayed_ref_head,
 183                                 href_node);
 184
 185                if (bytenr < entry->node.bytenr)
 186                        p = &(*p)->rb_left;
 187                else if (bytenr > entry->node.bytenr)
 188                        p = &(*p)->rb_right;
 189                else
 190                        return entry;
 191        }
 192
 193        rb_link_node(node, parent_node, p);
 194        rb_insert_color(node, root);
 195        return NULL;
 196}
 197
 198/*
 199 * find an head entry based on bytenr. This returns the delayed ref
 200 * head if it was able to find one, or NULL if nothing was in that spot.
 201 * If return_bigger is given, the next bigger entry is returned if no exact
 202 * match is found.
 203 */
 204static struct btrfs_delayed_ref_head *
 205find_ref_head(struct rb_root *root, u64 bytenr,
 206              int return_bigger)
 207{
 208        struct rb_node *n;
 209        struct btrfs_delayed_ref_head *entry;
 210
 211        n = root->rb_node;
 212        entry = NULL;
 213        while (n) {
 214                entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node);
 215
 216                if (bytenr < entry->node.bytenr)
 217                        n = n->rb_left;
 218                else if (bytenr > entry->node.bytenr)
 219                        n = n->rb_right;
 220                else
 221                        return entry;
 222        }
 223        if (entry && return_bigger) {
 224                if (bytenr > entry->node.bytenr) {
 225                        n = rb_next(&entry->href_node);
 226                        if (!n)
 227                                n = rb_first(root);
 228                        entry = rb_entry(n, struct btrfs_delayed_ref_head,
 229                                         href_node);
 230                        return entry;
 231                }
 232                return entry;
 233        }
 234        return NULL;
 235}
 236
 237int btrfs_delayed_ref_lock(struct btrfs_trans_handle *trans,
 238                           struct btrfs_delayed_ref_head *head)
 239{
 240        struct btrfs_delayed_ref_root *delayed_refs;
 241
 242        delayed_refs = &trans->transaction->delayed_refs;
 243        assert_spin_locked(&delayed_refs->lock);
 244        if (mutex_trylock(&head->mutex))
 245                return 0;
 246
 247        atomic_inc(&head->node.refs);
 248        spin_unlock(&delayed_refs->lock);
 249
 250        mutex_lock(&head->mutex);
 251        spin_lock(&delayed_refs->lock);
 252        if (!head->node.in_tree) {
 253                mutex_unlock(&head->mutex);
 254                btrfs_put_delayed_ref(&head->node);
 255                return -EAGAIN;
 256        }
 257        btrfs_put_delayed_ref(&head->node);
 258        return 0;
 259}
 260
 261static inline void drop_delayed_ref(struct btrfs_trans_handle *trans,
 262                                    struct btrfs_delayed_ref_root *delayed_refs,
 263                                    struct btrfs_delayed_ref_head *head,
 264                                    struct btrfs_delayed_ref_node *ref)
 265{
 266        if (btrfs_delayed_ref_is_head(ref)) {
 267                head = btrfs_delayed_node_to_head(ref);
 268                rb_erase(&head->href_node, &delayed_refs->href_root);
 269        } else {
 270                assert_spin_locked(&head->lock);
 271                rb_erase(&ref->rb_node, &head->ref_root);
 272        }
 273        ref->in_tree = 0;
 274        btrfs_put_delayed_ref(ref);
 275        atomic_dec(&delayed_refs->num_entries);
 276        if (trans->delayed_ref_updates)
 277                trans->delayed_ref_updates--;
 278}
 279
 280static int merge_ref(struct btrfs_trans_handle *trans,
 281                     struct btrfs_delayed_ref_root *delayed_refs,
 282                     struct btrfs_delayed_ref_head *head,
 283                     struct btrfs_delayed_ref_node *ref, u64 seq)
 284{
 285        struct rb_node *node;
 286        int mod = 0;
 287        int done = 0;
 288
 289        node = rb_next(&ref->rb_node);
 290        while (!done && node) {
 291                struct btrfs_delayed_ref_node *next;
 292
 293                next = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
 294                node = rb_next(node);
 295                if (seq && next->seq >= seq)
 296                        break;
 297                if (comp_entry(ref, next, 0))
 298                        continue;
 299
 300                if (ref->action == next->action) {
 301                        mod = next->ref_mod;
 302                } else {
 303                        if (ref->ref_mod < next->ref_mod) {
 304                                struct btrfs_delayed_ref_node *tmp;
 305
 306                                tmp = ref;
 307                                ref = next;
 308                                next = tmp;
 309                                done = 1;
 310                        }
 311                        mod = -next->ref_mod;
 312                }
 313
 314                drop_delayed_ref(trans, delayed_refs, head, next);
 315                ref->ref_mod += mod;
 316                if (ref->ref_mod == 0) {
 317                        drop_delayed_ref(trans, delayed_refs, head, ref);
 318                        done = 1;
 319                } else {
 320                        /*
 321                         * You can't have multiples of the same ref on a tree
 322                         * block.
 323                         */
 324                        WARN_ON(ref->type == BTRFS_TREE_BLOCK_REF_KEY ||
 325                                ref->type == BTRFS_SHARED_BLOCK_REF_KEY);
 326                }
 327        }
 328        return done;
 329}
 330
 331void btrfs_merge_delayed_refs(struct btrfs_trans_handle *trans,
 332                              struct btrfs_fs_info *fs_info,
 333                              struct btrfs_delayed_ref_root *delayed_refs,
 334                              struct btrfs_delayed_ref_head *head)
 335{
 336        struct rb_node *node;
 337        u64 seq = 0;
 338
 339        assert_spin_locked(&head->lock);
 340        /*
 341         * We don't have too much refs to merge in the case of delayed data
 342         * refs.
 343         */
 344        if (head->is_data)
 345                return;
 346
 347        spin_lock(&fs_info->tree_mod_seq_lock);
 348        if (!list_empty(&fs_info->tree_mod_seq_list)) {
 349                struct seq_list *elem;
 350
 351                elem = list_first_entry(&fs_info->tree_mod_seq_list,
 352                                        struct seq_list, list);
 353                seq = elem->seq;
 354        }
 355        spin_unlock(&fs_info->tree_mod_seq_lock);
 356
 357        node = rb_first(&head->ref_root);
 358        while (node) {
 359                struct btrfs_delayed_ref_node *ref;
 360
 361                ref = rb_entry(node, struct btrfs_delayed_ref_node,
 362                               rb_node);
 363                /* We can't merge refs that are outside of our seq count */
 364                if (seq && ref->seq >= seq)
 365                        break;
 366                if (merge_ref(trans, delayed_refs, head, ref, seq))
 367                        node = rb_first(&head->ref_root);
 368                else
 369                        node = rb_next(&ref->rb_node);
 370        }
 371}
 372
 373int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info,
 374                            struct btrfs_delayed_ref_root *delayed_refs,
 375                            u64 seq)
 376{
 377        struct seq_list *elem;
 378        int ret = 0;
 379
 380        spin_lock(&fs_info->tree_mod_seq_lock);
 381        if (!list_empty(&fs_info->tree_mod_seq_list)) {
 382                elem = list_first_entry(&fs_info->tree_mod_seq_list,
 383                                        struct seq_list, list);
 384                if (seq >= elem->seq) {
 385                        pr_debug("holding back delayed_ref %#x.%x, lowest is %#x.%x (%p)\n",
 386                                 (u32)(seq >> 32), (u32)seq,
 387                                 (u32)(elem->seq >> 32), (u32)elem->seq,
 388                                 delayed_refs);
 389                        ret = 1;
 390                }
 391        }
 392
 393        spin_unlock(&fs_info->tree_mod_seq_lock);
 394        return ret;
 395}
 396
 397struct btrfs_delayed_ref_head *
 398btrfs_select_ref_head(struct btrfs_trans_handle *trans)
 399{
 400        struct btrfs_delayed_ref_root *delayed_refs;
 401        struct btrfs_delayed_ref_head *head;
 402        u64 start;
 403        bool loop = false;
 404
 405        delayed_refs = &trans->transaction->delayed_refs;
 406
 407again:
 408        start = delayed_refs->run_delayed_start;
 409        head = find_ref_head(&delayed_refs->href_root, start, 1);
 410        if (!head && !loop) {
 411                delayed_refs->run_delayed_start = 0;
 412                start = 0;
 413                loop = true;
 414                head = find_ref_head(&delayed_refs->href_root, start, 1);
 415                if (!head)
 416                        return NULL;
 417        } else if (!head && loop) {
 418                return NULL;
 419        }
 420
 421        while (head->processing) {
 422                struct rb_node *node;
 423
 424                node = rb_next(&head->href_node);
 425                if (!node) {
 426                        if (loop)
 427                                return NULL;
 428                        delayed_refs->run_delayed_start = 0;
 429                        start = 0;
 430                        loop = true;
 431                        goto again;
 432                }
 433                head = rb_entry(node, struct btrfs_delayed_ref_head,
 434                                href_node);
 435        }
 436
 437        head->processing = 1;
 438        WARN_ON(delayed_refs->num_heads_ready == 0);
 439        delayed_refs->num_heads_ready--;
 440        delayed_refs->run_delayed_start = head->node.bytenr +
 441                head->node.num_bytes;
 442        return head;
 443}
 444
 445/*
 446 * helper function to update an extent delayed ref in the
 447 * rbtree.  existing and update must both have the same
 448 * bytenr and parent
 449 *
 450 * This may free existing if the update cancels out whatever
 451 * operation it was doing.
 452 */
 453static noinline void
 454update_existing_ref(struct btrfs_trans_handle *trans,
 455                    struct btrfs_delayed_ref_root *delayed_refs,
 456                    struct btrfs_delayed_ref_head *head,
 457                    struct btrfs_delayed_ref_node *existing,
 458                    struct btrfs_delayed_ref_node *update)
 459{
 460        if (update->action != existing->action) {
 461                /*
 462                 * this is effectively undoing either an add or a
 463                 * drop.  We decrement the ref_mod, and if it goes
 464                 * down to zero we just delete the entry without
 465                 * every changing the extent allocation tree.
 466                 */
 467                existing->ref_mod--;
 468                if (existing->ref_mod == 0)
 469                        drop_delayed_ref(trans, delayed_refs, head, existing);
 470                else
 471                        WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
 472                                existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
 473        } else {
 474                WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
 475                        existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
 476                /*
 477                 * the action on the existing ref matches
 478                 * the action on the ref we're trying to add.
 479                 * Bump the ref_mod by one so the backref that
 480                 * is eventually added/removed has the correct
 481                 * reference count
 482                 */
 483                existing->ref_mod += update->ref_mod;
 484        }
 485}
 486
 487/*
 488 * helper function to update the accounting in the head ref
 489 * existing and update must have the same bytenr
 490 */
 491static noinline void
 492update_existing_head_ref(struct btrfs_delayed_ref_node *existing,
 493                         struct btrfs_delayed_ref_node *update)
 494{
 495        struct btrfs_delayed_ref_head *existing_ref;
 496        struct btrfs_delayed_ref_head *ref;
 497
 498        existing_ref = btrfs_delayed_node_to_head(existing);
 499        ref = btrfs_delayed_node_to_head(update);
 500        BUG_ON(existing_ref->is_data != ref->is_data);
 501
 502        spin_lock(&existing_ref->lock);
 503        if (ref->must_insert_reserved) {
 504                /* if the extent was freed and then
 505                 * reallocated before the delayed ref
 506                 * entries were processed, we can end up
 507                 * with an existing head ref without
 508                 * the must_insert_reserved flag set.
 509                 * Set it again here
 510                 */
 511                existing_ref->must_insert_reserved = ref->must_insert_reserved;
 512
 513                /*
 514                 * update the num_bytes so we make sure the accounting
 515                 * is done correctly
 516                 */
 517                existing->num_bytes = update->num_bytes;
 518
 519        }
 520
 521        if (ref->extent_op) {
 522                if (!existing_ref->extent_op) {
 523                        existing_ref->extent_op = ref->extent_op;
 524                } else {
 525                        if (ref->extent_op->update_key) {
 526                                memcpy(&existing_ref->extent_op->key,
 527                                       &ref->extent_op->key,
 528                                       sizeof(ref->extent_op->key));
 529                                existing_ref->extent_op->update_key = 1;
 530                        }
 531                        if (ref->extent_op->update_flags) {
 532                                existing_ref->extent_op->flags_to_set |=
 533                                        ref->extent_op->flags_to_set;
 534                                existing_ref->extent_op->update_flags = 1;
 535                        }
 536                        btrfs_free_delayed_extent_op(ref->extent_op);
 537                }
 538        }
 539        /*
 540         * update the reference mod on the head to reflect this new operation,
 541         * only need the lock for this case cause we could be processing it
 542         * currently, for refs we just added we know we're a-ok.
 543         */
 544        existing->ref_mod += update->ref_mod;
 545        spin_unlock(&existing_ref->lock);
 546}
 547
 548/*
 549 * helper function to actually insert a head node into the rbtree.
 550 * this does all the dirty work in terms of maintaining the correct
 551 * overall modification count.
 552 */
 553static noinline struct btrfs_delayed_ref_head *
 554add_delayed_ref_head(struct btrfs_fs_info *fs_info,
 555                     struct btrfs_trans_handle *trans,
 556                     struct btrfs_delayed_ref_node *ref, u64 bytenr,
 557                     u64 num_bytes, int action, int is_data)
 558{
 559        struct btrfs_delayed_ref_head *existing;
 560        struct btrfs_delayed_ref_head *head_ref = NULL;
 561        struct btrfs_delayed_ref_root *delayed_refs;
 562        int count_mod = 1;
 563        int must_insert_reserved = 0;
 564
 565        /*
 566         * the head node stores the sum of all the mods, so dropping a ref
 567         * should drop the sum in the head node by one.
 568         */
 569        if (action == BTRFS_UPDATE_DELAYED_HEAD)
 570                count_mod = 0;
 571        else if (action == BTRFS_DROP_DELAYED_REF)
 572                count_mod = -1;
 573
 574        /*
 575         * BTRFS_ADD_DELAYED_EXTENT means that we need to update
 576         * the reserved accounting when the extent is finally added, or
 577         * if a later modification deletes the delayed ref without ever
 578         * inserting the extent into the extent allocation tree.
 579         * ref->must_insert_reserved is the flag used to record
 580         * that accounting mods are required.
 581         *
 582         * Once we record must_insert_reserved, switch the action to
 583         * BTRFS_ADD_DELAYED_REF because other special casing is not required.
 584         */
 585        if (action == BTRFS_ADD_DELAYED_EXTENT)
 586                must_insert_reserved = 1;
 587        else
 588                must_insert_reserved = 0;
 589
 590        delayed_refs = &trans->transaction->delayed_refs;
 591
 592        /* first set the basic ref node struct up */
 593        atomic_set(&ref->refs, 1);
 594        ref->bytenr = bytenr;
 595        ref->num_bytes = num_bytes;
 596        ref->ref_mod = count_mod;
 597        ref->type  = 0;
 598        ref->action  = 0;
 599        ref->is_head = 1;
 600        ref->in_tree = 1;
 601        ref->seq = 0;
 602
 603        head_ref = btrfs_delayed_node_to_head(ref);
 604        head_ref->must_insert_reserved = must_insert_reserved;
 605        head_ref->is_data = is_data;
 606        head_ref->ref_root = RB_ROOT;
 607        head_ref->processing = 0;
 608
 609        spin_lock_init(&head_ref->lock);
 610        mutex_init(&head_ref->mutex);
 611
 612        trace_add_delayed_ref_head(ref, head_ref, action);
 613
 614        existing = htree_insert(&delayed_refs->href_root,
 615                                &head_ref->href_node);
 616        if (existing) {
 617                update_existing_head_ref(&existing->node, ref);
 618                /*
 619                 * we've updated the existing ref, free the newly
 620                 * allocated ref
 621                 */
 622                kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref);
 623                head_ref = existing;
 624        } else {
 625                delayed_refs->num_heads++;
 626                delayed_refs->num_heads_ready++;
 627                atomic_inc(&delayed_refs->num_entries);
 628                trans->delayed_ref_updates++;
 629        }
 630        return head_ref;
 631}
 632
 633/*
 634 * helper to insert a delayed tree ref into the rbtree.
 635 */
 636static noinline void
 637add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
 638                     struct btrfs_trans_handle *trans,
 639                     struct btrfs_delayed_ref_head *head_ref,
 640                     struct btrfs_delayed_ref_node *ref, u64 bytenr,
 641                     u64 num_bytes, u64 parent, u64 ref_root, int level,
 642                     int action, int no_quota)
 643{
 644        struct btrfs_delayed_ref_node *existing;
 645        struct btrfs_delayed_tree_ref *full_ref;
 646        struct btrfs_delayed_ref_root *delayed_refs;
 647        u64 seq = 0;
 648
 649        if (action == BTRFS_ADD_DELAYED_EXTENT)
 650                action = BTRFS_ADD_DELAYED_REF;
 651
 652        if (is_fstree(ref_root))
 653                seq = atomic64_read(&fs_info->tree_mod_seq);
 654        delayed_refs = &trans->transaction->delayed_refs;
 655
 656        /* first set the basic ref node struct up */
 657        atomic_set(&ref->refs, 1);
 658        ref->bytenr = bytenr;
 659        ref->num_bytes = num_bytes;
 660        ref->ref_mod = 1;
 661        ref->action = action;
 662        ref->is_head = 0;
 663        ref->in_tree = 1;
 664        ref->no_quota = no_quota;
 665        ref->seq = seq;
 666
 667        full_ref = btrfs_delayed_node_to_tree_ref(ref);
 668        full_ref->parent = parent;
 669        full_ref->root = ref_root;
 670        if (parent)
 671                ref->type = BTRFS_SHARED_BLOCK_REF_KEY;
 672        else
 673                ref->type = BTRFS_TREE_BLOCK_REF_KEY;
 674        full_ref->level = level;
 675
 676        trace_add_delayed_tree_ref(ref, full_ref, action);
 677
 678        spin_lock(&head_ref->lock);
 679        existing = tree_insert(&head_ref->ref_root, &ref->rb_node);
 680        if (existing) {
 681                update_existing_ref(trans, delayed_refs, head_ref, existing,
 682                                    ref);
 683                /*
 684                 * we've updated the existing ref, free the newly
 685                 * allocated ref
 686                 */
 687                kmem_cache_free(btrfs_delayed_tree_ref_cachep, full_ref);
 688        } else {
 689                atomic_inc(&delayed_refs->num_entries);
 690                trans->delayed_ref_updates++;
 691        }
 692        spin_unlock(&head_ref->lock);
 693}
 694
 695/*
 696 * helper to insert a delayed data ref into the rbtree.
 697 */
 698static noinline void
 699add_delayed_data_ref(struct btrfs_fs_info *fs_info,
 700                     struct btrfs_trans_handle *trans,
 701                     struct btrfs_delayed_ref_head *head_ref,
 702                     struct btrfs_delayed_ref_node *ref, u64 bytenr,
 703                     u64 num_bytes, u64 parent, u64 ref_root, u64 owner,
 704                     u64 offset, int action, int no_quota)
 705{
 706        struct btrfs_delayed_ref_node *existing;
 707        struct btrfs_delayed_data_ref *full_ref;
 708        struct btrfs_delayed_ref_root *delayed_refs;
 709        u64 seq = 0;
 710
 711        if (action == BTRFS_ADD_DELAYED_EXTENT)
 712                action = BTRFS_ADD_DELAYED_REF;
 713
 714        delayed_refs = &trans->transaction->delayed_refs;
 715
 716        if (is_fstree(ref_root))
 717                seq = atomic64_read(&fs_info->tree_mod_seq);
 718
 719        /* first set the basic ref node struct up */
 720        atomic_set(&ref->refs, 1);
 721        ref->bytenr = bytenr;
 722        ref->num_bytes = num_bytes;
 723        ref->ref_mod = 1;
 724        ref->action = action;
 725        ref->is_head = 0;
 726        ref->in_tree = 1;
 727        ref->no_quota = no_quota;
 728        ref->seq = seq;
 729
 730        full_ref = btrfs_delayed_node_to_data_ref(ref);
 731        full_ref->parent = parent;
 732        full_ref->root = ref_root;
 733        if (parent)
 734                ref->type = BTRFS_SHARED_DATA_REF_KEY;
 735        else
 736                ref->type = BTRFS_EXTENT_DATA_REF_KEY;
 737
 738        full_ref->objectid = owner;
 739        full_ref->offset = offset;
 740
 741        trace_add_delayed_data_ref(ref, full_ref, action);
 742
 743        spin_lock(&head_ref->lock);
 744        existing = tree_insert(&head_ref->ref_root, &ref->rb_node);
 745        if (existing) {
 746                update_existing_ref(trans, delayed_refs, head_ref, existing,
 747                                    ref);
 748                /*
 749                 * we've updated the existing ref, free the newly
 750                 * allocated ref
 751                 */
 752                kmem_cache_free(btrfs_delayed_data_ref_cachep, full_ref);
 753        } else {
 754                atomic_inc(&delayed_refs->num_entries);
 755                trans->delayed_ref_updates++;
 756        }
 757        spin_unlock(&head_ref->lock);
 758}
 759
 760/*
 761 * add a delayed tree ref.  This does all of the accounting required
 762 * to make sure the delayed ref is eventually processed before this
 763 * transaction commits.
 764 */
 765int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
 766                               struct btrfs_trans_handle *trans,
 767                               u64 bytenr, u64 num_bytes, u64 parent,
 768                               u64 ref_root,  int level, int action,
 769                               struct btrfs_delayed_extent_op *extent_op,
 770                               int no_quota)
 771{
 772        struct btrfs_delayed_tree_ref *ref;
 773        struct btrfs_delayed_ref_head *head_ref;
 774        struct btrfs_delayed_ref_root *delayed_refs;
 775
 776        if (!is_fstree(ref_root) || !fs_info->quota_enabled)
 777                no_quota = 0;
 778
 779        BUG_ON(extent_op && extent_op->is_data);
 780        ref = kmem_cache_alloc(btrfs_delayed_tree_ref_cachep, GFP_NOFS);
 781        if (!ref)
 782                return -ENOMEM;
 783
 784        head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
 785        if (!head_ref) {
 786                kmem_cache_free(btrfs_delayed_tree_ref_cachep, ref);
 787                return -ENOMEM;
 788        }
 789
 790        head_ref->extent_op = extent_op;
 791
 792        delayed_refs = &trans->transaction->delayed_refs;
 793        spin_lock(&delayed_refs->lock);
 794
 795        /*
 796         * insert both the head node and the new ref without dropping
 797         * the spin lock
 798         */
 799        head_ref = add_delayed_ref_head(fs_info, trans, &head_ref->node,
 800                                        bytenr, num_bytes, action, 0);
 801
 802        add_delayed_tree_ref(fs_info, trans, head_ref, &ref->node, bytenr,
 803                                   num_bytes, parent, ref_root, level, action,
 804                                   no_quota);
 805        spin_unlock(&delayed_refs->lock);
 806
 807        return 0;
 808}
 809
 810/*
 811 * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref.
 812 */
 813int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info,
 814                               struct btrfs_trans_handle *trans,
 815                               u64 bytenr, u64 num_bytes,
 816                               u64 parent, u64 ref_root,
 817                               u64 owner, u64 offset, int action,
 818                               struct btrfs_delayed_extent_op *extent_op,
 819                               int no_quota)
 820{
 821        struct btrfs_delayed_data_ref *ref;
 822        struct btrfs_delayed_ref_head *head_ref;
 823        struct btrfs_delayed_ref_root *delayed_refs;
 824
 825        if (!is_fstree(ref_root) || !fs_info->quota_enabled)
 826                no_quota = 0;
 827
 828        BUG_ON(extent_op && !extent_op->is_data);
 829        ref = kmem_cache_alloc(btrfs_delayed_data_ref_cachep, GFP_NOFS);
 830        if (!ref)
 831                return -ENOMEM;
 832
 833        head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
 834        if (!head_ref) {
 835                kmem_cache_free(btrfs_delayed_data_ref_cachep, ref);
 836                return -ENOMEM;
 837        }
 838
 839        head_ref->extent_op = extent_op;
 840
 841        delayed_refs = &trans->transaction->delayed_refs;
 842        spin_lock(&delayed_refs->lock);
 843
 844        /*
 845         * insert both the head node and the new ref without dropping
 846         * the spin lock
 847         */
 848        head_ref = add_delayed_ref_head(fs_info, trans, &head_ref->node,
 849                                        bytenr, num_bytes, action, 1);
 850
 851        add_delayed_data_ref(fs_info, trans, head_ref, &ref->node, bytenr,
 852                                   num_bytes, parent, ref_root, owner, offset,
 853                                   action, no_quota);
 854        spin_unlock(&delayed_refs->lock);
 855
 856        return 0;
 857}
 858
 859int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info,
 860                                struct btrfs_trans_handle *trans,
 861                                u64 bytenr, u64 num_bytes,
 862                                struct btrfs_delayed_extent_op *extent_op)
 863{
 864        struct btrfs_delayed_ref_head *head_ref;
 865        struct btrfs_delayed_ref_root *delayed_refs;
 866
 867        head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
 868        if (!head_ref)
 869                return -ENOMEM;
 870
 871        head_ref->extent_op = extent_op;
 872
 873        delayed_refs = &trans->transaction->delayed_refs;
 874        spin_lock(&delayed_refs->lock);
 875
 876        add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,
 877                                   num_bytes, BTRFS_UPDATE_DELAYED_HEAD,
 878                                   extent_op->is_data);
 879
 880        spin_unlock(&delayed_refs->lock);
 881        return 0;
 882}
 883
 884/*
 885 * this does a simple search for the head node for a given extent.
 886 * It must be called with the delayed ref spinlock held, and it returns
 887 * the head node if any where found, or NULL if not.
 888 */
 889struct btrfs_delayed_ref_head *
 890btrfs_find_delayed_ref_head(struct btrfs_trans_handle *trans, u64 bytenr)
 891{
 892        struct btrfs_delayed_ref_root *delayed_refs;
 893
 894        delayed_refs = &trans->transaction->delayed_refs;
 895        return find_ref_head(&delayed_refs->href_root, bytenr, 0);
 896}
 897
 898void btrfs_delayed_ref_exit(void)
 899{
 900        if (btrfs_delayed_ref_head_cachep)
 901                kmem_cache_destroy(btrfs_delayed_ref_head_cachep);
 902        if (btrfs_delayed_tree_ref_cachep)
 903                kmem_cache_destroy(btrfs_delayed_tree_ref_cachep);
 904        if (btrfs_delayed_data_ref_cachep)
 905                kmem_cache_destroy(btrfs_delayed_data_ref_cachep);
 906        if (btrfs_delayed_extent_op_cachep)
 907                kmem_cache_destroy(btrfs_delayed_extent_op_cachep);
 908}
 909
 910int btrfs_delayed_ref_init(void)
 911{
 912        btrfs_delayed_ref_head_cachep = kmem_cache_create(
 913                                "btrfs_delayed_ref_head",
 914                                sizeof(struct btrfs_delayed_ref_head), 0,
 915                                SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
 916        if (!btrfs_delayed_ref_head_cachep)
 917                goto fail;
 918
 919        btrfs_delayed_tree_ref_cachep = kmem_cache_create(
 920                                "btrfs_delayed_tree_ref",
 921                                sizeof(struct btrfs_delayed_tree_ref), 0,
 922                                SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
 923        if (!btrfs_delayed_tree_ref_cachep)
 924                goto fail;
 925
 926        btrfs_delayed_data_ref_cachep = kmem_cache_create(
 927                                "btrfs_delayed_data_ref",
 928                                sizeof(struct btrfs_delayed_data_ref), 0,
 929                                SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
 930        if (!btrfs_delayed_data_ref_cachep)
 931                goto fail;
 932
 933        btrfs_delayed_extent_op_cachep = kmem_cache_create(
 934                                "btrfs_delayed_extent_op",
 935                                sizeof(struct btrfs_delayed_extent_op), 0,
 936                                SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
 937        if (!btrfs_delayed_extent_op_cachep)
 938                goto fail;
 939
 940        return 0;
 941fail:
 942        btrfs_delayed_ref_exit();
 943        return -ENOMEM;
 944}
 945