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