linux/fs/btrfs/file.c
<<
>>
Prefs
   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
  19#include <linux/fs.h>
  20#include <linux/pagemap.h>
  21#include <linux/highmem.h>
  22#include <linux/time.h>
  23#include <linux/init.h>
  24#include <linux/string.h>
  25#include <linux/backing-dev.h>
  26#include <linux/mpage.h>
  27#include <linux/falloc.h>
  28#include <linux/swap.h>
  29#include <linux/writeback.h>
  30#include <linux/statfs.h>
  31#include <linux/compat.h>
  32#include <linux/slab.h>
  33#include "ctree.h"
  34#include "disk-io.h"
  35#include "transaction.h"
  36#include "btrfs_inode.h"
  37#include "ioctl.h"
  38#include "print-tree.h"
  39#include "tree-log.h"
  40#include "locking.h"
  41#include "compat.h"
  42#include "volumes.h"
  43
  44/*
  45 * when auto defrag is enabled we
  46 * queue up these defrag structs to remember which
  47 * inodes need defragging passes
  48 */
  49struct inode_defrag {
  50        struct rb_node rb_node;
  51        /* objectid */
  52        u64 ino;
  53        /*
  54         * transid where the defrag was added, we search for
  55         * extents newer than this
  56         */
  57        u64 transid;
  58
  59        /* root objectid */
  60        u64 root;
  61
  62        /* last offset we were able to defrag */
  63        u64 last_offset;
  64
  65        /* if we've wrapped around back to zero once already */
  66        int cycled;
  67};
  68
  69static int __compare_inode_defrag(struct inode_defrag *defrag1,
  70                                  struct inode_defrag *defrag2)
  71{
  72        if (defrag1->root > defrag2->root)
  73                return 1;
  74        else if (defrag1->root < defrag2->root)
  75                return -1;
  76        else if (defrag1->ino > defrag2->ino)
  77                return 1;
  78        else if (defrag1->ino < defrag2->ino)
  79                return -1;
  80        else
  81                return 0;
  82}
  83
  84/* pop a record for an inode into the defrag tree.  The lock
  85 * must be held already
  86 *
  87 * If you're inserting a record for an older transid than an
  88 * existing record, the transid already in the tree is lowered
  89 *
  90 * If an existing record is found the defrag item you
  91 * pass in is freed
  92 */
  93static void __btrfs_add_inode_defrag(struct inode *inode,
  94                                    struct inode_defrag *defrag)
  95{
  96        struct btrfs_root *root = BTRFS_I(inode)->root;
  97        struct inode_defrag *entry;
  98        struct rb_node **p;
  99        struct rb_node *parent = NULL;
 100        int ret;
 101
 102        p = &root->fs_info->defrag_inodes.rb_node;
 103        while (*p) {
 104                parent = *p;
 105                entry = rb_entry(parent, struct inode_defrag, rb_node);
 106
 107                ret = __compare_inode_defrag(defrag, entry);
 108                if (ret < 0)
 109                        p = &parent->rb_left;
 110                else if (ret > 0)
 111                        p = &parent->rb_right;
 112                else {
 113                        /* if we're reinserting an entry for
 114                         * an old defrag run, make sure to
 115                         * lower the transid of our existing record
 116                         */
 117                        if (defrag->transid < entry->transid)
 118                                entry->transid = defrag->transid;
 119                        if (defrag->last_offset > entry->last_offset)
 120                                entry->last_offset = defrag->last_offset;
 121                        goto exists;
 122                }
 123        }
 124        set_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags);
 125        rb_link_node(&defrag->rb_node, parent, p);
 126        rb_insert_color(&defrag->rb_node, &root->fs_info->defrag_inodes);
 127        return;
 128
 129exists:
 130        kfree(defrag);
 131        return;
 132
 133}
 134
 135/*
 136 * insert a defrag record for this inode if auto defrag is
 137 * enabled
 138 */
 139int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans,
 140                           struct inode *inode)
 141{
 142        struct btrfs_root *root = BTRFS_I(inode)->root;
 143        struct inode_defrag *defrag;
 144        u64 transid;
 145
 146        if (!btrfs_test_opt(root, AUTO_DEFRAG))
 147                return 0;
 148
 149        if (btrfs_fs_closing(root->fs_info))
 150                return 0;
 151
 152        if (test_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags))
 153                return 0;
 154
 155        if (trans)
 156                transid = trans->transid;
 157        else
 158                transid = BTRFS_I(inode)->root->last_trans;
 159
 160        defrag = kzalloc(sizeof(*defrag), GFP_NOFS);
 161        if (!defrag)
 162                return -ENOMEM;
 163
 164        defrag->ino = btrfs_ino(inode);
 165        defrag->transid = transid;
 166        defrag->root = root->root_key.objectid;
 167
 168        spin_lock(&root->fs_info->defrag_inodes_lock);
 169        if (!test_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags))
 170                __btrfs_add_inode_defrag(inode, defrag);
 171        else
 172                kfree(defrag);
 173        spin_unlock(&root->fs_info->defrag_inodes_lock);
 174        return 0;
 175}
 176
 177/*
 178 * must be called with the defrag_inodes lock held
 179 */
 180struct inode_defrag *btrfs_find_defrag_inode(struct btrfs_fs_info *info,
 181                                             u64 root, u64 ino,
 182                                             struct rb_node **next)
 183{
 184        struct inode_defrag *entry = NULL;
 185        struct inode_defrag tmp;
 186        struct rb_node *p;
 187        struct rb_node *parent = NULL;
 188        int ret;
 189
 190        tmp.ino = ino;
 191        tmp.root = root;
 192
 193        p = info->defrag_inodes.rb_node;
 194        while (p) {
 195                parent = p;
 196                entry = rb_entry(parent, struct inode_defrag, rb_node);
 197
 198                ret = __compare_inode_defrag(&tmp, entry);
 199                if (ret < 0)
 200                        p = parent->rb_left;
 201                else if (ret > 0)
 202                        p = parent->rb_right;
 203                else
 204                        return entry;
 205        }
 206
 207        if (next) {
 208                while (parent && __compare_inode_defrag(&tmp, entry) > 0) {
 209                        parent = rb_next(parent);
 210                        entry = rb_entry(parent, struct inode_defrag, rb_node);
 211                }
 212                *next = parent;
 213        }
 214        return NULL;
 215}
 216
 217/*
 218 * run through the list of inodes in the FS that need
 219 * defragging
 220 */
 221int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info)
 222{
 223        struct inode_defrag *defrag;
 224        struct btrfs_root *inode_root;
 225        struct inode *inode;
 226        struct rb_node *n;
 227        struct btrfs_key key;
 228        struct btrfs_ioctl_defrag_range_args range;
 229        u64 first_ino = 0;
 230        u64 root_objectid = 0;
 231        int num_defrag;
 232        int defrag_batch = 1024;
 233
 234        memset(&range, 0, sizeof(range));
 235        range.len = (u64)-1;
 236
 237        atomic_inc(&fs_info->defrag_running);
 238        spin_lock(&fs_info->defrag_inodes_lock);
 239        while(1) {
 240                n = NULL;
 241
 242                /* find an inode to defrag */
 243                defrag = btrfs_find_defrag_inode(fs_info, root_objectid,
 244                                                 first_ino, &n);
 245                if (!defrag) {
 246                        if (n) {
 247                                defrag = rb_entry(n, struct inode_defrag,
 248                                                  rb_node);
 249                        } else if (root_objectid || first_ino) {
 250                                root_objectid = 0;
 251                                first_ino = 0;
 252                                continue;
 253                        } else {
 254                                break;
 255                        }
 256                }
 257
 258                /* remove it from the rbtree */
 259                first_ino = defrag->ino + 1;
 260                root_objectid = defrag->root;
 261                rb_erase(&defrag->rb_node, &fs_info->defrag_inodes);
 262
 263                if (btrfs_fs_closing(fs_info))
 264                        goto next_free;
 265
 266                spin_unlock(&fs_info->defrag_inodes_lock);
 267
 268                /* get the inode */
 269                key.objectid = defrag->root;
 270                btrfs_set_key_type(&key, BTRFS_ROOT_ITEM_KEY);
 271                key.offset = (u64)-1;
 272                inode_root = btrfs_read_fs_root_no_name(fs_info, &key);
 273                if (IS_ERR(inode_root))
 274                        goto next;
 275
 276                key.objectid = defrag->ino;
 277                btrfs_set_key_type(&key, BTRFS_INODE_ITEM_KEY);
 278                key.offset = 0;
 279
 280                inode = btrfs_iget(fs_info->sb, &key, inode_root, NULL);
 281                if (IS_ERR(inode))
 282                        goto next;
 283
 284                /* do a chunk of defrag */
 285                clear_bit(BTRFS_INODE_IN_DEFRAG, &BTRFS_I(inode)->runtime_flags);
 286                range.start = defrag->last_offset;
 287                num_defrag = btrfs_defrag_file(inode, NULL, &range, defrag->transid,
 288                                               defrag_batch);
 289                /*
 290                 * if we filled the whole defrag batch, there
 291                 * must be more work to do.  Queue this defrag
 292                 * again
 293                 */
 294                if (num_defrag == defrag_batch) {
 295                        defrag->last_offset = range.start;
 296                        __btrfs_add_inode_defrag(inode, defrag);
 297                        /*
 298                         * we don't want to kfree defrag, we added it back to
 299                         * the rbtree
 300                         */
 301                        defrag = NULL;
 302                } else if (defrag->last_offset && !defrag->cycled) {
 303                        /*
 304                         * we didn't fill our defrag batch, but
 305                         * we didn't start at zero.  Make sure we loop
 306                         * around to the start of the file.
 307                         */
 308                        defrag->last_offset = 0;
 309                        defrag->cycled = 1;
 310                        __btrfs_add_inode_defrag(inode, defrag);
 311                        defrag = NULL;
 312                }
 313
 314                iput(inode);
 315next:
 316                spin_lock(&fs_info->defrag_inodes_lock);
 317next_free:
 318                kfree(defrag);
 319        }
 320        spin_unlock(&fs_info->defrag_inodes_lock);
 321
 322        atomic_dec(&fs_info->defrag_running);
 323
 324        /*
 325         * during unmount, we use the transaction_wait queue to
 326         * wait for the defragger to stop
 327         */
 328        wake_up(&fs_info->transaction_wait);
 329        return 0;
 330}
 331
 332/* simple helper to fault in pages and copy.  This should go away
 333 * and be replaced with calls into generic code.
 334 */
 335static noinline int btrfs_copy_from_user(loff_t pos, int num_pages,
 336                                         size_t write_bytes,
 337                                         struct page **prepared_pages,
 338                                         struct iov_iter *i)
 339{
 340        size_t copied = 0;
 341        size_t total_copied = 0;
 342        int pg = 0;
 343        int offset = pos & (PAGE_CACHE_SIZE - 1);
 344
 345        while (write_bytes > 0) {
 346                size_t count = min_t(size_t,
 347                                     PAGE_CACHE_SIZE - offset, write_bytes);
 348                struct page *page = prepared_pages[pg];
 349                /*
 350                 * Copy data from userspace to the current page
 351                 *
 352                 * Disable pagefault to avoid recursive lock since
 353                 * the pages are already locked
 354                 */
 355                pagefault_disable();
 356                copied = iov_iter_copy_from_user_atomic(page, i, offset, count);
 357                pagefault_enable();
 358
 359                /* Flush processor's dcache for this page */
 360                flush_dcache_page(page);
 361
 362                /*
 363                 * if we get a partial write, we can end up with
 364                 * partially up to date pages.  These add
 365                 * a lot of complexity, so make sure they don't
 366                 * happen by forcing this copy to be retried.
 367                 *
 368                 * The rest of the btrfs_file_write code will fall
 369                 * back to page at a time copies after we return 0.
 370                 */
 371                if (!PageUptodate(page) && copied < count)
 372                        copied = 0;
 373
 374                iov_iter_advance(i, copied);
 375                write_bytes -= copied;
 376                total_copied += copied;
 377
 378                /* Return to btrfs_file_aio_write to fault page */
 379                if (unlikely(copied == 0))
 380                        break;
 381
 382                if (unlikely(copied < PAGE_CACHE_SIZE - offset)) {
 383                        offset += copied;
 384                } else {
 385                        pg++;
 386                        offset = 0;
 387                }
 388        }
 389        return total_copied;
 390}
 391
 392/*
 393 * unlocks pages after btrfs_file_write is done with them
 394 */
 395void btrfs_drop_pages(struct page **pages, size_t num_pages)
 396{
 397        size_t i;
 398        for (i = 0; i < num_pages; i++) {
 399                /* page checked is some magic around finding pages that
 400                 * have been modified without going through btrfs_set_page_dirty
 401                 * clear it here
 402                 */
 403                ClearPageChecked(pages[i]);
 404                unlock_page(pages[i]);
 405                mark_page_accessed(pages[i]);
 406                page_cache_release(pages[i]);
 407        }
 408}
 409
 410/*
 411 * after copy_from_user, pages need to be dirtied and we need to make
 412 * sure holes are created between the current EOF and the start of
 413 * any next extents (if required).
 414 *
 415 * this also makes the decision about creating an inline extent vs
 416 * doing real data extents, marking pages dirty and delalloc as required.
 417 */
 418int btrfs_dirty_pages(struct btrfs_root *root, struct inode *inode,
 419                      struct page **pages, size_t num_pages,
 420                      loff_t pos, size_t write_bytes,
 421                      struct extent_state **cached)
 422{
 423        int err = 0;
 424        int i;
 425        u64 num_bytes;
 426        u64 start_pos;
 427        u64 end_of_last_block;
 428        u64 end_pos = pos + write_bytes;
 429        loff_t isize = i_size_read(inode);
 430
 431        start_pos = pos & ~((u64)root->sectorsize - 1);
 432        num_bytes = (write_bytes + pos - start_pos +
 433                    root->sectorsize - 1) & ~((u64)root->sectorsize - 1);
 434
 435        end_of_last_block = start_pos + num_bytes - 1;
 436        err = btrfs_set_extent_delalloc(inode, start_pos, end_of_last_block,
 437                                        cached);
 438        if (err)
 439                return err;
 440
 441        for (i = 0; i < num_pages; i++) {
 442                struct page *p = pages[i];
 443                SetPageUptodate(p);
 444                ClearPageChecked(p);
 445                set_page_dirty(p);
 446        }
 447
 448        /*
 449         * we've only changed i_size in ram, and we haven't updated
 450         * the disk i_size.  There is no need to log the inode
 451         * at this time.
 452         */
 453        if (end_pos > isize)
 454                i_size_write(inode, end_pos);
 455        return 0;
 456}
 457
 458/*
 459 * this drops all the extents in the cache that intersect the range
 460 * [start, end].  Existing extents are split as required.
 461 */
 462void btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end,
 463                             int skip_pinned)
 464{
 465        struct extent_map *em;
 466        struct extent_map *split = NULL;
 467        struct extent_map *split2 = NULL;
 468        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
 469        u64 len = end - start + 1;
 470        u64 gen;
 471        int ret;
 472        int testend = 1;
 473        unsigned long flags;
 474        int compressed = 0;
 475
 476        WARN_ON(end < start);
 477        if (end == (u64)-1) {
 478                len = (u64)-1;
 479                testend = 0;
 480        }
 481        while (1) {
 482                int no_splits = 0;
 483
 484                if (!split)
 485                        split = alloc_extent_map();
 486                if (!split2)
 487                        split2 = alloc_extent_map();
 488                if (!split || !split2)
 489                        no_splits = 1;
 490
 491                write_lock(&em_tree->lock);
 492                em = lookup_extent_mapping(em_tree, start, len);
 493                if (!em) {
 494                        write_unlock(&em_tree->lock);
 495                        break;
 496                }
 497                flags = em->flags;
 498                gen = em->generation;
 499                if (skip_pinned && test_bit(EXTENT_FLAG_PINNED, &em->flags)) {
 500                        if (testend && em->start + em->len >= start + len) {
 501                                free_extent_map(em);
 502                                write_unlock(&em_tree->lock);
 503                                break;
 504                        }
 505                        start = em->start + em->len;
 506                        if (testend)
 507                                len = start + len - (em->start + em->len);
 508                        free_extent_map(em);
 509                        write_unlock(&em_tree->lock);
 510                        continue;
 511                }
 512                compressed = test_bit(EXTENT_FLAG_COMPRESSED, &em->flags);
 513                clear_bit(EXTENT_FLAG_PINNED, &em->flags);
 514                remove_extent_mapping(em_tree, em);
 515                if (no_splits)
 516                        goto next;
 517
 518                if (em->block_start < EXTENT_MAP_LAST_BYTE &&
 519                    em->start < start) {
 520                        split->start = em->start;
 521                        split->len = start - em->start;
 522                        split->orig_start = em->orig_start;
 523                        split->block_start = em->block_start;
 524
 525                        if (compressed)
 526                                split->block_len = em->block_len;
 527                        else
 528                                split->block_len = split->len;
 529                        split->generation = gen;
 530                        split->bdev = em->bdev;
 531                        split->flags = flags;
 532                        split->compress_type = em->compress_type;
 533                        ret = add_extent_mapping(em_tree, split);
 534                        BUG_ON(ret); /* Logic error */
 535                        list_move(&split->list, &em_tree->modified_extents);
 536                        free_extent_map(split);
 537                        split = split2;
 538                        split2 = NULL;
 539                }
 540                if (em->block_start < EXTENT_MAP_LAST_BYTE &&
 541                    testend && em->start + em->len > start + len) {
 542                        u64 diff = start + len - em->start;
 543
 544                        split->start = start + len;
 545                        split->len = em->start + em->len - (start + len);
 546                        split->bdev = em->bdev;
 547                        split->flags = flags;
 548                        split->compress_type = em->compress_type;
 549                        split->generation = gen;
 550
 551                        if (compressed) {
 552                                split->block_len = em->block_len;
 553                                split->block_start = em->block_start;
 554                                split->orig_start = em->orig_start;
 555                        } else {
 556                                split->block_len = split->len;
 557                                split->block_start = em->block_start + diff;
 558                                split->orig_start = split->start;
 559                        }
 560
 561                        ret = add_extent_mapping(em_tree, split);
 562                        BUG_ON(ret); /* Logic error */
 563                        list_move(&split->list, &em_tree->modified_extents);
 564                        free_extent_map(split);
 565                        split = NULL;
 566                }
 567next:
 568                write_unlock(&em_tree->lock);
 569
 570                /* once for us */
 571                free_extent_map(em);
 572                /* once for the tree*/
 573                free_extent_map(em);
 574        }
 575        if (split)
 576                free_extent_map(split);
 577        if (split2)
 578                free_extent_map(split2);
 579}
 580
 581/*
 582 * this is very complex, but the basic idea is to drop all extents
 583 * in the range start - end.  hint_block is filled in with a block number
 584 * that would be a good hint to the block allocator for this file.
 585 *
 586 * If an extent intersects the range but is not entirely inside the range
 587 * it is either truncated or split.  Anything entirely inside the range
 588 * is deleted from the tree.
 589 */
 590int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
 591                         struct btrfs_root *root, struct inode *inode,
 592                         struct btrfs_path *path, u64 start, u64 end,
 593                         u64 *drop_end, int drop_cache)
 594{
 595        struct extent_buffer *leaf;
 596        struct btrfs_file_extent_item *fi;
 597        struct btrfs_key key;
 598        struct btrfs_key new_key;
 599        u64 ino = btrfs_ino(inode);
 600        u64 search_start = start;
 601        u64 disk_bytenr = 0;
 602        u64 num_bytes = 0;
 603        u64 extent_offset = 0;
 604        u64 extent_end = 0;
 605        int del_nr = 0;
 606        int del_slot = 0;
 607        int extent_type;
 608        int recow;
 609        int ret;
 610        int modify_tree = -1;
 611        int update_refs = (root->ref_cows || root == root->fs_info->tree_root);
 612        int found = 0;
 613
 614        if (drop_cache)
 615                btrfs_drop_extent_cache(inode, start, end - 1, 0);
 616
 617        if (start >= BTRFS_I(inode)->disk_i_size)
 618                modify_tree = 0;
 619
 620        while (1) {
 621                recow = 0;
 622                ret = btrfs_lookup_file_extent(trans, root, path, ino,
 623                                               search_start, modify_tree);
 624                if (ret < 0)
 625                        break;
 626                if (ret > 0 && path->slots[0] > 0 && search_start == start) {
 627                        leaf = path->nodes[0];
 628                        btrfs_item_key_to_cpu(leaf, &key, path->slots[0] - 1);
 629                        if (key.objectid == ino &&
 630                            key.type == BTRFS_EXTENT_DATA_KEY)
 631                                path->slots[0]--;
 632                }
 633                ret = 0;
 634next_slot:
 635                leaf = path->nodes[0];
 636                if (path->slots[0] >= btrfs_header_nritems(leaf)) {
 637                        BUG_ON(del_nr > 0);
 638                        ret = btrfs_next_leaf(root, path);
 639                        if (ret < 0)
 640                                break;
 641                        if (ret > 0) {
 642                                ret = 0;
 643                                break;
 644                        }
 645                        leaf = path->nodes[0];
 646                        recow = 1;
 647                }
 648
 649                btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 650                if (key.objectid > ino ||
 651                    key.type > BTRFS_EXTENT_DATA_KEY || key.offset >= end)
 652                        break;
 653
 654                fi = btrfs_item_ptr(leaf, path->slots[0],
 655                                    struct btrfs_file_extent_item);
 656                extent_type = btrfs_file_extent_type(leaf, fi);
 657
 658                if (extent_type == BTRFS_FILE_EXTENT_REG ||
 659                    extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
 660                        disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
 661                        num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
 662                        extent_offset = btrfs_file_extent_offset(leaf, fi);
 663                        extent_end = key.offset +
 664                                btrfs_file_extent_num_bytes(leaf, fi);
 665                } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
 666                        extent_end = key.offset +
 667                                btrfs_file_extent_inline_len(leaf, fi);
 668                } else {
 669                        WARN_ON(1);
 670                        extent_end = search_start;
 671                }
 672
 673                if (extent_end <= search_start) {
 674                        path->slots[0]++;
 675                        goto next_slot;
 676                }
 677
 678                found = 1;
 679                search_start = max(key.offset, start);
 680                if (recow || !modify_tree) {
 681                        modify_tree = -1;
 682                        btrfs_release_path(path);
 683                        continue;
 684                }
 685
 686                /*
 687                 *     | - range to drop - |
 688                 *  | -------- extent -------- |
 689                 */
 690                if (start > key.offset && end < extent_end) {
 691                        BUG_ON(del_nr > 0);
 692                        BUG_ON(extent_type == BTRFS_FILE_EXTENT_INLINE);
 693
 694                        memcpy(&new_key, &key, sizeof(new_key));
 695                        new_key.offset = start;
 696                        ret = btrfs_duplicate_item(trans, root, path,
 697                                                   &new_key);
 698                        if (ret == -EAGAIN) {
 699                                btrfs_release_path(path);
 700                                continue;
 701                        }
 702                        if (ret < 0)
 703                                break;
 704
 705                        leaf = path->nodes[0];
 706                        fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
 707                                            struct btrfs_file_extent_item);
 708                        btrfs_set_file_extent_num_bytes(leaf, fi,
 709                                                        start - key.offset);
 710
 711                        fi = btrfs_item_ptr(leaf, path->slots[0],
 712                                            struct btrfs_file_extent_item);
 713
 714                        extent_offset += start - key.offset;
 715                        btrfs_set_file_extent_offset(leaf, fi, extent_offset);
 716                        btrfs_set_file_extent_num_bytes(leaf, fi,
 717                                                        extent_end - start);
 718                        btrfs_mark_buffer_dirty(leaf);
 719
 720                        if (update_refs && disk_bytenr > 0) {
 721                                ret = btrfs_inc_extent_ref(trans, root,
 722                                                disk_bytenr, num_bytes, 0,
 723                                                root->root_key.objectid,
 724                                                new_key.objectid,
 725                                                start - extent_offset, 0);
 726                                BUG_ON(ret); /* -ENOMEM */
 727                        }
 728                        key.offset = start;
 729                }
 730                /*
 731                 *  | ---- range to drop ----- |
 732                 *      | -------- extent -------- |
 733                 */
 734                if (start <= key.offset && end < extent_end) {
 735                        BUG_ON(extent_type == BTRFS_FILE_EXTENT_INLINE);
 736
 737                        memcpy(&new_key, &key, sizeof(new_key));
 738                        new_key.offset = end;
 739                        btrfs_set_item_key_safe(trans, root, path, &new_key);
 740
 741                        extent_offset += end - key.offset;
 742                        btrfs_set_file_extent_offset(leaf, fi, extent_offset);
 743                        btrfs_set_file_extent_num_bytes(leaf, fi,
 744                                                        extent_end - end);
 745                        btrfs_mark_buffer_dirty(leaf);
 746                        if (update_refs && disk_bytenr > 0)
 747                                inode_sub_bytes(inode, end - key.offset);
 748                        break;
 749                }
 750
 751                search_start = extent_end;
 752                /*
 753                 *       | ---- range to drop ----- |
 754                 *  | -------- extent -------- |
 755                 */
 756                if (start > key.offset && end >= extent_end) {
 757                        BUG_ON(del_nr > 0);
 758                        BUG_ON(extent_type == BTRFS_FILE_EXTENT_INLINE);
 759
 760                        btrfs_set_file_extent_num_bytes(leaf, fi,
 761                                                        start - key.offset);
 762                        btrfs_mark_buffer_dirty(leaf);
 763                        if (update_refs && disk_bytenr > 0)
 764                                inode_sub_bytes(inode, extent_end - start);
 765                        if (end == extent_end)
 766                                break;
 767
 768                        path->slots[0]++;
 769                        goto next_slot;
 770                }
 771
 772                /*
 773                 *  | ---- range to drop ----- |
 774                 *    | ------ extent ------ |
 775                 */
 776                if (start <= key.offset && end >= extent_end) {
 777                        if (del_nr == 0) {
 778                                del_slot = path->slots[0];
 779                                del_nr = 1;
 780                        } else {
 781                                BUG_ON(del_slot + del_nr != path->slots[0]);
 782                                del_nr++;
 783                        }
 784
 785                        if (update_refs &&
 786                            extent_type == BTRFS_FILE_EXTENT_INLINE) {
 787                                inode_sub_bytes(inode,
 788                                                extent_end - key.offset);
 789                                extent_end = ALIGN(extent_end,
 790                                                   root->sectorsize);
 791                        } else if (update_refs && disk_bytenr > 0) {
 792                                ret = btrfs_free_extent(trans, root,
 793                                                disk_bytenr, num_bytes, 0,
 794                                                root->root_key.objectid,
 795                                                key.objectid, key.offset -
 796                                                extent_offset, 0);
 797                                BUG_ON(ret); /* -ENOMEM */
 798                                inode_sub_bytes(inode,
 799                                                extent_end - key.offset);
 800                        }
 801
 802                        if (end == extent_end)
 803                                break;
 804
 805                        if (path->slots[0] + 1 < btrfs_header_nritems(leaf)) {
 806                                path->slots[0]++;
 807                                goto next_slot;
 808                        }
 809
 810                        ret = btrfs_del_items(trans, root, path, del_slot,
 811                                              del_nr);
 812                        if (ret) {
 813                                btrfs_abort_transaction(trans, root, ret);
 814                                break;
 815                        }
 816
 817                        del_nr = 0;
 818                        del_slot = 0;
 819
 820                        btrfs_release_path(path);
 821                        continue;
 822                }
 823
 824                BUG_ON(1);
 825        }
 826
 827        if (!ret && del_nr > 0) {
 828                ret = btrfs_del_items(trans, root, path, del_slot, del_nr);
 829                if (ret)
 830                        btrfs_abort_transaction(trans, root, ret);
 831        }
 832
 833        if (drop_end)
 834                *drop_end = found ? min(end, extent_end) : end;
 835        btrfs_release_path(path);
 836        return ret;
 837}
 838
 839int btrfs_drop_extents(struct btrfs_trans_handle *trans,
 840                       struct btrfs_root *root, struct inode *inode, u64 start,
 841                       u64 end, int drop_cache)
 842{
 843        struct btrfs_path *path;
 844        int ret;
 845
 846        path = btrfs_alloc_path();
 847        if (!path)
 848                return -ENOMEM;
 849        ret = __btrfs_drop_extents(trans, root, inode, path, start, end, NULL,
 850                                   drop_cache);
 851        btrfs_free_path(path);
 852        return ret;
 853}
 854
 855static int extent_mergeable(struct extent_buffer *leaf, int slot,
 856                            u64 objectid, u64 bytenr, u64 orig_offset,
 857                            u64 *start, u64 *end)
 858{
 859        struct btrfs_file_extent_item *fi;
 860        struct btrfs_key key;
 861        u64 extent_end;
 862
 863        if (slot < 0 || slot >= btrfs_header_nritems(leaf))
 864                return 0;
 865
 866        btrfs_item_key_to_cpu(leaf, &key, slot);
 867        if (key.objectid != objectid || key.type != BTRFS_EXTENT_DATA_KEY)
 868                return 0;
 869
 870        fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
 871        if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG ||
 872            btrfs_file_extent_disk_bytenr(leaf, fi) != bytenr ||
 873            btrfs_file_extent_offset(leaf, fi) != key.offset - orig_offset ||
 874            btrfs_file_extent_compression(leaf, fi) ||
 875            btrfs_file_extent_encryption(leaf, fi) ||
 876            btrfs_file_extent_other_encoding(leaf, fi))
 877                return 0;
 878
 879        extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
 880        if ((*start && *start != key.offset) || (*end && *end != extent_end))
 881                return 0;
 882
 883        *start = key.offset;
 884        *end = extent_end;
 885        return 1;
 886}
 887
 888/*
 889 * Mark extent in the range start - end as written.
 890 *
 891 * This changes extent type from 'pre-allocated' to 'regular'. If only
 892 * part of extent is marked as written, the extent will be split into
 893 * two or three.
 894 */
 895int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
 896                              struct inode *inode, u64 start, u64 end)
 897{
 898        struct btrfs_root *root = BTRFS_I(inode)->root;
 899        struct extent_buffer *leaf;
 900        struct btrfs_path *path;
 901        struct btrfs_file_extent_item *fi;
 902        struct btrfs_key key;
 903        struct btrfs_key new_key;
 904        u64 bytenr;
 905        u64 num_bytes;
 906        u64 extent_end;
 907        u64 orig_offset;
 908        u64 other_start;
 909        u64 other_end;
 910        u64 split;
 911        int del_nr = 0;
 912        int del_slot = 0;
 913        int recow;
 914        int ret;
 915        u64 ino = btrfs_ino(inode);
 916
 917        path = btrfs_alloc_path();
 918        if (!path)
 919                return -ENOMEM;
 920again:
 921        recow = 0;
 922        split = start;
 923        key.objectid = ino;
 924        key.type = BTRFS_EXTENT_DATA_KEY;
 925        key.offset = split;
 926
 927        ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
 928        if (ret < 0)
 929                goto out;
 930        if (ret > 0 && path->slots[0] > 0)
 931                path->slots[0]--;
 932
 933        leaf = path->nodes[0];
 934        btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
 935        BUG_ON(key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY);
 936        fi = btrfs_item_ptr(leaf, path->slots[0],
 937                            struct btrfs_file_extent_item);
 938        BUG_ON(btrfs_file_extent_type(leaf, fi) !=
 939               BTRFS_FILE_EXTENT_PREALLOC);
 940        extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
 941        BUG_ON(key.offset > start || extent_end < end);
 942
 943        bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
 944        num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
 945        orig_offset = key.offset - btrfs_file_extent_offset(leaf, fi);
 946        memcpy(&new_key, &key, sizeof(new_key));
 947
 948        if (start == key.offset && end < extent_end) {
 949                other_start = 0;
 950                other_end = start;
 951                if (extent_mergeable(leaf, path->slots[0] - 1,
 952                                     ino, bytenr, orig_offset,
 953                                     &other_start, &other_end)) {
 954                        new_key.offset = end;
 955                        btrfs_set_item_key_safe(trans, root, path, &new_key);
 956                        fi = btrfs_item_ptr(leaf, path->slots[0],
 957                                            struct btrfs_file_extent_item);
 958                        btrfs_set_file_extent_generation(leaf, fi,
 959                                                         trans->transid);
 960                        btrfs_set_file_extent_num_bytes(leaf, fi,
 961                                                        extent_end - end);
 962                        btrfs_set_file_extent_offset(leaf, fi,
 963                                                     end - orig_offset);
 964                        fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
 965                                            struct btrfs_file_extent_item);
 966                        btrfs_set_file_extent_generation(leaf, fi,
 967                                                         trans->transid);
 968                        btrfs_set_file_extent_num_bytes(leaf, fi,
 969                                                        end - other_start);
 970                        btrfs_mark_buffer_dirty(leaf);
 971                        goto out;
 972                }
 973        }
 974
 975        if (start > key.offset && end == extent_end) {
 976                other_start = end;
 977                other_end = 0;
 978                if (extent_mergeable(leaf, path->slots[0] + 1,
 979                                     ino, bytenr, orig_offset,
 980                                     &other_start, &other_end)) {
 981                        fi = btrfs_item_ptr(leaf, path->slots[0],
 982                                            struct btrfs_file_extent_item);
 983                        btrfs_set_file_extent_num_bytes(leaf, fi,
 984                                                        start - key.offset);
 985                        btrfs_set_file_extent_generation(leaf, fi,
 986                                                         trans->transid);
 987                        path->slots[0]++;
 988                        new_key.offset = start;
 989                        btrfs_set_item_key_safe(trans, root, path, &new_key);
 990
 991                        fi = btrfs_item_ptr(leaf, path->slots[0],
 992                                            struct btrfs_file_extent_item);
 993                        btrfs_set_file_extent_generation(leaf, fi,
 994                                                         trans->transid);
 995                        btrfs_set_file_extent_num_bytes(leaf, fi,
 996                                                        other_end - start);
 997                        btrfs_set_file_extent_offset(leaf, fi,
 998                                                     start - orig_offset);
 999                        btrfs_mark_buffer_dirty(leaf);
1000                        goto out;
1001                }
1002        }
1003
1004        while (start > key.offset || end < extent_end) {
1005                if (key.offset == start)
1006                        split = end;
1007
1008                new_key.offset = split;
1009                ret = btrfs_duplicate_item(trans, root, path, &new_key);
1010                if (ret == -EAGAIN) {
1011                        btrfs_release_path(path);
1012                        goto again;
1013                }
1014                if (ret < 0) {
1015                        btrfs_abort_transaction(trans, root, ret);
1016                        goto out;
1017                }
1018
1019                leaf = path->nodes[0];
1020                fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
1021                                    struct btrfs_file_extent_item);
1022                btrfs_set_file_extent_generation(leaf, fi, trans->transid);
1023                btrfs_set_file_extent_num_bytes(leaf, fi,
1024                                                split - key.offset);
1025
1026                fi = btrfs_item_ptr(leaf, path->slots[0],
1027                                    struct btrfs_file_extent_item);
1028
1029                btrfs_set_file_extent_generation(leaf, fi, trans->transid);
1030                btrfs_set_file_extent_offset(leaf, fi, split - orig_offset);
1031                btrfs_set_file_extent_num_bytes(leaf, fi,
1032                                                extent_end - split);
1033                btrfs_mark_buffer_dirty(leaf);
1034
1035                ret = btrfs_inc_extent_ref(trans, root, bytenr, num_bytes, 0,
1036                                           root->root_key.objectid,
1037                                           ino, orig_offset, 0);
1038                BUG_ON(ret); /* -ENOMEM */
1039
1040                if (split == start) {
1041                        key.offset = start;
1042                } else {
1043                        BUG_ON(start != key.offset);
1044                        path->slots[0]--;
1045                        extent_end = end;
1046                }
1047                recow = 1;
1048        }
1049
1050        other_start = end;
1051        other_end = 0;
1052        if (extent_mergeable(leaf, path->slots[0] + 1,
1053                             ino, bytenr, orig_offset,
1054                             &other_start, &other_end)) {
1055                if (recow) {
1056                        btrfs_release_path(path);
1057                        goto again;
1058                }
1059                extent_end = other_end;
1060                del_slot = path->slots[0] + 1;
1061                del_nr++;
1062                ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
1063                                        0, root->root_key.objectid,
1064                                        ino, orig_offset, 0);
1065                BUG_ON(ret); /* -ENOMEM */
1066        }
1067        other_start = 0;
1068        other_end = start;
1069        if (extent_mergeable(leaf, path->slots[0] - 1,
1070                             ino, bytenr, orig_offset,
1071                             &other_start, &other_end)) {
1072                if (recow) {
1073                        btrfs_release_path(path);
1074                        goto again;
1075                }
1076                key.offset = other_start;
1077                del_slot = path->slots[0];
1078                del_nr++;
1079                ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
1080                                        0, root->root_key.objectid,
1081                                        ino, orig_offset, 0);
1082                BUG_ON(ret); /* -ENOMEM */
1083        }
1084        if (del_nr == 0) {
1085                fi = btrfs_item_ptr(leaf, path->slots[0],
1086                           struct btrfs_file_extent_item);
1087                btrfs_set_file_extent_type(leaf, fi,
1088                                           BTRFS_FILE_EXTENT_REG);
1089                btrfs_set_file_extent_generation(leaf, fi, trans->transid);
1090                btrfs_mark_buffer_dirty(leaf);
1091        } else {
1092                fi = btrfs_item_ptr(leaf, del_slot - 1,
1093                           struct btrfs_file_extent_item);
1094                btrfs_set_file_extent_type(leaf, fi,
1095                                           BTRFS_FILE_EXTENT_REG);
1096                btrfs_set_file_extent_generation(leaf, fi, trans->transid);
1097                btrfs_set_file_extent_num_bytes(leaf, fi,
1098                                                extent_end - key.offset);
1099                btrfs_mark_buffer_dirty(leaf);
1100
1101                ret = btrfs_del_items(trans, root, path, del_slot, del_nr);
1102                if (ret < 0) {
1103                        btrfs_abort_transaction(trans, root, ret);
1104                        goto out;
1105                }
1106        }
1107out:
1108        btrfs_free_path(path);
1109        return 0;
1110}
1111
1112/*
1113 * on error we return an unlocked page and the error value
1114 * on success we return a locked page and 0
1115 */
1116static int prepare_uptodate_page(struct page *page, u64 pos,
1117                                 bool force_uptodate)
1118{
1119        int ret = 0;
1120
1121        if (((pos & (PAGE_CACHE_SIZE - 1)) || force_uptodate) &&
1122            !PageUptodate(page)) {
1123                ret = btrfs_readpage(NULL, page);
1124                if (ret)
1125                        return ret;
1126                lock_page(page);
1127                if (!PageUptodate(page)) {
1128                        unlock_page(page);
1129                        return -EIO;
1130                }
1131        }
1132        return 0;
1133}
1134
1135/*
1136 * this gets pages into the page cache and locks them down, it also properly
1137 * waits for data=ordered extents to finish before allowing the pages to be
1138 * modified.
1139 */
1140static noinline int prepare_pages(struct btrfs_root *root, struct file *file,
1141                         struct page **pages, size_t num_pages,
1142                         loff_t pos, unsigned long first_index,
1143                         size_t write_bytes, bool force_uptodate)
1144{
1145        struct extent_state *cached_state = NULL;
1146        int i;
1147        unsigned long index = pos >> PAGE_CACHE_SHIFT;
1148        struct inode *inode = fdentry(file)->d_inode;
1149        gfp_t mask = btrfs_alloc_write_mask(inode->i_mapping);
1150        int err = 0;
1151        int faili = 0;
1152        u64 start_pos;
1153        u64 last_pos;
1154
1155        start_pos = pos & ~((u64)root->sectorsize - 1);
1156        last_pos = ((u64)index + num_pages) << PAGE_CACHE_SHIFT;
1157
1158again:
1159        for (i = 0; i < num_pages; i++) {
1160                pages[i] = find_or_create_page(inode->i_mapping, index + i,
1161                                               mask | __GFP_WRITE);
1162                if (!pages[i]) {
1163                        faili = i - 1;
1164                        err = -ENOMEM;
1165                        goto fail;
1166                }
1167
1168                if (i == 0)
1169                        err = prepare_uptodate_page(pages[i], pos,
1170                                                    force_uptodate);
1171                if (i == num_pages - 1)
1172                        err = prepare_uptodate_page(pages[i],
1173                                                    pos + write_bytes, false);
1174                if (err) {
1175                        page_cache_release(pages[i]);
1176                        faili = i - 1;
1177                        goto fail;
1178                }
1179                wait_on_page_writeback(pages[i]);
1180        }
1181        err = 0;
1182        if (start_pos < inode->i_size) {
1183                struct btrfs_ordered_extent *ordered;
1184                lock_extent_bits(&BTRFS_I(inode)->io_tree,
1185                                 start_pos, last_pos - 1, 0, &cached_state);
1186                ordered = btrfs_lookup_first_ordered_extent(inode,
1187                                                            last_pos - 1);
1188                if (ordered &&
1189                    ordered->file_offset + ordered->len > start_pos &&
1190                    ordered->file_offset < last_pos) {
1191                        btrfs_put_ordered_extent(ordered);
1192                        unlock_extent_cached(&BTRFS_I(inode)->io_tree,
1193                                             start_pos, last_pos - 1,
1194                                             &cached_state, GFP_NOFS);
1195                        for (i = 0; i < num_pages; i++) {
1196                                unlock_page(pages[i]);
1197                                page_cache_release(pages[i]);
1198                        }
1199                        btrfs_wait_ordered_range(inode, start_pos,
1200                                                 last_pos - start_pos);
1201                        goto again;
1202                }
1203                if (ordered)
1204                        btrfs_put_ordered_extent(ordered);
1205
1206                clear_extent_bit(&BTRFS_I(inode)->io_tree, start_pos,
1207                                  last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC |
1208                                  EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,
1209                                  0, 0, &cached_state, GFP_NOFS);
1210                unlock_extent_cached(&BTRFS_I(inode)->io_tree,
1211                                     start_pos, last_pos - 1, &cached_state,
1212                                     GFP_NOFS);
1213        }
1214        for (i = 0; i < num_pages; i++) {
1215                if (clear_page_dirty_for_io(pages[i]))
1216                        account_page_redirty(pages[i]);
1217                set_page_extent_mapped(pages[i]);
1218                WARN_ON(!PageLocked(pages[i]));
1219        }
1220        return 0;
1221fail:
1222        while (faili >= 0) {
1223                unlock_page(pages[faili]);
1224                page_cache_release(pages[faili]);
1225                faili--;
1226        }
1227        return err;
1228
1229}
1230
1231static noinline ssize_t __btrfs_buffered_write(struct file *file,
1232                                               struct iov_iter *i,
1233                                               loff_t pos)
1234{
1235        struct inode *inode = fdentry(file)->d_inode;
1236        struct btrfs_root *root = BTRFS_I(inode)->root;
1237        struct page **pages = NULL;
1238        unsigned long first_index;
1239        size_t num_written = 0;
1240        int nrptrs;
1241        int ret = 0;
1242        bool force_page_uptodate = false;
1243
1244        nrptrs = min((iov_iter_count(i) + PAGE_CACHE_SIZE - 1) /
1245                     PAGE_CACHE_SIZE, PAGE_CACHE_SIZE /
1246                     (sizeof(struct page *)));
1247        nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);
1248        nrptrs = max(nrptrs, 8);
1249        pages = kmalloc(nrptrs * sizeof(struct page *), GFP_KERNEL);
1250        if (!pages)
1251                return -ENOMEM;
1252
1253        first_index = pos >> PAGE_CACHE_SHIFT;
1254
1255        while (iov_iter_count(i) > 0) {
1256                size_t offset = pos & (PAGE_CACHE_SIZE - 1);
1257                size_t write_bytes = min(iov_iter_count(i),
1258                                         nrptrs * (size_t)PAGE_CACHE_SIZE -
1259                                         offset);
1260                size_t num_pages = (write_bytes + offset +
1261                                    PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1262                size_t dirty_pages;
1263                size_t copied;
1264
1265                WARN_ON(num_pages > nrptrs);
1266
1267                /*
1268                 * Fault pages before locking them in prepare_pages
1269                 * to avoid recursive lock
1270                 */
1271                if (unlikely(iov_iter_fault_in_readable(i, write_bytes))) {
1272                        ret = -EFAULT;
1273                        break;
1274                }
1275
1276                ret = btrfs_delalloc_reserve_space(inode,
1277                                        num_pages << PAGE_CACHE_SHIFT);
1278                if (ret)
1279                        break;
1280
1281                /*
1282                 * This is going to setup the pages array with the number of
1283                 * pages we want, so we don't really need to worry about the
1284                 * contents of pages from loop to loop
1285                 */
1286                ret = prepare_pages(root, file, pages, num_pages,
1287                                    pos, first_index, write_bytes,
1288                                    force_page_uptodate);
1289                if (ret) {
1290                        btrfs_delalloc_release_space(inode,
1291                                        num_pages << PAGE_CACHE_SHIFT);
1292                        break;
1293                }
1294
1295                copied = btrfs_copy_from_user(pos, num_pages,
1296                                           write_bytes, pages, i);
1297
1298                /*
1299                 * if we have trouble faulting in the pages, fall
1300                 * back to one page at a time
1301                 */
1302                if (copied < write_bytes)
1303                        nrptrs = 1;
1304
1305                if (copied == 0) {
1306                        force_page_uptodate = true;
1307                        dirty_pages = 0;
1308                } else {
1309                        force_page_uptodate = false;
1310                        dirty_pages = (copied + offset +
1311                                       PAGE_CACHE_SIZE - 1) >>
1312                                       PAGE_CACHE_SHIFT;
1313                }
1314
1315                /*
1316                 * If we had a short copy we need to release the excess delaloc
1317                 * bytes we reserved.  We need to increment outstanding_extents
1318                 * because btrfs_delalloc_release_space will decrement it, but
1319                 * we still have an outstanding extent for the chunk we actually
1320                 * managed to copy.
1321                 */
1322                if (num_pages > dirty_pages) {
1323                        if (copied > 0) {
1324                                spin_lock(&BTRFS_I(inode)->lock);
1325                                BTRFS_I(inode)->outstanding_extents++;
1326                                spin_unlock(&BTRFS_I(inode)->lock);
1327                        }
1328                        btrfs_delalloc_release_space(inode,
1329                                        (num_pages - dirty_pages) <<
1330                                        PAGE_CACHE_SHIFT);
1331                }
1332
1333                if (copied > 0) {
1334                        ret = btrfs_dirty_pages(root, inode, pages,
1335                                                dirty_pages, pos, copied,
1336                                                NULL);
1337                        if (ret) {
1338                                btrfs_delalloc_release_space(inode,
1339                                        dirty_pages << PAGE_CACHE_SHIFT);
1340                                btrfs_drop_pages(pages, num_pages);
1341                                break;
1342                        }
1343                }
1344
1345                btrfs_drop_pages(pages, num_pages);
1346
1347                cond_resched();
1348
1349                balance_dirty_pages_ratelimited_nr(inode->i_mapping,
1350                                                   dirty_pages);
1351                if (dirty_pages < (root->leafsize >> PAGE_CACHE_SHIFT) + 1)
1352                        btrfs_btree_balance_dirty(root, 1);
1353
1354                pos += copied;
1355                num_written += copied;
1356        }
1357
1358        kfree(pages);
1359
1360        return num_written ? num_written : ret;
1361}
1362
1363static ssize_t __btrfs_direct_write(struct kiocb *iocb,
1364                                    const struct iovec *iov,
1365                                    unsigned long nr_segs, loff_t pos,
1366                                    loff_t *ppos, size_t count, size_t ocount)
1367{
1368        struct file *file = iocb->ki_filp;
1369        struct iov_iter i;
1370        ssize_t written;
1371        ssize_t written_buffered;
1372        loff_t endbyte;
1373        int err;
1374
1375        written = generic_file_direct_write(iocb, iov, &nr_segs, pos, ppos,
1376                                            count, ocount);
1377
1378        if (written < 0 || written == count)
1379                return written;
1380
1381        pos += written;
1382        count -= written;
1383        iov_iter_init(&i, iov, nr_segs, count, written);
1384        written_buffered = __btrfs_buffered_write(file, &i, pos);
1385        if (written_buffered < 0) {
1386                err = written_buffered;
1387                goto out;
1388        }
1389        endbyte = pos + written_buffered - 1;
1390        err = filemap_write_and_wait_range(file->f_mapping, pos, endbyte);
1391        if (err)
1392                goto out;
1393        written += written_buffered;
1394        *ppos = pos + written_buffered;
1395        invalidate_mapping_pages(file->f_mapping, pos >> PAGE_CACHE_SHIFT,
1396                                 endbyte >> PAGE_CACHE_SHIFT);
1397out:
1398        return written ? written : err;
1399}
1400
1401static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
1402                                    const struct iovec *iov,
1403                                    unsigned long nr_segs, loff_t pos)
1404{
1405        struct file *file = iocb->ki_filp;
1406        struct inode *inode = fdentry(file)->d_inode;
1407        struct btrfs_root *root = BTRFS_I(inode)->root;
1408        loff_t *ppos = &iocb->ki_pos;
1409        u64 start_pos;
1410        ssize_t num_written = 0;
1411        ssize_t err = 0;
1412        size_t count, ocount;
1413
1414        sb_start_write(inode->i_sb);
1415
1416        mutex_lock(&inode->i_mutex);
1417
1418        err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ);
1419        if (err) {
1420                mutex_unlock(&inode->i_mutex);
1421                goto out;
1422        }
1423        count = ocount;
1424
1425        current->backing_dev_info = inode->i_mapping->backing_dev_info;
1426        err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode));
1427        if (err) {
1428                mutex_unlock(&inode->i_mutex);
1429                goto out;
1430        }
1431
1432        if (count == 0) {
1433                mutex_unlock(&inode->i_mutex);
1434                goto out;
1435        }
1436
1437        err = file_remove_suid(file);
1438        if (err) {
1439                mutex_unlock(&inode->i_mutex);
1440                goto out;
1441        }
1442
1443        /*
1444         * If BTRFS flips readonly due to some impossible error
1445         * (fs_info->fs_state now has BTRFS_SUPER_FLAG_ERROR),
1446         * although we have opened a file as writable, we have
1447         * to stop this write operation to ensure FS consistency.
1448         */
1449        if (root->fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) {
1450                mutex_unlock(&inode->i_mutex);
1451                err = -EROFS;
1452                goto out;
1453        }
1454
1455        err = file_update_time(file);
1456        if (err) {
1457                mutex_unlock(&inode->i_mutex);
1458                goto out;
1459        }
1460
1461        start_pos = round_down(pos, root->sectorsize);
1462        if (start_pos > i_size_read(inode)) {
1463                err = btrfs_cont_expand(inode, i_size_read(inode), start_pos);
1464                if (err) {
1465                        mutex_unlock(&inode->i_mutex);
1466                        goto out;
1467                }
1468        }
1469
1470        if (unlikely(file->f_flags & O_DIRECT)) {
1471                num_written = __btrfs_direct_write(iocb, iov, nr_segs,
1472                                                   pos, ppos, count, ocount);
1473        } else {
1474                struct iov_iter i;
1475
1476                iov_iter_init(&i, iov, nr_segs, count, num_written);
1477
1478                num_written = __btrfs_buffered_write(file, &i, pos);
1479                if (num_written > 0)
1480                        *ppos = pos + num_written;
1481        }
1482
1483        mutex_unlock(&inode->i_mutex);
1484
1485        /*
1486         * we want to make sure fsync finds this change
1487         * but we haven't joined a transaction running right now.
1488         *
1489         * Later on, someone is sure to update the inode and get the
1490         * real transid recorded.
1491         *
1492         * We set last_trans now to the fs_info generation + 1,
1493         * this will either be one more than the running transaction
1494         * or the generation used for the next transaction if there isn't
1495         * one running right now.
1496         */
1497        BTRFS_I(inode)->last_trans = root->fs_info->generation + 1;
1498        if (num_written > 0 || num_written == -EIOCBQUEUED) {
1499                err = generic_write_sync(file, pos, num_written);
1500                if (err < 0 && num_written > 0)
1501                        num_written = err;
1502        }
1503out:
1504        sb_end_write(inode->i_sb);
1505        current->backing_dev_info = NULL;
1506        return num_written ? num_written : err;
1507}
1508
1509int btrfs_release_file(struct inode *inode, struct file *filp)
1510{
1511        /*
1512         * ordered_data_close is set by settattr when we are about to truncate
1513         * a file from a non-zero size to a zero size.  This tries to
1514         * flush down new bytes that may have been written if the
1515         * application were using truncate to replace a file in place.
1516         */
1517        if (test_and_clear_bit(BTRFS_INODE_ORDERED_DATA_CLOSE,
1518                               &BTRFS_I(inode)->runtime_flags)) {
1519                btrfs_add_ordered_operation(NULL, BTRFS_I(inode)->root, inode);
1520                if (inode->i_size > BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT)
1521                        filemap_flush(inode->i_mapping);
1522        }
1523        if (filp->private_data)
1524                btrfs_ioctl_trans_end(filp);
1525        return 0;
1526}
1527
1528/*
1529 * fsync call for both files and directories.  This logs the inode into
1530 * the tree log instead of forcing full commits whenever possible.
1531 *
1532 * It needs to call filemap_fdatawait so that all ordered extent updates are
1533 * in the metadata btree are up to date for copying to the log.
1534 *
1535 * It drops the inode mutex before doing the tree log commit.  This is an
1536 * important optimization for directories because holding the mutex prevents
1537 * new operations on the dir while we write to disk.
1538 */
1539int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1540{
1541        struct dentry *dentry = file->f_path.dentry;
1542        struct inode *inode = dentry->d_inode;
1543        struct btrfs_root *root = BTRFS_I(inode)->root;
1544        int ret = 0;
1545        struct btrfs_trans_handle *trans;
1546
1547        trace_btrfs_sync_file(file, datasync);
1548
1549        /*
1550         * We write the dirty pages in the range and wait until they complete
1551         * out of the ->i_mutex. If so, we can flush the dirty pages by
1552         * multi-task, and make the performance up.
1553         */
1554        ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
1555        if (ret)
1556                return ret;
1557
1558        mutex_lock(&inode->i_mutex);
1559
1560        /*
1561         * We flush the dirty pages again to avoid some dirty pages in the
1562         * range being left.
1563         */
1564        atomic_inc(&root->log_batch);
1565        btrfs_wait_ordered_range(inode, start, end);
1566        atomic_inc(&root->log_batch);
1567
1568        /*
1569         * check the transaction that last modified this inode
1570         * and see if its already been committed
1571         */
1572        if (!BTRFS_I(inode)->last_trans) {
1573                mutex_unlock(&inode->i_mutex);
1574                goto out;
1575        }
1576
1577        /*
1578         * if the last transaction that changed this file was before
1579         * the current transaction, we can bail out now without any
1580         * syncing
1581         */
1582        smp_mb();
1583        if (btrfs_inode_in_log(inode, root->fs_info->generation) ||
1584            BTRFS_I(inode)->last_trans <=
1585            root->fs_info->last_trans_committed) {
1586                BTRFS_I(inode)->last_trans = 0;
1587
1588                /*
1589                 * We'v had everything committed since the last time we were
1590                 * modified so clear this flag in case it was set for whatever
1591                 * reason, it's no longer relevant.
1592                 */
1593                clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
1594                          &BTRFS_I(inode)->runtime_flags);
1595                mutex_unlock(&inode->i_mutex);
1596                goto out;
1597        }
1598
1599        /*
1600         * ok we haven't committed the transaction yet, lets do a commit
1601         */
1602        if (file->private_data)
1603                btrfs_ioctl_trans_end(file);
1604
1605        trans = btrfs_start_transaction(root, 0);
1606        if (IS_ERR(trans)) {
1607                ret = PTR_ERR(trans);
1608                mutex_unlock(&inode->i_mutex);
1609                goto out;
1610        }
1611
1612        ret = btrfs_log_dentry_safe(trans, root, dentry);
1613        if (ret < 0) {
1614                mutex_unlock(&inode->i_mutex);
1615                goto out;
1616        }
1617
1618        /* we've logged all the items and now have a consistent
1619         * version of the file in the log.  It is possible that
1620         * someone will come in and modify the file, but that's
1621         * fine because the log is consistent on disk, and we
1622         * have references to all of the file's extents
1623         *
1624         * It is possible that someone will come in and log the
1625         * file again, but that will end up using the synchronization
1626         * inside btrfs_sync_log to keep things safe.
1627         */
1628        mutex_unlock(&inode->i_mutex);
1629
1630        if (ret != BTRFS_NO_LOG_SYNC) {
1631                if (ret > 0) {
1632                        ret = btrfs_commit_transaction(trans, root);
1633                } else {
1634                        ret = btrfs_sync_log(trans, root);
1635                        if (ret == 0)
1636                                ret = btrfs_end_transaction(trans, root);
1637                        else
1638                                ret = btrfs_commit_transaction(trans, root);
1639                }
1640        } else {
1641                ret = btrfs_end_transaction(trans, root);
1642        }
1643out:
1644        return ret > 0 ? -EIO : ret;
1645}
1646
1647static const struct vm_operations_struct btrfs_file_vm_ops = {
1648        .fault          = filemap_fault,
1649        .page_mkwrite   = btrfs_page_mkwrite,
1650        .remap_pages    = generic_file_remap_pages,
1651};
1652
1653static int btrfs_file_mmap(struct file  *filp, struct vm_area_struct *vma)
1654{
1655        struct address_space *mapping = filp->f_mapping;
1656
1657        if (!mapping->a_ops->readpage)
1658                return -ENOEXEC;
1659
1660        file_accessed(filp);
1661        vma->vm_ops = &btrfs_file_vm_ops;
1662
1663        return 0;
1664}
1665
1666static int hole_mergeable(struct inode *inode, struct extent_buffer *leaf,
1667                          int slot, u64 start, u64 end)
1668{
1669        struct btrfs_file_extent_item *fi;
1670        struct btrfs_key key;
1671
1672        if (slot < 0 || slot >= btrfs_header_nritems(leaf))
1673                return 0;
1674
1675        btrfs_item_key_to_cpu(leaf, &key, slot);
1676        if (key.objectid != btrfs_ino(inode) ||
1677            key.type != BTRFS_EXTENT_DATA_KEY)
1678                return 0;
1679
1680        fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
1681
1682        if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG)
1683                return 0;
1684
1685        if (btrfs_file_extent_disk_bytenr(leaf, fi))
1686                return 0;
1687
1688        if (key.offset == end)
1689                return 1;
1690        if (key.offset + btrfs_file_extent_num_bytes(leaf, fi) == start)
1691                return 1;
1692        return 0;
1693}
1694
1695static int fill_holes(struct btrfs_trans_handle *trans, struct inode *inode,
1696                      struct btrfs_path *path, u64 offset, u64 end)
1697{
1698        struct btrfs_root *root = BTRFS_I(inode)->root;
1699        struct extent_buffer *leaf;
1700        struct btrfs_file_extent_item *fi;
1701        struct extent_map *hole_em;
1702        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
1703        struct btrfs_key key;
1704        int ret;
1705
1706        key.objectid = btrfs_ino(inode);
1707        key.type = BTRFS_EXTENT_DATA_KEY;
1708        key.offset = offset;
1709
1710
1711        ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
1712        if (ret < 0)
1713                return ret;
1714        BUG_ON(!ret);
1715
1716        leaf = path->nodes[0];
1717        if (hole_mergeable(inode, leaf, path->slots[0]-1, offset, end)) {
1718                u64 num_bytes;
1719
1720                path->slots[0]--;
1721                fi = btrfs_item_ptr(leaf, path->slots[0],
1722                                    struct btrfs_file_extent_item);
1723                num_bytes = btrfs_file_extent_num_bytes(leaf, fi) +
1724                        end - offset;
1725                btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);
1726                btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);
1727                btrfs_set_file_extent_offset(leaf, fi, 0);
1728                btrfs_mark_buffer_dirty(leaf);
1729                goto out;
1730        }
1731
1732        if (hole_mergeable(inode, leaf, path->slots[0]+1, offset, end)) {
1733                u64 num_bytes;
1734
1735                path->slots[0]++;
1736                key.offset = offset;
1737                btrfs_set_item_key_safe(trans, root, path, &key);
1738                fi = btrfs_item_ptr(leaf, path->slots[0],
1739                                    struct btrfs_file_extent_item);
1740                num_bytes = btrfs_file_extent_num_bytes(leaf, fi) + end -
1741                        offset;
1742                btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);
1743                btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);
1744                btrfs_set_file_extent_offset(leaf, fi, 0);
1745                btrfs_mark_buffer_dirty(leaf);
1746                goto out;
1747        }
1748        btrfs_release_path(path);
1749
1750        ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), offset,
1751                                       0, 0, end - offset, 0, end - offset,
1752                                       0, 0, 0);
1753        if (ret)
1754                return ret;
1755
1756out:
1757        btrfs_release_path(path);
1758
1759        hole_em = alloc_extent_map();
1760        if (!hole_em) {
1761                btrfs_drop_extent_cache(inode, offset, end - 1, 0);
1762                set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
1763                        &BTRFS_I(inode)->runtime_flags);
1764        } else {
1765                hole_em->start = offset;
1766                hole_em->len = end - offset;
1767                hole_em->orig_start = offset;
1768
1769                hole_em->block_start = EXTENT_MAP_HOLE;
1770                hole_em->block_len = 0;
1771                hole_em->bdev = root->fs_info->fs_devices->latest_bdev;
1772                hole_em->compress_type = BTRFS_COMPRESS_NONE;
1773                hole_em->generation = trans->transid;
1774
1775                do {
1776                        btrfs_drop_extent_cache(inode, offset, end - 1, 0);
1777                        write_lock(&em_tree->lock);
1778                        ret = add_extent_mapping(em_tree, hole_em);
1779                        if (!ret)
1780                                list_move(&hole_em->list,
1781                                          &em_tree->modified_extents);
1782                        write_unlock(&em_tree->lock);
1783                } while (ret == -EEXIST);
1784                free_extent_map(hole_em);
1785                if (ret)
1786                        set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
1787                                &BTRFS_I(inode)->runtime_flags);
1788        }
1789
1790        return 0;
1791}
1792
1793static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
1794{
1795        struct btrfs_root *root = BTRFS_I(inode)->root;
1796        struct extent_state *cached_state = NULL;
1797        struct btrfs_path *path;
1798        struct btrfs_block_rsv *rsv;
1799        struct btrfs_trans_handle *trans;
1800        u64 mask = BTRFS_I(inode)->root->sectorsize - 1;
1801        u64 lockstart = (offset + mask) & ~mask;
1802        u64 lockend = ((offset + len) & ~mask) - 1;
1803        u64 cur_offset = lockstart;
1804        u64 min_size = btrfs_calc_trunc_metadata_size(root, 1);
1805        u64 drop_end;
1806        unsigned long nr;
1807        int ret = 0;
1808        int err = 0;
1809        bool same_page = (offset >> PAGE_CACHE_SHIFT) ==
1810                ((offset + len) >> PAGE_CACHE_SHIFT);
1811
1812        btrfs_wait_ordered_range(inode, offset, len);
1813
1814        mutex_lock(&inode->i_mutex);
1815        if (offset >= inode->i_size) {
1816                mutex_unlock(&inode->i_mutex);
1817                return 0;
1818        }
1819
1820        /*
1821         * Only do this if we are in the same page and we aren't doing the
1822         * entire page.
1823         */
1824        if (same_page && len < PAGE_CACHE_SIZE) {
1825                ret = btrfs_truncate_page(inode, offset, len, 0);
1826                mutex_unlock(&inode->i_mutex);
1827                return ret;
1828        }
1829
1830        /* zero back part of the first page */
1831        ret = btrfs_truncate_page(inode, offset, 0, 0);
1832        if (ret) {
1833                mutex_unlock(&inode->i_mutex);
1834                return ret;
1835        }
1836
1837        /* zero the front end of the last page */
1838        ret = btrfs_truncate_page(inode, offset + len, 0, 1);
1839        if (ret) {
1840                mutex_unlock(&inode->i_mutex);
1841                return ret;
1842        }
1843
1844        if (lockend < lockstart) {
1845                mutex_unlock(&inode->i_mutex);
1846                return 0;
1847        }
1848
1849        while (1) {
1850                struct btrfs_ordered_extent *ordered;
1851
1852                truncate_pagecache_range(inode, lockstart, lockend);
1853
1854                lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,
1855                                 0, &cached_state);
1856                ordered = btrfs_lookup_first_ordered_extent(inode, lockend);
1857
1858                /*
1859                 * We need to make sure we have no ordered extents in this range
1860                 * and nobody raced in and read a page in this range, if we did
1861                 * we need to try again.
1862                 */
1863                if ((!ordered ||
1864                    (ordered->file_offset + ordered->len < lockstart ||
1865                     ordered->file_offset > lockend)) &&
1866                     !test_range_bit(&BTRFS_I(inode)->io_tree, lockstart,
1867                                     lockend, EXTENT_UPTODATE, 0,
1868                                     cached_state)) {
1869                        if (ordered)
1870                                btrfs_put_ordered_extent(ordered);
1871                        break;
1872                }
1873                if (ordered)
1874                        btrfs_put_ordered_extent(ordered);
1875                unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart,
1876                                     lockend, &cached_state, GFP_NOFS);
1877                btrfs_wait_ordered_range(inode, lockstart,
1878                                         lockend - lockstart + 1);
1879        }
1880
1881        path = btrfs_alloc_path();
1882        if (!path) {
1883                ret = -ENOMEM;
1884                goto out;
1885        }
1886
1887        rsv = btrfs_alloc_block_rsv(root, BTRFS_BLOCK_RSV_TEMP);
1888        if (!rsv) {
1889                ret = -ENOMEM;
1890                goto out_free;
1891        }
1892        rsv->size = btrfs_calc_trunc_metadata_size(root, 1);
1893        rsv->failfast = 1;
1894
1895        /*
1896         * 1 - update the inode
1897         * 1 - removing the extents in the range
1898         * 1 - adding the hole extent
1899         */
1900        trans = btrfs_start_transaction(root, 3);
1901        if (IS_ERR(trans)) {
1902                err = PTR_ERR(trans);
1903                goto out_free;
1904        }
1905
1906        ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
1907                                      min_size);
1908        BUG_ON(ret);
1909        trans->block_rsv = rsv;
1910
1911        while (cur_offset < lockend) {
1912                ret = __btrfs_drop_extents(trans, root, inode, path,
1913                                           cur_offset, lockend + 1,
1914                                           &drop_end, 1);
1915                if (ret != -ENOSPC)
1916                        break;
1917
1918                trans->block_rsv = &root->fs_info->trans_block_rsv;
1919
1920                ret = fill_holes(trans, inode, path, cur_offset, drop_end);
1921                if (ret) {
1922                        err = ret;
1923                        break;
1924                }
1925
1926                cur_offset = drop_end;
1927
1928                ret = btrfs_update_inode(trans, root, inode);
1929                if (ret) {
1930                        err = ret;
1931                        break;
1932                }
1933
1934                nr = trans->blocks_used;
1935                btrfs_end_transaction(trans, root);
1936                btrfs_btree_balance_dirty(root, nr);
1937
1938                trans = btrfs_start_transaction(root, 3);
1939                if (IS_ERR(trans)) {
1940                        ret = PTR_ERR(trans);
1941                        trans = NULL;
1942                        break;
1943                }
1944
1945                ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
1946                                              rsv, min_size);
1947                BUG_ON(ret);    /* shouldn't happen */
1948                trans->block_rsv = rsv;
1949        }
1950
1951        if (ret) {
1952                err = ret;
1953                goto out_trans;
1954        }
1955
1956        trans->block_rsv = &root->fs_info->trans_block_rsv;
1957        ret = fill_holes(trans, inode, path, cur_offset, drop_end);
1958        if (ret) {
1959                err = ret;
1960                goto out_trans;
1961        }
1962
1963out_trans:
1964        if (!trans)
1965                goto out_free;
1966
1967        trans->block_rsv = &root->fs_info->trans_block_rsv;
1968        ret = btrfs_update_inode(trans, root, inode);
1969        nr = trans->blocks_used;
1970        btrfs_end_transaction(trans, root);
1971        btrfs_btree_balance_dirty(root, nr);
1972out_free:
1973        btrfs_free_path(path);
1974        btrfs_free_block_rsv(root, rsv);
1975out:
1976        unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend,
1977                             &cached_state, GFP_NOFS);
1978        mutex_unlock(&inode->i_mutex);
1979        if (ret && !err)
1980                err = ret;
1981        return err;
1982}
1983
1984static long btrfs_fallocate(struct file *file, int mode,
1985                            loff_t offset, loff_t len)
1986{
1987        struct inode *inode = file->f_path.dentry->d_inode;
1988        struct extent_state *cached_state = NULL;
1989        u64 cur_offset;
1990        u64 last_byte;
1991        u64 alloc_start;
1992        u64 alloc_end;
1993        u64 alloc_hint = 0;
1994        u64 locked_end;
1995        u64 mask = BTRFS_I(inode)->root->sectorsize - 1;
1996        struct extent_map *em;
1997        int ret;
1998
1999        alloc_start = offset & ~mask;
2000        alloc_end =  (offset + len + mask) & ~mask;
2001
2002        /* Make sure we aren't being give some crap mode */
2003        if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
2004                return -EOPNOTSUPP;
2005
2006        if (mode & FALLOC_FL_PUNCH_HOLE)
2007                return btrfs_punch_hole(inode, offset, len);
2008
2009        /*
2010         * Make sure we have enough space before we do the
2011         * allocation.
2012         */
2013        ret = btrfs_check_data_free_space(inode, alloc_end - alloc_start + 1);
2014        if (ret)
2015                return ret;
2016
2017        /*
2018         * wait for ordered IO before we have any locks.  We'll loop again
2019         * below with the locks held.
2020         */
2021        btrfs_wait_ordered_range(inode, alloc_start, alloc_end - alloc_start);
2022
2023        mutex_lock(&inode->i_mutex);
2024        ret = inode_newsize_ok(inode, alloc_end);
2025        if (ret)
2026                goto out;
2027
2028        if (alloc_start > inode->i_size) {
2029                ret = btrfs_cont_expand(inode, i_size_read(inode),
2030                                        alloc_start);
2031                if (ret)
2032                        goto out;
2033        }
2034
2035        locked_end = alloc_end - 1;
2036        while (1) {
2037                struct btrfs_ordered_extent *ordered;
2038
2039                /* the extent lock is ordered inside the running
2040                 * transaction
2041                 */
2042                lock_extent_bits(&BTRFS_I(inode)->io_tree, alloc_start,
2043                                 locked_end, 0, &cached_state);
2044                ordered = btrfs_lookup_first_ordered_extent(inode,
2045                                                            alloc_end - 1);
2046                if (ordered &&
2047                    ordered->file_offset + ordered->len > alloc_start &&
2048                    ordered->file_offset < alloc_end) {
2049                        btrfs_put_ordered_extent(ordered);
2050                        unlock_extent_cached(&BTRFS_I(inode)->io_tree,
2051                                             alloc_start, locked_end,
2052                                             &cached_state, GFP_NOFS);
2053                        /*
2054                         * we can't wait on the range with the transaction
2055                         * running or with the extent lock held
2056                         */
2057                        btrfs_wait_ordered_range(inode, alloc_start,
2058                                                 alloc_end - alloc_start);
2059                } else {
2060                        if (ordered)
2061                                btrfs_put_ordered_extent(ordered);
2062                        break;
2063                }
2064        }
2065
2066        cur_offset = alloc_start;
2067        while (1) {
2068                u64 actual_end;
2069
2070                em = btrfs_get_extent(inode, NULL, 0, cur_offset,
2071                                      alloc_end - cur_offset, 0);
2072                if (IS_ERR_OR_NULL(em)) {
2073                        if (!em)
2074                                ret = -ENOMEM;
2075                        else
2076                                ret = PTR_ERR(em);
2077                        break;
2078                }
2079                last_byte = min(extent_map_end(em), alloc_end);
2080                actual_end = min_t(u64, extent_map_end(em), offset + len);
2081                last_byte = (last_byte + mask) & ~mask;
2082
2083                if (em->block_start == EXTENT_MAP_HOLE ||
2084                    (cur_offset >= inode->i_size &&
2085                     !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {
2086                        ret = btrfs_prealloc_file_range(inode, mode, cur_offset,
2087                                                        last_byte - cur_offset,
2088                                                        1 << inode->i_blkbits,
2089                                                        offset + len,
2090                                                        &alloc_hint);
2091
2092                        if (ret < 0) {
2093                                free_extent_map(em);
2094                                break;
2095                        }
2096                } else if (actual_end > inode->i_size &&
2097                           !(mode & FALLOC_FL_KEEP_SIZE)) {
2098                        /*
2099                         * We didn't need to allocate any more space, but we
2100                         * still extended the size of the file so we need to
2101                         * update i_size.
2102                         */
2103                        inode->i_ctime = CURRENT_TIME;
2104                        i_size_write(inode, actual_end);
2105                        btrfs_ordered_update_i_size(inode, actual_end, NULL);
2106                }
2107                free_extent_map(em);
2108
2109                cur_offset = last_byte;
2110                if (cur_offset >= alloc_end) {
2111                        ret = 0;
2112                        break;
2113                }
2114        }
2115        unlock_extent_cached(&BTRFS_I(inode)->io_tree, alloc_start, locked_end,
2116                             &cached_state, GFP_NOFS);
2117out:
2118        mutex_unlock(&inode->i_mutex);
2119        /* Let go of our reservation. */
2120        btrfs_free_reserved_data_space(inode, alloc_end - alloc_start + 1);
2121        return ret;
2122}
2123
2124static int find_desired_extent(struct inode *inode, loff_t *offset, int origin)
2125{
2126        struct btrfs_root *root = BTRFS_I(inode)->root;
2127        struct extent_map *em;
2128        struct extent_state *cached_state = NULL;
2129        u64 lockstart = *offset;
2130        u64 lockend = i_size_read(inode);
2131        u64 start = *offset;
2132        u64 orig_start = *offset;
2133        u64 len = i_size_read(inode);
2134        u64 last_end = 0;
2135        int ret = 0;
2136
2137        lockend = max_t(u64, root->sectorsize, lockend);
2138        if (lockend <= lockstart)
2139                lockend = lockstart + root->sectorsize;
2140
2141        len = lockend - lockstart + 1;
2142
2143        len = max_t(u64, len, root->sectorsize);
2144        if (inode->i_size == 0)
2145                return -ENXIO;
2146
2147        lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend, 0,
2148                         &cached_state);
2149
2150        /*
2151         * Delalloc is such a pain.  If we have a hole and we have pending
2152         * delalloc for a portion of the hole we will get back a hole that
2153         * exists for the entire range since it hasn't been actually written
2154         * yet.  So to take care of this case we need to look for an extent just
2155         * before the position we want in case there is outstanding delalloc
2156         * going on here.
2157         */
2158        if (origin == SEEK_HOLE && start != 0) {
2159                if (start <= root->sectorsize)
2160                        em = btrfs_get_extent_fiemap(inode, NULL, 0, 0,
2161                                                     root->sectorsize, 0);
2162                else
2163                        em = btrfs_get_extent_fiemap(inode, NULL, 0,
2164                                                     start - root->sectorsize,
2165                                                     root->sectorsize, 0);
2166                if (IS_ERR(em)) {
2167                        ret = PTR_ERR(em);
2168                        goto out;
2169                }
2170                last_end = em->start + em->len;
2171                if (em->block_start == EXTENT_MAP_DELALLOC)
2172                        last_end = min_t(u64, last_end, inode->i_size);
2173                free_extent_map(em);
2174        }
2175
2176        while (1) {
2177                em = btrfs_get_extent_fiemap(inode, NULL, 0, start, len, 0);
2178                if (IS_ERR(em)) {
2179                        ret = PTR_ERR(em);
2180                        break;
2181                }
2182
2183                if (em->block_start == EXTENT_MAP_HOLE) {
2184                        if (test_bit(EXTENT_FLAG_VACANCY, &em->flags)) {
2185                                if (last_end <= orig_start) {
2186                                        free_extent_map(em);
2187                                        ret = -ENXIO;
2188                                        break;
2189                                }
2190                        }
2191
2192                        if (origin == SEEK_HOLE) {
2193                                *offset = start;
2194                                free_extent_map(em);
2195                                break;
2196                        }
2197                } else {
2198                        if (origin == SEEK_DATA) {
2199                                if (em->block_start == EXTENT_MAP_DELALLOC) {
2200                                        if (start >= inode->i_size) {
2201                                                free_extent_map(em);
2202                                                ret = -ENXIO;
2203                                                break;
2204                                        }
2205                                }
2206
2207                                *offset = start;
2208                                free_extent_map(em);
2209                                break;
2210                        }
2211                }
2212
2213                start = em->start + em->len;
2214                last_end = em->start + em->len;
2215
2216                if (em->block_start == EXTENT_MAP_DELALLOC)
2217                        last_end = min_t(u64, last_end, inode->i_size);
2218
2219                if (test_bit(EXTENT_FLAG_VACANCY, &em->flags)) {
2220                        free_extent_map(em);
2221                        ret = -ENXIO;
2222                        break;
2223                }
2224                free_extent_map(em);
2225                cond_resched();
2226        }
2227        if (!ret)
2228                *offset = min(*offset, inode->i_size);
2229out:
2230        unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend,
2231                             &cached_state, GFP_NOFS);
2232        return ret;
2233}
2234
2235static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int origin)
2236{
2237        struct inode *inode = file->f_mapping->host;
2238        int ret;
2239
2240        mutex_lock(&inode->i_mutex);
2241        switch (origin) {
2242        case SEEK_END:
2243        case SEEK_CUR:
2244                offset = generic_file_llseek(file, offset, origin);
2245                goto out;
2246        case SEEK_DATA:
2247        case SEEK_HOLE:
2248                if (offset >= i_size_read(inode)) {
2249                        mutex_unlock(&inode->i_mutex);
2250                        return -ENXIO;
2251                }
2252
2253                ret = find_desired_extent(inode, &offset, origin);
2254                if (ret) {
2255                        mutex_unlock(&inode->i_mutex);
2256                        return ret;
2257                }
2258        }
2259
2260        if (offset < 0 && !(file->f_mode & FMODE_UNSIGNED_OFFSET)) {
2261                offset = -EINVAL;
2262                goto out;
2263        }
2264        if (offset > inode->i_sb->s_maxbytes) {
2265                offset = -EINVAL;
2266                goto out;
2267        }
2268
2269        /* Special lock needed here? */
2270        if (offset != file->f_pos) {
2271                file->f_pos = offset;
2272                file->f_version = 0;
2273        }
2274out:
2275        mutex_unlock(&inode->i_mutex);
2276        return offset;
2277}
2278
2279const struct file_operations btrfs_file_operations = {
2280        .llseek         = btrfs_file_llseek,
2281        .read           = do_sync_read,
2282        .write          = do_sync_write,
2283        .aio_read       = generic_file_aio_read,
2284        .splice_read    = generic_file_splice_read,
2285        .aio_write      = btrfs_file_aio_write,
2286        .mmap           = btrfs_file_mmap,
2287        .open           = generic_file_open,
2288        .release        = btrfs_release_file,
2289        .fsync          = btrfs_sync_file,
2290        .fallocate      = btrfs_fallocate,
2291        .unlocked_ioctl = btrfs_ioctl,
2292#ifdef CONFIG_COMPAT
2293        .compat_ioctl   = btrfs_ioctl,
2294#endif
2295};
2296
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.