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