1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/kernel.h>
20#include <linux/bio.h>
21#include <linux/buffer_head.h>
22#include <linux/file.h>
23#include <linux/fs.h>
24#include <linux/pagemap.h>
25#include <linux/highmem.h>
26#include <linux/time.h>
27#include <linux/init.h>
28#include <linux/string.h>
29#include <linux/backing-dev.h>
30#include <linux/mpage.h>
31#include <linux/swap.h>
32#include <linux/writeback.h>
33#include <linux/statfs.h>
34#include <linux/compat.h>
35#include <linux/bit_spinlock.h>
36#include <linux/xattr.h>
37#include <linux/posix_acl.h>
38#include <linux/falloc.h>
39#include <linux/slab.h>
40#include <linux/ratelimit.h>
41#include <linux/mount.h>
42#include <linux/btrfs.h>
43#include <linux/blkdev.h>
44#include "compat.h"
45#include "ctree.h"
46#include "disk-io.h"
47#include "transaction.h"
48#include "btrfs_inode.h"
49#include "print-tree.h"
50#include "ordered-data.h"
51#include "xattr.h"
52#include "tree-log.h"
53#include "volumes.h"
54#include "compression.h"
55#include "locking.h"
56#include "free-space-cache.h"
57#include "inode-map.h"
58#include "backref.h"
59
60struct btrfs_iget_args {
61 u64 ino;
62 struct btrfs_root *root;
63};
64
65static const struct inode_operations btrfs_dir_inode_operations;
66static const struct inode_operations btrfs_symlink_inode_operations;
67static const struct inode_operations btrfs_dir_ro_inode_operations;
68static const struct inode_operations btrfs_special_inode_operations;
69static const struct inode_operations btrfs_file_inode_operations;
70static const struct address_space_operations btrfs_aops;
71static const struct address_space_operations btrfs_symlink_aops;
72static const struct file_operations btrfs_dir_file_operations;
73static struct extent_io_ops btrfs_extent_io_ops;
74
75static struct kmem_cache *btrfs_inode_cachep;
76static struct kmem_cache *btrfs_delalloc_work_cachep;
77struct kmem_cache *btrfs_trans_handle_cachep;
78struct kmem_cache *btrfs_transaction_cachep;
79struct kmem_cache *btrfs_path_cachep;
80struct kmem_cache *btrfs_free_space_cachep;
81
82#define S_SHIFT 12
83static unsigned char btrfs_type_by_mode[S_IFMT >> S_SHIFT] = {
84 [S_IFREG >> S_SHIFT] = BTRFS_FT_REG_FILE,
85 [S_IFDIR >> S_SHIFT] = BTRFS_FT_DIR,
86 [S_IFCHR >> S_SHIFT] = BTRFS_FT_CHRDEV,
87 [S_IFBLK >> S_SHIFT] = BTRFS_FT_BLKDEV,
88 [S_IFIFO >> S_SHIFT] = BTRFS_FT_FIFO,
89 [S_IFSOCK >> S_SHIFT] = BTRFS_FT_SOCK,
90 [S_IFLNK >> S_SHIFT] = BTRFS_FT_SYMLINK,
91};
92
93static int btrfs_setsize(struct inode *inode, struct iattr *attr);
94static int btrfs_truncate(struct inode *inode);
95static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent);
96static noinline int cow_file_range(struct inode *inode,
97 struct page *locked_page,
98 u64 start, u64 end, int *page_started,
99 unsigned long *nr_written, int unlock);
100static struct extent_map *create_pinned_em(struct inode *inode, u64 start,
101 u64 len, u64 orig_start,
102 u64 block_start, u64 block_len,
103 u64 orig_block_len, int type);
104
105static int btrfs_init_inode_security(struct btrfs_trans_handle *trans,
106 struct inode *inode, struct inode *dir,
107 const struct qstr *qstr)
108{
109 int err;
110
111 err = btrfs_init_acl(trans, inode, dir);
112 if (!err)
113 err = btrfs_xattr_security_init(trans, inode, dir, qstr);
114 return err;
115}
116
117
118
119
120
121
122static noinline int insert_inline_extent(struct btrfs_trans_handle *trans,
123 struct btrfs_root *root, struct inode *inode,
124 u64 start, size_t size, size_t compressed_size,
125 int compress_type,
126 struct page **compressed_pages)
127{
128 struct btrfs_key key;
129 struct btrfs_path *path;
130 struct extent_buffer *leaf;
131 struct page *page = NULL;
132 char *kaddr;
133 unsigned long ptr;
134 struct btrfs_file_extent_item *ei;
135 int err = 0;
136 int ret;
137 size_t cur_size = size;
138 size_t datasize;
139 unsigned long offset;
140
141 if (compressed_size && compressed_pages)
142 cur_size = compressed_size;
143
144 path = btrfs_alloc_path();
145 if (!path)
146 return -ENOMEM;
147
148 path->leave_spinning = 1;
149
150 key.objectid = btrfs_ino(inode);
151 key.offset = start;
152 btrfs_set_key_type(&key, BTRFS_EXTENT_DATA_KEY);
153 datasize = btrfs_file_extent_calc_inline_size(cur_size);
154
155 inode_add_bytes(inode, size);
156 ret = btrfs_insert_empty_item(trans, root, path, &key,
157 datasize);
158 if (ret) {
159 err = ret;
160 goto fail;
161 }
162 leaf = path->nodes[0];
163 ei = btrfs_item_ptr(leaf, path->slots[0],
164 struct btrfs_file_extent_item);
165 btrfs_set_file_extent_generation(leaf, ei, trans->transid);
166 btrfs_set_file_extent_type(leaf, ei, BTRFS_FILE_EXTENT_INLINE);
167 btrfs_set_file_extent_encryption(leaf, ei, 0);
168 btrfs_set_file_extent_other_encoding(leaf, ei, 0);
169 btrfs_set_file_extent_ram_bytes(leaf, ei, size);
170 ptr = btrfs_file_extent_inline_start(ei);
171
172 if (compress_type != BTRFS_COMPRESS_NONE) {
173 struct page *cpage;
174 int i = 0;
175 while (compressed_size > 0) {
176 cpage = compressed_pages[i];
177 cur_size = min_t(unsigned long, compressed_size,
178 PAGE_CACHE_SIZE);
179
180 kaddr = kmap_atomic(cpage);
181 write_extent_buffer(leaf, kaddr, ptr, cur_size);
182 kunmap_atomic(kaddr);
183
184 i++;
185 ptr += cur_size;
186 compressed_size -= cur_size;
187 }
188 btrfs_set_file_extent_compression(leaf, ei,
189 compress_type);
190 } else {
191 page = find_get_page(inode->i_mapping,
192 start >> PAGE_CACHE_SHIFT);
193 btrfs_set_file_extent_compression(leaf, ei, 0);
194 kaddr = kmap_atomic(page);
195 offset = start & (PAGE_CACHE_SIZE - 1);
196 write_extent_buffer(leaf, kaddr + offset, ptr, size);
197 kunmap_atomic(kaddr);
198 page_cache_release(page);
199 }
200 btrfs_mark_buffer_dirty(leaf);
201 btrfs_free_path(path);
202
203
204
205
206
207
208
209
210
211
212 BTRFS_I(inode)->disk_i_size = inode->i_size;
213 ret = btrfs_update_inode(trans, root, inode);
214
215 return ret;
216fail:
217 btrfs_free_path(path);
218 return err;
219}
220
221
222
223
224
225
226
227static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans,
228 struct btrfs_root *root,
229 struct inode *inode, u64 start, u64 end,
230 size_t compressed_size, int compress_type,
231 struct page **compressed_pages)
232{
233 u64 isize = i_size_read(inode);
234 u64 actual_end = min(end + 1, isize);
235 u64 inline_len = actual_end - start;
236 u64 aligned_end = ALIGN(end, root->sectorsize);
237 u64 data_len = inline_len;
238 int ret;
239
240 if (compressed_size)
241 data_len = compressed_size;
242
243 if (start > 0 ||
244 actual_end >= PAGE_CACHE_SIZE ||
245 data_len >= BTRFS_MAX_INLINE_DATA_SIZE(root) ||
246 (!compressed_size &&
247 (actual_end & (root->sectorsize - 1)) == 0) ||
248 end + 1 < isize ||
249 data_len > root->fs_info->max_inline) {
250 return 1;
251 }
252
253 ret = btrfs_drop_extents(trans, root, inode, start, aligned_end, 1);
254 if (ret)
255 return ret;
256
257 if (isize > actual_end)
258 inline_len = min_t(u64, isize, actual_end);
259 ret = insert_inline_extent(trans, root, inode, start,
260 inline_len, compressed_size,
261 compress_type, compressed_pages);
262 if (ret && ret != -ENOSPC) {
263 btrfs_abort_transaction(trans, root, ret);
264 return ret;
265 } else if (ret == -ENOSPC) {
266 return 1;
267 }
268
269 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags);
270 btrfs_delalloc_release_metadata(inode, end + 1 - start);
271 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0);
272 return 0;
273}
274
275struct async_extent {
276 u64 start;
277 u64 ram_size;
278 u64 compressed_size;
279 struct page **pages;
280 unsigned long nr_pages;
281 int compress_type;
282 struct list_head list;
283};
284
285struct async_cow {
286 struct inode *inode;
287 struct btrfs_root *root;
288 struct page *locked_page;
289 u64 start;
290 u64 end;
291 struct list_head extents;
292 struct btrfs_work work;
293};
294
295static noinline int add_async_extent(struct async_cow *cow,
296 u64 start, u64 ram_size,
297 u64 compressed_size,
298 struct page **pages,
299 unsigned long nr_pages,
300 int compress_type)
301{
302 struct async_extent *async_extent;
303
304 async_extent = kmalloc(sizeof(*async_extent), GFP_NOFS);
305 BUG_ON(!async_extent);
306 async_extent->start = start;
307 async_extent->ram_size = ram_size;
308 async_extent->compressed_size = compressed_size;
309 async_extent->pages = pages;
310 async_extent->nr_pages = nr_pages;
311 async_extent->compress_type = compress_type;
312 list_add_tail(&async_extent->list, &cow->extents);
313 return 0;
314}
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333static noinline int compress_file_range(struct inode *inode,
334 struct page *locked_page,
335 u64 start, u64 end,
336 struct async_cow *async_cow,
337 int *num_added)
338{
339 struct btrfs_root *root = BTRFS_I(inode)->root;
340 struct btrfs_trans_handle *trans;
341 u64 num_bytes;
342 u64 blocksize = root->sectorsize;
343 u64 actual_end;
344 u64 isize = i_size_read(inode);
345 int ret = 0;
346 struct page **pages = NULL;
347 unsigned long nr_pages;
348 unsigned long nr_pages_ret = 0;
349 unsigned long total_compressed = 0;
350 unsigned long total_in = 0;
351 unsigned long max_compressed = 128 * 1024;
352 unsigned long max_uncompressed = 128 * 1024;
353 int i;
354 int will_compress;
355 int compress_type = root->fs_info->compress_type;
356 int redirty = 0;
357
358
359 if ((end - start + 1) < 16 * 1024 &&
360 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size))
361 btrfs_add_inode_defrag(NULL, inode);
362
363 actual_end = min_t(u64, isize, end + 1);
364again:
365 will_compress = 0;
366 nr_pages = (end >> PAGE_CACHE_SHIFT) - (start >> PAGE_CACHE_SHIFT) + 1;
367 nr_pages = min(nr_pages, (128 * 1024UL) / PAGE_CACHE_SIZE);
368
369
370
371
372
373
374
375
376
377
378
379 if (actual_end <= start)
380 goto cleanup_and_bail_uncompressed;
381
382 total_compressed = actual_end - start;
383
384
385
386
387
388
389
390
391
392
393
394 total_compressed = min(total_compressed, max_uncompressed);
395 num_bytes = ALIGN(end - start + 1, blocksize);
396 num_bytes = max(blocksize, num_bytes);
397 total_in = 0;
398 ret = 0;
399
400
401
402
403
404
405 if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) &&
406 (btrfs_test_opt(root, COMPRESS) ||
407 (BTRFS_I(inode)->force_compress) ||
408 (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) {
409 WARN_ON(pages);
410 pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS);
411 if (!pages) {
412
413 goto cont;
414 }
415
416 if (BTRFS_I(inode)->force_compress)
417 compress_type = BTRFS_I(inode)->force_compress;
418
419
420
421
422
423
424
425
426
427
428 extent_range_clear_dirty_for_io(inode, start, end);
429 redirty = 1;
430 ret = btrfs_compress_pages(compress_type,
431 inode->i_mapping, start,
432 total_compressed, pages,
433 nr_pages, &nr_pages_ret,
434 &total_in,
435 &total_compressed,
436 max_compressed);
437
438 if (!ret) {
439 unsigned long offset = total_compressed &
440 (PAGE_CACHE_SIZE - 1);
441 struct page *page = pages[nr_pages_ret - 1];
442 char *kaddr;
443
444
445
446
447 if (offset) {
448 kaddr = kmap_atomic(page);
449 memset(kaddr + offset, 0,
450 PAGE_CACHE_SIZE - offset);
451 kunmap_atomic(kaddr);
452 }
453 will_compress = 1;
454 }
455 }
456cont:
457 if (start == 0) {
458 trans = btrfs_join_transaction(root);
459 if (IS_ERR(trans)) {
460 ret = PTR_ERR(trans);
461 trans = NULL;
462 goto cleanup_and_out;
463 }
464 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
465
466
467 if (ret || total_in < (actual_end - start)) {
468
469
470
471 ret = cow_file_range_inline(trans, root, inode,
472 start, end, 0, 0, NULL);
473 } else {
474
475 ret = cow_file_range_inline(trans, root, inode,
476 start, end,
477 total_compressed,
478 compress_type, pages);
479 }
480 if (ret <= 0) {
481
482
483
484
485
486 extent_clear_unlock_delalloc(inode,
487 &BTRFS_I(inode)->io_tree,
488 start, end, NULL,
489 EXTENT_CLEAR_UNLOCK_PAGE | EXTENT_CLEAR_DIRTY |
490 EXTENT_CLEAR_DELALLOC |
491 EXTENT_SET_WRITEBACK | EXTENT_END_WRITEBACK);
492
493 btrfs_end_transaction(trans, root);
494 goto free_pages_out;
495 }
496 btrfs_end_transaction(trans, root);
497 }
498
499 if (will_compress) {
500
501
502
503
504
505 total_compressed = ALIGN(total_compressed, blocksize);
506
507
508
509
510
511 total_in = ALIGN(total_in, PAGE_CACHE_SIZE);
512 if (total_compressed >= total_in) {
513 will_compress = 0;
514 } else {
515 num_bytes = total_in;
516 }
517 }
518 if (!will_compress && pages) {
519
520
521
522
523 for (i = 0; i < nr_pages_ret; i++) {
524 WARN_ON(pages[i]->mapping);
525 page_cache_release(pages[i]);
526 }
527 kfree(pages);
528 pages = NULL;
529 total_compressed = 0;
530 nr_pages_ret = 0;
531
532
533 if (!btrfs_test_opt(root, FORCE_COMPRESS) &&
534 !(BTRFS_I(inode)->force_compress)) {
535 BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
536 }
537 }
538 if (will_compress) {
539 *num_added += 1;
540
541
542
543
544
545 add_async_extent(async_cow, start, num_bytes,
546 total_compressed, pages, nr_pages_ret,
547 compress_type);
548
549 if (start + num_bytes < end) {
550 start += num_bytes;
551 pages = NULL;
552 cond_resched();
553 goto again;
554 }
555 } else {
556cleanup_and_bail_uncompressed:
557
558
559
560
561
562
563
564 if (page_offset(locked_page) >= start &&
565 page_offset(locked_page) <= end) {
566 __set_page_dirty_nobuffers(locked_page);
567
568 }
569 if (redirty)
570 extent_range_redirty_for_io(inode, start, end);
571 add_async_extent(async_cow, start, end - start + 1,
572 0, NULL, 0, BTRFS_COMPRESS_NONE);
573 *num_added += 1;
574 }
575
576out:
577 return ret;
578
579free_pages_out:
580 for (i = 0; i < nr_pages_ret; i++) {
581 WARN_ON(pages[i]->mapping);
582 page_cache_release(pages[i]);
583 }
584 kfree(pages);
585
586 goto out;
587
588cleanup_and_out:
589 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
590 start, end, NULL,
591 EXTENT_CLEAR_UNLOCK_PAGE |
592 EXTENT_CLEAR_DIRTY |
593 EXTENT_CLEAR_DELALLOC |
594 EXTENT_SET_WRITEBACK |
595 EXTENT_END_WRITEBACK);
596 if (!trans || IS_ERR(trans))
597 btrfs_error(root->fs_info, ret, "Failed to join transaction");
598 else
599 btrfs_abort_transaction(trans, root, ret);
600 goto free_pages_out;
601}
602
603
604
605
606
607
608
609static noinline int submit_compressed_extents(struct inode *inode,
610 struct async_cow *async_cow)
611{
612 struct async_extent *async_extent;
613 u64 alloc_hint = 0;
614 struct btrfs_trans_handle *trans;
615 struct btrfs_key ins;
616 struct extent_map *em;
617 struct btrfs_root *root = BTRFS_I(inode)->root;
618 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
619 struct extent_io_tree *io_tree;
620 int ret = 0;
621
622 if (list_empty(&async_cow->extents))
623 return 0;
624
625again:
626 while (!list_empty(&async_cow->extents)) {
627 async_extent = list_entry(async_cow->extents.next,
628 struct async_extent, list);
629 list_del(&async_extent->list);
630
631 io_tree = &BTRFS_I(inode)->io_tree;
632
633retry:
634
635 if (!async_extent->pages) {
636 int page_started = 0;
637 unsigned long nr_written = 0;
638
639 lock_extent(io_tree, async_extent->start,
640 async_extent->start +
641 async_extent->ram_size - 1);
642
643
644 ret = cow_file_range(inode, async_cow->locked_page,
645 async_extent->start,
646 async_extent->start +
647 async_extent->ram_size - 1,
648 &page_started, &nr_written, 0);
649
650
651
652
653
654
655
656
657
658 if (!page_started && !ret)
659 extent_write_locked_range(io_tree,
660 inode, async_extent->start,
661 async_extent->start +
662 async_extent->ram_size - 1,
663 btrfs_get_extent,
664 WB_SYNC_ALL);
665 else if (ret)
666 unlock_page(async_cow->locked_page);
667 kfree(async_extent);
668 cond_resched();
669 continue;
670 }
671
672 lock_extent(io_tree, async_extent->start,
673 async_extent->start + async_extent->ram_size - 1);
674
675 trans = btrfs_join_transaction(root);
676 if (IS_ERR(trans)) {
677 ret = PTR_ERR(trans);
678 } else {
679 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
680 ret = btrfs_reserve_extent(trans, root,
681 async_extent->compressed_size,
682 async_extent->compressed_size,
683 0, alloc_hint, &ins, 1);
684 if (ret && ret != -ENOSPC)
685 btrfs_abort_transaction(trans, root, ret);
686 btrfs_end_transaction(trans, root);
687 }
688
689 if (ret) {
690 int i;
691
692 for (i = 0; i < async_extent->nr_pages; i++) {
693 WARN_ON(async_extent->pages[i]->mapping);
694 page_cache_release(async_extent->pages[i]);
695 }
696 kfree(async_extent->pages);
697 async_extent->nr_pages = 0;
698 async_extent->pages = NULL;
699
700 if (ret == -ENOSPC)
701 goto retry;
702 goto out_free;
703 }
704
705
706
707
708
709 btrfs_drop_extent_cache(inode, async_extent->start,
710 async_extent->start +
711 async_extent->ram_size - 1, 0);
712
713 em = alloc_extent_map();
714 if (!em)
715 goto out_free_reserve;
716 em->start = async_extent->start;
717 em->len = async_extent->ram_size;
718 em->orig_start = em->start;
719 em->mod_start = em->start;
720 em->mod_len = em->len;
721
722 em->block_start = ins.objectid;
723 em->block_len = ins.offset;
724 em->orig_block_len = ins.offset;
725 em->bdev = root->fs_info->fs_devices->latest_bdev;
726 em->compress_type = async_extent->compress_type;
727 set_bit(EXTENT_FLAG_PINNED, &em->flags);
728 set_bit(EXTENT_FLAG_COMPRESSED, &em->flags);
729 em->generation = -1;
730
731 while (1) {
732 write_lock(&em_tree->lock);
733 ret = add_extent_mapping(em_tree, em);
734 if (!ret)
735 list_move(&em->list,
736 &em_tree->modified_extents);
737 write_unlock(&em_tree->lock);
738 if (ret != -EEXIST) {
739 free_extent_map(em);
740 break;
741 }
742 btrfs_drop_extent_cache(inode, async_extent->start,
743 async_extent->start +
744 async_extent->ram_size - 1, 0);
745 }
746
747 if (ret)
748 goto out_free_reserve;
749
750 ret = btrfs_add_ordered_extent_compress(inode,
751 async_extent->start,
752 ins.objectid,
753 async_extent->ram_size,
754 ins.offset,
755 BTRFS_ORDERED_COMPRESSED,
756 async_extent->compress_type);
757 if (ret)
758 goto out_free_reserve;
759
760
761
762
763 extent_clear_unlock_delalloc(inode,
764 &BTRFS_I(inode)->io_tree,
765 async_extent->start,
766 async_extent->start +
767 async_extent->ram_size - 1,
768 NULL, EXTENT_CLEAR_UNLOCK_PAGE |
769 EXTENT_CLEAR_UNLOCK |
770 EXTENT_CLEAR_DELALLOC |
771 EXTENT_CLEAR_DIRTY | EXTENT_SET_WRITEBACK);
772
773 ret = btrfs_submit_compressed_write(inode,
774 async_extent->start,
775 async_extent->ram_size,
776 ins.objectid,
777 ins.offset, async_extent->pages,
778 async_extent->nr_pages);
779 alloc_hint = ins.objectid + ins.offset;
780 kfree(async_extent);
781 if (ret)
782 goto out;
783 cond_resched();
784 }
785 ret = 0;
786out:
787 return ret;
788out_free_reserve:
789 btrfs_free_reserved_extent(root, ins.objectid, ins.offset);
790out_free:
791 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
792 async_extent->start,
793 async_extent->start +
794 async_extent->ram_size - 1,
795 NULL, EXTENT_CLEAR_UNLOCK_PAGE |
796 EXTENT_CLEAR_UNLOCK |
797 EXTENT_CLEAR_DELALLOC |
798 EXTENT_CLEAR_DIRTY |
799 EXTENT_SET_WRITEBACK |
800 EXTENT_END_WRITEBACK);
801 kfree(async_extent);
802 goto again;
803}
804
805static u64 get_extent_allocation_hint(struct inode *inode, u64 start,
806 u64 num_bytes)
807{
808 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
809 struct extent_map *em;
810 u64 alloc_hint = 0;
811
812 read_lock(&em_tree->lock);
813 em = search_extent_mapping(em_tree, start, num_bytes);
814 if (em) {
815
816
817
818
819
820 if (em->block_start >= EXTENT_MAP_LAST_BYTE) {
821 free_extent_map(em);
822 em = search_extent_mapping(em_tree, 0, 0);
823 if (em && em->block_start < EXTENT_MAP_LAST_BYTE)
824 alloc_hint = em->block_start;
825 if (em)
826 free_extent_map(em);
827 } else {
828 alloc_hint = em->block_start;
829 free_extent_map(em);
830 }
831 }
832 read_unlock(&em_tree->lock);
833
834 return alloc_hint;
835}
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850static noinline int __cow_file_range(struct btrfs_trans_handle *trans,
851 struct inode *inode,
852 struct btrfs_root *root,
853 struct page *locked_page,
854 u64 start, u64 end, int *page_started,
855 unsigned long *nr_written,
856 int unlock)
857{
858 u64 alloc_hint = 0;
859 u64 num_bytes;
860 unsigned long ram_size;
861 u64 disk_num_bytes;
862 u64 cur_alloc_size;
863 u64 blocksize = root->sectorsize;
864 struct btrfs_key ins;
865 struct extent_map *em;
866 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
867 int ret = 0;
868
869 BUG_ON(btrfs_is_free_space_inode(inode));
870
871 num_bytes = ALIGN(end - start + 1, blocksize);
872 num_bytes = max(blocksize, num_bytes);
873 disk_num_bytes = num_bytes;
874
875
876 if (num_bytes < 64 * 1024 &&
877 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size))
878 btrfs_add_inode_defrag(trans, inode);
879
880 if (start == 0) {
881
882 ret = cow_file_range_inline(trans, root, inode,
883 start, end, 0, 0, NULL);
884 if (ret == 0) {
885 extent_clear_unlock_delalloc(inode,
886 &BTRFS_I(inode)->io_tree,
887 start, end, NULL,
888 EXTENT_CLEAR_UNLOCK_PAGE |
889 EXTENT_CLEAR_UNLOCK |
890 EXTENT_CLEAR_DELALLOC |
891 EXTENT_CLEAR_DIRTY |
892 EXTENT_SET_WRITEBACK |
893 EXTENT_END_WRITEBACK);
894
895 *nr_written = *nr_written +
896 (end - start + PAGE_CACHE_SIZE) / PAGE_CACHE_SIZE;
897 *page_started = 1;
898 goto out;
899 } else if (ret < 0) {
900 btrfs_abort_transaction(trans, root, ret);
901 goto out_unlock;
902 }
903 }
904
905 BUG_ON(disk_num_bytes >
906 btrfs_super_total_bytes(root->fs_info->super_copy));
907
908 alloc_hint = get_extent_allocation_hint(inode, start, num_bytes);
909 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0);
910
911 while (disk_num_bytes > 0) {
912 unsigned long op;
913
914 cur_alloc_size = disk_num_bytes;
915 ret = btrfs_reserve_extent(trans, root, cur_alloc_size,
916 root->sectorsize, 0, alloc_hint,
917 &ins, 1);
918 if (ret < 0) {
919 btrfs_abort_transaction(trans, root, ret);
920 goto out_unlock;
921 }
922
923 em = alloc_extent_map();
924 BUG_ON(!em);
925 em->start = start;
926 em->orig_start = em->start;
927 ram_size = ins.offset;
928 em->len = ins.offset;
929 em->mod_start = em->start;
930 em->mod_len = em->len;
931
932 em->block_start = ins.objectid;
933 em->block_len = ins.offset;
934 em->orig_block_len = ins.offset;
935 em->bdev = root->fs_info->fs_devices->latest_bdev;
936 set_bit(EXTENT_FLAG_PINNED, &em->flags);
937 em->generation = -1;
938
939 while (1) {
940 write_lock(&em_tree->lock);
941 ret = add_extent_mapping(em_tree, em);
942 if (!ret)
943 list_move(&em->list,
944 &em_tree->modified_extents);
945 write_unlock(&em_tree->lock);
946 if (ret != -EEXIST) {
947 free_extent_map(em);
948 break;
949 }
950 btrfs_drop_extent_cache(inode, start,
951 start + ram_size - 1, 0);
952 }
953
954 cur_alloc_size = ins.offset;
955 ret = btrfs_add_ordered_extent(inode, start, ins.objectid,
956 ram_size, cur_alloc_size, 0);
957 BUG_ON(ret);
958
959 if (root->root_key.objectid ==
960 BTRFS_DATA_RELOC_TREE_OBJECTID) {
961 ret = btrfs_reloc_clone_csums(inode, start,
962 cur_alloc_size);
963 if (ret) {
964 btrfs_abort_transaction(trans, root, ret);
965 goto out_unlock;
966 }
967 }
968
969 if (disk_num_bytes < cur_alloc_size)
970 break;
971
972
973
974
975
976
977
978
979 op = unlock ? EXTENT_CLEAR_UNLOCK_PAGE : 0;
980 op |= EXTENT_CLEAR_UNLOCK | EXTENT_CLEAR_DELALLOC |
981 EXTENT_SET_PRIVATE2;
982
983 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
984 start, start + ram_size - 1,
985 locked_page, op);
986 disk_num_bytes -= cur_alloc_size;
987 num_bytes -= cur_alloc_size;
988 alloc_hint = ins.objectid + ins.offset;
989 start += cur_alloc_size;
990 }
991out:
992 return ret;
993
994out_unlock:
995 extent_clear_unlock_delalloc(inode,
996 &BTRFS_I(inode)->io_tree,
997 start, end, locked_page,
998 EXTENT_CLEAR_UNLOCK_PAGE |
999 EXTENT_CLEAR_UNLOCK |
1000 EXTENT_CLEAR_DELALLOC |
1001 EXTENT_CLEAR_DIRTY |
1002 EXTENT_SET_WRITEBACK |
1003 EXTENT_END_WRITEBACK);
1004
1005 goto out;
1006}
1007
1008static noinline int cow_file_range(struct inode *inode,
1009 struct page *locked_page,
1010 u64 start, u64 end, int *page_started,
1011 unsigned long *nr_written,
1012 int unlock)
1013{
1014 struct btrfs_trans_handle *trans;
1015 struct btrfs_root *root = BTRFS_I(inode)->root;
1016 int ret;
1017
1018 trans = btrfs_join_transaction(root);
1019 if (IS_ERR(trans)) {
1020 extent_clear_unlock_delalloc(inode,
1021 &BTRFS_I(inode)->io_tree,
1022 start, end, locked_page,
1023 EXTENT_CLEAR_UNLOCK_PAGE |
1024 EXTENT_CLEAR_UNLOCK |
1025 EXTENT_CLEAR_DELALLOC |
1026 EXTENT_CLEAR_DIRTY |
1027 EXTENT_SET_WRITEBACK |
1028 EXTENT_END_WRITEBACK);
1029 return PTR_ERR(trans);
1030 }
1031 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
1032
1033 ret = __cow_file_range(trans, inode, root, locked_page, start, end,
1034 page_started, nr_written, unlock);
1035
1036 btrfs_end_transaction(trans, root);
1037
1038 return ret;
1039}
1040
1041
1042
1043
1044static noinline void async_cow_start(struct btrfs_work *work)
1045{
1046 struct async_cow *async_cow;
1047 int num_added = 0;
1048 async_cow = container_of(work, struct async_cow, work);
1049
1050 compress_file_range(async_cow->inode, async_cow->locked_page,
1051 async_cow->start, async_cow->end, async_cow,
1052 &num_added);
1053 if (num_added == 0) {
1054 btrfs_add_delayed_iput(async_cow->inode);
1055 async_cow->inode = NULL;
1056 }
1057}
1058
1059
1060
1061
1062static noinline void async_cow_submit(struct btrfs_work *work)
1063{
1064 struct async_cow *async_cow;
1065 struct btrfs_root *root;
1066 unsigned long nr_pages;
1067
1068 async_cow = container_of(work, struct async_cow, work);
1069
1070 root = async_cow->root;
1071 nr_pages = (async_cow->end - async_cow->start + PAGE_CACHE_SIZE) >>
1072 PAGE_CACHE_SHIFT;
1073
1074 if (atomic_sub_return(nr_pages, &root->fs_info->async_delalloc_pages) <
1075 5 * 1024 * 1024 &&
1076 waitqueue_active(&root->fs_info->async_submit_wait))
1077 wake_up(&root->fs_info->async_submit_wait);
1078
1079 if (async_cow->inode)
1080 submit_compressed_extents(async_cow->inode, async_cow);
1081}
1082
1083static noinline void async_cow_free(struct btrfs_work *work)
1084{
1085 struct async_cow *async_cow;
1086 async_cow = container_of(work, struct async_cow, work);
1087 if (async_cow->inode)
1088 btrfs_add_delayed_iput(async_cow->inode);
1089 kfree(async_cow);
1090}
1091
1092static int cow_file_range_async(struct inode *inode, struct page *locked_page,
1093 u64 start, u64 end, int *page_started,
1094 unsigned long *nr_written)
1095{
1096 struct async_cow *async_cow;
1097 struct btrfs_root *root = BTRFS_I(inode)->root;
1098 unsigned long nr_pages;
1099 u64 cur_end;
1100 int limit = 10 * 1024 * 1024;
1101
1102 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED,
1103 1, 0, NULL, GFP_NOFS);
1104 while (start < end) {
1105 async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS);
1106 BUG_ON(!async_cow);
1107 async_cow->inode = igrab(inode);
1108 async_cow->root = root;
1109 async_cow->locked_page = locked_page;
1110 async_cow->start = start;
1111
1112 if (BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS)
1113 cur_end = end;
1114 else
1115 cur_end = min(end, start + 512 * 1024 - 1);
1116
1117 async_cow->end = cur_end;
1118 INIT_LIST_HEAD(&async_cow->extents);
1119
1120 async_cow->work.func = async_cow_start;
1121 async_cow->work.ordered_func = async_cow_submit;
1122 async_cow->work.ordered_free = async_cow_free;
1123 async_cow->work.flags = 0;
1124
1125 nr_pages = (cur_end - start + PAGE_CACHE_SIZE) >>
1126 PAGE_CACHE_SHIFT;
1127 atomic_add(nr_pages, &root->fs_info->async_delalloc_pages);
1128
1129 btrfs_queue_worker(&root->fs_info->delalloc_workers,
1130 &async_cow->work);
1131
1132 if (atomic_read(&root->fs_info->async_delalloc_pages) > limit) {
1133 wait_event(root->fs_info->async_submit_wait,
1134 (atomic_read(&root->fs_info->async_delalloc_pages) <
1135 limit));
1136 }
1137
1138 while (atomic_read(&root->fs_info->async_submit_draining) &&
1139 atomic_read(&root->fs_info->async_delalloc_pages)) {
1140 wait_event(root->fs_info->async_submit_wait,
1141 (atomic_read(&root->fs_info->async_delalloc_pages) ==
1142 0));
1143 }
1144
1145 *nr_written += nr_pages;
1146 start = cur_end + 1;
1147 }
1148 *page_started = 1;
1149 return 0;
1150}
1151
1152static noinline int csum_exist_in_range(struct btrfs_root *root,
1153 u64 bytenr, u64 num_bytes)
1154{
1155 int ret;
1156 struct btrfs_ordered_sum *sums;
1157 LIST_HEAD(list);
1158
1159 ret = btrfs_lookup_csums_range(root->fs_info->csum_root, bytenr,
1160 bytenr + num_bytes - 1, &list, 0);
1161 if (ret == 0 && list_empty(&list))
1162 return 0;
1163
1164 while (!list_empty(&list)) {
1165 sums = list_entry(list.next, struct btrfs_ordered_sum, list);
1166 list_del(&sums->list);
1167 kfree(sums);
1168 }
1169 return 1;
1170}
1171
1172
1173
1174
1175
1176
1177
1178
1179static noinline int run_delalloc_nocow(struct inode *inode,
1180 struct page *locked_page,
1181 u64 start, u64 end, int *page_started, int force,
1182 unsigned long *nr_written)
1183{
1184 struct btrfs_root *root = BTRFS_I(inode)->root;
1185 struct btrfs_trans_handle *trans;
1186 struct extent_buffer *leaf;
1187 struct btrfs_path *path;
1188 struct btrfs_file_extent_item *fi;
1189 struct btrfs_key found_key;
1190 u64 cow_start;
1191 u64 cur_offset;
1192 u64 extent_end;
1193 u64 extent_offset;
1194 u64 disk_bytenr;
1195 u64 num_bytes;
1196 u64 disk_num_bytes;
1197 int extent_type;
1198 int ret, err;
1199 int type;
1200 int nocow;
1201 int check_prev = 1;
1202 bool nolock;
1203 u64 ino = btrfs_ino(inode);
1204
1205 path = btrfs_alloc_path();
1206 if (!path) {
1207 extent_clear_unlock_delalloc(inode,
1208 &BTRFS_I(inode)->io_tree,
1209 start, end, locked_page,
1210 EXTENT_CLEAR_UNLOCK_PAGE |
1211 EXTENT_CLEAR_UNLOCK |
1212 EXTENT_CLEAR_DELALLOC |
1213 EXTENT_CLEAR_DIRTY |
1214 EXTENT_SET_WRITEBACK |
1215 EXTENT_END_WRITEBACK);
1216 return -ENOMEM;
1217 }
1218
1219 nolock = btrfs_is_free_space_inode(inode);
1220
1221 if (nolock)
1222 trans = btrfs_join_transaction_nolock(root);
1223 else
1224 trans = btrfs_join_transaction(root);
1225
1226 if (IS_ERR(trans)) {
1227 extent_clear_unlock_delalloc(inode,
1228 &BTRFS_I(inode)->io_tree,
1229 start, end, locked_page,
1230 EXTENT_CLEAR_UNLOCK_PAGE |
1231 EXTENT_CLEAR_UNLOCK |
1232 EXTENT_CLEAR_DELALLOC |
1233 EXTENT_CLEAR_DIRTY |
1234 EXTENT_SET_WRITEBACK |
1235 EXTENT_END_WRITEBACK);
1236 btrfs_free_path(path);
1237 return PTR_ERR(trans);
1238 }
1239
1240 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
1241
1242 cow_start = (u64)-1;
1243 cur_offset = start;
1244 while (1) {
1245 ret = btrfs_lookup_file_extent(trans, root, path, ino,
1246 cur_offset, 0);
1247 if (ret < 0) {
1248 btrfs_abort_transaction(trans, root, ret);
1249 goto error;
1250 }
1251 if (ret > 0 && path->slots[0] > 0 && check_prev) {
1252 leaf = path->nodes[0];
1253 btrfs_item_key_to_cpu(leaf, &found_key,
1254 path->slots[0] - 1);
1255 if (found_key.objectid == ino &&
1256 found_key.type == BTRFS_EXTENT_DATA_KEY)
1257 path->slots[0]--;
1258 }
1259 check_prev = 0;
1260next_slot:
1261 leaf = path->nodes[0];
1262 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
1263 ret = btrfs_next_leaf(root, path);
1264 if (ret < 0) {
1265 btrfs_abort_transaction(trans, root, ret);
1266 goto error;
1267 }
1268 if (ret > 0)
1269 break;
1270 leaf = path->nodes[0];
1271 }
1272
1273 nocow = 0;
1274 disk_bytenr = 0;
1275 num_bytes = 0;
1276 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
1277
1278 if (found_key.objectid > ino ||
1279 found_key.type > BTRFS_EXTENT_DATA_KEY ||
1280 found_key.offset > end)
1281 break;
1282
1283 if (found_key.offset > cur_offset) {
1284 extent_end = found_key.offset;
1285 extent_type = 0;
1286 goto out_check;
1287 }
1288
1289 fi = btrfs_item_ptr(leaf, path->slots[0],
1290 struct btrfs_file_extent_item);
1291 extent_type = btrfs_file_extent_type(leaf, fi);
1292
1293 if (extent_type == BTRFS_FILE_EXTENT_REG ||
1294 extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
1295 disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
1296 extent_offset = btrfs_file_extent_offset(leaf, fi);
1297 extent_end = found_key.offset +
1298 btrfs_file_extent_num_bytes(leaf, fi);
1299 disk_num_bytes =
1300 btrfs_file_extent_disk_num_bytes(leaf, fi);
1301 if (extent_end <= start) {
1302 path->slots[0]++;
1303 goto next_slot;
1304 }
1305 if (disk_bytenr == 0)
1306 goto out_check;
1307 if (btrfs_file_extent_compression(leaf, fi) ||
1308 btrfs_file_extent_encryption(leaf, fi) ||
1309 btrfs_file_extent_other_encoding(leaf, fi))
1310 goto out_check;
1311 if (extent_type == BTRFS_FILE_EXTENT_REG && !force)
1312 goto out_check;
1313 if (btrfs_extent_readonly(root, disk_bytenr))
1314 goto out_check;
1315 if (btrfs_cross_ref_exist(trans, root, ino,
1316 found_key.offset -
1317 extent_offset, disk_bytenr))
1318 goto out_check;
1319 disk_bytenr += extent_offset;
1320 disk_bytenr += cur_offset - found_key.offset;
1321 num_bytes = min(end + 1, extent_end) - cur_offset;
1322
1323
1324
1325
1326
1327 if (csum_exist_in_range(root, disk_bytenr, num_bytes))
1328 goto out_check;
1329 nocow = 1;
1330 } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
1331 extent_end = found_key.offset +
1332 btrfs_file_extent_inline_len(leaf, fi);
1333 extent_end = ALIGN(extent_end, root->sectorsize);
1334 } else {
1335 BUG_ON(1);
1336 }
1337out_check:
1338 if (extent_end <= start) {
1339 path->slots[0]++;
1340 goto next_slot;
1341 }
1342 if (!nocow) {
1343 if (cow_start == (u64)-1)
1344 cow_start = cur_offset;
1345 cur_offset = extent_end;
1346 if (cur_offset > end)
1347 break;
1348 path->slots[0]++;
1349 goto next_slot;
1350 }
1351
1352 btrfs_release_path(path);
1353 if (cow_start != (u64)-1) {
1354 ret = __cow_file_range(trans, inode, root, locked_page,
1355 cow_start, found_key.offset - 1,
1356 page_started, nr_written, 1);
1357 if (ret) {
1358 btrfs_abort_transaction(trans, root, ret);
1359 goto error;
1360 }
1361 cow_start = (u64)-1;
1362 }
1363
1364 if (extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
1365 struct extent_map *em;
1366 struct extent_map_tree *em_tree;
1367 em_tree = &BTRFS_I(inode)->extent_tree;
1368 em = alloc_extent_map();
1369 BUG_ON(!em);
1370 em->start = cur_offset;
1371 em->orig_start = found_key.offset - extent_offset;
1372 em->len = num_bytes;
1373 em->block_len = num_bytes;
1374 em->block_start = disk_bytenr;
1375 em->orig_block_len = disk_num_bytes;
1376 em->bdev = root->fs_info->fs_devices->latest_bdev;
1377 em->mod_start = em->start;
1378 em->mod_len = em->len;
1379 set_bit(EXTENT_FLAG_PINNED, &em->flags);
1380 set_bit(EXTENT_FLAG_FILLING, &em->flags);
1381 em->generation = -1;
1382 while (1) {
1383 write_lock(&em_tree->lock);
1384 ret = add_extent_mapping(em_tree, em);
1385 if (!ret)
1386 list_move(&em->list,
1387 &em_tree->modified_extents);
1388 write_unlock(&em_tree->lock);
1389 if (ret != -EEXIST) {
1390 free_extent_map(em);
1391 break;
1392 }
1393 btrfs_drop_extent_cache(inode, em->start,
1394 em->start + em->len - 1, 0);
1395 }
1396 type = BTRFS_ORDERED_PREALLOC;
1397 } else {
1398 type = BTRFS_ORDERED_NOCOW;
1399 }
1400
1401 ret = btrfs_add_ordered_extent(inode, cur_offset, disk_bytenr,
1402 num_bytes, num_bytes, type);
1403 BUG_ON(ret);
1404
1405 if (root->root_key.objectid ==
1406 BTRFS_DATA_RELOC_TREE_OBJECTID) {
1407 ret = btrfs_reloc_clone_csums(inode, cur_offset,
1408 num_bytes);
1409 if (ret) {
1410 btrfs_abort_transaction(trans, root, ret);
1411 goto error;
1412 }
1413 }
1414
1415 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
1416 cur_offset, cur_offset + num_bytes - 1,
1417 locked_page, EXTENT_CLEAR_UNLOCK_PAGE |
1418 EXTENT_CLEAR_UNLOCK | EXTENT_CLEAR_DELALLOC |
1419 EXTENT_SET_PRIVATE2);
1420 cur_offset = extent_end;
1421 if (cur_offset > end)
1422 break;
1423 }
1424 btrfs_release_path(path);
1425
1426 if (cur_offset <= end && cow_start == (u64)-1) {
1427 cow_start = cur_offset;
1428 cur_offset = end;
1429 }
1430
1431 if (cow_start != (u64)-1) {
1432 ret = __cow_file_range(trans, inode, root, locked_page,
1433 cow_start, end,
1434 page_started, nr_written, 1);
1435 if (ret) {
1436 btrfs_abort_transaction(trans, root, ret);
1437 goto error;
1438 }
1439 }
1440
1441error:
1442 err = btrfs_end_transaction(trans, root);
1443 if (!ret)
1444 ret = err;
1445
1446 if (ret && cur_offset < end)
1447 extent_clear_unlock_delalloc(inode,
1448 &BTRFS_I(inode)->io_tree,
1449 cur_offset, end, locked_page,
1450 EXTENT_CLEAR_UNLOCK_PAGE |
1451 EXTENT_CLEAR_UNLOCK |
1452 EXTENT_CLEAR_DELALLOC |
1453 EXTENT_CLEAR_DIRTY |
1454 EXTENT_SET_WRITEBACK |
1455 EXTENT_END_WRITEBACK);
1456
1457 btrfs_free_path(path);
1458 return ret;
1459}
1460
1461
1462
1463
1464static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1465 u64 start, u64 end, int *page_started,
1466 unsigned long *nr_written)
1467{
1468 int ret;
1469 struct btrfs_root *root = BTRFS_I(inode)->root;
1470
1471 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) {
1472 ret = run_delalloc_nocow(inode, locked_page, start, end,
1473 page_started, 1, nr_written);
1474 } else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) {
1475 ret = run_delalloc_nocow(inode, locked_page, start, end,
1476 page_started, 0, nr_written);
1477 } else if (!btrfs_test_opt(root, COMPRESS) &&
1478 !(BTRFS_I(inode)->force_compress) &&
1479 !(BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS)) {
1480 ret = cow_file_range(inode, locked_page, start, end,
1481 page_started, nr_written, 1);
1482 } else {
1483 set_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
1484 &BTRFS_I(inode)->runtime_flags);
1485 ret = cow_file_range_async(inode, locked_page, start, end,
1486 page_started, nr_written);
1487 }
1488 return ret;
1489}
1490
1491static void btrfs_split_extent_hook(struct inode *inode,
1492 struct extent_state *orig, u64 split)
1493{
1494
1495 if (!(orig->state & EXTENT_DELALLOC))
1496 return;
1497
1498 spin_lock(&BTRFS_I(inode)->lock);
1499 BTRFS_I(inode)->outstanding_extents++;
1500 spin_unlock(&BTRFS_I(inode)->lock);
1501}
1502
1503
1504
1505
1506
1507
1508
1509static void btrfs_merge_extent_hook(struct inode *inode,
1510 struct extent_state *new,
1511 struct extent_state *other)
1512{
1513
1514 if (!(other->state & EXTENT_DELALLOC))
1515 return;
1516
1517 spin_lock(&BTRFS_I(inode)->lock);
1518 BTRFS_I(inode)->outstanding_extents--;
1519 spin_unlock(&BTRFS_I(inode)->lock);
1520}
1521
1522
1523
1524
1525
1526
1527static void btrfs_set_bit_hook(struct inode *inode,
1528 struct extent_state *state, int *bits)
1529{
1530
1531
1532
1533
1534
1535
1536 if (!(state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) {
1537 struct btrfs_root *root = BTRFS_I(inode)->root;
1538 u64 len = state->end + 1 - state->start;
1539 bool do_list = !btrfs_is_free_space_inode(inode);
1540
1541 if (*bits & EXTENT_FIRST_DELALLOC) {
1542 *bits &= ~EXTENT_FIRST_DELALLOC;
1543 } else {
1544 spin_lock(&BTRFS_I(inode)->lock);
1545 BTRFS_I(inode)->outstanding_extents++;
1546 spin_unlock(&BTRFS_I(inode)->lock);
1547 }
1548
1549 __percpu_counter_add(&root->fs_info->delalloc_bytes, len,
1550 root->fs_info->delalloc_batch);
1551 spin_lock(&BTRFS_I(inode)->lock);
1552 BTRFS_I(inode)->delalloc_bytes += len;
1553 if (do_list && !test_bit(BTRFS_INODE_IN_DELALLOC_LIST,
1554 &BTRFS_I(inode)->runtime_flags)) {
1555 spin_lock(&root->fs_info->delalloc_lock);
1556 if (list_empty(&BTRFS_I(inode)->delalloc_inodes)) {
1557 list_add_tail(&BTRFS_I(inode)->delalloc_inodes,
1558 &root->fs_info->delalloc_inodes);
1559 set_bit(BTRFS_INODE_IN_DELALLOC_LIST,
1560 &BTRFS_I(inode)->runtime_flags);
1561 }
1562 spin_unlock(&root->fs_info->delalloc_lock);
1563 }
1564 spin_unlock(&BTRFS_I(inode)->lock);
1565 }
1566}
1567
1568
1569
1570
1571static void btrfs_clear_bit_hook(struct inode *inode,
1572 struct extent_state *state, int *bits)
1573{
1574
1575
1576
1577
1578
1579 if ((state->state & EXTENT_DELALLOC) && (*bits & EXTENT_DELALLOC)) {
1580 struct btrfs_root *root = BTRFS_I(inode)->root;
1581 u64 len = state->end + 1 - state->start;
1582 bool do_list = !btrfs_is_free_space_inode(inode);
1583
1584 if (*bits & EXTENT_FIRST_DELALLOC) {
1585 *bits &= ~EXTENT_FIRST_DELALLOC;
1586 } else if (!(*bits & EXTENT_DO_ACCOUNTING)) {
1587 spin_lock(&BTRFS_I(inode)->lock);
1588 BTRFS_I(inode)->outstanding_extents--;
1589 spin_unlock(&BTRFS_I(inode)->lock);
1590 }
1591
1592 if (*bits & EXTENT_DO_ACCOUNTING)
1593 btrfs_delalloc_release_metadata(inode, len);
1594
1595 if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID
1596 && do_list)
1597 btrfs_free_reserved_data_space(inode, len);
1598
1599 __percpu_counter_add(&root->fs_info->delalloc_bytes, -len,
1600 root->fs_info->delalloc_batch);
1601 spin_lock(&BTRFS_I(inode)->lock);
1602 BTRFS_I(inode)->delalloc_bytes -= len;
1603 if (do_list && BTRFS_I(inode)->delalloc_bytes == 0 &&
1604 test_bit(BTRFS_INODE_IN_DELALLOC_LIST,
1605 &BTRFS_I(inode)->runtime_flags)) {
1606 spin_lock(&root->fs_info->delalloc_lock);
1607 if (!list_empty(&BTRFS_I(inode)->delalloc_inodes)) {
1608 list_del_init(&BTRFS_I(inode)->delalloc_inodes);
1609 clear_bit(BTRFS_INODE_IN_DELALLOC_LIST,
1610 &BTRFS_I(inode)->runtime_flags);
1611 }
1612 spin_unlock(&root->fs_info->delalloc_lock);
1613 }
1614 spin_unlock(&BTRFS_I(inode)->lock);
1615 }
1616}
1617
1618
1619
1620
1621
1622int btrfs_merge_bio_hook(int rw, struct page *page, unsigned long offset,
1623 size_t size, struct bio *bio,
1624 unsigned long bio_flags)
1625{
1626 struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
1627 u64 logical = (u64)bio->bi_sector << 9;
1628 u64 length = 0;
1629 u64 map_length;
1630 int ret;
1631
1632 if (bio_flags & EXTENT_BIO_COMPRESSED)
1633 return 0;
1634
1635 length = bio->bi_size;
1636 map_length = length;
1637 ret = btrfs_map_block(root->fs_info, rw, logical,
1638 &map_length, NULL, 0);
1639
1640 BUG_ON(ret < 0);
1641 if (map_length < length + size)
1642 return 1;
1643 return 0;
1644}
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654static int __btrfs_submit_bio_start(struct inode *inode, int rw,
1655 struct bio *bio, int mirror_num,
1656 unsigned long bio_flags,
1657 u64 bio_offset)
1658{
1659 struct btrfs_root *root = BTRFS_I(inode)->root;
1660 int ret = 0;
1661
1662 ret = btrfs_csum_one_bio(root, inode, bio, 0, 0);
1663 BUG_ON(ret);
1664 return 0;
1665}
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio,
1676 int mirror_num, unsigned long bio_flags,
1677 u64 bio_offset)
1678{
1679 struct btrfs_root *root = BTRFS_I(inode)->root;
1680 int ret;
1681
1682 ret = btrfs_map_bio(root, rw, bio, mirror_num, 1);
1683 if (ret)
1684 bio_endio(bio, ret);
1685 return ret;
1686}
1687
1688
1689
1690
1691
1692static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
1693 int mirror_num, unsigned long bio_flags,
1694 u64 bio_offset)
1695{
1696 struct btrfs_root *root = BTRFS_I(inode)->root;
1697 int ret = 0;
1698 int skip_sum;
1699 int metadata = 0;
1700 int async = !atomic_read(&BTRFS_I(inode)->sync_writers);
1701
1702 skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM;
1703
1704 if (btrfs_is_free_space_inode(inode))
1705 metadata = 2;
1706
1707 if (!(rw & REQ_WRITE)) {
1708 ret = btrfs_bio_wq_end_io(root->fs_info, bio, metadata);
1709 if (ret)
1710 goto out;
1711
1712 if (bio_flags & EXTENT_BIO_COMPRESSED) {
1713 ret = btrfs_submit_compressed_read(inode, bio,
1714 mirror_num,
1715 bio_flags);
1716 goto out;
1717 } else if (!skip_sum) {
1718 ret = btrfs_lookup_bio_sums(root, inode, bio, NULL);
1719 if (ret)
1720 goto out;
1721 }
1722 goto mapit;
1723 } else if (async && !skip_sum) {
1724
1725 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID)
1726 goto mapit;
1727
1728 ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
1729 inode, rw, bio, mirror_num,
1730 bio_flags, bio_offset,
1731 __btrfs_submit_bio_start,
1732 __btrfs_submit_bio_done);
1733 goto out;
1734 } else if (!skip_sum) {
1735 ret = btrfs_csum_one_bio(root, inode, bio, 0, 0);
1736 if (ret)
1737 goto out;
1738 }
1739
1740mapit:
1741 ret = btrfs_map_bio(root, rw, bio, mirror_num, 0);
1742
1743out:
1744 if (ret < 0)
1745 bio_endio(bio, ret);
1746 return ret;
1747}
1748
1749
1750
1751
1752
1753static noinline int add_pending_csums(struct btrfs_trans_handle *trans,
1754 struct inode *inode, u64 file_offset,
1755 struct list_head *list)
1756{
1757 struct btrfs_ordered_sum *sum;
1758
1759 list_for_each_entry(sum, list, list) {
1760 trans->adding_csums = 1;
1761 btrfs_csum_file_blocks(trans,
1762 BTRFS_I(inode)->root->fs_info->csum_root, sum);
1763 trans->adding_csums = 0;
1764 }
1765 return 0;
1766}
1767
1768int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end,
1769 struct extent_state **cached_state)
1770{
1771 WARN_ON((end & (PAGE_CACHE_SIZE - 1)) == 0);
1772 return set_extent_delalloc(&BTRFS_I(inode)->io_tree, start, end,
1773 cached_state, GFP_NOFS);
1774}
1775
1776
1777struct btrfs_writepage_fixup {
1778 struct page *page;
1779 struct btrfs_work work;
1780};
1781
1782static void btrfs_writepage_fixup_worker(struct btrfs_work *work)
1783{
1784 struct btrfs_writepage_fixup *fixup;
1785 struct btrfs_ordered_extent *ordered;
1786 struct extent_state *cached_state = NULL;
1787 struct page *page;
1788 struct inode *inode;
1789 u64 page_start;
1790 u64 page_end;
1791 int ret;
1792
1793 fixup = container_of(work, struct btrfs_writepage_fixup, work);
1794 page = fixup->page;
1795again:
1796 lock_page(page);
1797 if (!page->mapping || !PageDirty(page) || !PageChecked(page)) {
1798 ClearPageChecked(page);
1799 goto out_page;
1800 }
1801
1802 inode = page->mapping->host;
1803 page_start = page_offset(page);
1804 page_end = page_offset(page) + PAGE_CACHE_SIZE - 1;
1805
1806 lock_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end, 0,
1807 &cached_state);
1808
1809
1810 if (PagePrivate2(page))
1811 goto out;
1812
1813 ordered = btrfs_lookup_ordered_extent(inode, page_start);
1814 if (ordered) {
1815 unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start,
1816 page_end, &cached_state, GFP_NOFS);
1817 unlock_page(page);
1818 btrfs_start_ordered_extent(inode, ordered, 1);
1819 btrfs_put_ordered_extent(ordered);
1820 goto again;
1821 }
1822
1823 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE);
1824 if (ret) {
1825 mapping_set_error(page->mapping, ret);
1826 end_extent_writepage(page, ret, page_start, page_end);
1827 ClearPageChecked(page);
1828 goto out;
1829 }
1830
1831 btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state);
1832 ClearPageChecked(page);
1833 set_page_dirty(page);
1834out:
1835 unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, page_end,
1836 &cached_state, GFP_NOFS);
1837out_page:
1838 unlock_page(page);
1839 page_cache_release(page);
1840 kfree(fixup);
1841}
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854static int btrfs_writepage_start_hook(struct page *page, u64 start, u64 end)
1855{
1856 struct inode *inode = page->mapping->host;
1857 struct btrfs_writepage_fixup *fixup;
1858 struct btrfs_root *root = BTRFS_I(inode)->root;
1859
1860
1861 if (TestClearPagePrivate2(page))
1862 return 0;
1863
1864 if (PageChecked(page))
1865 return -EAGAIN;
1866
1867 fixup = kzalloc(sizeof(*fixup), GFP_NOFS);
1868 if (!fixup)
1869 return -EAGAIN;
1870
1871 SetPageChecked(page);
1872 page_cache_get(page);
1873 fixup->work.func = btrfs_writepage_fixup_worker;
1874 fixup->page = page;
1875 btrfs_queue_worker(&root->fs_info->fixup_workers, &fixup->work);
1876 return -EBUSY;
1877}
1878
1879static int insert_reserved_file_extent(struct btrfs_trans_handle *trans,
1880 struct inode *inode, u64 file_pos,
1881 u64 disk_bytenr, u64 disk_num_bytes,
1882 u64 num_bytes, u64 ram_bytes,
1883 u8 compression, u8 encryption,
1884 u16 other_encoding, int extent_type)
1885{
1886 struct btrfs_root *root = BTRFS_I(inode)->root;
1887 struct btrfs_file_extent_item *fi;
1888 struct btrfs_path *path;
1889 struct extent_buffer *leaf;
1890 struct btrfs_key ins;
1891 int ret;
1892
1893 path = btrfs_alloc_path();
1894 if (!path)
1895 return -ENOMEM;
1896
1897 path->leave_spinning = 1;
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908 ret = btrfs_drop_extents(trans, root, inode, file_pos,
1909 file_pos + num_bytes, 0);
1910 if (ret)
1911 goto out;
1912
1913 ins.objectid = btrfs_ino(inode);
1914 ins.offset = file_pos;
1915 ins.type = BTRFS_EXTENT_DATA_KEY;
1916 ret = btrfs_insert_empty_item(trans, root, path, &ins, sizeof(*fi));
1917 if (ret)
1918 goto out;
1919 leaf = path->nodes[0];
1920 fi = btrfs_item_ptr(leaf, path->slots[0],
1921 struct btrfs_file_extent_item);
1922 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
1923 btrfs_set_file_extent_type(leaf, fi, extent_type);
1924 btrfs_set_file_extent_disk_bytenr(leaf, fi, disk_bytenr);
1925 btrfs_set_file_extent_disk_num_bytes(leaf, fi, disk_num_bytes);
1926 btrfs_set_file_extent_offset(leaf, fi, 0);
1927 btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);
1928 btrfs_set_file_extent_ram_bytes(leaf, fi, ram_bytes);
1929 btrfs_set_file_extent_compression(leaf, fi, compression);
1930 btrfs_set_file_extent_encryption(leaf, fi, encryption);
1931 btrfs_set_file_extent_other_encoding(leaf, fi, other_encoding);
1932
1933 btrfs_mark_buffer_dirty(leaf);
1934 btrfs_release_path(path);
1935
1936 inode_add_bytes(inode, num_bytes);
1937
1938 ins.objectid = disk_bytenr;
1939 ins.offset = disk_num_bytes;
1940 ins.type = BTRFS_EXTENT_ITEM_KEY;
1941 ret = btrfs_alloc_reserved_file_extent(trans, root,
1942 root->root_key.objectid,
1943 btrfs_ino(inode), file_pos, &ins);
1944out:
1945 btrfs_free_path(path);
1946
1947 return ret;
1948}
1949
1950
1951struct sa_defrag_extent_backref {
1952 struct rb_node node;
1953 struct old_sa_defrag_extent *old;
1954 u64 root_id;
1955 u64 inum;
1956 u64 file_pos;
1957 u64 extent_offset;
1958 u64 num_bytes;
1959 u64 generation;
1960};
1961
1962struct old_sa_defrag_extent {
1963 struct list_head list;
1964 struct new_sa_defrag_extent *new;
1965
1966 u64 extent_offset;
1967 u64 bytenr;
1968 u64 offset;
1969 u64 len;
1970 int count;
1971};
1972
1973struct new_sa_defrag_extent {
1974 struct rb_root root;
1975 struct list_head head;
1976 struct btrfs_path *path;
1977 struct inode *inode;
1978 u64 file_pos;
1979 u64 len;
1980 u64 bytenr;
1981 u64 disk_len;
1982 u8 compress_type;
1983};
1984
1985static int backref_comp(struct sa_defrag_extent_backref *b1,
1986 struct sa_defrag_extent_backref *b2)
1987{
1988 if (b1->root_id < b2->root_id)
1989 return -1;
1990 else if (b1->root_id > b2->root_id)
1991 return 1;
1992
1993 if (b1->inum < b2->inum)
1994 return -1;
1995 else if (b1->inum > b2->inum)
1996 return 1;
1997
1998 if (b1->file_pos < b2->file_pos)
1999 return -1;
2000 else if (b1->file_pos > b2->file_pos)
2001 return 1;
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015 return 0;
2016}
2017
2018static void backref_insert(struct rb_root *root,
2019 struct sa_defrag_extent_backref *backref)
2020{
2021 struct rb_node **p = &root->rb_node;
2022 struct rb_node *parent = NULL;
2023 struct sa_defrag_extent_backref *entry;
2024 int ret;
2025
2026 while (*p) {
2027 parent = *p;
2028 entry = rb_entry(parent, struct sa_defrag_extent_backref, node);
2029
2030 ret = backref_comp(backref, entry);
2031 if (ret < 0)
2032 p = &(*p)->rb_left;
2033 else
2034 p = &(*p)->rb_right;
2035 }
2036
2037 rb_link_node(&backref->node, parent, p);
2038 rb_insert_color(&backref->node, root);
2039}
2040
2041
2042
2043
2044static noinline int record_one_backref(u64 inum, u64 offset, u64 root_id,
2045 void *ctx)
2046{
2047 struct btrfs_file_extent_item *extent;
2048 struct btrfs_fs_info *fs_info;
2049 struct old_sa_defrag_extent *old = ctx;
2050 struct new_sa_defrag_extent *new = old->new;
2051 struct btrfs_path *path = new->path;
2052 struct btrfs_key key;
2053 struct btrfs_root *root;
2054 struct sa_defrag_extent_backref *backref;
2055 struct extent_buffer *leaf;
2056 struct inode *inode = new->inode;
2057 int slot;
2058 int ret;
2059 u64 extent_offset;
2060 u64 num_bytes;
2061
2062 if (BTRFS_I(inode)->root->root_key.objectid == root_id &&
2063 inum == btrfs_ino(inode))
2064 return 0;
2065
2066 key.objectid = root_id;
2067 key.type = BTRFS_ROOT_ITEM_KEY;
2068 key.offset = (u64)-1;
2069
2070 fs_info = BTRFS_I(inode)->root->fs_info;
2071 root = btrfs_read_fs_root_no_name(fs_info, &key);
2072 if (IS_ERR(root)) {
2073 if (PTR_ERR(root) == -ENOENT)
2074 return 0;
2075 WARN_ON(1);
2076 pr_debug("inum=%llu, offset=%llu, root_id=%llu\n",
2077 inum, offset, root_id);
2078 return PTR_ERR(root);
2079 }
2080
2081 key.objectid = inum;
2082 key.type = BTRFS_EXTENT_DATA_KEY;
2083 if (offset > (u64)-1 << 32)
2084 key.offset = 0;
2085 else
2086 key.offset = offset;
2087
2088 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2089 if (ret < 0) {
2090 WARN_ON(1);
2091 return ret;
2092 }
2093
2094 while (1) {
2095 cond_resched();
2096
2097 leaf = path->nodes[0];
2098 slot = path->slots[0];
2099
2100 if (slot >= btrfs_header_nritems(leaf)) {
2101 ret = btrfs_next_leaf(root, path);
2102 if (ret < 0) {
2103 goto out;
2104 } else if (ret > 0) {
2105 ret = 0;
2106 goto out;
2107 }
2108 continue;
2109 }
2110
2111 path->slots[0]++;
2112
2113 btrfs_item_key_to_cpu(leaf, &key, slot);
2114
2115 if (key.objectid > inum)
2116 goto out;
2117
2118 if (key.objectid < inum || key.type != BTRFS_EXTENT_DATA_KEY)
2119 continue;
2120
2121 extent = btrfs_item_ptr(leaf, slot,
2122 struct btrfs_file_extent_item);
2123
2124 if (btrfs_file_extent_disk_bytenr(leaf, extent) != old->bytenr)
2125 continue;
2126
2127 extent_offset = btrfs_file_extent_offset(leaf, extent);
2128 if (key.offset - extent_offset != offset)
2129 continue;
2130
2131 num_bytes = btrfs_file_extent_num_bytes(leaf, extent);
2132 if (extent_offset >= old->extent_offset + old->offset +
2133 old->len || extent_offset + num_bytes <=
2134 old->extent_offset + old->offset)
2135 continue;
2136
2137 break;
2138 }
2139
2140 backref = kmalloc(sizeof(*backref), GFP_NOFS);
2141 if (!backref) {
2142 ret = -ENOENT;
2143 goto out;
2144 }
2145
2146 backref->root_id = root_id;
2147 backref->inum = inum;
2148 backref->file_pos = offset + extent_offset;
2149 backref->num_bytes = num_bytes;
2150 backref->extent_offset = extent_offset;
2151 backref->generation = btrfs_file_extent_generation(leaf, extent);
2152 backref->old = old;
2153 backref_insert(&new->root, backref);
2154 old->count++;
2155out:
2156 btrfs_release_path(path);
2157 WARN_ON(ret);
2158 return ret;
2159}
2160
2161static noinline bool record_extent_backrefs(struct btrfs_path *path,
2162 struct new_sa_defrag_extent *new)
2163{
2164 struct btrfs_fs_info *fs_info = BTRFS_I(new->inode)->root->fs_info;
2165 struct old_sa_defrag_extent *old, *tmp;
2166 int ret;
2167
2168 new->path = path;
2169
2170 list_for_each_entry_safe(old, tmp, &new->head, list) {
2171 ret = iterate_inodes_from_logical(old->bytenr, fs_info,
2172 path, record_one_backref,
2173 old);
2174 BUG_ON(ret < 0 && ret != -ENOENT);
2175
2176
2177 if (!old->count) {
2178 list_del(&old->list);
2179 kfree(old);
2180 }
2181 }
2182
2183 if (list_empty(&new->head))
2184 return false;
2185
2186 return true;
2187}
2188
2189static int relink_is_mergable(struct extent_buffer *leaf,
2190 struct btrfs_file_extent_item *fi,
2191 u64 disk_bytenr)
2192{
2193 if (btrfs_file_extent_disk_bytenr(leaf, fi) != disk_bytenr)
2194 return 0;
2195
2196 if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG)
2197 return 0;
2198
2199 if (btrfs_file_extent_compression(leaf, fi) ||
2200 btrfs_file_extent_encryption(leaf, fi) ||
2201 btrfs_file_extent_other_encoding(leaf, fi))
2202 return 0;
2203
2204 return 1;
2205}
2206
2207
2208
2209
2210static noinline int relink_extent_backref(struct btrfs_path *path,
2211 struct sa_defrag_extent_backref *prev,
2212 struct sa_defrag_extent_backref *backref)
2213{
2214 struct btrfs_file_extent_item *extent;
2215 struct btrfs_file_extent_item *item;
2216 struct btrfs_ordered_extent *ordered;
2217 struct btrfs_trans_handle *trans;
2218 struct btrfs_fs_info *fs_info;
2219 struct btrfs_root *root;
2220 struct btrfs_key key;
2221 struct extent_buffer *leaf;
2222 struct old_sa_defrag_extent *old = backref->old;
2223 struct new_sa_defrag_extent *new = old->new;
2224 struct inode *src_inode = new->inode;
2225 struct inode *inode;
2226 struct extent_state *cached = NULL;
2227 int ret = 0;
2228 u64 start;
2229 u64 len;
2230 u64 lock_start;
2231 u64 lock_end;
2232 bool merge = false;
2233 int index;
2234
2235 if (prev && prev->root_id == backref->root_id &&
2236 prev->inum == backref->inum &&
2237 prev->file_pos + prev->num_bytes == backref->file_pos)
2238 merge = true;
2239
2240
2241 key.objectid = backref->root_id;
2242 key.type = BTRFS_ROOT_ITEM_KEY;
2243 key.offset = (u64)-1;
2244
2245 fs_info = BTRFS_I(src_inode)->root->fs_info;
2246 index = srcu_read_lock(&fs_info->subvol_srcu);
2247
2248 root = btrfs_read_fs_root_no_name(fs_info, &key);
2249 if (IS_ERR(root)) {
2250 srcu_read_unlock(&fs_info->subvol_srcu, index);
2251 if (PTR_ERR(root) == -ENOENT)
2252 return 0;
2253 return PTR_ERR(root);
2254 }
2255 if (btrfs_root_refs(&root->root_item) == 0) {
2256 srcu_read_unlock(&fs_info->subvol_srcu, index);
2257
2258 return 0;
2259 }
2260
2261
2262 key.objectid = backref->inum;
2263 key.type = BTRFS_INODE_ITEM_KEY;
2264 key.offset = 0;
2265
2266 inode = btrfs_iget(fs_info->sb, &key, root, NULL);
2267 if (IS_ERR(inode)) {
2268 srcu_read_unlock(&fs_info->subvol_srcu, index);
2269 return 0;
2270 }
2271
2272 srcu_read_unlock(&fs_info->subvol_srcu, index);
2273
2274
2275 lock_start = backref->file_pos;
2276 lock_end = backref->file_pos + backref->num_bytes - 1;
2277 lock_extent_bits(&BTRFS_I(inode)->io_tree, lock_start, lock_end,
2278 0, &cached);
2279
2280 ordered = btrfs_lookup_first_ordered_extent(inode, lock_end);
2281 if (ordered) {
2282 btrfs_put_ordered_extent(ordered);
2283 goto out_unlock;
2284 }
2285
2286 trans = btrfs_join_transaction(root);
2287 if (IS_ERR(trans)) {
2288 ret = PTR_ERR(trans);
2289 goto out_unlock;
2290 }
2291
2292 key.objectid = backref->inum;
2293 key.type = BTRFS_EXTENT_DATA_KEY;
2294 key.offset = backref->file_pos;
2295
2296 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2297 if (ret < 0) {
2298 goto out_free_path;
2299 } else if (ret > 0) {
2300 ret = 0;
2301 goto out_free_path;
2302 }
2303
2304 extent = btrfs_item_ptr(path->nodes[0], path->slots[0],
2305 struct btrfs_file_extent_item);
2306
2307 if (btrfs_file_extent_generation(path->nodes[0], extent) !=
2308 backref->generation)
2309 goto out_free_path;
2310
2311 btrfs_release_path(path);
2312
2313 start = backref->file_pos;
2314 if (backref->extent_offset < old->extent_offset + old->offset)
2315 start += old->extent_offset + old->offset -
2316 backref->extent_offset;
2317
2318 len = min(backref->extent_offset + backref->num_bytes,
2319 old->extent_offset + old->offset + old->len);
2320 len -= max(backref->extent_offset, old->extent_offset + old->offset);
2321
2322 ret = btrfs_drop_extents(trans, root, inode, start,
2323 start + len, 1);
2324 if (ret)
2325 goto out_free_path;
2326again:
2327 key.objectid = btrfs_ino(inode);
2328 key.type = BTRFS_EXTENT_DATA_KEY;
2329 key.offset = start;
2330
2331 path->leave_spinning = 1;
2332 if (merge) {
2333 struct btrfs_file_extent_item *fi;
2334 u64 extent_len;
2335 struct btrfs_key found_key;
2336
2337 ret = btrfs_search_slot(trans, root, &key, path, 1, 1);
2338 if (ret < 0)
2339 goto out_free_path;
2340
2341 path->slots[0]--;
2342 leaf = path->nodes[0];
2343 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
2344
2345 fi = btrfs_item_ptr(leaf, path->slots[0],
2346 struct btrfs_file_extent_item);
2347 extent_len = btrfs_file_extent_num_bytes(leaf, fi);
2348
2349 if (relink_is_mergable(leaf, fi, new->bytenr) &&
2350 extent_len + found_key.offset == start) {
2351 btrfs_set_file_extent_num_bytes(leaf, fi,
2352 extent_len + len);
2353 btrfs_mark_buffer_dirty(leaf);
2354 inode_add_bytes(inode, len);
2355
2356 ret = 1;
2357 goto out_free_path;
2358 } else {
2359 merge = false;
2360 btrfs_release_path(path);
2361 goto again;
2362 }
2363 }
2364
2365 ret = btrfs_insert_empty_item(trans, root, path, &key,
2366 sizeof(*extent));
2367 if (ret) {
2368 btrfs_abort_transaction(trans, root, ret);
2369 goto out_free_path;
2370 }
2371
2372 leaf = path->nodes[0];
2373 item = btrfs_item_ptr(leaf, path->slots[0],
2374 struct btrfs_file_extent_item);
2375 btrfs_set_file_extent_disk_bytenr(leaf, item, new->bytenr);
2376 btrfs_set_file_extent_disk_num_bytes(leaf, item, new->disk_len);
2377 btrfs_set_file_extent_offset(leaf, item, start - new->file_pos);
2378 btrfs_set_file_extent_num_bytes(leaf, item, len);
2379 btrfs_set_file_extent_ram_bytes(leaf, item, new->len);
2380 btrfs_set_file_extent_generation(leaf, item, trans->transid);
2381 btrfs_set_file_extent_type(leaf, item, BTRFS_FILE_EXTENT_REG);
2382 btrfs_set_file_extent_compression(leaf, item, new->compress_type);
2383 btrfs_set_file_extent_encryption(leaf, item, 0);
2384 btrfs_set_file_extent_other_encoding(leaf, item, 0);
2385
2386 btrfs_mark_buffer_dirty(leaf);
2387 inode_add_bytes(inode, len);
2388 btrfs_release_path(path);
2389
2390 ret = btrfs_inc_extent_ref(trans, root, new->bytenr,
2391 new->disk_len, 0,
2392 backref->root_id, backref->inum,
2393 new->file_pos, 0);
2394 if (ret) {
2395 btrfs_abort_transaction(trans, root, ret);
2396 goto out_free_path;
2397 }
2398
2399 ret = 1;
2400out_free_path:
2401 btrfs_release_path(path);
2402 path->leave_spinning = 0;
2403 btrfs_end_transaction(trans, root);
2404out_unlock:
2405 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lock_start, lock_end,
2406 &cached, GFP_NOFS);
2407 iput(inode);
2408 return ret;
2409}
2410
2411static void relink_file_extents(struct new_sa_defrag_extent *new)
2412{
2413 struct btrfs_path *path;
2414 struct old_sa_defrag_extent *old, *tmp;
2415 struct sa_defrag_extent_backref *backref;
2416 struct sa_defrag_extent_backref *prev = NULL;
2417 struct inode *inode;
2418 struct btrfs_root *root;
2419 struct rb_node *node;
2420 int ret;
2421
2422 inode = new->inode;
2423 root = BTRFS_I(inode)->root;
2424
2425 path = btrfs_alloc_path();
2426 if (!path)
2427 return;
2428
2429 if (!record_extent_backrefs(path, new)) {
2430 btrfs_free_path(path);
2431 goto out;
2432 }
2433 btrfs_release_path(path);
2434
2435 while (1) {
2436 node = rb_first(&new->root);
2437 if (!node)
2438 break;
2439 rb_erase(node, &new->root);
2440
2441 backref = rb_entry(node, struct sa_defrag_extent_backref, node);
2442
2443 ret = relink_extent_backref(path, prev, backref);
2444 WARN_ON(ret < 0);
2445
2446 kfree(prev);
2447
2448 if (ret == 1)
2449 prev = backref;
2450 else
2451 prev = NULL;
2452 cond_resched();
2453 }
2454 kfree(prev);
2455
2456 btrfs_free_path(path);
2457
2458 list_for_each_entry_safe(old, tmp, &new->head, list) {
2459 list_del(&old->list);
2460 kfree(old);
2461 }
2462out:
2463 atomic_dec(&root->fs_info->defrag_running);
2464 wake_up(&root->fs_info->transaction_wait);
2465
2466 kfree(new);
2467}
2468
2469static struct new_sa_defrag_extent *
2470record_old_file_extents(struct inode *inode,
2471 struct btrfs_ordered_extent *ordered)
2472{
2473 struct btrfs_root *root = BTRFS_I(inode)->root;
2474 struct btrfs_path *path;
2475 struct btrfs_key key;
2476 struct old_sa_defrag_extent *old, *tmp;
2477 struct new_sa_defrag_extent *new;
2478 int ret;
2479
2480 new = kmalloc(sizeof(*new), GFP_NOFS);
2481 if (!new)
2482 return NULL;
2483
2484 new->inode = inode;
2485 new->file_pos = ordered->file_offset;
2486 new->len = ordered->len;
2487 new->bytenr = ordered->start;
2488 new->disk_len = ordered->disk_len;
2489 new->compress_type = ordered->compress_type;
2490 new->root = RB_ROOT;
2491 INIT_LIST_HEAD(&new->head);
2492
2493 path = btrfs_alloc_path();
2494 if (!path)
2495 goto out_kfree;
2496
2497 key.objectid = btrfs_ino(inode);
2498 key.type = BTRFS_EXTENT_DATA_KEY;
2499 key.offset = new->file_pos;
2500
2501 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2502 if (ret < 0)
2503 goto out_free_path;
2504 if (ret > 0 && path->slots[0] > 0)
2505 path->slots[0]--;
2506
2507
2508 while (1) {
2509 struct btrfs_file_extent_item *extent;
2510 struct extent_buffer *l;
2511 int slot;
2512 u64 num_bytes;
2513 u64 offset;
2514 u64 end;
2515 u64 disk_bytenr;
2516 u64 extent_offset;
2517
2518 l = path->nodes[0];
2519 slot = path->slots[0];
2520
2521 if (slot >= btrfs_header_nritems(l)) {
2522 ret = btrfs_next_leaf(root, path);
2523 if (ret < 0)
2524 goto out_free_list;
2525 else if (ret > 0)
2526 break;
2527 continue;
2528 }
2529
2530 btrfs_item_key_to_cpu(l, &key, slot);
2531
2532 if (key.objectid != btrfs_ino(inode))
2533 break;
2534 if (key.type != BTRFS_EXTENT_DATA_KEY)
2535 break;
2536 if (key.offset >= new->file_pos + new->len)
2537 break;
2538
2539 extent = btrfs_item_ptr(l, slot, struct btrfs_file_extent_item);
2540
2541 num_bytes = btrfs_file_extent_num_bytes(l, extent);
2542 if (key.offset + num_bytes < new->file_pos)
2543 goto next;
2544
2545 disk_bytenr = btrfs_file_extent_disk_bytenr(l, extent);
2546 if (!disk_bytenr)
2547 goto next;
2548
2549 extent_offset = btrfs_file_extent_offset(l, extent);
2550
2551 old = kmalloc(sizeof(*old), GFP_NOFS);
2552 if (!old)
2553 goto out_free_list;
2554
2555 offset = max(new->file_pos, key.offset);
2556 end = min(new->file_pos + new->len, key.offset + num_bytes);
2557
2558 old->bytenr = disk_bytenr;
2559 old->extent_offset = extent_offset;
2560 old->offset = offset - key.offset;
2561 old->len = end - offset;
2562 old->new = new;
2563 old->count = 0;
2564 list_add_tail(&old->list, &new->head);
2565next:
2566 path->slots[0]++;
2567 cond_resched();
2568 }
2569
2570 btrfs_free_path(path);
2571 atomic_inc(&root->fs_info->defrag_running);
2572
2573 return new;
2574
2575out_free_list:
2576 list_for_each_entry_safe(old, tmp, &new->head, list) {
2577 list_del(&old->list);
2578 kfree(old);
2579 }
2580out_free_path:
2581 btrfs_free_path(path);
2582out_kfree:
2583 kfree(new);
2584 return NULL;
2585}
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)
2598{
2599 struct inode *inode = ordered_extent->inode;
2600 struct btrfs_root *root = BTRFS_I(inode)->root;
2601 struct btrfs_trans_handle *trans = NULL;
2602 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
2603 struct extent_state *cached_state = NULL;
2604 struct new_sa_defrag_extent *new = NULL;
2605 int compress_type = 0;
2606 int ret;
2607 bool nolock;
2608
2609 nolock = btrfs_is_free_space_inode(inode);
2610
2611 if (test_bit(BTRFS_ORDERED_IOERR, &ordered_extent->flags)) {
2612 ret = -EIO;
2613 goto out;
2614 }
2615
2616 if (test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags)) {
2617 BUG_ON(!list_empty(&ordered_extent->list));
2618 btrfs_ordered_update_i_size(inode, 0, ordered_extent);
2619 if (nolock)
2620 trans = btrfs_join_transaction_nolock(root);
2621 else
2622 trans = btrfs_join_transaction(root);
2623 if (IS_ERR(trans)) {
2624 ret = PTR_ERR(trans);
2625 trans = NULL;
2626 goto out;
2627 }
2628 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
2629 ret = btrfs_update_inode_fallback(trans, root, inode);
2630 if (ret)
2631 btrfs_abort_transaction(trans, root, ret);
2632 goto out;
2633 }
2634
2635 lock_extent_bits(io_tree, ordered_extent->file_offset,
2636 ordered_extent->file_offset + ordered_extent->len - 1,
2637 0, &cached_state);
2638
2639 ret = test_range_bit(io_tree, ordered_extent->file_offset,
2640 ordered_extent->file_offset + ordered_extent->len - 1,
2641 EXTENT_DEFRAG, 1, cached_state);
2642 if (ret) {
2643 u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
2644 if (last_snapshot >= BTRFS_I(inode)->generation)
2645
2646 new = record_old_file_extents(inode, ordered_extent);
2647
2648 clear_extent_bit(io_tree, ordered_extent->file_offset,
2649 ordered_extent->file_offset + ordered_extent->len - 1,
2650 EXTENT_DEFRAG, 0, 0, &cached_state, GFP_NOFS);
2651 }
2652
2653 if (nolock)
2654 trans = btrfs_join_transaction_nolock(root);
2655 else
2656 trans = btrfs_join_transaction(root);
2657 if (IS_ERR(trans)) {
2658 ret = PTR_ERR(trans);
2659 trans = NULL;
2660 goto out_unlock;
2661 }
2662 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
2663
2664 if (test_bit(BTRFS_ORDERED_COMPRESSED, &ordered_extent->flags))
2665 compress_type = ordered_extent->compress_type;
2666 if (test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags)) {
2667 BUG_ON(compress_type);
2668 ret = btrfs_mark_extent_written(trans, inode,
2669 ordered_extent->file_offset,
2670 ordered_extent->file_offset +
2671 ordered_extent->len);
2672 } else {
2673 BUG_ON(root == root->fs_info->tree_root);
2674 ret = insert_reserved_file_extent(trans, inode,
2675 ordered_extent->file_offset,
2676 ordered_extent->start,
2677 ordered_extent->disk_len,
2678 ordered_extent->len,
2679 ordered_extent->len,
2680 compress_type, 0, 0,
2681 BTRFS_FILE_EXTENT_REG);
2682 }
2683 unpin_extent_cache(&BTRFS_I(inode)->extent_tree,
2684 ordered_extent->file_offset, ordered_extent->len,
2685 trans->transid);
2686 if (ret < 0) {
2687 btrfs_abort_transaction(trans, root, ret);
2688 goto out_unlock;
2689 }
2690
2691 add_pending_csums(trans, inode, ordered_extent->file_offset,
2692 &ordered_extent->list);
2693
2694 btrfs_ordered_update_i_size(inode, 0, ordered_extent);
2695 ret = btrfs_update_inode_fallback(trans, root, inode);
2696 if (ret) {
2697 btrfs_abort_transaction(trans, root, ret);
2698 goto out_unlock;
2699 }
2700 ret = 0;
2701out_unlock:
2702 unlock_extent_cached(io_tree, ordered_extent->file_offset,
2703 ordered_extent->file_offset +
2704 ordered_extent->len - 1, &cached_state, GFP_NOFS);
2705out:
2706 if (root != root->fs_info->tree_root)
2707 btrfs_delalloc_release_metadata(inode, ordered_extent->len);
2708 if (trans)
2709 btrfs_end_transaction(trans, root);
2710
2711 if (ret) {
2712 clear_extent_uptodate(io_tree, ordered_extent->file_offset,
2713 ordered_extent->file_offset +
2714 ordered_extent->len - 1, NULL, GFP_NOFS);
2715
2716
2717
2718
2719
2720
2721 if (!test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags) &&
2722 !test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags))
2723 btrfs_free_reserved_extent(root, ordered_extent->start,
2724 ordered_extent->disk_len);
2725 }
2726
2727
2728
2729
2730
2731
2732 btrfs_remove_ordered_extent(inode, ordered_extent);
2733
2734
2735 if (new)
2736 relink_file_extents(new);
2737
2738
2739 btrfs_put_ordered_extent(ordered_extent);
2740
2741 btrfs_put_ordered_extent(ordered_extent);
2742
2743 return ret;
2744}
2745
2746static void finish_ordered_fn(struct btrfs_work *work)
2747{
2748 struct btrfs_ordered_extent *ordered_extent;
2749 ordered_extent = container_of(work, struct btrfs_ordered_extent, work);
2750 btrfs_finish_ordered_io(ordered_extent);
2751}
2752
2753static int btrfs_writepage_end_io_hook(struct page *page, u64 start, u64 end,
2754 struct extent_state *state, int uptodate)
2755{
2756 struct inode *inode = page->mapping->host;
2757 struct btrfs_root *root = BTRFS_I(inode)->root;
2758 struct btrfs_ordered_extent *ordered_extent = NULL;
2759 struct btrfs_workers *workers;
2760
2761 trace_btrfs_writepage_end_io_hook(page, start, end, uptodate);
2762
2763 ClearPagePrivate2(page);
2764 if (!btrfs_dec_test_ordered_pending(inode, &ordered_extent, start,
2765 end - start + 1, uptodate))
2766 return 0;
2767
2768 ordered_extent->work.func = finish_ordered_fn;
2769 ordered_extent->work.flags = 0;
2770
2771 if (btrfs_is_free_space_inode(inode))
2772 workers = &root->fs_info->endio_freespace_worker;
2773 else
2774 workers = &root->fs_info->endio_write_workers;
2775 btrfs_queue_worker(workers, &ordered_extent->work);
2776
2777 return 0;
2778}
2779
2780
2781
2782
2783
2784
2785static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end,
2786 struct extent_state *state, int mirror)
2787{
2788 size_t offset = start - page_offset(page);
2789 struct inode *inode = page->mapping->host;
2790 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
2791 char *kaddr;
2792 u64 private = ~(u32)0;
2793 int ret;
2794 struct btrfs_root *root = BTRFS_I(inode)->root;
2795 u32 csum = ~(u32)0;
2796
2797 if (PageChecked(page)) {
2798 ClearPageChecked(page);
2799 goto good;
2800 }
2801
2802 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)
2803 goto good;
2804
2805 if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID &&
2806 test_range_bit(io_tree, start, end, EXTENT_NODATASUM, 1, NULL)) {
2807 clear_extent_bits(io_tree, start, end, EXTENT_NODATASUM,
2808 GFP_NOFS);
2809 return 0;
2810 }
2811
2812 if (state && state->start == start) {
2813 private = state->private;
2814 ret = 0;
2815 } else {
2816 ret = get_state_private(io_tree, start, &private);
2817 }
2818 kaddr = kmap_atomic(page);
2819 if (ret)
2820 goto zeroit;
2821
2822 csum = btrfs_csum_data(root, kaddr + offset, csum, end - start + 1);
2823 btrfs_csum_final(csum, (char *)&csum);
2824 if (csum != private)
2825 goto zeroit;
2826
2827 kunmap_atomic(kaddr);
2828good:
2829 return 0;
2830
2831zeroit:
2832 printk_ratelimited(KERN_INFO "btrfs csum failed ino %llu off %llu csum %u "
2833 "private %llu\n",
2834 (unsigned long long)btrfs_ino(page->mapping->host),
2835 (unsigned long long)start, csum,
2836 (unsigned long long)private);
2837 memset(kaddr + offset, 1, end - start + 1);
2838 flush_dcache_page(page);
2839 kunmap_atomic(kaddr);
2840 if (private == 0)
2841 return 0;
2842 return -EIO;
2843}
2844
2845struct delayed_iput {
2846 struct list_head list;
2847 struct inode *inode;
2848};
2849
2850
2851
2852void btrfs_add_delayed_iput(struct inode *inode)
2853{
2854 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
2855 struct delayed_iput *delayed;
2856
2857 if (atomic_add_unless(&inode->i_count, -1, 1))
2858 return;
2859
2860 delayed = kmalloc(sizeof(*delayed), GFP_NOFS | __GFP_NOFAIL);
2861 delayed->inode = inode;
2862
2863 spin_lock(&fs_info->delayed_iput_lock);
2864 list_add_tail(&delayed->list, &fs_info->delayed_iputs);
2865 spin_unlock(&fs_info->delayed_iput_lock);
2866}
2867
2868void btrfs_run_delayed_iputs(struct btrfs_root *root)
2869{
2870 LIST_HEAD(list);
2871 struct btrfs_fs_info *fs_info = root->fs_info;
2872 struct delayed_iput *delayed;
2873 int empty;
2874
2875 spin_lock(&fs_info->delayed_iput_lock);
2876 empty = list_empty(&fs_info->delayed_iputs);
2877 spin_unlock(&fs_info->delayed_iput_lock);
2878 if (empty)
2879 return;
2880
2881 spin_lock(&fs_info->delayed_iput_lock);
2882 list_splice_init(&fs_info->delayed_iputs, &list);
2883 spin_unlock(&fs_info->delayed_iput_lock);
2884
2885 while (!list_empty(&list)) {
2886 delayed = list_entry(list.next, struct delayed_iput, list);
2887 list_del(&delayed->list);
2888 iput(delayed->inode);
2889 kfree(delayed);
2890 }
2891}
2892
2893
2894
2895
2896
2897
2898void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
2899 struct btrfs_root *root)
2900{
2901 struct btrfs_block_rsv *block_rsv;
2902 int ret;
2903
2904 if (atomic_read(&root->orphan_inodes) ||
2905 root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE)
2906 return;
2907
2908 spin_lock(&root->orphan_lock);
2909 if (atomic_read(&root->orphan_inodes)) {
2910 spin_unlock(&root->orphan_lock);
2911 return;
2912 }
2913
2914 if (root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE) {
2915 spin_unlock(&root->orphan_lock);
2916 return;
2917 }
2918
2919 block_rsv = root->orphan_block_rsv;
2920 root->orphan_block_rsv = NULL;
2921 spin_unlock(&root->orphan_lock);
2922
2923 if (root->orphan_item_inserted &&
2924 btrfs_root_refs(&root->root_item) > 0) {
2925 ret = btrfs_del_orphan_item(trans, root->fs_info->tree_root,
2926 root->root_key.objectid);
2927 BUG_ON(ret);
2928 root->orphan_item_inserted = 0;
2929 }
2930
2931 if (block_rsv) {
2932 WARN_ON(block_rsv->size > 0);
2933 btrfs_free_block_rsv(root, block_rsv);
2934 }
2935}
2936
2937
2938
2939
2940
2941
2942
2943
2944int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
2945{
2946 struct btrfs_root *root = BTRFS_I(inode)->root;
2947 struct btrfs_block_rsv *block_rsv = NULL;
2948 int reserve = 0;
2949 int insert = 0;
2950 int ret;
2951
2952 if (!root->orphan_block_rsv) {
2953 block_rsv = btrfs_alloc_block_rsv(root, BTRFS_BLOCK_RSV_TEMP);
2954 if (!block_rsv)
2955 return -ENOMEM;
2956 }
2957
2958 spin_lock(&root->orphan_lock);
2959 if (!root->orphan_block_rsv) {
2960 root->orphan_block_rsv = block_rsv;
2961 } else if (block_rsv) {
2962 btrfs_free_block_rsv(root, block_rsv);
2963 block_rsv = NULL;
2964 }
2965
2966 if (!test_and_set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
2967 &BTRFS_I(inode)->runtime_flags)) {
2968#if 0
2969
2970
2971
2972
2973
2974 if (!xchg(&root->orphan_item_inserted, 1))
2975 insert = 2;
2976 else
2977 insert = 1;
2978#endif
2979 insert = 1;
2980 atomic_inc(&root->orphan_inodes);
2981 }
2982
2983 if (!test_and_set_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
2984 &BTRFS_I(inode)->runtime_flags))
2985 reserve = 1;
2986 spin_unlock(&root->orphan_lock);
2987
2988
2989 if (reserve) {
2990 ret = btrfs_orphan_reserve_metadata(trans, inode);
2991 BUG_ON(ret);
2992 }
2993
2994
2995 if (insert >= 1) {
2996 ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode));
2997 if (ret && ret != -EEXIST) {
2998 clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
2999 &BTRFS_I(inode)->runtime_flags);
3000 btrfs_abort_transaction(trans, root, ret);
3001 return ret;
3002 }
3003 ret = 0;
3004 }
3005
3006
3007 if (insert >= 2) {
3008 ret = btrfs_insert_orphan_item(trans, root->fs_info->tree_root,
3009 root->root_key.objectid);
3010 if (ret && ret != -EEXIST) {
3011 btrfs_abort_transaction(trans, root, ret);
3012 return ret;
3013 }
3014 }
3015 return 0;
3016}
3017
3018
3019
3020
3021
3022int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)
3023{
3024 struct btrfs_root *root = BTRFS_I(inode)->root;
3025 int delete_item = 0;
3026 int release_rsv = 0;
3027 int ret = 0;
3028
3029 spin_lock(&root->orphan_lock);
3030 if (test_and_clear_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
3031 &BTRFS_I(inode)->runtime_flags))
3032 delete_item = 1;
3033
3034 if (test_and_clear_bit(BTRFS_INODE_ORPHAN_META_RESERVED,
3035 &BTRFS_I(inode)->runtime_flags))
3036 release_rsv = 1;
3037 spin_unlock(&root->orphan_lock);
3038
3039 if (trans && delete_item) {
3040 ret = btrfs_del_orphan_item(trans, root, btrfs_ino(inode));
3041 BUG_ON(ret);
3042 }
3043
3044 if (release_rsv) {
3045 btrfs_orphan_release_metadata(inode);
3046 atomic_dec(&root->orphan_inodes);
3047 }
3048
3049 return 0;
3050}
3051
3052
3053
3054
3055
3056int btrfs_orphan_cleanup(struct btrfs_root *root)
3057{
3058 struct btrfs_path *path;
3059 struct extent_buffer *leaf;
3060 struct btrfs_key key, found_key;
3061 struct btrfs_trans_handle *trans;
3062 struct inode *inode;
3063 u64 last_objectid = 0;
3064 int ret = 0, nr_unlink = 0, nr_truncate = 0;
3065
3066 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED))
3067 return 0;
3068
3069 path = btrfs_alloc_path();
3070 if (!path) {
3071 ret = -ENOMEM;
3072 goto out;
3073 }
3074 path->reada = -1;
3075
3076 key.objectid = BTRFS_ORPHAN_OBJECTID;
3077 btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY);
3078 key.offset = (u64)-1;
3079
3080 while (1) {
3081 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3082 if (ret < 0)
3083 goto out;
3084
3085
3086
3087
3088
3089
3090 if (ret > 0) {
3091 ret = 0;
3092 if (path->slots[0] == 0)
3093 break;
3094 path->slots[0]--;
3095 }
3096
3097
3098 leaf = path->nodes[0];
3099 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
3100
3101
3102 if (found_key.objectid != BTRFS_ORPHAN_OBJECTID)
3103 break;
3104 if (btrfs_key_type(&found_key) != BTRFS_ORPHAN_ITEM_KEY)
3105 break;
3106
3107
3108 btrfs_release_path(path);
3109
3110
3111
3112
3113
3114
3115
3116 if (found_key.offset == last_objectid) {
3117 printk(KERN_ERR "btrfs: Error removing orphan entry, "
3118 "stopping orphan cleanup\n");
3119 ret = -EINVAL;
3120 goto out;
3121 }
3122
3123 last_objectid = found_key.offset;
3124
3125 found_key.objectid = found_key.offset;
3126 found_key.type = BTRFS_INODE_ITEM_KEY;
3127 found_key.offset = 0;
3128 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL);
3129 ret = PTR_RET(inode);
3130 if (ret && ret != -ESTALE)
3131 goto out;
3132
3133 if (ret == -ESTALE && root == root->fs_info->tree_root) {
3134 struct btrfs_root *dead_root;
3135 struct btrfs_fs_info *fs_info = root->fs_info;
3136 int is_dead_root = 0;
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149 spin_lock(&fs_info->trans_lock);
3150 list_for_each_entry(dead_root, &fs_info->dead_roots,
3151 root_list) {
3152 if (dead_root->root_key.objectid ==
3153 found_key.objectid) {
3154 is_dead_root = 1;
3155 break;
3156 }
3157 }
3158 spin_unlock(&fs_info->trans_lock);
3159 if (is_dead_root) {
3160
3161 key.offset = found_key.objectid - 1;
3162 continue;
3163 }
3164 }
3165
3166
3167
3168
3169 if (ret == -ESTALE) {
3170 trans = btrfs_start_transaction(root, 1);
3171 if (IS_ERR(trans)) {
3172 ret = PTR_ERR(trans);
3173 goto out;
3174 }
3175 printk(KERN_ERR "auto deleting %Lu\n",
3176 found_key.objectid);
3177 ret = btrfs_del_orphan_item(trans, root,
3178 found_key.objectid);
3179 BUG_ON(ret);
3180 btrfs_end_transaction(trans, root);
3181 continue;
3182 }
3183
3184
3185
3186
3187
3188 set_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
3189 &BTRFS_I(inode)->runtime_flags);
3190 atomic_inc(&root->orphan_inodes);
3191
3192
3193 if (inode->i_nlink) {
3194 if (!S_ISREG(inode->i_mode)) {
3195 WARN_ON(1);
3196 iput(inode);
3197 continue;
3198 }
3199 nr_truncate++;
3200
3201
3202 trans = btrfs_start_transaction(root, 1);
3203 if (IS_ERR(trans)) {
3204 ret = PTR_ERR(trans);
3205 goto out;
3206 }
3207 ret = btrfs_orphan_add(trans, inode);
3208 btrfs_end_transaction(trans, root);
3209 if (ret)
3210 goto out;
3211
3212 ret = btrfs_truncate(inode);
3213 if (ret)
3214 btrfs_orphan_del(NULL, inode);
3215 } else {
3216 nr_unlink++;
3217 }
3218
3219
3220 iput(inode);
3221 if (ret)
3222 goto out;
3223 }
3224
3225 btrfs_release_path(path);
3226
3227 root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;
3228
3229 if (root->orphan_block_rsv)
3230 btrfs_block_rsv_release(root, root->orphan_block_rsv,
3231 (u64)-1);
3232
3233 if (root->orphan_block_rsv || root->orphan_item_inserted) {
3234 trans = btrfs_join_transaction(root);
3235 if (!IS_ERR(trans))
3236 btrfs_end_transaction(trans, root);
3237 }
3238
3239 if (nr_unlink)
3240 printk(KERN_INFO "btrfs: unlinked %d orphans\n", nr_unlink);
3241 if (nr_truncate)
3242 printk(KERN_INFO "btrfs: truncated %d orphans\n", nr_truncate);
3243
3244out:
3245 if (ret)
3246 printk(KERN_CRIT "btrfs: could not do orphan cleanup %d\n", ret);
3247 btrfs_free_path(path);
3248 return ret;
3249}
3250
3251
3252
3253
3254
3255
3256
3257static noinline int acls_after_inode_item(struct extent_buffer *leaf,
3258 int slot, u64 objectid)
3259{
3260 u32 nritems = btrfs_header_nritems(leaf);
3261 struct btrfs_key found_key;
3262 int scanned = 0;
3263
3264 slot++;
3265 while (slot < nritems) {
3266 btrfs_item_key_to_cpu(leaf, &found_key, slot);
3267
3268
3269 if (found_key.objectid != objectid)
3270 return 0;
3271
3272
3273 if (found_key.type == BTRFS_XATTR_ITEM_KEY)
3274 return 1;
3275
3276
3277
3278
3279
3280 if (found_key.type > BTRFS_XATTR_ITEM_KEY)
3281 return 0;
3282
3283 slot++;
3284 scanned++;
3285
3286
3287
3288
3289
3290
3291
3292 if (scanned >= 8)
3293 break;
3294 }
3295
3296
3297
3298
3299 return 1;
3300}
3301
3302
3303
3304
3305static void btrfs_read_locked_inode(struct inode *inode)
3306{
3307 struct btrfs_path *path;
3308 struct extent_buffer *leaf;
3309 struct btrfs_inode_item *inode_item;
3310 struct btrfs_timespec *tspec;
3311 struct btrfs_root *root = BTRFS_I(inode)->root;
3312 struct btrfs_key location;
3313 int maybe_acls;
3314 u32 rdev;
3315 int ret;
3316 bool filled = false;
3317
3318 ret = btrfs_fill_inode(inode, &rdev);
3319 if (!ret)
3320 filled = true;
3321
3322 path = btrfs_alloc_path();
3323 if (!path)
3324 goto make_bad;
3325
3326 path->leave_spinning = 1;
3327 memcpy(&location, &BTRFS_I(inode)->location, sizeof(location));
3328
3329 ret = btrfs_lookup_inode(NULL, root, path, &location, 0);
3330 if (ret)
3331 goto make_bad;
3332
3333 leaf = path->nodes[0];
3334
3335 if (filled)
3336 goto cache_acl;
3337
3338 inode_item = btrfs_item_ptr(leaf, path->slots[0],
3339 struct btrfs_inode_item);
3340 inode->i_mode = btrfs_inode_mode(leaf, inode_item);
3341 set_nlink(inode, btrfs_inode_nlink(leaf, inode_item));
3342 i_uid_write(inode, btrfs_inode_uid(leaf, inode_item));
3343 i_gid_write(inode, btrfs_inode_gid(leaf, inode_item));
3344 btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item));
3345
3346 tspec = btrfs_inode_atime(inode_item);
3347 inode->i_atime.tv_sec = btrfs_timespec_sec(leaf, tspec);
3348 inode->i_atime.tv_nsec = btrfs_timespec_nsec(leaf, tspec);
3349
3350 tspec = btrfs_inode_mtime(inode_item);
3351 inode->i_mtime.tv_sec = btrfs_timespec_sec(leaf, tspec);
3352 inode->i_mtime.tv_nsec = btrfs_timespec_nsec(leaf, tspec);
3353
3354 tspec = btrfs_inode_ctime(inode_item);
3355 inode->i_ctime.tv_sec = btrfs_timespec_sec(leaf, tspec);
3356 inode->i_ctime.tv_nsec = btrfs_timespec_nsec(leaf, tspec);
3357
3358 inode_set_bytes(inode, btrfs_inode_nbytes(leaf, inode_item));
3359 BTRFS_I(inode)->generation = btrfs_inode_generation(leaf, inode_item);
3360 BTRFS_I(inode)->last_trans = btrfs_inode_transid(leaf, inode_item);
3361
3362
3363
3364
3365
3366
3367
3368 if (BTRFS_I(inode)->last_trans == root->fs_info->generation)
3369 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
3370 &BTRFS_I(inode)->runtime_flags);
3371
3372 inode->i_version = btrfs_inode_sequence(leaf, inode_item);
3373 inode->i_generation = BTRFS_I(inode)->generation;
3374 inode->i_rdev = 0;
3375 rdev = btrfs_inode_rdev(leaf, inode_item);
3376
3377 BTRFS_I(inode)->index_cnt = (u64)-1;
3378 BTRFS_I(inode)->flags = btrfs_inode_flags(leaf, inode_item);
3379cache_acl:
3380
3381
3382
3383
3384 maybe_acls = acls_after_inode_item(leaf, path->slots[0],
3385 btrfs_ino(inode));
3386 if (!maybe_acls)
3387 cache_no_acl(inode);
3388
3389 btrfs_free_path(path);
3390
3391 switch (inode->i_mode & S_IFMT) {
3392 case S_IFREG:
3393 inode->i_mapping->a_ops = &btrfs_aops;
3394 inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
3395 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
3396 inode->i_fop = &btrfs_file_operations;
3397 inode->i_op = &btrfs_file_inode_operations;
3398 break;
3399 case S_IFDIR:
3400 inode->i_fop = &btrfs_dir_file_operations;
3401 if (root == root->fs_info->tree_root)
3402 inode->i_op = &btrfs_dir_ro_inode_operations;
3403 else
3404 inode->i_op = &btrfs_dir_inode_operations;
3405 break;
3406 case S_IFLNK:
3407 inode->i_op = &btrfs_symlink_inode_operations;
3408 inode->i_mapping->a_ops = &btrfs_symlink_aops;
3409 inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
3410 break;
3411 default:
3412 inode->i_op = &btrfs_special_inode_operations;
3413 init_special_inode(inode, inode->i_mode, rdev);
3414 break;
3415 }
3416
3417 btrfs_update_iflags(inode);
3418 return;
3419
3420make_bad:
3421 btrfs_free_path(path);
3422 make_bad_inode(inode);
3423}
3424
3425
3426
3427
3428static void fill_inode_item(struct btrfs_trans_handle *trans,
3429 struct extent_buffer *leaf,
3430 struct btrfs_inode_item *item,
3431 struct inode *inode)
3432{
3433 struct btrfs_map_token token;
3434
3435 btrfs_init_map_token(&token);
3436
3437 btrfs_set_token_inode_uid(leaf, item, i_uid_read(inode), &token);
3438 btrfs_set_token_inode_gid(leaf, item, i_gid_read(inode), &token);
3439 btrfs_set_token_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size,
3440 &token);
3441 btrfs_set_token_inode_mode(leaf, item, inode->i_mode, &token);
3442 btrfs_set_token_inode_nlink(leaf, item, inode->i_nlink, &token);
3443
3444 btrfs_set_token_timespec_sec(leaf, btrfs_inode_atime(item),
3445 inode->i_atime.tv_sec, &token);
3446 btrfs_set_token_timespec_nsec(leaf, btrfs_inode_atime(item),
3447 inode->i_atime.tv_nsec, &token);
3448
3449 btrfs_set_token_timespec_sec(leaf, btrfs_inode_mtime(item),
3450 inode->i_mtime.tv_sec, &token);
3451 btrfs_set_token_timespec_nsec(leaf, btrfs_inode_mtime(item),
3452 inode->i_mtime.tv_nsec, &token);
3453
3454 btrfs_set_token_timespec_sec(leaf, btrfs_inode_ctime(item),
3455 inode->i_ctime.tv_sec, &token);
3456 btrfs_set_token_timespec_nsec(leaf, btrfs_inode_ctime(item),
3457 inode->i_ctime.tv_nsec, &token);
3458
3459 btrfs_set_token_inode_nbytes(leaf, item, inode_get_bytes(inode),
3460 &token);
3461 btrfs_set_token_inode_generation(leaf, item, BTRFS_I(inode)->generation,
3462 &token);
3463 btrfs_set_token_inode_sequence(leaf, item, inode->i_version, &token);
3464 btrfs_set_token_inode_transid(leaf, item, trans->transid, &token);
3465 btrfs_set_token_inode_rdev(leaf, item, inode->i_rdev, &token);
3466 btrfs_set_token_inode_flags(leaf, item, BTRFS_I(inode)->flags, &token);
3467 btrfs_set_token_inode_block_group(leaf, item, 0, &token);
3468}
3469
3470
3471
3472
3473static noinline int btrfs_update_inode_item(struct btrfs_trans_handle *trans,
3474 struct btrfs_root *root, struct inode *inode)
3475{
3476 struct btrfs_inode_item *inode_item;
3477 struct btrfs_path *path;
3478 struct extent_buffer *leaf;
3479 int ret;
3480
3481 path = btrfs_alloc_path();
3482 if (!path)
3483 return -ENOMEM;
3484
3485 path->leave_spinning = 1;
3486 ret = btrfs_lookup_inode(trans, root, path, &BTRFS_I(inode)->location,
3487 1);
3488 if (ret) {
3489 if (ret > 0)
3490 ret = -ENOENT;
3491 goto failed;
3492 }
3493
3494 btrfs_unlock_up_safe(path, 1);
3495 leaf = path->nodes[0];
3496 inode_item = btrfs_item_ptr(leaf, path->slots[0],
3497 struct btrfs_inode_item);
3498
3499 fill_inode_item(trans, leaf, inode_item, inode);
3500 btrfs_mark_buffer_dirty(leaf);
3501 btrfs_set_inode_last_trans(trans, inode);
3502 ret = 0;
3503failed:
3504 btrfs_free_path(path);
3505 return ret;
3506}
3507
3508
3509
3510
3511noinline int btrfs_update_inode(struct btrfs_trans_handle *trans,
3512 struct btrfs_root *root, struct inode *inode)
3513{
3514 int ret;
3515
3516
3517
3518
3519
3520
3521
3522
3523 if (!btrfs_is_free_space_inode(inode)
3524 && root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID) {
3525 btrfs_update_root_times(trans, root);
3526
3527 ret = btrfs_delayed_update_inode(trans, root, inode);
3528 if (!ret)
3529 btrfs_set_inode_last_trans(trans, inode);
3530 return ret;
3531 }
3532
3533 return btrfs_update_inode_item(trans, root, inode);
3534}
3535
3536noinline int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,
3537 struct btrfs_root *root,
3538 struct inode *inode)
3539{
3540 int ret;
3541
3542 ret = btrfs_update_inode(trans, root, inode);
3543 if (ret == -ENOSPC)
3544 return btrfs_update_inode_item(trans, root, inode);
3545 return ret;
3546}
3547
3548
3549
3550
3551
3552
3553static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
3554 struct btrfs_root *root,
3555 struct inode *dir, struct inode *inode,
3556 const char *name, int name_len)
3557{
3558 struct btrfs_path *path;
3559 int ret = 0;
3560 struct extent_buffer *leaf;
3561 struct btrfs_dir_item *di;
3562 struct btrfs_key key;
3563 u64 index;
3564 u64 ino = btrfs_ino(inode);
3565 u64 dir_ino = btrfs_ino(dir);
3566
3567 path = btrfs_alloc_path();
3568 if (!path) {
3569 ret = -ENOMEM;
3570 goto out;
3571 }
3572
3573 path->leave_spinning = 1;
3574 di = btrfs_lookup_dir_item(trans, root, path, dir_ino,
3575 name, name_len, -1);
3576 if (IS_ERR(di)) {
3577 ret = PTR_ERR(di);
3578 goto err;
3579 }
3580 if (!di) {
3581 ret = -ENOENT;
3582 goto err;
3583 }
3584 leaf = path->nodes[0];
3585 btrfs_dir_item_key_to_cpu(leaf, di, &key);
3586 ret = btrfs_delete_one_dir_name(trans, root, path, di);
3587 if (ret)
3588 goto err;
3589 btrfs_release_path(path);
3590
3591 ret = btrfs_del_inode_ref(trans, root, name, name_len, ino,
3592 dir_ino, &index);
3593 if (ret) {
3594 printk(KERN_INFO "btrfs failed to delete reference to %.*s, "
3595 "inode %llu parent %llu\n", name_len, name,
3596 (unsigned long long)ino, (unsigned long long)dir_ino);
3597 btrfs_abort_transaction(trans, root, ret);
3598 goto err;
3599 }
3600
3601 ret = btrfs_delete_delayed_dir_index(trans, root, dir, index);
3602 if (ret) {
3603 btrfs_abort_transaction(trans, root, ret);
3604 goto err;
3605 }
3606
3607 ret = btrfs_del_inode_ref_in_log(trans, root, name, name_len,
3608 inode, dir_ino);
3609 if (ret != 0 && ret != -ENOENT) {
3610 btrfs_abort_transaction(trans, root, ret);
3611 goto err;
3612 }
3613
3614 ret = btrfs_del_dir_entries_in_log(trans, root, name, name_len,
3615 dir, index);
3616 if (ret == -ENOENT)
3617 ret = 0;
3618err:
3619 btrfs_free_path(path);
3620 if (ret)
3621 goto out;
3622
3623 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
3624 inode_inc_iversion(inode);
3625 inode_inc_iversion(dir);
3626 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME;
3627 ret = btrfs_update_inode(trans, root, dir);
3628out:
3629 return ret;
3630}
3631
3632int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
3633 struct btrfs_root *root,
3634 struct inode *dir, struct inode *inode,
3635 const char *name, int name_len)
3636{
3637 int ret;
3638 ret = __btrfs_unlink_inode(trans, root, dir, inode, name, name_len);
3639 if (!ret) {
3640 btrfs_drop_nlink(inode);
3641 ret = btrfs_update_inode(trans, root, inode);
3642 }
3643 return ret;
3644}
3645
3646
3647
3648static int check_path_shared(struct btrfs_root *root,
3649 struct btrfs_path *path)
3650{
3651 struct extent_buffer *eb;
3652 int level;
3653 u64 refs = 1;
3654
3655 for (level = 0; level < BTRFS_MAX_LEVEL; level++) {
3656 int ret;
3657
3658 if (!path->nodes[level])
3659 break;
3660 eb = path->nodes[level];
3661 if (!btrfs_block_can_be_shared(root, eb))
3662 continue;
3663 ret = btrfs_lookup_extent_info(NULL, root, eb->start, eb->len,
3664 &refs, NULL);
3665 if (refs > 1)
3666 return 1;
3667 }
3668 return 0;
3669}
3670
3671
3672
3673
3674
3675
3676
3677
3678static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir,
3679 struct dentry *dentry)
3680{
3681 struct btrfs_trans_handle *trans;
3682 struct btrfs_root *root = BTRFS_I(dir)->root;
3683 struct btrfs_path *path;
3684 struct btrfs_dir_item *di;
3685 struct inode *inode = dentry->d_inode;
3686 u64 index;
3687 int check_link = 1;
3688 int err = -ENOSPC;
3689 int ret;
3690 u64 ino = btrfs_ino(inode);
3691 u64 dir_ino = btrfs_ino(dir);
3692
3693
3694
3695
3696
3697
3698
3699
3700 trans = btrfs_start_transaction(root, 5);
3701 if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC)
3702 return trans;
3703
3704 if (ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
3705 return ERR_PTR(-ENOSPC);
3706
3707
3708 if (S_ISDIR(inode->i_mode) && atomic_read(&inode->i_count) > 1)
3709 return ERR_PTR(-ENOSPC);
3710
3711 if (atomic_read(&inode->i_count) > 2)
3712 return ERR_PTR(-ENOSPC);
3713
3714 if (xchg(&root->fs_info->enospc_unlink, 1))
3715 return ERR_PTR(-ENOSPC);
3716
3717 path = btrfs_alloc_path();
3718 if (!path) {
3719 root->fs_info->enospc_unlink = 0;
3720 return ERR_PTR(-ENOMEM);
3721 }
3722
3723
3724 trans = btrfs_start_transaction(root, 1);
3725 if (IS_ERR(trans)) {
3726 btrfs_free_path(path);
3727 root->fs_info->enospc_unlink = 0;
3728 return trans;
3729 }
3730
3731 path->skip_locking = 1;
3732 path->search_commit_root = 1;
3733
3734 ret = btrfs_lookup_inode(trans, root, path,
3735 &BTRFS_I(dir)->location, 0);
3736 if (ret < 0) {
3737 err = ret;
3738 goto out;
3739 }
3740 if (ret == 0) {
3741 if (check_path_shared(root, path))
3742 goto out;
3743 } else {
3744 check_link = 0;
3745 }
3746 btrfs_release_path(path);
3747
3748 ret = btrfs_lookup_inode(trans, root, path,
3749 &BTRFS_I(inode)->location, 0);
3750 if (ret < 0) {
3751 err = ret;
3752 goto out;
3753 }
3754 if (ret == 0) {
3755 if (check_path_shared(root, path))
3756 goto out;
3757 } else {
3758 check_link = 0;
3759 }
3760 btrfs_release_path(path);
3761
3762 if (ret == 0 && S_ISREG(inode->i_mode)) {
3763 ret = btrfs_lookup_file_extent(trans, root, path,
3764 ino, (u64)-1, 0);
3765 if (ret < 0) {
3766 err = ret;
3767 goto out;
3768 }
3769 BUG_ON(ret == 0);
3770 if (check_path_shared(root, path))
3771 goto out;
3772 btrfs_release_path(path);
3773 }
3774
3775 if (!check_link) {
3776 err = 0;
3777 goto out;
3778 }
3779
3780 di = btrfs_lookup_dir_item(trans, root, path, dir_ino,
3781 dentry->d_name.name, dentry->d_name.len, 0);
3782 if (IS_ERR(di)) {
3783 err = PTR_ERR(di);
3784 goto out;
3785 }
3786 if (di) {
3787 if (check_path_shared(root, path))
3788 goto out;
3789 } else {
3790 err = 0;
3791 goto out;
3792 }
3793 btrfs_release_path(path);
3794
3795 ret = btrfs_get_inode_ref_index(trans, root, path, dentry->d_name.name,
3796 dentry->d_name.len, ino, dir_ino, 0,
3797 &index);
3798 if (ret) {
3799 err = ret;
3800 goto out;
3801 }
3802
3803 if (check_path_shared(root, path))
3804 goto out;
3805
3806 btrfs_release_path(path);
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816 di = btrfs_lookup_dir_index_item(trans, root, path, dir_ino, index,
3817 dentry->d_name.name, dentry->d_name.len, 0);
3818 if (IS_ERR(di)) {
3819 err = PTR_ERR(di);
3820 goto out;
3821 }
3822 BUG_ON(ret == -ENOENT);
3823 if (check_path_shared(root, path))
3824 goto out;
3825
3826 err = 0;
3827out:
3828 btrfs_free_path(path);
3829
3830 if (!err)
3831 err = btrfs_block_rsv_migrate(trans->block_rsv,
3832 &root->fs_info->global_block_rsv,
3833 trans->bytes_reserved);
3834
3835 if (err) {
3836 btrfs_end_transaction(trans, root);
3837 root->fs_info->enospc_unlink = 0;
3838 return ERR_PTR(err);
3839 }
3840
3841 trans->block_rsv = &root->fs_info->global_block_rsv;
3842 return trans;
3843}
3844
3845static void __unlink_end_trans(struct btrfs_trans_handle *trans,
3846 struct btrfs_root *root)
3847{
3848 if (trans->block_rsv->type == BTRFS_BLOCK_RSV_GLOBAL) {
3849 btrfs_block_rsv_release(root, trans->block_rsv,
3850 trans->bytes_reserved);
3851 trans->block_rsv = &root->fs_info->trans_block_rsv;
3852 BUG_ON(!root->fs_info->enospc_unlink);
3853 root->fs_info->enospc_unlink = 0;
3854 }
3855 btrfs_end_transaction(trans, root);
3856}
3857
3858static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
3859{
3860 struct btrfs_root *root = BTRFS_I(dir)->root;
3861 struct btrfs_trans_handle *trans;
3862 struct inode *inode = dentry->d_inode;
3863 int ret;
3864
3865 trans = __unlink_start_trans(dir, dentry);
3866 if (IS_ERR(trans))
3867 return PTR_ERR(trans);
3868
3869 btrfs_record_unlink_dir(trans, dir, dentry->d_inode, 0);
3870
3871 ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
3872 dentry->d_name.name, dentry->d_name.len);
3873 if (ret)
3874 goto out;
3875
3876 if (inode->i_nlink == 0) {
3877 ret = btrfs_orphan_add(trans, inode);
3878 if (ret)
3879 goto out;
3880 }
3881
3882out:
3883 __unlink_end_trans(trans, root);
3884 btrfs_btree_balance_dirty(root);
3885 return ret;
3886}
3887
3888int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
3889 struct btrfs_root *root,
3890 struct inode *dir, u64 objectid,
3891 const char *name, int name_len)
3892{
3893 struct btrfs_path *path;
3894 struct extent_buffer *leaf;
3895 struct btrfs_dir_item *di;
3896 struct btrfs_key key;
3897 u64 index;
3898 int ret;
3899 u64 dir_ino = btrfs_ino(dir);
3900
3901 path = btrfs_alloc_path();
3902 if (!path)
3903 return -ENOMEM;
3904
3905 di = btrfs_lookup_dir_item(trans, root, path, dir_ino,
3906 name, name_len, -1);
3907 if (IS_ERR_OR_NULL(di)) {
3908 if (!di)
3909 ret = -ENOENT;
3910 else
3911 ret = PTR_ERR(di);
3912 goto out;
3913 }
3914
3915 leaf = path->nodes[0];
3916 btrfs_dir_item_key_to_cpu(leaf, di, &key);
3917 WARN_ON(key.type != BTRFS_ROOT_ITEM_KEY || key.objectid != objectid);
3918 ret = btrfs_delete_one_dir_name(trans, root, path, di);
3919 if (ret) {
3920 btrfs_abort_transaction(trans, root, ret);
3921 goto out;
3922 }
3923 btrfs_release_path(path);
3924
3925 ret = btrfs_del_root_ref(trans, root->fs_info->tree_root,
3926 objectid, root->root_key.objectid,
3927 dir_ino, &index, name, name_len);
3928 if (ret < 0) {
3929 if (ret != -ENOENT) {
3930 btrfs_abort_transaction(trans, root, ret);
3931 goto out;
3932 }
3933 di = btrfs_search_dir_index_item(root, path, dir_ino,
3934 name, name_len);
3935 if (IS_ERR_OR_NULL(di)) {
3936 if (!di)
3937 ret = -ENOENT;
3938 else
3939 ret = PTR_ERR(di);
3940 btrfs_abort_transaction(trans, root, ret);
3941 goto out;
3942 }
3943
3944 leaf = path->nodes[0];
3945 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3946 btrfs_release_path(path);
3947 index = key.offset;
3948 }
3949 btrfs_release_path(path);
3950
3951 ret = btrfs_delete_delayed_dir_index(trans, root, dir, index);
3952 if (ret) {
3953 btrfs_abort_transaction(trans, root, ret);
3954 goto out;
3955 }
3956
3957 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
3958 inode_inc_iversion(dir);
3959 dir->i_mtime = dir->i_ctime = CURRENT_TIME;
3960 ret = btrfs_update_inode_fallback(trans, root, dir);
3961 if (ret)
3962 btrfs_abort_transaction(trans, root, ret);
3963out:
3964 btrfs_free_path(path);
3965 return ret;
3966}
3967
3968static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
3969{
3970 struct inode *inode = dentry->d_inode;
3971 int err = 0;
3972 struct btrfs_root *root = BTRFS_I(dir)->root;
3973 struct btrfs_trans_handle *trans;
3974
3975 if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
3976 return -ENOTEMPTY;
3977 if (btrfs_ino(inode) == BTRFS_FIRST_FREE_OBJECTID)
3978 return -EPERM;
3979
3980 trans = __unlink_start_trans(dir, dentry);
3981 if (IS_ERR(trans))
3982 return PTR_ERR(trans);
3983
3984 if (unlikely(btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
3985 err = btrfs_unlink_subvol(trans, root, dir,
3986 BTRFS_I(inode)->location.objectid,
3987 dentry->d_name.name,
3988 dentry->d_name.len);
3989 goto out;
3990 }
3991
3992 err = btrfs_orphan_add(trans, inode);
3993 if (err)
3994 goto out;
3995
3996
3997 err = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
3998 dentry->d_name.name, dentry->d_name.len);
3999 if (!err)
4000 btrfs_i_size_write(inode, 0);
4001out:
4002 __unlink_end_trans(trans, root);
4003 btrfs_btree_balance_dirty(root);
4004
4005 return err;
4006}
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
4020 struct btrfs_root *root,
4021 struct inode *inode,
4022 u64 new_size, u32 min_type)
4023{
4024 struct btrfs_path *path;
4025 struct extent_buffer *leaf;
4026 struct btrfs_file_extent_item *fi;
4027 struct btrfs_key key;
4028 struct btrfs_key found_key;
4029 u64 extent_start = 0;
4030 u64 extent_num_bytes = 0;
4031 u64 extent_offset = 0;
4032 u64 item_end = 0;
4033 u32 found_type = (u8)-1;
4034 int found_extent;
4035 int del_item;
4036 int pending_del_nr = 0;
4037 int pending_del_slot = 0;
4038 int extent_type = -1;
4039 int ret;
4040 int err = 0;
4041 u64 ino = btrfs_ino(inode);
4042
4043 BUG_ON(new_size > 0 && min_type != BTRFS_EXTENT_DATA_KEY);
4044
4045 path = btrfs_alloc_path();
4046 if (!path)
4047 return -ENOMEM;
4048 path->reada = -1;
4049
4050
4051
4052
4053
4054
4055 if (root->ref_cows || root == root->fs_info->tree_root)
4056 btrfs_drop_extent_cache(inode, ALIGN(new_size,
4057 root->sectorsize), (u64)-1, 0);
4058
4059
4060
4061
4062
4063
4064
4065 if (min_type == 0 && root == BTRFS_I(inode)->root)
4066 btrfs_kill_delayed_inode_items(inode);
4067
4068 key.objectid = ino;
4069 key.offset = (u64)-1;
4070 key.type = (u8)-1;
4071
4072search_again:
4073 path->leave_spinning = 1;
4074 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
4075 if (ret < 0) {
4076 err = ret;
4077 goto out;
4078 }
4079
4080 if (ret > 0) {
4081
4082
4083
4084 if (path->slots[0] == 0)
4085 goto out;
4086 path->slots[0]--;
4087 }
4088
4089 while (1) {
4090 fi = NULL;
4091 leaf = path->nodes[0];
4092 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
4093 found_type = btrfs_key_type(&found_key);
4094
4095 if (found_key.objectid != ino)
4096 break;
4097
4098 if (found_type < min_type)
4099 break;
4100
4101 item_end = found_key.offset;
4102 if (found_type == BTRFS_EXTENT_DATA_KEY) {
4103 fi = btrfs_item_ptr(leaf, path->slots[0],
4104 struct btrfs_file_extent_item);
4105 extent_type = btrfs_file_extent_type(leaf, fi);
4106 if (extent_type != BTRFS_FILE_EXTENT_INLINE) {
4107 item_end +=
4108 btrfs_file_extent_num_bytes(leaf, fi);
4109 } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
4110 item_end += btrfs_file_extent_inline_len(leaf,
4111 fi);
4112 }
4113 item_end--;
4114 }
4115 if (found_type > min_type) {
4116 del_item = 1;
4117 } else {
4118 if (item_end < new_size)
4119 break;
4120 if (found_key.offset >= new_size)
4121 del_item = 1;
4122 else
4123 del_item = 0;
4124 }
4125 found_extent = 0;
4126
4127 if (found_type != BTRFS_EXTENT_DATA_KEY)
4128 goto delete;
4129
4130 if (extent_type != BTRFS_FILE_EXTENT_INLINE) {
4131 u64 num_dec;
4132 extent_start = btrfs_file_extent_disk_bytenr(leaf, fi);
4133 if (!del_item) {
4134 u64 orig_num_bytes =
4135 btrfs_file_extent_num_bytes(leaf, fi);
4136 extent_num_bytes = ALIGN(new_size -
4137 found_key.offset,
4138 root->sectorsize);
4139 btrfs_set_file_extent_num_bytes(leaf, fi,
4140 extent_num_bytes);
4141 num_dec = (orig_num_bytes -
4142 extent_num_bytes);
4143 if (root->ref_cows && extent_start != 0)
4144 inode_sub_bytes(inode, num_dec);
4145 btrfs_mark_buffer_dirty(leaf);
4146 } else {
4147 extent_num_bytes =
4148 btrfs_file_extent_disk_num_bytes(leaf,
4149 fi);
4150 extent_offset = found_key.offset -
4151 btrfs_file_extent_offset(leaf, fi);
4152
4153
4154 num_dec = btrfs_file_extent_num_bytes(leaf, fi);
4155 if (extent_start != 0) {
4156 found_extent = 1;
4157 if (root->ref_cows)
4158 inode_sub_bytes(inode, num_dec);
4159 }
4160 }
4161 } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
4162
4163
4164
4165
4166 if (!del_item &&
4167 btrfs_file_extent_compression(leaf, fi) == 0 &&
4168 btrfs_file_extent_encryption(leaf, fi) == 0 &&
4169 btrfs_file_extent_other_encoding(leaf, fi) == 0) {
4170 u32 size = new_size - found_key.offset;
4171
4172 if (root->ref_cows) {
4173 inode_sub_bytes(inode, item_end + 1 -
4174 new_size);
4175 }
4176 size =
4177 btrfs_file_extent_calc_inline_size(size);
4178 btrfs_truncate_item(trans, root, path,
4179 size, 1);
4180 } else if (root->ref_cows) {
4181 inode_sub_bytes(inode, item_end + 1 -
4182 found_key.offset);
4183 }
4184 }
4185delete:
4186 if (del_item) {
4187 if (!pending_del_nr) {
4188
4189 pending_del_slot = path->slots[0];
4190 pending_del_nr = 1;
4191 } else if (pending_del_nr &&
4192 path->slots[0] + 1 == pending_del_slot) {
4193
4194 pending_del_nr++;
4195 pending_del_slot = path->slots[0];
4196 } else {
4197 BUG();
4198 }
4199 } else {
4200 break;
4201 }
4202 if (found_extent && (root->ref_cows ||
4203 root == root->fs_info->tree_root)) {
4204 btrfs_set_path_blocking(path);
4205 ret = btrfs_free_extent(trans, root, extent_start,
4206 extent_num_bytes, 0,
4207 btrfs_header_owner(leaf),
4208 ino, extent_offset, 0);
4209 BUG_ON(ret);
4210 }
4211
4212 if (found_type == BTRFS_INODE_ITEM_KEY)
4213 break;
4214
4215 if (path->slots[0] == 0 ||
4216 path->slots[0] != pending_del_slot) {
4217 if (pending_del_nr) {
4218 ret = btrfs_del_items(trans, root, path,
4219 pending_del_slot,
4220 pending_del_nr);
4221 if (ret) {
4222 btrfs_abort_transaction(trans,
4223 root, ret);
4224 goto error;
4225 }
4226 pending_del_nr = 0;
4227 }
4228 btrfs_release_path(path);
4229 goto search_again;
4230 } else {
4231 path->slots[0]--;
4232 }
4233 }
4234out:
4235 if (pending_del_nr) {
4236 ret = btrfs_del_items(trans, root, path, pending_del_slot,
4237 pending_del_nr);
4238 if (ret)
4239 btrfs_abort_transaction(trans, root, ret);
4240 }
4241error:
4242 btrfs_free_path(path);
4243 return err;
4244}
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len,
4258 int front)
4259{
4260 struct address_space *mapping = inode->i_mapping;
4261 struct btrfs_root *root = BTRFS_I(inode)->root;
4262 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
4263 struct btrfs_ordered_extent *ordered;
4264 struct extent_state *cached_state = NULL;
4265 char *kaddr;
4266 u32 blocksize = root->sectorsize;
4267 pgoff_t index = from >> PAGE_CACHE_SHIFT;
4268 unsigned offset = from & (PAGE_CACHE_SIZE-1);
4269 struct page *page;
4270 gfp_t mask = btrfs_alloc_write_mask(mapping);
4271 int ret = 0;
4272 u64 page_start;
4273 u64 page_end;
4274
4275 if ((offset & (blocksize - 1)) == 0 &&
4276 (!len || ((len & (blocksize - 1)) == 0)))
4277 goto out;
4278 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE);
4279 if (ret)
4280 goto out;
4281
4282again:
4283 page = find_or_create_page(mapping, index, mask);
4284 if (!page) {
4285 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE);
4286 ret = -ENOMEM;
4287 goto out;
4288 }
4289
4290 page_start = page_offset(page);
4291 page_end = page_start + PAGE_CACHE_SIZE - 1;
4292
4293 if (!PageUptodate(page)) {
4294 ret = btrfs_readpage(NULL, page);
4295 lock_page(page);
4296 if (page->mapping != mapping) {
4297 unlock_page(page);
4298 page_cache_release(page);
4299 goto again;
4300 }
4301 if (!PageUptodate(page)) {
4302 ret = -EIO;
4303 goto out_unlock;
4304 }
4305 }
4306 wait_on_page_writeback(page);
4307
4308 lock_extent_bits(io_tree, page_start, page_end, 0, &cached_state);
4309 set_page_extent_mapped(page);
4310
4311 ordered = btrfs_lookup_ordered_extent(inode, page_start);
4312 if (ordered) {
4313 unlock_extent_cached(io_tree, page_start, page_end,
4314 &cached_state, GFP_NOFS);
4315 unlock_page(page);
4316 page_cache_release(page);
4317 btrfs_start_ordered_extent(inode, ordered, 1);
4318 btrfs_put_ordered_extent(ordered);
4319 goto again;
4320 }
4321
4322 clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end,
4323 EXTENT_DIRTY | EXTENT_DELALLOC |
4324 EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,
4325 0, 0, &cached_state, GFP_NOFS);
4326
4327 ret = btrfs_set_extent_delalloc(inode, page_start, page_end,
4328 &cached_state);
4329 if (ret) {
4330 unlock_extent_cached(io_tree, page_start, page_end,
4331 &cached_state, GFP_NOFS);
4332 goto out_unlock;
4333 }
4334
4335 if (offset != PAGE_CACHE_SIZE) {
4336 if (!len)
4337 len = PAGE_CACHE_SIZE - offset;
4338 kaddr = kmap(page);
4339 if (front)
4340 memset(kaddr, 0, offset);
4341 else
4342 memset(kaddr + offset, 0, len);
4343 flush_dcache_page(page);
4344 kunmap(page);
4345 }
4346 ClearPageChecked(page);
4347 set_page_dirty(page);
4348 unlock_extent_cached(io_tree, page_start, page_end, &cached_state,
4349 GFP_NOFS);
4350
4351out_unlock:
4352 if (ret)
4353 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE);
4354 unlock_page(page);
4355 page_cache_release(page);
4356out:
4357 return ret;
4358}
4359
4360
4361
4362
4363
4364
4365
4366int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size)
4367{
4368 struct btrfs_trans_handle *trans;
4369 struct btrfs_root *root = BTRFS_I(inode)->root;
4370 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
4371 struct extent_map *em = NULL;
4372 struct extent_state *cached_state = NULL;
4373 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
4374 u64 hole_start = ALIGN(oldsize, root->sectorsize);
4375 u64 block_end = ALIGN(size, root->sectorsize);
4376 u64 last_byte;
4377 u64 cur_offset;
4378 u64 hole_size;
4379 int err = 0;
4380
4381 if (size <= hole_start)
4382 return 0;
4383
4384 while (1) {
4385 struct btrfs_ordered_extent *ordered;
4386 btrfs_wait_ordered_range(inode, hole_start,
4387 block_end - hole_start);
4388 lock_extent_bits(io_tree, hole_start, block_end - 1, 0,
4389 &cached_state);
4390 ordered = btrfs_lookup_ordered_extent(inode, hole_start);
4391 if (!ordered)
4392 break;
4393 unlock_extent_cached(io_tree, hole_start, block_end - 1,
4394 &cached_state, GFP_NOFS);
4395 btrfs_put_ordered_extent(ordered);
4396 }
4397
4398 cur_offset = hole_start;
4399 while (1) {
4400 em = btrfs_get_extent(inode, NULL, 0, cur_offset,
4401 block_end - cur_offset, 0);
4402 if (IS_ERR(em)) {
4403 err = PTR_ERR(em);
4404 em = NULL;
4405 break;
4406 }
4407 last_byte = min(extent_map_end(em), block_end);
4408 last_byte = ALIGN(last_byte , root->sectorsize);
4409 if (!test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
4410 struct extent_map *hole_em;
4411 hole_size = last_byte - cur_offset;
4412
4413 trans = btrfs_start_transaction(root, 3);
4414 if (IS_ERR(trans)) {
4415 err = PTR_ERR(trans);
4416 break;
4417 }
4418
4419 err = btrfs_drop_extents(trans, root, inode,
4420 cur_offset,
4421 cur_offset + hole_size, 1);
4422 if (err) {
4423 btrfs_abort_transaction(trans, root, err);
4424 btrfs_end_transaction(trans, root);
4425 break;
4426 }
4427
4428 err = btrfs_insert_file_extent(trans, root,
4429 btrfs_ino(inode), cur_offset, 0,
4430 0, hole_size, 0, hole_size,
4431 0, 0, 0);
4432 if (err) {
4433 btrfs_abort_transaction(trans, root, err);
4434 btrfs_end_transaction(trans, root);
4435 break;
4436 }
4437
4438 btrfs_drop_extent_cache(inode, cur_offset,
4439 cur_offset + hole_size - 1, 0);
4440 hole_em = alloc_extent_map();
4441 if (!hole_em) {
4442 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
4443 &BTRFS_I(inode)->runtime_flags);
4444 goto next;
4445 }
4446 hole_em->start = cur_offset;
4447 hole_em->len = hole_size;
4448 hole_em->orig_start = cur_offset;
4449
4450 hole_em->block_start = EXTENT_MAP_HOLE;
4451 hole_em->block_len = 0;
4452 hole_em->orig_block_len = 0;
4453 hole_em->bdev = root->fs_info->fs_devices->latest_bdev;
4454 hole_em->compress_type = BTRFS_COMPRESS_NONE;
4455 hole_em->generation = trans->transid;
4456
4457 while (1) {
4458 write_lock(&em_tree->lock);
4459 err = add_extent_mapping(em_tree, hole_em);
4460 if (!err)
4461 list_move(&hole_em->list,
4462 &em_tree->modified_extents);
4463 write_unlock(&em_tree->lock);
4464 if (err != -EEXIST)
4465 break;
4466 btrfs_drop_extent_cache(inode, cur_offset,
4467 cur_offset +
4468 hole_size - 1, 0);
4469 }
4470 free_extent_map(hole_em);
4471next:
4472 btrfs_update_inode(trans, root, inode);
4473 btrfs_end_transaction(trans, root);
4474 }
4475 free_extent_map(em);
4476 em = NULL;
4477 cur_offset = last_byte;
4478 if (cur_offset >= block_end)
4479 break;
4480 }
4481
4482 free_extent_map(em);
4483 unlock_extent_cached(io_tree, hole_start, block_end - 1, &cached_state,
4484 GFP_NOFS);
4485 return err;
4486}
4487
4488static int btrfs_setsize(struct inode *inode, struct iattr *attr)
4489{
4490 struct btrfs_root *root = BTRFS_I(inode)->root;
4491 struct btrfs_trans_handle *trans;
4492 loff_t oldsize = i_size_read(inode);
4493 loff_t newsize = attr->ia_size;
4494 int mask = attr->ia_valid;
4495 int ret;
4496
4497 if (newsize == oldsize)
4498 return 0;
4499
4500
4501
4502
4503
4504
4505
4506 if (newsize != oldsize && (!(mask & (ATTR_CTIME | ATTR_MTIME))))
4507 inode->i_ctime = inode->i_mtime = current_fs_time(inode->i_sb);
4508
4509 if (newsize > oldsize) {
4510 truncate_pagecache(inode, oldsize, newsize);
4511 ret = btrfs_cont_expand(inode, oldsize, newsize);
4512 if (ret)
4513 return ret;
4514
4515 trans = btrfs_start_transaction(root, 1);
4516 if (IS_ERR(trans))
4517 return PTR_ERR(trans);
4518
4519 i_size_write(inode, newsize);
4520 btrfs_ordered_update_i_size(inode, i_size_read(inode), NULL);
4521 ret = btrfs_update_inode(trans, root, inode);
4522 btrfs_end_transaction(trans, root);
4523 } else {
4524
4525
4526
4527
4528
4529
4530 if (newsize == 0)
4531 set_bit(BTRFS_INODE_ORDERED_DATA_CLOSE,
4532 &BTRFS_I(inode)->runtime_flags);
4533
4534
4535
4536
4537
4538 trans = btrfs_start_transaction(root, 2);
4539 if (IS_ERR(trans))
4540 return PTR_ERR(trans);
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552 ret = btrfs_orphan_add(trans, inode);
4553 btrfs_end_transaction(trans, root);
4554 if (ret)
4555 return ret;
4556
4557
4558 truncate_setsize(inode, newsize);
4559
4560
4561 btrfs_inode_block_unlocked_dio(inode);
4562 inode_dio_wait(inode);
4563 btrfs_inode_resume_unlocked_dio(inode);
4564
4565 ret = btrfs_truncate(inode);
4566 if (ret && inode->i_nlink)
4567 btrfs_orphan_del(NULL, inode);
4568 }
4569
4570 return ret;
4571}
4572
4573static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
4574{
4575 struct inode *inode = dentry->d_inode;
4576 struct btrfs_root *root = BTRFS_I(inode)->root;
4577 int err;
4578
4579 if (btrfs_root_readonly(root))
4580 return -EROFS;
4581
4582 err = inode_change_ok(inode, attr);
4583 if (err)
4584 return err;
4585
4586 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
4587 err = btrfs_setsize(inode, attr);
4588 if (err)
4589 return err;
4590 }
4591
4592 if (attr->ia_valid) {
4593 setattr_copy(inode, attr);
4594 inode_inc_iversion(inode);
4595 err = btrfs_dirty_inode(inode);
4596
4597 if (!err && attr->ia_valid & ATTR_MODE)
4598 err = btrfs_acl_chmod(inode);
4599 }
4600
4601 return err;
4602}
4603
4604void btrfs_evict_inode(struct inode *inode)
4605{
4606 struct btrfs_trans_handle *trans;
4607 struct btrfs_root *root = BTRFS_I(inode)->root;
4608 struct btrfs_block_rsv *rsv, *global_rsv;
4609 u64 min_size = btrfs_calc_trunc_metadata_size(root, 1);
4610 int ret;
4611
4612 trace_btrfs_inode_evict(inode);
4613
4614 truncate_inode_pages(&inode->i_data, 0);
4615 if (inode->i_nlink && (btrfs_root_refs(&root->root_item) != 0 ||
4616 btrfs_is_free_space_inode(inode)))
4617 goto no_delete;
4618
4619 if (is_bad_inode(inode)) {
4620 btrfs_orphan_del(NULL, inode);
4621 goto no_delete;
4622 }
4623
4624 btrfs_wait_ordered_range(inode, 0, (u64)-1);
4625
4626 if (root->fs_info->log_root_recovering) {
4627 BUG_ON(test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
4628 &BTRFS_I(inode)->runtime_flags));
4629 goto no_delete;
4630 }
4631
4632 if (inode->i_nlink > 0) {
4633 BUG_ON(btrfs_root_refs(&root->root_item) != 0);
4634 goto no_delete;
4635 }
4636
4637 ret = btrfs_commit_inode_delayed_inode(inode);
4638 if (ret) {
4639 btrfs_orphan_del(NULL, inode);
4640 goto no_delete;
4641 }
4642
4643 rsv = btrfs_alloc_block_rsv(root, BTRFS_BLOCK_RSV_TEMP);
4644 if (!rsv) {
4645 btrfs_orphan_del(NULL, inode);
4646 goto no_delete;
4647 }
4648 rsv->size = min_size;
4649 rsv->failfast = 1;
4650 global_rsv = &root->fs_info->global_block_rsv;
4651
4652 btrfs_i_size_write(inode, 0);
4653
4654
4655
4656
4657
4658
4659
4660 while (1) {
4661 ret = btrfs_block_rsv_refill(root, rsv, min_size,
4662 BTRFS_RESERVE_FLUSH_LIMIT);
4663
4664
4665
4666
4667
4668
4669 if (ret)
4670 ret = btrfs_block_rsv_migrate(global_rsv, rsv, min_size);
4671
4672 if (ret) {
4673 printk(KERN_WARNING "Could not get space for a "
4674 "delete, will truncate on mount %d\n", ret);
4675 btrfs_orphan_del(NULL, inode);
4676 btrfs_free_block_rsv(root, rsv);
4677 goto no_delete;
4678 }
4679
4680 trans = btrfs_join_transaction(root);
4681 if (IS_ERR(trans)) {
4682 btrfs_orphan_del(NULL, inode);
4683 btrfs_free_block_rsv(root, rsv);
4684 goto no_delete;
4685 }
4686
4687 trans->block_rsv = rsv;
4688
4689 ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0);
4690 if (ret != -ENOSPC)
4691 break;
4692
4693 trans->block_rsv = &root->fs_info->trans_block_rsv;
4694 btrfs_end_transaction(trans, root);
4695 trans = NULL;
4696 btrfs_btree_balance_dirty(root);
4697 }
4698
4699 btrfs_free_block_rsv(root, rsv);
4700
4701 if (ret == 0) {
4702 trans->block_rsv = root->orphan_block_rsv;
4703 ret = btrfs_orphan_del(trans, inode);
4704 BUG_ON(ret);
4705 }
4706
4707 trans->block_rsv = &root->fs_info->trans_block_rsv;
4708 if (!(root == root->fs_info->tree_root ||
4709 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID))
4710 btrfs_return_ino(root, btrfs_ino(inode));
4711
4712 btrfs_end_transaction(trans, root);
4713 btrfs_btree_balance_dirty(root);
4714no_delete:
4715 clear_inode(inode);
4716 return;
4717}
4718
4719
4720
4721
4722
4723static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
4724 struct btrfs_key *location)
4725{
4726 const char *name = dentry->d_name.name;
4727 int namelen = dentry->d_name.len;
4728 struct btrfs_dir_item *di;
4729 struct btrfs_path *path;
4730 struct btrfs_root *root = BTRFS_I(dir)->root;
4731 int ret = 0;
4732
4733 path = btrfs_alloc_path();
4734 if (!path)
4735 return -ENOMEM;
4736
4737 di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(dir), name,
4738 namelen, 0);
4739 if (IS_ERR(di))
4740 ret = PTR_ERR(di);
4741
4742 if (IS_ERR_OR_NULL(di))
4743 goto out_err;
4744
4745 btrfs_dir_item_key_to_cpu(path->nodes[0], di, location);
4746out:
4747 btrfs_free_path(path);
4748 return ret;
4749out_err:
4750 location->objectid = 0;
4751 goto out;
4752}
4753
4754
4755
4756
4757
4758
4759static int fixup_tree_root_location(struct btrfs_root *root,
4760 struct inode *dir,
4761 struct dentry *dentry,
4762 struct btrfs_key *location,
4763 struct btrfs_root **sub_root)
4764{
4765 struct btrfs_path *path;
4766 struct btrfs_root *new_root;
4767 struct btrfs_root_ref *ref;
4768 struct extent_buffer *leaf;
4769 int ret;
4770 int err = 0;
4771
4772 path = btrfs_alloc_path();
4773 if (!path) {
4774 err = -ENOMEM;
4775 goto out;
4776 }
4777
4778 err = -ENOENT;
4779 ret = btrfs_find_root_ref(root->fs_info->tree_root, path,
4780 BTRFS_I(dir)->root->root_key.objectid,
4781 location->objectid);
4782 if (ret) {
4783 if (ret < 0)
4784 err = ret;
4785 goto out;
4786 }
4787
4788 leaf = path->nodes[0];
4789 ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref);
4790 if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(dir) ||
4791 btrfs_root_ref_name_len(leaf, ref) != dentry->d_name.len)
4792 goto out;
4793
4794 ret = memcmp_extent_buffer(leaf, dentry->d_name.name,
4795 (unsigned long)(ref + 1),
4796 dentry->d_name.len);
4797 if (ret)
4798 goto out;
4799
4800 btrfs_release_path(path);
4801
4802 new_root = btrfs_read_fs_root_no_name(root->fs_info, location);
4803 if (IS_ERR(new_root)) {
4804 err = PTR_ERR(new_root);
4805 goto out;
4806 }
4807
4808 if (btrfs_root_refs(&new_root->root_item) == 0) {
4809 err = -ENOENT;
4810 goto out;
4811 }
4812
4813 *sub_root = new_root;
4814 location->objectid = btrfs_root_dirid(&new_root->root_item);
4815 location->type = BTRFS_INODE_ITEM_KEY;
4816 location->offset = 0;
4817 err = 0;
4818out:
4819 btrfs_free_path(path);
4820 return err;
4821}
4822
4823static void inode_tree_add(struct inode *inode)
4824{
4825 struct btrfs_root *root = BTRFS_I(inode)->root;
4826 struct btrfs_inode *entry;
4827 struct rb_node **p;
4828 struct rb_node *parent;
4829 u64 ino = btrfs_ino(inode);
4830again:
4831 p = &root->inode_tree.rb_node;
4832 parent = NULL;
4833
4834 if (inode_unhashed(inode))
4835 return;
4836
4837 spin_lock(&root->inode_lock);
4838 while (*p) {
4839 parent = *p;
4840 entry = rb_entry(parent, struct btrfs_inode, rb_node);
4841
4842 if (ino < btrfs_ino(&entry->vfs_inode))
4843 p = &parent->rb_left;
4844 else if (ino > btrfs_ino(&entry->vfs_inode))
4845 p = &parent->rb_right;
4846 else {
4847 WARN_ON(!(entry->vfs_inode.i_state &
4848 (I_WILL_FREE | I_FREEING)));
4849 rb_erase(parent, &root->inode_tree);
4850 RB_CLEAR_NODE(parent);
4851 spin_unlock(&root->inode_lock);
4852 goto again;
4853 }
4854 }
4855 rb_link_node(&BTRFS_I(inode)->rb_node, parent, p);
4856 rb_insert_color(&BTRFS_I(inode)->rb_node, &root->inode_tree);
4857 spin_unlock(&root->inode_lock);
4858}
4859
4860static void inode_tree_del(struct inode *inode)
4861{
4862 struct btrfs_root *root = BTRFS_I(inode)->root;
4863 int empty = 0;
4864
4865 spin_lock(&root->inode_lock);
4866 if (!RB_EMPTY_NODE(&BTRFS_I(inode)->rb_node)) {
4867 rb_erase(&BTRFS_I(inode)->rb_node, &root->inode_tree);
4868 RB_CLEAR_NODE(&BTRFS_I(inode)->rb_node);
4869 empty = RB_EMPTY_ROOT(&root->inode_tree);
4870 }
4871 spin_unlock(&root->inode_lock);
4872
4873
4874
4875
4876
4877
4878
4879 if (empty && btrfs_root_refs(&root->root_item) == 0 &&
4880 root != root->fs_info->tree_root) {
4881 synchronize_srcu(&root->fs_info->subvol_srcu);
4882 spin_lock(&root->inode_lock);
4883 empty = RB_EMPTY_ROOT(&root->inode_tree);
4884 spin_unlock(&root->inode_lock);
4885 if (empty)
4886 btrfs_add_dead_root(root);
4887 }
4888}
4889
4890void btrfs_invalidate_inodes(struct btrfs_root *root)
4891{
4892 struct rb_node *node;
4893 struct rb_node *prev;
4894 struct btrfs_inode *entry;
4895 struct inode *inode;
4896 u64 objectid = 0;
4897
4898 WARN_ON(btrfs_root_refs(&root->root_item) != 0);
4899
4900 spin_lock(&root->inode_lock);
4901again:
4902 node = root->inode_tree.rb_node;
4903 prev = NULL;
4904 while (node) {
4905 prev = node;
4906 entry = rb_entry(node, struct btrfs_inode, rb_node);
4907
4908 if (objectid < btrfs_ino(&entry->vfs_inode))
4909 node = node->rb_left;
4910 else if (objectid > btrfs_ino(&entry->vfs_inode))
4911 node = node->rb_right;
4912 else
4913 break;
4914 }
4915 if (!node) {
4916 while (prev) {
4917 entry = rb_entry(prev, struct btrfs_inode, rb_node);
4918 if (objectid <= btrfs_ino(&entry->vfs_inode)) {
4919 node = prev;
4920 break;
4921 }
4922 prev = rb_next(prev);
4923 }
4924 }
4925 while (node) {
4926 entry = rb_entry(node, struct btrfs_inode, rb_node);
4927 objectid = btrfs_ino(&entry->vfs_inode) + 1;
4928 inode = igrab(&entry->vfs_inode);
4929 if (inode) {
4930 spin_unlock(&root->inode_lock);
4931 if (atomic_read(&inode->i_count) > 1)
4932 d_prune_aliases(inode);
4933
4934
4935
4936
4937
4938 iput(inode);
4939 cond_resched();
4940 spin_lock(&root->inode_lock);
4941 goto again;
4942 }
4943
4944 if (cond_resched_lock(&root->inode_lock))
4945 goto again;
4946
4947 node = rb_next(node);
4948 }
4949 spin_unlock(&root->inode_lock);
4950}
4951
4952static int btrfs_init_locked_inode(struct inode *inode, void *p)
4953{
4954 struct btrfs_iget_args *args = p;
4955 inode->i_ino = args->ino;
4956 BTRFS_I(inode)->root = args->root;
4957 return 0;
4958}
4959
4960static int btrfs_find_actor(struct inode *inode, void *opaque)
4961{
4962 struct btrfs_iget_args *args = opaque;
4963 return args->ino == btrfs_ino(inode) &&
4964 args->root == BTRFS_I(inode)->root;
4965}
4966
4967static struct inode *btrfs_iget_locked(struct super_block *s,
4968 u64 objectid,
4969 struct btrfs_root *root)
4970{
4971 struct inode *inode;
4972 struct btrfs_iget_args args;
4973 args.ino = objectid;
4974 args.root = root;
4975
4976 inode = iget5_locked(s, objectid, btrfs_find_actor,
4977 btrfs_init_locked_inode,
4978 (void *)&args);
4979 return inode;
4980}
4981
4982
4983
4984
4985struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location,
4986 struct btrfs_root *root, int *new)
4987{
4988 struct inode *inode;
4989
4990 inode = btrfs_iget_locked(s, location->objectid, root);
4991 if (!inode)
4992 return ERR_PTR(-ENOMEM);
4993
4994 if (inode->i_state & I_NEW) {
4995 BTRFS_I(inode)->root = root;
4996 memcpy(&BTRFS_I(inode)->location, location, sizeof(*location));
4997 btrfs_read_locked_inode(inode);
4998 if (!is_bad_inode(inode)) {
4999 inode_tree_add(inode);
5000 unlock_new_inode(inode);
5001 if (new)
5002 *new = 1;
5003 } else {
5004 unlock_new_inode(inode);
5005 iput(inode);
5006 inode = ERR_PTR(-ESTALE);
5007 }
5008 }
5009
5010 return inode;
5011}
5012
5013static struct inode *new_simple_dir(struct super_block *s,
5014 struct btrfs_key *key,
5015 struct btrfs_root *root)
5016{
5017 struct inode *inode = new_inode(s);
5018
5019 if (!inode)
5020 return ERR_PTR(-ENOMEM);
5021
5022 BTRFS_I(inode)->root = root;
5023 memcpy(&BTRFS_I(inode)->location, key, sizeof(*key));
5024 set_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags);
5025
5026 inode->i_ino = BTRFS_EMPTY_SUBVOL_DIR_OBJECTID;
5027 inode->i_op = &btrfs_dir_ro_inode_operations;
5028 inode->i_fop = &simple_dir_operations;
5029 inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
5030 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
5031
5032 return inode;
5033}
5034
5035struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
5036{
5037 struct inode *inode;
5038 struct btrfs_root *root = BTRFS_I(dir)->root;
5039 struct btrfs_root *sub_root = root;
5040 struct btrfs_key location;
5041 int index;
5042 int ret = 0;
5043
5044 if (dentry->d_name.len > BTRFS_NAME_LEN)
5045 return ERR_PTR(-ENAMETOOLONG);
5046
5047 ret = btrfs_inode_by_name(dir, dentry, &location);
5048 if (ret < 0)
5049 return ERR_PTR(ret);
5050
5051 if (location.objectid == 0)
5052 return NULL;
5053
5054 if (location.type == BTRFS_INODE_ITEM_KEY) {
5055 inode = btrfs_iget(dir->i_sb, &location, root, NULL);
5056 return inode;
5057 }
5058
5059 BUG_ON(location.type != BTRFS_ROOT_ITEM_KEY);
5060
5061 index = srcu_read_lock(&root->fs_info->subvol_srcu);
5062 ret = fixup_tree_root_location(root, dir, dentry,
5063 &location, &sub_root);
5064 if (ret < 0) {
5065 if (ret != -ENOENT)
5066 inode = ERR_PTR(ret);
5067 else
5068 inode = new_simple_dir(dir->i_sb, &location, sub_root);
5069 } else {
5070 inode = btrfs_iget(dir->i_sb, &location, sub_root, NULL);
5071 }
5072 srcu_read_unlock(&root->fs_info->subvol_srcu, index);
5073
5074 if (!IS_ERR(inode) && root != sub_root) {
5075 down_read(&root->fs_info->cleanup_work_sem);
5076 if (!(inode->i_sb->s_flags & MS_RDONLY))
5077 ret = btrfs_orphan_cleanup(sub_root);
5078 up_read(&root->fs_info->cleanup_work_sem);
5079 if (ret)
5080 inode = ERR_PTR(ret);
5081 }
5082
5083 return inode;
5084}
5085
5086static int btrfs_dentry_delete(const struct dentry *dentry)
5087{
5088 struct btrfs_root *root;
5089 struct inode *inode = dentry->d_inode;
5090
5091 if (!inode && !IS_ROOT(dentry))
5092 inode = dentry->d_parent->d_inode;
5093
5094 if (inode) {
5095 root = BTRFS_I(inode)->root;
5096 if (btrfs_root_refs(&root->root_item) == 0)
5097 return 1;
5098
5099 if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
5100 return 1;
5101 }
5102 return 0;
5103}
5104
5105static void btrfs_dentry_release(struct dentry *dentry)
5106{
5107 if (dentry->d_fsdata)
5108 kfree(dentry->d_fsdata);
5109}
5110
5111static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry,
5112 unsigned int flags)
5113{
5114 struct dentry *ret;
5115
5116 ret = d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry);
5117 return ret;
5118}
5119
5120unsigned char btrfs_filetype_table[] = {
5121 DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
5122};
5123
5124static int btrfs_real_readdir(struct file *filp, void *dirent,
5125 filldir_t filldir)
5126{
5127 struct inode *inode = file_inode(filp);
5128 struct btrfs_root *root = BTRFS_I(inode)->root;
5129 struct btrfs_item *item;
5130 struct btrfs_dir_item *di;
5131 struct btrfs_key key;
5132 struct btrfs_key found_key;
5133 struct btrfs_path *path;
5134 struct list_head ins_list;
5135 struct list_head del_list;
5136 int ret;
5137 struct extent_buffer *leaf;
5138 int slot;
5139 unsigned char d_type;
5140 int over = 0;
5141 u32 di_cur;
5142 u32 di_total;
5143 u32 di_len;
5144 int key_type = BTRFS_DIR_INDEX_KEY;
5145 char tmp_name[32];
5146 char *name_ptr;
5147 int name_len;
5148 int is_curr = 0;
5149
5150
5151 if (root->fs_info->tree_root == root)
5152 key_type = BTRFS_DIR_ITEM_KEY;
5153
5154
5155 if (filp->f_pos == 0) {
5156 over = filldir(dirent, ".", 1,
5157 filp->f_pos, btrfs_ino(inode), DT_DIR);
5158 if (over)
5159 return 0;
5160 filp->f_pos = 1;
5161 }
5162
5163 if (filp->f_pos == 1) {
5164 u64 pino = parent_ino(filp->f_path.dentry);
5165 over = filldir(dirent, "..", 2,
5166 filp->f_pos, pino, DT_DIR);
5167 if (over)
5168 return 0;
5169 filp->f_pos = 2;
5170 }
5171 path = btrfs_alloc_path();
5172 if (!path)
5173 return -ENOMEM;
5174
5175 path->reada = 1;
5176
5177 if (key_type == BTRFS_DIR_INDEX_KEY) {
5178 INIT_LIST_HEAD(&ins_list);
5179 INIT_LIST_HEAD(&del_list);
5180 btrfs_get_delayed_items(inode, &ins_list, &del_list);
5181 }
5182
5183 btrfs_set_key_type(&key, key_type);
5184 key.offset = filp->f_pos;
5185 key.objectid = btrfs_ino(inode);
5186
5187 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5188 if (ret < 0)
5189 goto err;
5190
5191 while (1) {
5192 leaf = path->nodes[0];
5193 slot = path->slots[0];
5194 if (slot >= btrfs_header_nritems(leaf)) {
5195 ret = btrfs_next_leaf(root, path);
5196 if (ret < 0)
5197 goto err;
5198 else if (ret > 0)
5199 break;
5200 continue;
5201 }
5202
5203 item = btrfs_item_nr(leaf, slot);
5204 btrfs_item_key_to_cpu(leaf, &found_key, slot);
5205
5206 if (found_key.objectid != key.objectid)
5207 break;
5208 if (btrfs_key_type(&found_key) != key_type)
5209 break;
5210 if (found_key.offset < filp->f_pos)
5211 goto next;
5212 if (key_type == BTRFS_DIR_INDEX_KEY &&
5213 btrfs_should_delete_dir_index(&del_list,
5214 found_key.offset))
5215 goto next;
5216
5217 filp->f_pos = found_key.offset;
5218 is_curr = 1;
5219
5220 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item);
5221 di_cur = 0;
5222 di_total = btrfs_item_size(leaf, item);
5223
5224 while (di_cur < di_total) {
5225 struct btrfs_key location;
5226
5227 if (verify_dir_item(root, leaf, di))
5228 break;
5229
5230 name_len = btrfs_dir_name_len(leaf, di);
5231 if (name_len <= sizeof(tmp_name)) {
5232 name_ptr = tmp_name;
5233 } else {
5234 name_ptr = kmalloc(name_len, GFP_NOFS);
5235 if (!name_ptr) {
5236 ret = -ENOMEM;
5237 goto err;
5238 }
5239 }
5240 read_extent_buffer(leaf, name_ptr,
5241 (unsigned long)(di + 1), name_len);
5242
5243 d_type = btrfs_filetype_table[btrfs_dir_type(leaf, di)];
5244 btrfs_dir_item_key_to_cpu(leaf, di, &location);
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256 if (location.type == BTRFS_ROOT_ITEM_KEY &&
5257 location.objectid == root->root_key.objectid) {
5258 over = 0;
5259 goto skip;
5260 }
5261 over = filldir(dirent, name_ptr, name_len,
5262 found_key.offset, location.objectid,
5263 d_type);
5264
5265skip:
5266 if (name_ptr != tmp_name)
5267 kfree(name_ptr);
5268
5269 if (over)
5270 goto nopos;
5271 di_len = btrfs_dir_name_len(leaf, di) +
5272 btrfs_dir_data_len(leaf, di) + sizeof(*di);
5273 di_cur += di_len;
5274 di = (struct btrfs_dir_item *)((char *)di + di_len);
5275 }
5276next:
5277 path->slots[0]++;
5278 }
5279
5280 if (key_type == BTRFS_DIR_INDEX_KEY) {
5281 if (is_curr)
5282 filp->f_pos++;
5283 ret = btrfs_readdir_delayed_dir_index(filp, dirent, filldir,
5284 &ins_list);
5285 if (ret)
5286 goto nopos;
5287 }
5288
5289
5290 if (key_type == BTRFS_DIR_INDEX_KEY)
5291
5292
5293
5294
5295 filp->f_pos = 0x7fffffff;
5296 else
5297 filp->f_pos++;
5298nopos:
5299 ret = 0;
5300err:
5301 if (key_type == BTRFS_DIR_INDEX_KEY)
5302 btrfs_put_delayed_items(&ins_list, &del_list);
5303 btrfs_free_path(path);
5304 return ret;
5305}
5306
5307int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc)
5308{
5309 struct btrfs_root *root = BTRFS_I(inode)->root;
5310 struct btrfs_trans_handle *trans;
5311 int ret = 0;
5312 bool nolock = false;
5313
5314 if (test_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags))
5315 return 0;
5316
5317 if (btrfs_fs_closing(root->fs_info) && btrfs_is_free_space_inode(inode))
5318 nolock = true;
5319
5320 if (wbc->sync_mode == WB_SYNC_ALL) {
5321 if (nolock)
5322 trans = btrfs_join_transaction_nolock(root);
5323 else
5324 trans = btrfs_join_transaction(root);
5325 if (IS_ERR(trans))
5326 return PTR_ERR(trans);
5327 ret = btrfs_commit_transaction(trans, root);
5328 }
5329 return ret;
5330}
5331
5332
5333
5334
5335
5336
5337
5338int btrfs_dirty_inode(struct inode *inode)
5339{
5340 struct btrfs_root *root = BTRFS_I(inode)->root;
5341 struct btrfs_trans_handle *trans;
5342 int ret;
5343
5344 if (test_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags))
5345 return 0;
5346
5347 trans = btrfs_join_transaction(root);
5348 if (IS_ERR(trans))
5349 return PTR_ERR(trans);
5350
5351 ret = btrfs_update_inode(trans, root, inode);
5352 if (ret && ret == -ENOSPC) {
5353
5354 btrfs_end_transaction(trans, root);
5355 trans = btrfs_start_transaction(root, 1);
5356 if (IS_ERR(trans))
5357 return PTR_ERR(trans);
5358
5359 ret = btrfs_update_inode(trans, root, inode);
5360 }
5361 btrfs_end_transaction(trans, root);
5362 if (BTRFS_I(inode)->delayed_node)
5363 btrfs_balance_delayed_items(root);
5364
5365 return ret;
5366}
5367
5368
5369
5370
5371
5372static int btrfs_update_time(struct inode *inode, struct timespec *now,
5373 int flags)
5374{
5375 struct btrfs_root *root = BTRFS_I(inode)->root;
5376
5377 if (btrfs_root_readonly(root))
5378 return -EROFS;
5379
5380 if (flags & S_VERSION)
5381 inode_inc_iversion(inode);
5382 if (flags & S_CTIME)
5383 inode->i_ctime = *now;
5384 if (flags & S_MTIME)
5385 inode->i_mtime = *now;
5386 if (flags & S_ATIME)
5387 inode->i_atime = *now;
5388 return btrfs_dirty_inode(inode);
5389}
5390
5391
5392
5393
5394
5395
5396static int btrfs_set_inode_index_count(struct inode *inode)
5397{
5398 struct btrfs_root *root = BTRFS_I(inode)->root;
5399 struct btrfs_key key, found_key;
5400 struct btrfs_path *path;
5401 struct extent_buffer *leaf;
5402 int ret;
5403
5404 key.objectid = btrfs_ino(inode);
5405 btrfs_set_key_type(&key, BTRFS_DIR_INDEX_KEY);
5406 key.offset = (u64)-1;
5407
5408 path = btrfs_alloc_path();
5409 if (!path)
5410 return -ENOMEM;
5411
5412 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5413 if (ret < 0)
5414 goto out;
5415
5416 if (ret == 0)
5417 goto out;
5418 ret = 0;
5419
5420
5421
5422
5423
5424
5425
5426 if (path->slots[0] == 0) {
5427 BTRFS_I(inode)->index_cnt = 2;
5428 goto out;
5429 }
5430
5431 path->slots[0]--;
5432
5433 leaf = path->nodes[0];
5434 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
5435
5436 if (found_key.objectid != btrfs_ino(inode) ||
5437 btrfs_key_type(&found_key) != BTRFS_DIR_INDEX_KEY) {
5438 BTRFS_I(inode)->index_cnt = 2;
5439 goto out;
5440 }
5441
5442 BTRFS_I(inode)->index_cnt = found_key.offset + 1;
5443out:
5444 btrfs_free_path(path);
5445 return ret;
5446}
5447
5448
5449
5450
5451
5452int btrfs_set_inode_index(struct inode *dir, u64 *index)
5453{
5454 int ret = 0;
5455
5456 if (BTRFS_I(dir)->index_cnt == (u64)-1) {
5457 ret = btrfs_inode_delayed_dir_index_count(dir);
5458 if (ret) {
5459 ret = btrfs_set_inode_index_count(dir);
5460 if (ret)
5461 return ret;
5462 }
5463 }
5464
5465 *index = BTRFS_I(dir)->index_cnt;
5466 BTRFS_I(dir)->index_cnt++;
5467
5468 return ret;
5469}
5470
5471static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
5472 struct btrfs_root *root,
5473 struct inode *dir,
5474 const char *name, int name_len,
5475 u64 ref_objectid, u64 objectid,
5476 umode_t mode, u64 *index)
5477{
5478 struct inode *inode;
5479 struct btrfs_inode_item *inode_item;
5480 struct btrfs_key *location;
5481 struct btrfs_path *path;
5482 struct btrfs_inode_ref *ref;
5483 struct btrfs_key key[2];
5484 u32 sizes[2];
5485 unsigned long ptr;
5486 int ret;
5487 int owner;
5488
5489 path = btrfs_alloc_path();
5490 if (!path)
5491 return ERR_PTR(-ENOMEM);
5492
5493 inode = new_inode(root->fs_info->sb);
5494 if (!inode) {
5495 btrfs_free_path(path);
5496 return ERR_PTR(-ENOMEM);
5497 }
5498
5499
5500
5501
5502
5503 inode->i_ino = objectid;
5504
5505 if (dir) {
5506 trace_btrfs_inode_request(dir);
5507
5508 ret = btrfs_set_inode_index(dir, index);
5509 if (ret) {
5510 btrfs_free_path(path);
5511 iput(inode);
5512 return ERR_PTR(ret);
5513 }
5514 }
5515
5516
5517
5518
5519
5520 BTRFS_I(inode)->index_cnt = 2;
5521 BTRFS_I(inode)->root = root;
5522 BTRFS_I(inode)->generation = trans->transid;
5523 inode->i_generation = BTRFS_I(inode)->generation;
5524
5525
5526
5527
5528
5529
5530
5531 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags);
5532
5533 if (S_ISDIR(mode))
5534 owner = 0;
5535 else
5536 owner = 1;
5537
5538 key[0].objectid = objectid;
5539 btrfs_set_key_type(&key[0], BTRFS_INODE_ITEM_KEY);
5540 key[0].offset = 0;
5541
5542
5543
5544
5545
5546
5547
5548 key[1].objectid = objectid;
5549 btrfs_set_key_type(&key[1], BTRFS_INODE_REF_KEY);
5550 key[1].offset = ref_objectid;
5551
5552 sizes[0] = sizeof(struct btrfs_inode_item);
5553 sizes[1] = name_len + sizeof(*ref);
5554
5555 path->leave_spinning = 1;
5556 ret = btrfs_insert_empty_items(trans, root, path, key, sizes, 2);
5557 if (ret != 0)
5558 goto fail;
5559
5560 inode_init_owner(inode, dir, mode);
5561 inode_set_bytes(inode, 0);
5562 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
5563 inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],
5564 struct btrfs_inode_item);
5565 memset_extent_buffer(path->nodes[0], 0, (unsigned long)inode_item,
5566 sizeof(*inode_item));
5567 fill_inode_item(trans, path->nodes[0], inode_item, inode);
5568
5569 ref = btrfs_item_ptr(path->nodes[0], path->slots[0] + 1,
5570 struct btrfs_inode_ref);
5571 btrfs_set_inode_ref_name_len(path->nodes[0], ref, name_len);
5572 btrfs_set_inode_ref_index(path->nodes[0], ref, *index);
5573 ptr = (unsigned long)(ref + 1);
5574 write_extent_buffer(path->nodes[0], name, ptr, name_len);
5575
5576 btrfs_mark_buffer_dirty(path->nodes[0]);
5577 btrfs_free_path(path);
5578
5579 location = &BTRFS_I(inode)->location;
5580 location->objectid = objectid;
5581 location->offset = 0;
5582 btrfs_set_key_type(location, BTRFS_INODE_ITEM_KEY);
5583
5584 btrfs_inherit_iflags(inode, dir);
5585
5586 if (S_ISREG(mode)) {
5587 if (btrfs_test_opt(root, NODATASUM))
5588 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM;
5589 if (btrfs_test_opt(root, NODATACOW))
5590 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW |
5591 BTRFS_INODE_NODATASUM;
5592 }
5593
5594 insert_inode_hash(inode);
5595 inode_tree_add(inode);
5596
5597 trace_btrfs_inode_new(inode);
5598 btrfs_set_inode_last_trans(trans, inode);
5599
5600 btrfs_update_root_times(trans, root);
5601
5602 return inode;
5603fail:
5604 if (dir)
5605 BTRFS_I(dir)->index_cnt--;
5606 btrfs_free_path(path);
5607 iput(inode);
5608 return ERR_PTR(ret);
5609}
5610
5611static inline u8 btrfs_inode_type(struct inode *inode)
5612{
5613 return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT];
5614}
5615
5616
5617
5618
5619
5620
5621
5622int btrfs_add_link(struct btrfs_trans_handle *trans,
5623 struct inode *parent_inode, struct inode *inode,
5624 const char *name, int name_len, int add_backref, u64 index)
5625{
5626 int ret = 0;
5627 struct btrfs_key key;
5628 struct btrfs_root *root = BTRFS_I(parent_inode)->root;
5629 u64 ino = btrfs_ino(inode);
5630 u64 parent_ino = btrfs_ino(parent_inode);
5631
5632 if (unlikely(ino == BTRFS_FIRST_FREE_OBJECTID)) {
5633 memcpy(&key, &BTRFS_I(inode)->root->root_key, sizeof(key));
5634 } else {
5635 key.objectid = ino;
5636 btrfs_set_key_type(&key, BTRFS_INODE_ITEM_KEY);
5637 key.offset = 0;
5638 }
5639
5640 if (unlikely(ino == BTRFS_FIRST_FREE_OBJECTID)) {
5641 ret = btrfs_add_root_ref(trans, root->fs_info->tree_root,
5642 key.objectid, root->root_key.objectid,
5643 parent_ino, index, name, name_len);
5644 } else if (add_backref) {
5645 ret = btrfs_insert_inode_ref(trans, root, name, name_len, ino,
5646 parent_ino, index);
5647 }
5648
5649
5650 if (ret)
5651 return ret;
5652
5653 ret = btrfs_insert_dir_item(trans, root, name, name_len,
5654 parent_inode, &key,
5655 btrfs_inode_type(inode), index);
5656 if (ret == -EEXIST || ret == -EOVERFLOW)
5657 goto fail_dir_item;
5658 else if (ret) {
5659 btrfs_abort_transaction(trans, root, ret);
5660 return ret;
5661 }
5662
5663 btrfs_i_size_write(parent_inode, parent_inode->i_size +
5664 name_len * 2);
5665 inode_inc_iversion(parent_inode);
5666 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME;
5667 ret = btrfs_update_inode(trans, root, parent_inode);
5668 if (ret)
5669 btrfs_abort_transaction(trans, root, ret);
5670 return ret;
5671
5672fail_dir_item:
5673 if (unlikely(ino == BTRFS_FIRST_FREE_OBJECTID)) {
5674 u64 local_index;
5675 int err;
5676 err = btrfs_del_root_ref(trans, root->fs_info->tree_root,
5677 key.objectid, root->root_key.objectid,
5678 parent_ino, &local_index, name, name_len);
5679
5680 } else if (add_backref) {
5681 u64 local_index;
5682 int err;
5683
5684 err = btrfs_del_inode_ref(trans, root, name, name_len,
5685 ino, parent_ino, &local_index);
5686 }
5687 return ret;
5688}
5689
5690static int btrfs_add_nondir(struct btrfs_trans_handle *trans,
5691 struct inode *dir, struct dentry *dentry,
5692 struct inode *inode, int backref, u64 index)
5693{
5694 int err = btrfs_add_link(trans, dir, inode,
5695 dentry->d_name.name, dentry->d_name.len,
5696 backref, index);
5697 if (err > 0)
5698 err = -EEXIST;
5699 return err;
5700}
5701
5702static int btrfs_mknod(struct inode *dir, struct dentry *dentry,
5703 umode_t mode, dev_t rdev)
5704{
5705 struct btrfs_trans_handle *trans;
5706 struct btrfs_root *root = BTRFS_I(dir)->root;
5707 struct inode *inode = NULL;
5708 int err;
5709 int drop_inode = 0;
5710 u64 objectid;
5711 u64 index = 0;
5712
5713 if (!new_valid_dev(rdev))
5714 return -EINVAL;
5715
5716
5717
5718
5719
5720
5721 trans = btrfs_start_transaction(root, 5);
5722 if (IS_ERR(trans))
5723 return PTR_ERR(trans);
5724
5725 err = btrfs_find_free_ino(root, &objectid);
5726 if (err)
5727 goto out_unlock;
5728
5729 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
5730 dentry->d_name.len, btrfs_ino(dir), objectid,
5731 mode, &index);
5732 if (IS_ERR(inode)) {
5733 err = PTR_ERR(inode);
5734 goto out_unlock;
5735 }
5736
5737 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
5738 if (err) {
5739 drop_inode = 1;
5740 goto out_unlock;
5741 }
5742
5743
5744
5745
5746
5747
5748
5749
5750 inode->i_op = &btrfs_special_inode_operations;
5751 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
5752 if (err)
5753 drop_inode = 1;
5754 else {
5755 init_special_inode(inode, inode->i_mode, rdev);
5756 btrfs_update_inode(trans, root, inode);
5757 d_instantiate(dentry, inode);
5758 }
5759out_unlock:
5760 btrfs_end_transaction(trans, root);
5761 btrfs_btree_balance_dirty(root);
5762 if (drop_inode) {
5763 inode_dec_link_count(inode);
5764 iput(inode);
5765 }
5766 return err;
5767}
5768
5769static int btrfs_create(struct inode *dir, struct dentry *dentry,
5770 umode_t mode, bool excl)
5771{
5772 struct btrfs_trans_handle *trans;
5773 struct btrfs_root *root = BTRFS_I(dir)->root;
5774 struct inode *inode = NULL;
5775 int drop_inode_on_err = 0;
5776 int err;
5777 u64 objectid;
5778 u64 index = 0;
5779
5780
5781
5782
5783
5784
5785 trans = btrfs_start_transaction(root, 5);
5786 if (IS_ERR(trans))
5787 return PTR_ERR(trans);
5788
5789 err = btrfs_find_free_ino(root, &objectid);
5790 if (err)
5791 goto out_unlock;
5792
5793 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
5794 dentry->d_name.len, btrfs_ino(dir), objectid,
5795 mode, &index);
5796 if (IS_ERR(inode)) {
5797 err = PTR_ERR(inode);
5798 goto out_unlock;
5799 }
5800 drop_inode_on_err = 1;
5801
5802 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
5803 if (err)
5804 goto out_unlock;
5805
5806 err = btrfs_update_inode(trans, root, inode);
5807 if (err)
5808 goto out_unlock;
5809
5810
5811
5812
5813
5814
5815
5816 inode->i_fop = &btrfs_file_operations;
5817 inode->i_op = &btrfs_file_inode_operations;
5818
5819 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
5820 if (err)
5821 goto out_unlock;
5822
5823 inode->i_mapping->a_ops = &btrfs_aops;
5824 inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
5825 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
5826 d_instantiate(dentry, inode);
5827
5828out_unlock:
5829 btrfs_end_transaction(trans, root);
5830 if (err && drop_inode_on_err) {
5831 inode_dec_link_count(inode);
5832 iput(inode);
5833 }
5834 btrfs_btree_balance_dirty(root);
5835 return err;
5836}
5837
5838static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
5839 struct dentry *dentry)
5840{
5841 struct btrfs_trans_handle *trans;
5842 struct btrfs_root *root = BTRFS_I(dir)->root;
5843 struct inode *inode = old_dentry->d_inode;
5844 u64 index;
5845 int err;
5846 int drop_inode = 0;
5847
5848
5849 if (root->objectid != BTRFS_I(inode)->root->objectid)
5850 return -EXDEV;
5851
5852 if (inode->i_nlink >= BTRFS_LINK_MAX)
5853 return -EMLINK;
5854
5855 err = btrfs_set_inode_index(dir, &index);
5856 if (err)
5857 goto fail;
5858
5859
5860
5861
5862
5863
5864 trans = btrfs_start_transaction(root, 5);
5865 if (IS_ERR(trans)) {
5866 err = PTR_ERR(trans);
5867 goto fail;
5868 }
5869
5870 btrfs_inc_nlink(inode);
5871 inode_inc_iversion(inode);
5872 inode->i_ctime = CURRENT_TIME;
5873 ihold(inode);
5874 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
5875
5876 err = btrfs_add_nondir(trans, dir, dentry, inode, 1, index);
5877
5878 if (err) {
5879 drop_inode = 1;
5880 } else {
5881 struct dentry *parent = dentry->d_parent;
5882 err = btrfs_update_inode(trans, root, inode);
5883 if (err)
5884 goto fail;
5885 d_instantiate(dentry, inode);
5886 btrfs_log_new_name(trans, inode, NULL, parent);
5887 }
5888
5889 btrfs_end_transaction(trans, root);
5890fail:
5891 if (drop_inode) {
5892 inode_dec_link_count(inode);
5893 iput(inode);
5894 }
5895 btrfs_btree_balance_dirty(root);
5896 return err;
5897}
5898
5899static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
5900{
5901 struct inode *inode = NULL;
5902 struct btrfs_trans_handle *trans;
5903 struct btrfs_root *root = BTRFS_I(dir)->root;
5904 int err = 0;
5905 int drop_on_err = 0;
5906 u64 objectid = 0;
5907 u64 index = 0;
5908
5909
5910
5911
5912
5913
5914 trans = btrfs_start_transaction(root, 5);
5915 if (IS_ERR(trans))
5916 return PTR_ERR(trans);
5917
5918 err = btrfs_find_free_ino(root, &objectid);
5919 if (err)
5920 goto out_fail;
5921
5922 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
5923 dentry->d_name.len, btrfs_ino(dir), objectid,
5924 S_IFDIR | mode, &index);
5925 if (IS_ERR(inode)) {
5926 err = PTR_ERR(inode);
5927 goto out_fail;
5928 }
5929
5930 drop_on_err = 1;
5931
5932 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
5933 if (err)
5934 goto out_fail;
5935
5936 inode->i_op = &btrfs_dir_inode_operations;
5937 inode->i_fop = &btrfs_dir_file_operations;
5938
5939 btrfs_i_size_write(inode, 0);
5940 err = btrfs_update_inode(trans, root, inode);
5941 if (err)
5942 goto out_fail;
5943
5944 err = btrfs_add_link(trans, dir, inode, dentry->d_name.name,
5945 dentry->d_name.len, 0, index);
5946 if (err)
5947 goto out_fail;
5948
5949 d_instantiate(dentry, inode);
5950 drop_on_err = 0;
5951
5952out_fail:
5953 btrfs_end_transaction(trans, root);
5954 if (drop_on_err)
5955 iput(inode);
5956 btrfs_btree_balance_dirty(root);
5957 return err;
5958}
5959
5960
5961
5962
5963
5964static int merge_extent_mapping(struct extent_map_tree *em_tree,
5965 struct extent_map *existing,
5966 struct extent_map *em,
5967 u64 map_start, u64 map_len)
5968{
5969 u64 start_diff;
5970
5971 BUG_ON(map_start < em->start || map_start >= extent_map_end(em));
5972 start_diff = map_start - em->start;
5973 em->start = map_start;
5974 em->len = map_len;
5975 if (em->block_start < EXTENT_MAP_LAST_BYTE &&
5976 !test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
5977 em->block_start += start_diff;
5978 em->block_len -= start_diff;
5979 }
5980 return add_extent_mapping(em_tree, em);
5981}
5982
5983static noinline int uncompress_inline(struct btrfs_path *path,
5984 struct inode *inode, struct page *page,
5985 size_t pg_offset, u64 extent_offset,
5986 struct btrfs_file_extent_item *item)
5987{
5988 int ret;
5989 struct extent_buffer *leaf = path->nodes[0];
5990 char *tmp;
5991 size_t max_size;
5992 unsigned long inline_size;
5993 unsigned long ptr;
5994 int compress_type;
5995
5996 WARN_ON(pg_offset != 0);
5997 compress_type = btrfs_file_extent_compression(leaf, item);
5998 max_size = btrfs_file_extent_ram_bytes(leaf, item);
5999 inline_size = btrfs_file_extent_inline_item_len(leaf,
6000 btrfs_item_nr(leaf, path->slots[0]));
6001 tmp = kmalloc(inline_size, GFP_NOFS);
6002 if (!tmp)
6003 return -ENOMEM;
6004 ptr = btrfs_file_extent_inline_start(item);
6005
6006 read_extent_buffer(leaf, tmp, ptr, inline_size);
6007
6008 max_size = min_t(unsigned long, PAGE_CACHE_SIZE, max_size);
6009 ret = btrfs_decompress(compress_type, tmp, page,
6010 extent_offset, inline_size, max_size);
6011 if (ret) {
6012 char *kaddr = kmap_atomic(page);
6013 unsigned long copy_size = min_t(u64,
6014 PAGE_CACHE_SIZE - pg_offset,
6015 max_size - extent_offset);
6016 memset(kaddr + pg_offset, 0, copy_size);
6017 kunmap_atomic(kaddr);
6018 }
6019 kfree(tmp);
6020 return 0;
6021}
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
6033 size_t pg_offset, u64 start, u64 len,
6034 int create)
6035{
6036 int ret;
6037 int err = 0;
6038 u64 bytenr;
6039 u64 extent_start = 0;
6040 u64 extent_end = 0;
6041 u64 objectid = btrfs_ino(inode);
6042 u32 found_type;
6043 struct btrfs_path *path = NULL;
6044 struct btrfs_root *root = BTRFS_I(inode)->root;
6045 struct btrfs_file_extent_item *item;
6046 struct extent_buffer *leaf;
6047 struct btrfs_key found_key;
6048 struct extent_map *em = NULL;
6049 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
6050 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
6051 struct btrfs_trans_handle *trans = NULL;
6052 int compress_type;
6053
6054again:
6055 read_lock(&em_tree->lock);
6056 em = lookup_extent_mapping(em_tree, start, len);
6057 if (em)
6058 em->bdev = root->fs_info->fs_devices->latest_bdev;
6059 read_unlock(&em_tree->lock);
6060
6061 if (em) {
6062 if (em->start > start || em->start + em->len <= start)
6063 free_extent_map(em);
6064 else if (em->block_start == EXTENT_MAP_INLINE && page)
6065 free_extent_map(em);
6066 else
6067 goto out;
6068 }
6069 em = alloc_extent_map();
6070 if (!em) {
6071 err = -ENOMEM;
6072 goto out;
6073 }
6074 em->bdev = root->fs_info->fs_devices->latest_bdev;
6075 em->start = EXTENT_MAP_HOLE;
6076 em->orig_start = EXTENT_MAP_HOLE;
6077 em->len = (u64)-1;
6078 em->block_len = (u64)-1;
6079
6080 if (!path) {
6081 path = btrfs_alloc_path();
6082 if (!path) {
6083 err = -ENOMEM;
6084 goto out;
6085 }
6086
6087
6088
6089
6090 path->reada = 1;
6091 }
6092
6093 ret = btrfs_lookup_file_extent(trans, root, path,
6094 objectid, start, trans != NULL);
6095 if (ret < 0) {
6096 err = ret;
6097 goto out;
6098 }
6099
6100 if (ret != 0) {
6101 if (path->slots[0] == 0)
6102 goto not_found;
6103 path->slots[0]--;
6104 }
6105
6106 leaf = path->nodes[0];
6107 item = btrfs_item_ptr(leaf, path->slots[0],
6108 struct btrfs_file_extent_item);
6109
6110 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
6111 found_type = btrfs_key_type(&found_key);
6112 if (found_key.objectid != objectid ||
6113 found_type != BTRFS_EXTENT_DATA_KEY) {
6114 goto not_found;
6115 }
6116
6117 found_type = btrfs_file_extent_type(leaf, item);
6118 extent_start = found_key.offset;
6119 compress_type = btrfs_file_extent_compression(leaf, item);
6120 if (found_type == BTRFS_FILE_EXTENT_REG ||
6121 found_type == BTRFS_FILE_EXTENT_PREALLOC) {
6122 extent_end = extent_start +
6123 btrfs_file_extent_num_bytes(leaf, item);
6124 } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
6125 size_t size;
6126 size = btrfs_file_extent_inline_len(leaf, item);
6127 extent_end = ALIGN(extent_start + size, root->sectorsize);
6128 }
6129
6130 if (start >= extent_end) {
6131 path->slots[0]++;
6132 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
6133 ret = btrfs_next_leaf(root, path);
6134 if (ret < 0) {
6135 err = ret;
6136 goto out;
6137 }
6138 if (ret > 0)
6139 goto not_found;
6140 leaf = path->nodes[0];
6141 }
6142 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
6143 if (found_key.objectid != objectid ||
6144 found_key.type != BTRFS_EXTENT_DATA_KEY)
6145 goto not_found;
6146 if (start + len <= found_key.offset)
6147 goto not_found;
6148 em->start = start;
6149 em->orig_start = start;
6150 em->len = found_key.offset - start;
6151 goto not_found_em;
6152 }
6153
6154 if (found_type == BTRFS_FILE_EXTENT_REG ||
6155 found_type == BTRFS_FILE_EXTENT_PREALLOC) {
6156 em->start = extent_start;
6157 em->len = extent_end - extent_start;
6158 em->orig_start = extent_start -
6159 btrfs_file_extent_offset(leaf, item);
6160 em->orig_block_len = btrfs_file_extent_disk_num_bytes(leaf,
6161 item);
6162 bytenr = btrfs_file_extent_disk_bytenr(leaf, item);
6163 if (bytenr == 0) {
6164 em->block_start = EXTENT_MAP_HOLE;
6165 goto insert;
6166 }
6167 if (compress_type != BTRFS_COMPRESS_NONE) {
6168 set_bit(EXTENT_FLAG_COMPRESSED, &em->flags);
6169 em->compress_type = compress_type;
6170 em->block_start = bytenr;
6171 em->block_len = em->orig_block_len;
6172 } else {
6173 bytenr += btrfs_file_extent_offset(leaf, item);
6174 em->block_start = bytenr;
6175 em->block_len = em->len;
6176 if (found_type == BTRFS_FILE_EXTENT_PREALLOC)
6177 set_bit(EXTENT_FLAG_PREALLOC, &em->flags);
6178 }
6179 goto insert;
6180 } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
6181 unsigned long ptr;
6182 char *map;
6183 size_t size;
6184 size_t extent_offset;
6185 size_t copy_size;
6186
6187 em->block_start = EXTENT_MAP_INLINE;
6188 if (!page || create) {
6189 em->start = extent_start;
6190 em->len = extent_end - extent_start;
6191 goto out;
6192 }
6193
6194 size = btrfs_file_extent_inline_len(leaf, item);
6195 extent_offset = page_offset(page) + pg_offset - extent_start;
6196 copy_size = min_t(u64, PAGE_CACHE_SIZE - pg_offset,
6197 size - extent_offset);
6198 em->start = extent_start + extent_offset;
6199 em->len = ALIGN(copy_size, root->sectorsize);
6200 em->orig_block_len = em->len;
6201 em->orig_start = em->start;
6202 if (compress_type) {
6203 set_bit(EXTENT_FLAG_COMPRESSED, &em->flags);
6204 em->compress_type = compress_type;
6205 }
6206 ptr = btrfs_file_extent_inline_start(item) + extent_offset;
6207 if (create == 0 && !PageUptodate(page)) {
6208 if (btrfs_file_extent_compression(leaf, item) !=
6209 BTRFS_COMPRESS_NONE) {
6210 ret = uncompress_inline(path, inode, page,
6211 pg_offset,
6212 extent_offset, item);
6213 BUG_ON(ret);
6214 } else {
6215 map = kmap(page);
6216 read_extent_buffer(leaf, map + pg_offset, ptr,
6217 copy_size);
6218 if (pg_offset + copy_size < PAGE_CACHE_SIZE) {
6219 memset(map + pg_offset + copy_size, 0,
6220 PAGE_CACHE_SIZE - pg_offset -
6221 copy_size);
6222 }
6223 kunmap(page);
6224 }
6225 flush_dcache_page(page);
6226 } else if (create && PageUptodate(page)) {
6227 BUG();
6228 if (!trans) {
6229 kunmap(page);
6230 free_extent_map(em);
6231 em = NULL;
6232
6233 btrfs_release_path(path);
6234 trans = btrfs_join_transaction(root);
6235
6236 if (IS_ERR(trans))
6237 return ERR_CAST(trans);
6238 goto again;
6239 }
6240 map = kmap(page);
6241 write_extent_buffer(leaf, map + pg_offset, ptr,
6242 copy_size);
6243 kunmap(page);
6244 btrfs_mark_buffer_dirty(leaf);
6245 }
6246 set_extent_uptodate(io_tree, em->start,
6247 extent_map_end(em) - 1, NULL, GFP_NOFS);
6248 goto insert;
6249 } else {
6250 WARN(1, KERN_ERR "btrfs unknown found_type %d\n", found_type);
6251 }
6252not_found:
6253 em->start = start;
6254 em->orig_start = start;
6255 em->len = len;
6256not_found_em:
6257 em->block_start = EXTENT_MAP_HOLE;
6258 set_bit(EXTENT_FLAG_VACANCY, &em->flags);
6259insert:
6260 btrfs_release_path(path);
6261 if (em->start > start || extent_map_end(em) <= start) {
6262 printk(KERN_ERR "Btrfs: bad extent! em: [%llu %llu] passed "
6263 "[%llu %llu]\n", (unsigned long long)em->start,
6264 (unsigned long long)em->len,
6265 (unsigned long long)start,
6266 (unsigned long long)len);
6267 err = -EIO;
6268 goto out;
6269 }
6270
6271 err = 0;
6272 write_lock(&em_tree->lock);
6273 ret = add_extent_mapping(em_tree, em);
6274
6275
6276
6277
6278 if (ret == -EEXIST) {
6279 struct extent_map *existing;
6280
6281 ret = 0;
6282
6283 existing = lookup_extent_mapping(em_tree, start, len);
6284 if (existing && (existing->start > start ||
6285 existing->start + existing->len <= start)) {
6286 free_extent_map(existing);
6287 existing = NULL;
6288 }
6289 if (!existing) {
6290 existing = lookup_extent_mapping(em_tree, em->start,
6291 em->len);
6292 if (existing) {
6293 err = merge_extent_mapping(em_tree, existing,
6294 em, start,
6295 root->sectorsize);
6296 free_extent_map(existing);
6297 if (err) {
6298 free_extent_map(em);
6299 em = NULL;
6300 }
6301 } else {
6302 err = -EIO;
6303 free_extent_map(em);
6304 em = NULL;
6305 }
6306 } else {
6307 free_extent_map(em);
6308 em = existing;
6309 err = 0;
6310 }
6311 }
6312 write_unlock(&em_tree->lock);
6313out:
6314
6315 if (em)
6316 trace_btrfs_get_extent(root, em);
6317
6318 if (path)
6319 btrfs_free_path(path);
6320 if (trans) {
6321 ret = btrfs_end_transaction(trans, root);
6322 if (!err)
6323 err = ret;
6324 }
6325 if (err) {
6326 free_extent_map(em);
6327 return ERR_PTR(err);
6328 }
6329 BUG_ON(!em);
6330 return em;
6331}
6332
6333struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page,
6334 size_t pg_offset, u64 start, u64 len,
6335 int create)
6336{
6337 struct extent_map *em;
6338 struct extent_map *hole_em = NULL;
6339 u64 range_start = start;
6340 u64 end;
6341 u64 found;
6342 u64 found_end;
6343 int err = 0;
6344
6345 em = btrfs_get_extent(inode, page, pg_offset, start, len, create);
6346 if (IS_ERR(em))
6347 return em;
6348 if (em) {
6349
6350
6351
6352
6353
6354
6355 if (em->block_start != EXTENT_MAP_HOLE &&
6356 !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
6357 return em;
6358 else
6359 hole_em = em;
6360 }
6361
6362
6363 end = start + len;
6364 if (end < start)
6365 end = (u64)-1;
6366 else
6367 end -= 1;
6368
6369 em = NULL;
6370
6371
6372 found = count_range_bits(&BTRFS_I(inode)->io_tree, &range_start,
6373 end, len, EXTENT_DELALLOC, 1);
6374 found_end = range_start + found;
6375 if (found_end < range_start)
6376 found_end = (u64)-1;
6377
6378
6379
6380
6381
6382 if (range_start > end || found_end <= start) {
6383 em = hole_em;
6384 hole_em = NULL;
6385 goto out;
6386 }
6387
6388
6389
6390
6391 range_start = max(start,range_start);
6392 found = found_end - range_start;
6393
6394 if (found > 0) {
6395 u64 hole_start = start;
6396 u64 hole_len = len;
6397
6398 em = alloc_extent_map();
6399 if (!em) {
6400 err = -ENOMEM;
6401 goto out;
6402 }
6403
6404
6405
6406
6407
6408
6409
6410
6411 if (hole_em) {
6412 u64 calc_end = extent_map_end(hole_em);
6413
6414 if (calc_end <= start || (hole_em->start > end)) {
6415 free_extent_map(hole_em);
6416 hole_em = NULL;
6417 } else {
6418 hole_start = max(hole_em->start, start);
6419 hole_len = calc_end - hole_start;
6420 }
6421 }
6422 em->bdev = NULL;
6423 if (hole_em && range_start > hole_start) {
6424
6425
6426
6427
6428 em->len = min(hole_len,
6429 range_start - hole_start);
6430 em->start = hole_start;
6431 em->orig_start = hole_start;
6432
6433
6434
6435
6436 em->block_start = hole_em->block_start;
6437 em->block_len = hole_len;
6438 if (test_bit(EXTENT_FLAG_PREALLOC, &hole_em->flags))
6439 set_bit(EXTENT_FLAG_PREALLOC, &em->flags);
6440 } else {
6441 em->start = range_start;
6442 em->len = found;
6443 em->orig_start = range_start;
6444 em->block_start = EXTENT_MAP_DELALLOC;
6445 em->block_len = found;
6446 }
6447 } else if (hole_em) {
6448 return hole_em;
6449 }
6450out:
6451
6452 free_extent_map(hole_em);
6453 if (err) {
6454 free_extent_map(em);
6455 return ERR_PTR(err);
6456 }
6457 return em;
6458}
6459
6460static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
6461 u64 start, u64 len)
6462{
6463 struct btrfs_root *root = BTRFS_I(inode)->root;
6464 struct btrfs_trans_handle *trans;
6465 struct extent_map *em;
6466 struct btrfs_key ins;
6467 u64 alloc_hint;
6468 int ret;
6469
6470 trans = btrfs_join_transaction(root);
6471 if (IS_ERR(trans))
6472 return ERR_CAST(trans);
6473
6474 trans->block_rsv = &root->fs_info->delalloc_block_rsv;
6475
6476 alloc_hint = get_extent_allocation_hint(inode, start, len);
6477 ret = btrfs_reserve_extent(trans, root, len, root->sectorsize, 0,
6478 alloc_hint, &ins, 1);
6479 if (ret) {
6480 em = ERR_PTR(ret);
6481 goto out;
6482 }
6483
6484 em = create_pinned_em(inode, start, ins.offset, start, ins.objectid,
6485 ins.offset, ins.offset, 0);
6486 if (IS_ERR(em))
6487 goto out;
6488
6489 ret = btrfs_add_ordered_extent_dio(inode, start, ins.objectid,
6490 ins.offset, ins.offset, 0);
6491 if (ret) {
6492 btrfs_free_reserved_extent(root, ins.objectid, ins.offset);
6493 em = ERR_PTR(ret);
6494 }
6495out:
6496 btrfs_end_transaction(trans, root);
6497 return em;
6498}
6499
6500
6501
6502
6503
6504static noinline int can_nocow_odirect(struct btrfs_trans_handle *trans,
6505 struct inode *inode, u64 offset, u64 len)
6506{
6507 struct btrfs_path *path;
6508 int ret;
6509 struct extent_buffer *leaf;
6510 struct btrfs_root *root = BTRFS_I(inode)->root;
6511 struct btrfs_file_extent_item *fi;
6512 struct btrfs_key key;
6513 u64 disk_bytenr;
6514 u64 backref_offset;
6515 u64 extent_end;
6516 u64 num_bytes;
6517 int slot;
6518 int found_type;
6519
6520 path = btrfs_alloc_path();
6521 if (!path)
6522 return -ENOMEM;
6523
6524 ret = btrfs_lookup_file_extent(trans, root, path, btrfs_ino(inode),
6525 offset, 0);
6526 if (ret < 0)
6527 goto out;
6528
6529 slot = path->slots[0];
6530 if (ret == 1) {
6531 if (slot == 0) {
6532
6533 ret = 0;
6534 goto out;
6535 }
6536 slot--;
6537 }
6538 ret = 0;
6539 leaf = path->nodes[0];
6540 btrfs_item_key_to_cpu(leaf, &key, slot);
6541 if (key.objectid != btrfs_ino(inode) ||
6542 key.type != BTRFS_EXTENT_DATA_KEY) {
6543
6544 goto out;
6545 }
6546
6547 if (key.offset > offset) {
6548
6549 goto out;
6550 }
6551
6552 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
6553 found_type = btrfs_file_extent_type(leaf, fi);
6554 if (found_type != BTRFS_FILE_EXTENT_REG &&
6555 found_type != BTRFS_FILE_EXTENT_PREALLOC) {
6556
6557 goto out;
6558 }
6559 disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
6560 backref_offset = btrfs_file_extent_offset(leaf, fi);
6561
6562 extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
6563 if (extent_end < offset + len) {
6564
6565 goto out;
6566 }
6567
6568 if (btrfs_extent_readonly(root, disk_bytenr))
6569 goto out;
6570
6571
6572
6573
6574
6575 if (btrfs_cross_ref_exist(trans, root, btrfs_ino(inode),
6576 key.offset - backref_offset, disk_bytenr))
6577 goto out;
6578
6579
6580
6581
6582
6583
6584
6585 disk_bytenr += backref_offset;
6586 disk_bytenr += offset - key.offset;
6587 num_bytes = min(offset + len, extent_end) - offset;
6588 if (csum_exist_in_range(root, disk_bytenr, num_bytes))
6589 goto out;
6590
6591
6592
6593
6594 ret = 1;
6595out:
6596 btrfs_free_path(path);
6597 return ret;
6598}
6599
6600static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend,
6601 struct extent_state **cached_state, int writing)
6602{
6603 struct btrfs_ordered_extent *ordered;
6604 int ret = 0;
6605
6606 while (1) {
6607 lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6608 0, cached_state);
6609
6610
6611
6612
6613
6614 ordered = btrfs_lookup_ordered_range(inode, lockstart,
6615 lockend - lockstart + 1);
6616
6617
6618
6619
6620
6621
6622
6623
6624 if (!ordered && (!writing ||
6625 !test_range_bit(&BTRFS_I(inode)->io_tree,
6626 lockstart, lockend, EXTENT_UPTODATE, 0,
6627 *cached_state)))
6628 break;
6629
6630 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6631 cached_state, GFP_NOFS);
6632
6633 if (ordered) {
6634 btrfs_start_ordered_extent(inode, ordered, 1);
6635 btrfs_put_ordered_extent(ordered);
6636 } else {
6637
6638 ret = filemap_write_and_wait_range(inode->i_mapping,
6639 lockstart,
6640 lockend);
6641 if (ret)
6642 break;
6643
6644
6645
6646
6647
6648 ret = invalidate_inode_pages2_range(inode->i_mapping,
6649 lockstart >> PAGE_CACHE_SHIFT,
6650 lockend >> PAGE_CACHE_SHIFT);
6651 if (ret)
6652 break;
6653 }
6654
6655 cond_resched();
6656 }
6657
6658 return ret;
6659}
6660
6661static struct extent_map *create_pinned_em(struct inode *inode, u64 start,
6662 u64 len, u64 orig_start,
6663 u64 block_start, u64 block_len,
6664 u64 orig_block_len, int type)
6665{
6666 struct extent_map_tree *em_tree;
6667 struct extent_map *em;
6668 struct btrfs_root *root = BTRFS_I(inode)->root;
6669 int ret;
6670
6671 em_tree = &BTRFS_I(inode)->extent_tree;
6672 em = alloc_extent_map();
6673 if (!em)
6674 return ERR_PTR(-ENOMEM);
6675
6676 em->start = start;
6677 em->orig_start = orig_start;
6678 em->mod_start = start;
6679 em->mod_len = len;
6680 em->len = len;
6681 em->block_len = block_len;
6682 em->block_start = block_start;
6683 em->bdev = root->fs_info->fs_devices->latest_bdev;
6684 em->orig_block_len = orig_block_len;
6685 em->generation = -1;
6686 set_bit(EXTENT_FLAG_PINNED, &em->flags);
6687 if (type == BTRFS_ORDERED_PREALLOC)
6688 set_bit(EXTENT_FLAG_FILLING, &em->flags);
6689
6690 do {
6691 btrfs_drop_extent_cache(inode, em->start,
6692 em->start + em->len - 1, 0);
6693 write_lock(&em_tree->lock);
6694 ret = add_extent_mapping(em_tree, em);
6695 if (!ret)
6696 list_move(&em->list,
6697 &em_tree->modified_extents);
6698 write_unlock(&em_tree->lock);
6699 } while (ret == -EEXIST);
6700
6701 if (ret) {
6702 free_extent_map(em);
6703 return ERR_PTR(ret);
6704 }
6705
6706 return em;
6707}
6708
6709
6710static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
6711 struct buffer_head *bh_result, int create)
6712{
6713 struct extent_map *em;
6714 struct btrfs_root *root = BTRFS_I(inode)->root;
6715 struct extent_state *cached_state = NULL;
6716 u64 start = iblock << inode->i_blkbits;
6717 u64 lockstart, lockend;
6718 u64 len = bh_result->b_size;
6719 struct btrfs_trans_handle *trans;
6720 int unlock_bits = EXTENT_LOCKED;
6721 int ret = 0;
6722
6723 if (create)
6724 unlock_bits |= EXTENT_DELALLOC | EXTENT_DIRTY;
6725 else
6726 len = min_t(u64, len, root->sectorsize);
6727
6728 lockstart = start;
6729 lockend = start + len - 1;
6730
6731
6732
6733
6734
6735 if (lock_extent_direct(inode, lockstart, lockend, &cached_state, create))
6736 return -ENOTBLK;
6737
6738 em = btrfs_get_extent(inode, NULL, 0, start, len, 0);
6739 if (IS_ERR(em)) {
6740 ret = PTR_ERR(em);
6741 goto unlock_err;
6742 }
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758 if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) ||
6759 em->block_start == EXTENT_MAP_INLINE) {
6760 free_extent_map(em);
6761 ret = -ENOTBLK;
6762 goto unlock_err;
6763 }
6764
6765
6766 if (!create && (em->block_start == EXTENT_MAP_HOLE ||
6767 test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {
6768 free_extent_map(em);
6769 goto unlock_err;
6770 }
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781 if (!create) {
6782 len = min(len, em->len - (start - em->start));
6783 lockstart = start + len;
6784 goto unlock;
6785 }
6786
6787 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||
6788 ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) &&
6789 em->block_start != EXTENT_MAP_HOLE)) {
6790 int type;
6791 int ret;
6792 u64 block_start;
6793
6794 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
6795 type = BTRFS_ORDERED_PREALLOC;
6796 else
6797 type = BTRFS_ORDERED_NOCOW;
6798 len = min(len, em->len - (start - em->start));
6799 block_start = em->block_start + (start - em->start);
6800
6801
6802
6803
6804
6805
6806 trans = btrfs_join_transaction(root);
6807 if (IS_ERR(trans))
6808 goto must_cow;
6809
6810 if (can_nocow_odirect(trans, inode, start, len) == 1) {
6811 u64 orig_start = em->orig_start;
6812 u64 orig_block_len = em->orig_block_len;
6813
6814 if (type == BTRFS_ORDERED_PREALLOC) {
6815 free_extent_map(em);
6816 em = create_pinned_em(inode, start, len,
6817 orig_start,
6818 block_start, len,
6819 orig_block_len, type);
6820 if (IS_ERR(em)) {
6821 btrfs_end_transaction(trans, root);
6822 goto unlock_err;
6823 }
6824 }
6825
6826 ret = btrfs_add_ordered_extent_dio(inode, start,
6827 block_start, len, len, type);
6828 btrfs_end_transaction(trans, root);
6829 if (ret) {
6830 free_extent_map(em);
6831 goto unlock_err;
6832 }
6833 goto unlock;
6834 }
6835 btrfs_end_transaction(trans, root);
6836 }
6837must_cow:
6838
6839
6840
6841
6842 len = bh_result->b_size;
6843 free_extent_map(em);
6844 em = btrfs_new_extent_direct(inode, start, len);
6845 if (IS_ERR(em)) {
6846 ret = PTR_ERR(em);
6847 goto unlock_err;
6848 }
6849 len = min(len, em->len - (start - em->start));
6850unlock:
6851 bh_result->b_blocknr = (em->block_start + (start - em->start)) >>
6852 inode->i_blkbits;
6853 bh_result->b_size = len;
6854 bh_result->b_bdev = em->bdev;
6855 set_buffer_mapped(bh_result);
6856 if (create) {
6857 if (!test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
6858 set_buffer_new(bh_result);
6859
6860
6861
6862
6863
6864 if (start + len > i_size_read(inode))
6865 i_size_write(inode, start + len);
6866
6867 spin_lock(&BTRFS_I(inode)->lock);
6868 BTRFS_I(inode)->outstanding_extents++;
6869 spin_unlock(&BTRFS_I(inode)->lock);
6870
6871 ret = set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
6872 lockstart + len - 1, EXTENT_DELALLOC, NULL,
6873 &cached_state, GFP_NOFS);
6874 BUG_ON(ret);
6875 }
6876
6877
6878
6879
6880
6881
6882 if (lockstart < lockend) {
6883 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
6884 lockend, unlock_bits, 1, 0,
6885 &cached_state, GFP_NOFS);
6886 } else {
6887 free_extent_state(cached_state);
6888 }
6889
6890 free_extent_map(em);
6891
6892 return 0;
6893
6894unlock_err:
6895 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend,
6896 unlock_bits, 1, 0, &cached_state, GFP_NOFS);
6897 return ret;
6898}
6899
6900struct btrfs_dio_private {
6901 struct inode *inode;
6902 u64 logical_offset;
6903 u64 disk_bytenr;
6904 u64 bytes;
6905 void *private;
6906
6907
6908 atomic_t pending_bios;
6909
6910
6911 int errors;
6912
6913 struct bio *orig_bio;
6914};
6915
6916static void btrfs_endio_direct_read(struct bio *bio, int err)
6917{
6918 struct btrfs_dio_private *dip = bio->bi_private;
6919 struct bio_vec *bvec_end = bio->bi_io_vec + bio->bi_vcnt - 1;
6920 struct bio_vec *bvec = bio->bi_io_vec;
6921 struct inode *inode = dip->inode;
6922 struct btrfs_root *root = BTRFS_I(inode)->root;
6923 u64 start;
6924
6925 start = dip->logical_offset;
6926 do {
6927 if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
6928 struct page *page = bvec->bv_page;
6929 char *kaddr;
6930 u32 csum = ~(u32)0;
6931 u64 private = ~(u32)0;
6932 unsigned long flags;
6933
6934 if (get_state_private(&BTRFS_I(inode)->io_tree,
6935 start, &private))
6936 goto failed;
6937 local_irq_save(flags);
6938 kaddr = kmap_atomic(page);
6939 csum = btrfs_csum_data(root, kaddr + bvec->bv_offset,
6940 csum, bvec->bv_len);
6941 btrfs_csum_final(csum, (char *)&csum);
6942 kunmap_atomic(kaddr);
6943 local_irq_restore(flags);
6944
6945 flush_dcache_page(bvec->bv_page);
6946 if (csum != private) {
6947failed:
6948 printk(KERN_ERR "btrfs csum failed ino %llu off"
6949 " %llu csum %u private %u\n",
6950 (unsigned long long)btrfs_ino(inode),
6951 (unsigned long long)start,
6952 csum, (unsigned)private);
6953 err = -EIO;
6954 }
6955 }
6956
6957 start += bvec->bv_len;
6958 bvec++;
6959 } while (bvec <= bvec_end);
6960
6961 unlock_extent(&BTRFS_I(inode)->io_tree, dip->logical_offset,
6962 dip->logical_offset + dip->bytes - 1);
6963 bio->bi_private = dip->private;
6964
6965 kfree(dip);
6966
6967
6968 if (err)
6969 clear_bit(BIO_UPTODATE, &bio->bi_flags);
6970 dio_end_io(bio, err);
6971}
6972
6973static void btrfs_endio_direct_write(struct bio *bio, int err)
6974{
6975 struct btrfs_dio_private *dip = bio->bi_private;
6976 struct inode *inode = dip->inode;
6977 struct btrfs_root *root = BTRFS_I(inode)->root;
6978 struct btrfs_ordered_extent *ordered = NULL;
6979 u64 ordered_offset = dip->logical_offset;
6980 u64 ordered_bytes = dip->bytes;
6981 int ret;
6982
6983 if (err)
6984 goto out_done;
6985again:
6986 ret = btrfs_dec_test_first_ordered_pending(inode, &ordered,
6987 &ordered_offset,
6988 ordered_bytes, !err);
6989 if (!ret)
6990 goto out_test;
6991
6992 ordered->work.func = finish_ordered_fn;
6993 ordered->work.flags = 0;
6994 btrfs_queue_worker(&root->fs_info->endio_write_workers,
6995 &ordered->work);
6996out_test:
6997
6998
6999
7000
7001 if (ordered_offset < dip->logical_offset + dip->bytes) {
7002 ordered_bytes = dip->logical_offset + dip->bytes -
7003 ordered_offset;
7004 ordered = NULL;
7005 goto again;
7006 }
7007out_done:
7008 bio->bi_private = dip->private;
7009
7010 kfree(dip);
7011
7012
7013 if (err)
7014 clear_bit(BIO_UPTODATE, &bio->bi_flags);
7015 dio_end_io(bio, err);
7016}
7017
7018static int __btrfs_submit_bio_start_direct_io(struct inode *inode, int rw,
7019 struct bio *bio, int mirror_num,
7020 unsigned long bio_flags, u64 offset)
7021{
7022 int ret;
7023 struct btrfs_root *root = BTRFS_I(inode)->root;
7024 ret = btrfs_csum_one_bio(root, inode, bio, offset, 1);
7025 BUG_ON(ret);
7026 return 0;
7027}
7028
7029static void btrfs_end_dio_bio(struct bio *bio, int err)
7030{
7031 struct btrfs_dio_private *dip = bio->bi_private;
7032
7033 if (err) {
7034 printk(KERN_ERR "btrfs direct IO failed ino %llu rw %lu "
7035 "sector %#Lx len %u err no %d\n",
7036 (unsigned long long)btrfs_ino(dip->inode), bio->bi_rw,
7037 (unsigned long long)bio->bi_sector, bio->bi_size, err);
7038 dip->errors = 1;
7039
7040
7041
7042
7043
7044 smp_mb__before_atomic_dec();
7045 }
7046
7047
7048 if (!atomic_dec_and_test(&dip->pending_bios))
7049 goto out;
7050
7051 if (dip->errors)
7052 bio_io_error(dip->orig_bio);
7053 else {
7054 set_bit(BIO_UPTODATE, &dip->orig_bio->bi_flags);
7055 bio_endio(dip->orig_bio, 0);
7056 }
7057out:
7058 bio_put(bio);
7059}
7060
7061static struct bio *btrfs_dio_bio_alloc(struct block_device *bdev,
7062 u64 first_sector, gfp_t gfp_flags)
7063{
7064 int nr_vecs = bio_get_nr_vecs(bdev);
7065 return btrfs_bio_alloc(bdev, first_sector, nr_vecs, gfp_flags);
7066}
7067
7068static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode,
7069 int rw, u64 file_offset, int skip_sum,
7070 int async_submit)
7071{
7072 int write = rw & REQ_WRITE;
7073 struct btrfs_root *root = BTRFS_I(inode)->root;
7074 int ret;
7075
7076 if (async_submit)
7077 async_submit = !atomic_read(&BTRFS_I(inode)->sync_writers);
7078
7079 bio_get(bio);
7080
7081 if (!write) {
7082 ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
7083 if (ret)
7084 goto err;
7085 }
7086
7087 if (skip_sum)
7088 goto map;
7089
7090 if (write && async_submit) {
7091 ret = btrfs_wq_submit_bio(root->fs_info,
7092 inode, rw, bio, 0, 0,
7093 file_offset,
7094 __btrfs_submit_bio_start_direct_io,
7095 __btrfs_submit_bio_done);
7096 goto err;
7097 } else if (write) {
7098
7099
7100
7101
7102 ret = btrfs_csum_one_bio(root, inode, bio, file_offset, 1);
7103 if (ret)
7104 goto err;
7105 } else if (!skip_sum) {
7106 ret = btrfs_lookup_bio_sums_dio(root, inode, bio, file_offset);
7107 if (ret)
7108 goto err;
7109 }
7110
7111map:
7112 ret = btrfs_map_bio(root, rw, bio, 0, async_submit);
7113err:
7114 bio_put(bio);
7115 return ret;
7116}
7117
7118static int btrfs_submit_direct_hook(int rw, struct btrfs_dio_private *dip,
7119 int skip_sum)
7120{
7121 struct inode *inode = dip->inode;
7122 struct btrfs_root *root = BTRFS_I(inode)->root;
7123 struct bio *bio;
7124 struct bio *orig_bio = dip->orig_bio;
7125 struct bio_vec *bvec = orig_bio->bi_io_vec;
7126 u64 start_sector = orig_bio->bi_sector;
7127 u64 file_offset = dip->logical_offset;
7128 u64 submit_len = 0;
7129 u64 map_length;
7130 int nr_pages = 0;
7131 int ret = 0;
7132 int async_submit = 0;
7133
7134 map_length = orig_bio->bi_size;
7135 ret = btrfs_map_block(root->fs_info, rw, start_sector << 9,
7136 &map_length, NULL, 0);
7137 if (ret) {
7138 bio_put(orig_bio);
7139 return -EIO;
7140 }
7141 if (map_length >= orig_bio->bi_size) {
7142 bio = orig_bio;
7143 goto submit;
7144 }
7145
7146
7147 if (btrfs_get_alloc_profile(root, 1) &
7148 (BTRFS_BLOCK_GROUP_RAID5 | BTRFS_BLOCK_GROUP_RAID6))
7149 async_submit = 0;
7150 else
7151 async_submit = 1;
7152
7153 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev, start_sector, GFP_NOFS);
7154 if (!bio)
7155 return -ENOMEM;
7156 bio->bi_private = dip;
7157 bio->bi_end_io = btrfs_end_dio_bio;
7158 atomic_inc(&dip->pending_bios);
7159
7160 while (bvec <= (orig_bio->bi_io_vec + orig_bio->bi_vcnt - 1)) {
7161 if (unlikely(map_length < submit_len + bvec->bv_len ||
7162 bio_add_page(bio, bvec->bv_page, bvec->bv_len,
7163 bvec->bv_offset) < bvec->bv_len)) {
7164
7165
7166
7167
7168
7169
7170 atomic_inc(&dip->pending_bios);
7171 ret = __btrfs_submit_dio_bio(bio, inode, rw,
7172 file_offset, skip_sum,
7173 async_submit);
7174 if (ret) {
7175 bio_put(bio);
7176 atomic_dec(&dip->pending_bios);
7177 goto out_err;
7178 }
7179
7180 start_sector += submit_len >> 9;
7181 file_offset += submit_len;
7182
7183 submit_len = 0;
7184 nr_pages = 0;
7185
7186 bio = btrfs_dio_bio_alloc(orig_bio->bi_bdev,
7187 start_sector, GFP_NOFS);
7188 if (!bio)
7189 goto out_err;
7190 bio->bi_private = dip;
7191 bio->bi_end_io = btrfs_end_dio_bio;
7192
7193 map_length = orig_bio->bi_size;
7194 ret = btrfs_map_block(root->fs_info, rw,
7195 start_sector << 9,
7196 &map_length, NULL, 0);
7197 if (ret) {
7198 bio_put(bio);
7199 goto out_err;
7200 }
7201 } else {
7202 submit_len += bvec->bv_len;
7203 nr_pages ++;
7204 bvec++;
7205 }
7206 }
7207
7208submit:
7209 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum,
7210 async_submit);
7211 if (!ret)
7212 return 0;
7213
7214 bio_put(bio);
7215out_err:
7216 dip->errors = 1;
7217
7218
7219
7220
7221 smp_mb__before_atomic_dec();
7222 if (atomic_dec_and_test(&dip->pending_bios))
7223 bio_io_error(dip->orig_bio);
7224
7225
7226 return 0;
7227}
7228
7229static void btrfs_submit_direct(int rw, struct bio *bio, struct inode *inode,
7230 loff_t file_offset)
7231{
7232 struct btrfs_root *root = BTRFS_I(inode)->root;
7233 struct btrfs_dio_private *dip;
7234 struct bio_vec *bvec = bio->bi_io_vec;
7235 int skip_sum;
7236 int write = rw & REQ_WRITE;
7237 int ret = 0;
7238
7239 skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM;
7240
7241 dip = kmalloc(sizeof(*dip), GFP_NOFS);
7242 if (!dip) {
7243 ret = -ENOMEM;
7244 goto free_ordered;
7245 }
7246
7247 dip->private = bio->bi_private;
7248 dip->inode = inode;
7249 dip->logical_offset = file_offset;
7250
7251 dip->bytes = 0;
7252 do {
7253 dip->bytes += bvec->bv_len;
7254 bvec++;
7255 } while (bvec <= (bio->bi_io_vec + bio->bi_vcnt - 1));
7256
7257 dip->disk_bytenr = (u64)bio->bi_sector << 9;
7258 bio->bi_private = dip;
7259 dip->errors = 0;
7260 dip->orig_bio = bio;
7261 atomic_set(&dip->pending_bios, 0);
7262
7263 if (write)
7264 bio->bi_end_io = btrfs_endio_direct_write;
7265 else
7266 bio->bi_end_io = btrfs_endio_direct_read;
7267
7268 ret = btrfs_submit_direct_hook(rw, dip, skip_sum);
7269 if (!ret)
7270 return;
7271free_ordered:
7272
7273
7274
7275
7276 if (write) {
7277 struct btrfs_ordered_extent *ordered;
7278 ordered = btrfs_lookup_ordered_extent(inode, file_offset);
7279 if (!test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags) &&
7280 !test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags))
7281 btrfs_free_reserved_extent(root, ordered->start,
7282 ordered->disk_len);
7283 btrfs_put_ordered_extent(ordered);
7284 btrfs_put_ordered_extent(ordered);
7285 }
7286 bio_endio(bio, ret);
7287}
7288
7289static ssize_t check_direct_IO(struct btrfs_root *root, int rw, struct kiocb *iocb,
7290 const struct iovec *iov, loff_t offset,
7291 unsigned long nr_segs)
7292{
7293 int seg;
7294 int i;
7295 size_t size;
7296 unsigned long addr;
7297 unsigned blocksize_mask = root->sectorsize - 1;
7298 ssize_t retval = -EINVAL;
7299 loff_t end = offset;
7300
7301 if (offset & blocksize_mask)
7302 goto out;
7303
7304
7305 for (seg = 0; seg < nr_segs; seg++) {
7306 addr = (unsigned long)iov[seg].iov_base;
7307 size = iov[seg].iov_len;
7308 end += size;
7309 if ((addr & blocksize_mask) || (size & blocksize_mask))
7310 goto out;
7311
7312
7313 if (rw & WRITE)
7314 continue;
7315
7316
7317
7318
7319
7320
7321 for (i = seg + 1; i < nr_segs; i++) {
7322 if (iov[seg].iov_base == iov[i].iov_base)
7323 goto out;
7324 }
7325 }
7326 retval = 0;
7327out:
7328 return retval;
7329}
7330
7331static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb,
7332 const struct iovec *iov, loff_t offset,
7333 unsigned long nr_segs)
7334{
7335 struct file *file = iocb->ki_filp;
7336 struct inode *inode = file->f_mapping->host;
7337 size_t count = 0;
7338 int flags = 0;
7339 bool wakeup = true;
7340 bool relock = false;
7341 ssize_t ret;
7342
7343 if (check_direct_IO(BTRFS_I(inode)->root, rw, iocb, iov,
7344 offset, nr_segs))
7345 return 0;
7346
7347 atomic_inc(&inode->i_dio_count);
7348 smp_mb__after_atomic_inc();
7349
7350 if (rw & WRITE) {
7351 count = iov_length(iov, nr_segs);
7352
7353
7354
7355
7356
7357 if (offset + count <= inode->i_size) {
7358 mutex_unlock(&inode->i_mutex);
7359 relock = true;
7360 }
7361 ret = btrfs_delalloc_reserve_space(inode, count);
7362 if (ret)
7363 goto out;
7364 } else if (unlikely(test_bit(BTRFS_INODE_READDIO_NEED_LOCK,
7365 &BTRFS_I(inode)->runtime_flags))) {
7366 inode_dio_done(inode);
7367 flags = DIO_LOCKING | DIO_SKIP_HOLES;
7368 wakeup = false;
7369 }
7370
7371 ret = __blockdev_direct_IO(rw, iocb, inode,
7372 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev,
7373 iov, offset, nr_segs, btrfs_get_blocks_direct, NULL,
7374 btrfs_submit_direct, flags);
7375 if (rw & WRITE) {
7376 if (ret < 0 && ret != -EIOCBQUEUED)
7377 btrfs_delalloc_release_space(inode, count);
7378 else if (ret >= 0 && (size_t)ret < count)
7379 btrfs_delalloc_release_space(inode,
7380 count - (size_t)ret);
7381 else
7382 btrfs_delalloc_release_metadata(inode, 0);
7383 }
7384out:
7385 if (wakeup)
7386 inode_dio_done(inode);
7387 if (relock)
7388 mutex_lock(&inode->i_mutex);
7389
7390 return ret;
7391}
7392
7393#define BTRFS_FIEMAP_FLAGS (FIEMAP_FLAG_SYNC)
7394
7395static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
7396 __u64 start, __u64 len)
7397{
7398 int ret;
7399
7400 ret = fiemap_check_flags(fieinfo, BTRFS_FIEMAP_FLAGS);
7401 if (ret)
7402 return ret;
7403
7404 return extent_fiemap(inode, fieinfo, start, len, btrfs_get_extent_fiemap);
7405}
7406
7407int btrfs_readpage(struct file *file, struct page *page)
7408{
7409 struct extent_io_tree *tree;
7410 tree = &BTRFS_I(page->mapping->host)->io_tree;
7411 return extent_read_full_page(tree, page, btrfs_get_extent, 0);
7412}
7413
7414static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
7415{
7416 struct extent_io_tree *tree;
7417
7418
7419 if (current->flags & PF_MEMALLOC) {
7420 redirty_page_for_writepage(wbc, page);
7421 unlock_page(page);
7422 return 0;
7423 }
7424 tree = &BTRFS_I(page->mapping->host)->io_tree;
7425 return extent_write_full_page(tree, page, btrfs_get_extent, wbc);
7426}
7427
7428int btrfs_writepages(struct address_space *mapping,
7429 struct writeback_control *wbc)
7430{
7431 struct extent_io_tree *tree;
7432
7433 tree = &BTRFS_I(mapping->host)->io_tree;
7434 return extent_writepages(tree, mapping, btrfs_get_extent, wbc);
7435}
7436
7437static int
7438btrfs_readpages(struct file *file, struct address_space *mapping,
7439 struct list_head *pages, unsigned nr_pages)
7440{
7441 struct extent_io_tree *tree;
7442 tree = &BTRFS_I(mapping->host)->io_tree;
7443 return extent_readpages(tree, mapping, pages, nr_pages,
7444 btrfs_get_extent);
7445}
7446static int __btrfs_releasepage(struct page *page, gfp_t gfp_flags)
7447{
7448 struct extent_io_tree *tree;
7449 struct extent_map_tree *map;
7450 int ret;
7451
7452 tree = &BTRFS_I(page->mapping->host)->io_tree;
7453 map = &BTRFS_I(page->mapping->host)->extent_tree;
7454 ret = try_release_extent_mapping(map, tree, page, gfp_flags);
7455 if (ret == 1) {
7456 ClearPagePrivate(page);
7457 set_page_private(page, 0);
7458 page_cache_release(page);
7459 }
7460 return ret;
7461}
7462
7463static int btrfs_releasepage(struct page *page, gfp_t gfp_flags)
7464{
7465 if (PageWriteback(page) || PageDirty(page))
7466 return 0;
7467 return __btrfs_releasepage(page, gfp_flags & GFP_NOFS);
7468}
7469
7470static void btrfs_invalidatepage(struct page *page, unsigned long offset)
7471{
7472 struct inode *inode = page->mapping->host;
7473 struct extent_io_tree *tree;
7474 struct btrfs_ordered_extent *ordered;
7475 struct extent_state *cached_state = NULL;
7476 u64 page_start = page_offset(page);
7477 u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
7478
7479
7480
7481
7482
7483
7484
7485
7486 wait_on_page_writeback(page);
7487
7488 tree = &BTRFS_I(inode)->io_tree;
7489 if (offset) {
7490 btrfs_releasepage(page, GFP_NOFS);
7491 return;
7492 }
7493 lock_extent_bits(tree, page_start, page_end, 0, &cached_state);
7494 ordered = btrfs_lookup_ordered_extent(inode, page_offset(page));
7495 if (ordered) {
7496
7497
7498
7499
7500 clear_extent_bit(tree, page_start, page_end,
7501 EXTENT_DIRTY | EXTENT_DELALLOC |
7502 EXTENT_LOCKED | EXTENT_DO_ACCOUNTING |
7503 EXTENT_DEFRAG, 1, 0, &cached_state, GFP_NOFS);
7504
7505
7506
7507
7508 if (TestClearPagePrivate2(page) &&
7509 btrfs_dec_test_ordered_pending(inode, &ordered, page_start,
7510 PAGE_CACHE_SIZE, 1)) {
7511 btrfs_finish_ordered_io(ordered);
7512 }
7513 btrfs_put_ordered_extent(ordered);
7514 cached_state = NULL;
7515 lock_extent_bits(tree, page_start, page_end, 0, &cached_state);
7516 }
7517 clear_extent_bit(tree, page_start, page_end,
7518 EXTENT_LOCKED | EXTENT_DIRTY | EXTENT_DELALLOC |
7519 EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG, 1, 1,
7520 &cached_state, GFP_NOFS);
7521 __btrfs_releasepage(page, GFP_NOFS);
7522
7523 ClearPageChecked(page);
7524 if (PagePrivate(page)) {
7525 ClearPagePrivate(page);
7526 set_page_private(page, 0);
7527 page_cache_release(page);
7528 }
7529}
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
7547{
7548 struct page *page = vmf->page;
7549 struct inode *inode = file_inode(vma->vm_file);
7550 struct btrfs_root *root = BTRFS_I(inode)->root;
7551 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
7552 struct btrfs_ordered_extent *ordered;
7553 struct extent_state *cached_state = NULL;
7554 char *kaddr;
7555 unsigned long zero_start;
7556 loff_t size;
7557 int ret;
7558 int reserved = 0;
7559 u64 page_start;
7560 u64 page_end;
7561
7562 sb_start_pagefault(inode->i_sb);
7563 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE);
7564 if (!ret) {
7565 ret = file_update_time(vma->vm_file);
7566 reserved = 1;
7567 }
7568 if (ret) {
7569 if (ret == -ENOMEM)
7570 ret = VM_FAULT_OOM;
7571 else
7572 ret = VM_FAULT_SIGBUS;
7573 if (reserved)
7574 goto out;
7575 goto out_noreserve;
7576 }
7577
7578 ret = VM_FAULT_NOPAGE;
7579again:
7580 lock_page(page);
7581 size = i_size_read(inode);
7582 page_start = page_offset(page);
7583 page_end = page_start + PAGE_CACHE_SIZE - 1;
7584
7585 if ((page->mapping != inode->i_mapping) ||
7586 (page_start >= size)) {
7587
7588 goto out_unlock;
7589 }
7590 wait_on_page_writeback(page);
7591
7592 lock_extent_bits(io_tree, page_start, page_end, 0, &cached_state);
7593 set_page_extent_mapped(page);
7594
7595
7596
7597
7598
7599 ordered = btrfs_lookup_ordered_extent(inode, page_start);
7600 if (ordered) {
7601 unlock_extent_cached(io_tree, page_start, page_end,
7602 &cached_state, GFP_NOFS);
7603 unlock_page(page);
7604 btrfs_start_ordered_extent(inode, ordered, 1);
7605 btrfs_put_ordered_extent(ordered);
7606 goto again;
7607 }
7608
7609
7610
7611
7612
7613
7614
7615
7616 clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end,
7617 EXTENT_DIRTY | EXTENT_DELALLOC |
7618 EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,
7619 0, 0, &cached_state, GFP_NOFS);
7620
7621 ret = btrfs_set_extent_delalloc(inode, page_start, page_end,
7622 &cached_state);
7623 if (ret) {
7624 unlock_extent_cached(io_tree, page_start, page_end,
7625 &cached_state, GFP_NOFS);
7626 ret = VM_FAULT_SIGBUS;
7627 goto out_unlock;
7628 }
7629 ret = 0;
7630
7631
7632 if (page_start + PAGE_CACHE_SIZE > size)
7633 zero_start = size & ~PAGE_CACHE_MASK;
7634 else
7635 zero_start = PAGE_CACHE_SIZE;
7636
7637 if (zero_start != PAGE_CACHE_SIZE) {
7638 kaddr = kmap(page);
7639 memset(kaddr + zero_start, 0, PAGE_CACHE_SIZE - zero_start);
7640 flush_dcache_page(page);
7641 kunmap(page);
7642 }
7643 ClearPageChecked(page);
7644 set_page_dirty(page);
7645 SetPageUptodate(page);
7646
7647 BTRFS_I(inode)->last_trans = root->fs_info->generation;
7648 BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid;
7649 BTRFS_I(inode)->last_log_commit = BTRFS_I(inode)->root->last_log_commit;
7650
7651 unlock_extent_cached(io_tree, page_start, page_end, &cached_state, GFP_NOFS);
7652
7653out_unlock:
7654 if (!ret) {
7655 sb_end_pagefault(inode->i_sb);
7656 return VM_FAULT_LOCKED;
7657 }
7658 unlock_page(page);
7659out:
7660 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE);
7661out_noreserve:
7662 sb_end_pagefault(inode->i_sb);
7663 return ret;
7664}
7665
7666static int btrfs_truncate(struct inode *inode)
7667{
7668 struct btrfs_root *root = BTRFS_I(inode)->root;
7669 struct btrfs_block_rsv *rsv;
7670 int ret;
7671 int err = 0;
7672 struct btrfs_trans_handle *trans;
7673 u64 mask = root->sectorsize - 1;
7674 u64 min_size = btrfs_calc_trunc_metadata_size(root, 1);
7675
7676 ret = btrfs_truncate_page(inode, inode->i_size, 0, 0);
7677 if (ret)
7678 return ret;
7679
7680 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1);
7681 btrfs_ordered_update_i_size(inode, inode->i_size, NULL);
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719 rsv = btrfs_alloc_block_rsv(root, BTRFS_BLOCK_RSV_TEMP);
7720 if (!rsv)
7721 return -ENOMEM;
7722 rsv->size = min_size;
7723 rsv->failfast = 1;
7724
7725
7726
7727
7728
7729 trans = btrfs_start_transaction(root, 2);
7730 if (IS_ERR(trans)) {
7731 err = PTR_ERR(trans);
7732 goto out;
7733 }
7734
7735
7736 ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
7737 min_size);
7738 BUG_ON(ret);
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757 if (inode->i_size == 0 && test_bit(BTRFS_INODE_ORDERED_DATA_CLOSE,
7758 &BTRFS_I(inode)->runtime_flags))
7759 btrfs_add_ordered_operation(trans, root, inode);
7760
7761
7762
7763
7764
7765
7766
7767
7768 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags);
7769 trans->block_rsv = rsv;
7770
7771 while (1) {
7772 ret = btrfs_truncate_inode_items(trans, root, inode,
7773 inode->i_size,
7774 BTRFS_EXTENT_DATA_KEY);
7775 if (ret != -ENOSPC) {
7776 err = ret;
7777 break;
7778 }
7779
7780 trans->block_rsv = &root->fs_info->trans_block_rsv;
7781 ret = btrfs_update_inode(trans, root, inode);
7782 if (ret) {
7783 err = ret;
7784 break;
7785 }
7786
7787 btrfs_end_transaction(trans, root);
7788 btrfs_btree_balance_dirty(root);
7789
7790 trans = btrfs_start_transaction(root, 2);
7791 if (IS_ERR(trans)) {
7792 ret = err = PTR_ERR(trans);
7793 trans = NULL;
7794 break;
7795 }
7796
7797 ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
7798 rsv, min_size);
7799 BUG_ON(ret);
7800 trans->block_rsv = rsv;
7801 }
7802
7803 if (ret == 0 && inode->i_nlink > 0) {
7804 trans->block_rsv = root->orphan_block_rsv;
7805 ret = btrfs_orphan_del(trans, inode);
7806 if (ret)
7807 err = ret;
7808 }
7809
7810 if (trans) {
7811 trans->block_rsv = &root->fs_info->trans_block_rsv;
7812 ret = btrfs_update_inode(trans, root, inode);
7813 if (ret && !err)
7814 err = ret;
7815
7816 ret = btrfs_end_transaction(trans, root);
7817 btrfs_btree_balance_dirty(root);
7818 }
7819
7820out:
7821 btrfs_free_block_rsv(root, rsv);
7822
7823 if (ret && !err)
7824 err = ret;
7825
7826 return err;
7827}
7828
7829
7830
7831
7832int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
7833 struct btrfs_root *new_root, u64 new_dirid)
7834{
7835 struct inode *inode;
7836 int err;
7837 u64 index = 0;
7838
7839 inode = btrfs_new_inode(trans, new_root, NULL, "..", 2,
7840 new_dirid, new_dirid,
7841 S_IFDIR | (~current_umask() & S_IRWXUGO),
7842 &index);
7843 if (IS_ERR(inode))
7844 return PTR_ERR(inode);
7845 inode->i_op = &btrfs_dir_inode_operations;
7846 inode->i_fop = &btrfs_dir_file_operations;
7847
7848 set_nlink(inode, 1);
7849 btrfs_i_size_write(inode, 0);
7850
7851 err = btrfs_update_inode(trans, new_root, inode);
7852
7853 iput(inode);
7854 return err;
7855}
7856
7857struct inode *btrfs_alloc_inode(struct super_block *sb)
7858{
7859 struct btrfs_inode *ei;
7860 struct inode *inode;
7861
7862 ei = kmem_cache_alloc(btrfs_inode_cachep, GFP_NOFS);
7863 if (!ei)
7864 return NULL;
7865
7866 ei->root = NULL;
7867 ei->generation = 0;
7868 ei->last_trans = 0;
7869 ei->last_sub_trans = 0;
7870 ei->logged_trans = 0;
7871 ei->delalloc_bytes = 0;
7872 ei->disk_i_size = 0;
7873 ei->flags = 0;
7874 ei->csum_bytes = 0;
7875 ei->index_cnt = (u64)-1;
7876 ei->last_unlink_trans = 0;
7877 ei->last_log_commit = 0;
7878
7879 spin_lock_init(&ei->lock);
7880 ei->outstanding_extents = 0;
7881 ei->reserved_extents = 0;
7882
7883 ei->runtime_flags = 0;
7884 ei->force_compress = BTRFS_COMPRESS_NONE;
7885
7886 ei->delayed_node = NULL;
7887
7888 inode = &ei->vfs_inode;
7889 extent_map_tree_init(&ei->extent_tree);
7890 extent_io_tree_init(&ei->io_tree, &inode->i_data);
7891 extent_io_tree_init(&ei->io_failure_tree, &inode->i_data);
7892 ei->io_tree.track_uptodate = 1;
7893 ei->io_failure_tree.track_uptodate = 1;
7894 atomic_set(&ei->sync_writers, 0);
7895 mutex_init(&ei->log_mutex);
7896 mutex_init(&ei->delalloc_mutex);
7897 btrfs_ordered_inode_tree_init(&ei->ordered_tree);
7898 INIT_LIST_HEAD(&ei->delalloc_inodes);
7899 INIT_LIST_HEAD(&ei->ordered_operations);
7900 RB_CLEAR_NODE(&ei->rb_node);
7901
7902 return inode;
7903}
7904
7905static void btrfs_i_callback(struct rcu_head *head)
7906{
7907 struct inode *inode = container_of(head, struct inode, i_rcu);
7908 kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode));
7909}
7910
7911void btrfs_destroy_inode(struct inode *inode)
7912{
7913 struct btrfs_ordered_extent *ordered;
7914 struct btrfs_root *root = BTRFS_I(inode)->root;
7915
7916 WARN_ON(!hlist_empty(&inode->i_dentry));
7917 WARN_ON(inode->i_data.nrpages);
7918 WARN_ON(BTRFS_I(inode)->outstanding_extents);
7919 WARN_ON(BTRFS_I(inode)->reserved_extents);
7920 WARN_ON(BTRFS_I(inode)->delalloc_bytes);
7921 WARN_ON(BTRFS_I(inode)->csum_bytes);
7922
7923
7924
7925
7926
7927
7928 if (!root)
7929 goto free;
7930
7931
7932
7933
7934
7935 smp_mb();
7936 if (!list_empty(&BTRFS_I(inode)->ordered_operations)) {
7937 spin_lock(&root->fs_info->ordered_extent_lock);
7938 list_del_init(&BTRFS_I(inode)->ordered_operations);
7939 spin_unlock(&root->fs_info->ordered_extent_lock);
7940 }
7941
7942 if (test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
7943 &BTRFS_I(inode)->runtime_flags)) {
7944 printk(KERN_INFO "BTRFS: inode %llu still on the orphan list\n",
7945 (unsigned long long)btrfs_ino(inode));
7946 atomic_dec(&root->orphan_inodes);
7947 }
7948
7949 while (1) {
7950 ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);
7951 if (!ordered)
7952 break;
7953 else {
7954 printk(KERN_ERR "btrfs found ordered "
7955 "extent %llu %llu on inode cleanup\n",
7956 (unsigned long long)ordered->file_offset,
7957 (unsigned long long)ordered->len);
7958 btrfs_remove_ordered_extent(inode, ordered);
7959 btrfs_put_ordered_extent(ordered);
7960 btrfs_put_ordered_extent(ordered);
7961 }
7962 }
7963 inode_tree_del(inode);
7964 btrfs_drop_extent_cache(inode, 0, (u64)-1, 0);
7965free:
7966 btrfs_remove_delayed_node(inode);
7967 call_rcu(&inode->i_rcu, btrfs_i_callback);
7968}
7969
7970int btrfs_drop_inode(struct inode *inode)
7971{
7972 struct btrfs_root *root = BTRFS_I(inode)->root;
7973
7974
7975 if (btrfs_root_refs(&root->root_item) == 0 &&
7976 root != root->fs_info->tree_root)
7977 return 1;
7978 else
7979 return generic_drop_inode(inode);
7980}
7981
7982static void init_once(void *foo)
7983{
7984 struct btrfs_inode *ei = (struct btrfs_inode *) foo;
7985
7986 inode_init_once(&ei->vfs_inode);
7987}
7988
7989void btrfs_destroy_cachep(void)
7990{
7991
7992
7993
7994
7995 rcu_barrier();
7996 if (btrfs_inode_cachep)
7997 kmem_cache_destroy(btrfs_inode_cachep);
7998 if (btrfs_trans_handle_cachep)
7999 kmem_cache_destroy(btrfs_trans_handle_cachep);
8000 if (btrfs_transaction_cachep)
8001 kmem_cache_destroy(btrfs_transaction_cachep);
8002 if (btrfs_path_cachep)
8003 kmem_cache_destroy(btrfs_path_cachep);
8004 if (btrfs_free_space_cachep)
8005 kmem_cache_destroy(btrfs_free_space_cachep);
8006 if (btrfs_delalloc_work_cachep)
8007 kmem_cache_destroy(btrfs_delalloc_work_cachep);
8008}
8009
8010int btrfs_init_cachep(void)
8011{
8012 btrfs_inode_cachep = kmem_cache_create("btrfs_inode",
8013 sizeof(struct btrfs_inode), 0,
8014 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, init_once);
8015 if (!btrfs_inode_cachep)
8016 goto fail;
8017
8018 btrfs_trans_handle_cachep = kmem_cache_create("btrfs_trans_handle",
8019 sizeof(struct btrfs_trans_handle), 0,
8020 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
8021 if (!btrfs_trans_handle_cachep)
8022 goto fail;
8023
8024 btrfs_transaction_cachep = kmem_cache_create("btrfs_transaction",
8025 sizeof(struct btrfs_transaction), 0,
8026 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
8027 if (!btrfs_transaction_cachep)
8028 goto fail;
8029
8030 btrfs_path_cachep = kmem_cache_create("btrfs_path",
8031 sizeof(struct btrfs_path), 0,
8032 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
8033 if (!btrfs_path_cachep)
8034 goto fail;
8035
8036 btrfs_free_space_cachep = kmem_cache_create("btrfs_free_space",
8037 sizeof(struct btrfs_free_space), 0,
8038 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
8039 if (!btrfs_free_space_cachep)
8040 goto fail;
8041
8042 btrfs_delalloc_work_cachep = kmem_cache_create("btrfs_delalloc_work",
8043 sizeof(struct btrfs_delalloc_work), 0,
8044 SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD,
8045 NULL);
8046 if (!btrfs_delalloc_work_cachep)
8047 goto fail;
8048
8049 return 0;
8050fail:
8051 btrfs_destroy_cachep();
8052 return -ENOMEM;
8053}
8054
8055static int btrfs_getattr(struct vfsmount *mnt,
8056 struct dentry *dentry, struct kstat *stat)
8057{
8058 u64 delalloc_bytes;
8059 struct inode *inode = dentry->d_inode;
8060 u32 blocksize = inode->i_sb->s_blocksize;
8061
8062 generic_fillattr(inode, stat);
8063 stat->dev = BTRFS_I(inode)->root->anon_dev;
8064 stat->blksize = PAGE_CACHE_SIZE;
8065
8066 spin_lock(&BTRFS_I(inode)->lock);
8067 delalloc_bytes = BTRFS_I(inode)->delalloc_bytes;
8068 spin_unlock(&BTRFS_I(inode)->lock);
8069 stat->blocks = (ALIGN(inode_get_bytes(inode), blocksize) +
8070 ALIGN(delalloc_bytes, blocksize)) >> 9;
8071 return 0;
8072}
8073
8074static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
8075 struct inode *new_dir, struct dentry *new_dentry)
8076{
8077 struct btrfs_trans_handle *trans;
8078 struct btrfs_root *root = BTRFS_I(old_dir)->root;
8079 struct btrfs_root *dest = BTRFS_I(new_dir)->root;
8080 struct inode *new_inode = new_dentry->d_inode;
8081 struct inode *old_inode = old_dentry->d_inode;
8082 struct timespec ctime = CURRENT_TIME;
8083 u64 index = 0;
8084 u64 root_objectid;
8085 int ret;
8086 u64 old_ino = btrfs_ino(old_inode);
8087
8088 if (btrfs_ino(new_dir) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
8089 return -EPERM;
8090
8091
8092 if (old_ino != BTRFS_FIRST_FREE_OBJECTID && root != dest)
8093 return -EXDEV;
8094
8095 if (old_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID ||
8096 (new_inode && btrfs_ino(new_inode) == BTRFS_FIRST_FREE_OBJECTID))
8097 return -ENOTEMPTY;
8098
8099 if (S_ISDIR(old_inode->i_mode) && new_inode &&
8100 new_inode->i_size > BTRFS_EMPTY_DIR_SIZE)
8101 return -ENOTEMPTY;
8102
8103
8104
8105 ret = btrfs_check_dir_item_collision(root, new_dir->i_ino,
8106 new_dentry->d_name.name,
8107 new_dentry->d_name.len);
8108
8109 if (ret) {
8110 if (ret == -EEXIST) {
8111
8112
8113 if (!new_inode) {
8114 WARN_ON(1);
8115 return ret;
8116 }
8117 } else {
8118
8119 return ret;
8120 }
8121 }
8122 ret = 0;
8123
8124
8125
8126
8127
8128
8129 if (new_inode && S_ISREG(old_inode->i_mode) && new_inode->i_size &&
8130 old_inode->i_size > BTRFS_ORDERED_OPERATIONS_FLUSH_LIMIT)
8131 filemap_flush(old_inode->i_mapping);
8132
8133
8134 if (old_ino == BTRFS_FIRST_FREE_OBJECTID)
8135 down_read(&root->fs_info->subvol_sem);
8136
8137
8138
8139
8140
8141
8142
8143
8144 trans = btrfs_start_transaction(root, 11);
8145 if (IS_ERR(trans)) {
8146 ret = PTR_ERR(trans);
8147 goto out_notrans;
8148 }
8149
8150 if (dest != root)
8151 btrfs_record_root_in_trans(trans, dest);
8152
8153 ret = btrfs_set_inode_index(new_dir, &index);
8154 if (ret)
8155 goto out_fail;
8156
8157 if (unlikely(old_ino == BTRFS_FIRST_FREE_OBJECTID)) {
8158
8159 root->fs_info->last_trans_log_full_commit = trans->transid;
8160 } else {
8161 ret = btrfs_insert_inode_ref(trans, dest,
8162 new_dentry->d_name.name,
8163 new_dentry->d_name.len,
8164 old_ino,
8165 btrfs_ino(new_dir), index);
8166 if (ret)
8167 goto out_fail;
8168
8169
8170
8171
8172
8173
8174
8175 btrfs_pin_log_trans(root);
8176 }
8177
8178
8179
8180
8181 if (new_inode && new_inode->i_size && S_ISREG(old_inode->i_mode))
8182 btrfs_add_ordered_operation(trans, root, old_inode);
8183
8184 inode_inc_iversion(old_dir);
8185 inode_inc_iversion(new_dir);
8186 inode_inc_iversion(old_inode);
8187 old_dir->i_ctime = old_dir->i_mtime = ctime;
8188 new_dir->i_ctime = new_dir->i_mtime = ctime;
8189 old_inode->i_ctime = ctime;
8190
8191 if (old_dentry->d_parent != new_dentry->d_parent)
8192 btrfs_record_unlink_dir(trans, old_dir, old_inode, 1);
8193
8194 if (unlikely(old_ino == BTRFS_FIRST_FREE_OBJECTID)) {
8195 root_objectid = BTRFS_I(old_inode)->root->root_key.objectid;
8196 ret = btrfs_unlink_subvol(trans, root, old_dir, root_objectid,
8197 old_dentry->d_name.name,
8198 old_dentry->d_name.len);
8199 } else {
8200 ret = __btrfs_unlink_inode(trans, root, old_dir,
8201 old_dentry->d_inode,
8202 old_dentry->d_name.name,
8203 old_dentry->d_name.len);
8204 if (!ret)
8205 ret = btrfs_update_inode(trans, root, old_inode);
8206 }
8207 if (ret) {
8208 btrfs_abort_transaction(trans, root, ret);
8209 goto out_fail;
8210 }
8211
8212 if (new_inode) {
8213 inode_inc_iversion(new_inode);
8214 new_inode->i_ctime = CURRENT_TIME;
8215 if (unlikely(btrfs_ino(new_inode) ==
8216 BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
8217 root_objectid = BTRFS_I(new_inode)->location.objectid;
8218 ret = btrfs_unlink_subvol(trans, dest, new_dir,
8219 root_objectid,
8220 new_dentry->d_name.name,
8221 new_dentry->d_name.len);
8222 BUG_ON(new_inode->i_nlink == 0);
8223 } else {
8224 ret = btrfs_unlink_inode(trans, dest, new_dir,
8225 new_dentry->d_inode,
8226 new_dentry->d_name.name,
8227 new_dentry->d_name.len);
8228 }
8229 if (!ret && new_inode->i_nlink == 0) {
8230 ret = btrfs_orphan_add(trans, new_dentry->d_inode);
8231 BUG_ON(ret);
8232 }
8233 if (ret) {
8234 btrfs_abort_transaction(trans, root, ret);
8235 goto out_fail;
8236 }
8237 }
8238
8239 ret = btrfs_add_link(trans, new_dir, old_inode,
8240 new_dentry->d_name.name,
8241 new_dentry->d_name.len, 0, index);
8242 if (ret) {
8243 btrfs_abort_transaction(trans, root, ret);
8244 goto out_fail;
8245 }
8246
8247 if (old_ino != BTRFS_FIRST_FREE_OBJECTID) {
8248 struct dentry *parent = new_dentry->d_parent;
8249 btrfs_log_new_name(trans, old_inode, old_dir, parent);
8250 btrfs_end_log_trans(root);
8251 }
8252out_fail:
8253 btrfs_end_transaction(trans, root);
8254out_notrans:
8255 if (old_ino == BTRFS_FIRST_FREE_OBJECTID)
8256 up_read(&root->fs_info->subvol_sem);
8257
8258 return ret;
8259}
8260
8261static void btrfs_run_delalloc_work(struct btrfs_work *work)
8262{
8263 struct btrfs_delalloc_work *delalloc_work;
8264
8265 delalloc_work = container_of(work, struct btrfs_delalloc_work,
8266 work);
8267 if (delalloc_work->wait)
8268 btrfs_wait_ordered_range(delalloc_work->inode, 0, (u64)-1);
8269 else
8270 filemap_flush(delalloc_work->inode->i_mapping);
8271
8272 if (delalloc_work->delay_iput)
8273 btrfs_add_delayed_iput(delalloc_work->inode);
8274 else
8275 iput(delalloc_work->inode);
8276 complete(&delalloc_work->completion);
8277}
8278
8279struct btrfs_delalloc_work *btrfs_alloc_delalloc_work(struct inode *inode,
8280 int wait, int delay_iput)
8281{
8282 struct btrfs_delalloc_work *work;
8283
8284 work = kmem_cache_zalloc(btrfs_delalloc_work_cachep, GFP_NOFS);
8285 if (!work)
8286 return NULL;
8287
8288 init_completion(&work->completion);
8289 INIT_LIST_HEAD(&work->list);
8290 work->inode = inode;
8291 work->wait = wait;
8292 work->delay_iput = delay_iput;
8293 work->work.func = btrfs_run_delalloc_work;
8294
8295 return work;
8296}
8297
8298void btrfs_wait_and_free_delalloc_work(struct btrfs_delalloc_work *work)
8299{
8300 wait_for_completion(&work->completion);
8301 kmem_cache_free(btrfs_delalloc_work_cachep, work);
8302}
8303
8304
8305
8306
8307
8308int btrfs_start_delalloc_inodes(struct btrfs_root *root, int delay_iput)
8309{
8310 struct btrfs_inode *binode;
8311 struct inode *inode;
8312 struct btrfs_delalloc_work *work, *next;
8313 struct list_head works;
8314 struct list_head splice;
8315 int ret = 0;
8316
8317 if (root->fs_info->sb->s_flags & MS_RDONLY)
8318 return -EROFS;
8319
8320 INIT_LIST_HEAD(&works);
8321 INIT_LIST_HEAD(&splice);
8322
8323 spin_lock(&root->fs_info->delalloc_lock);
8324 list_splice_init(&root->fs_info->delalloc_inodes, &splice);
8325 while (!list_empty(&splice)) {
8326 binode = list_entry(splice.next, struct btrfs_inode,
8327 delalloc_inodes);
8328
8329 list_del_init(&binode->delalloc_inodes);
8330
8331 inode = igrab(&binode->vfs_inode);
8332 if (!inode) {
8333 clear_bit(BTRFS_INODE_IN_DELALLOC_LIST,
8334 &binode->runtime_flags);
8335 continue;
8336 }
8337
8338 list_add_tail(&binode->delalloc_inodes,
8339 &root->fs_info->delalloc_inodes);
8340 spin_unlock(&root->fs_info->delalloc_lock);
8341
8342 work = btrfs_alloc_delalloc_work(inode, 0, delay_iput);
8343 if (unlikely(!work)) {
8344 ret = -ENOMEM;
8345 goto out;
8346 }
8347 list_add_tail(&work->list, &works);
8348 btrfs_queue_worker(&root->fs_info->flush_workers,
8349 &work->work);
8350
8351 cond_resched();
8352 spin_lock(&root->fs_info->delalloc_lock);
8353 }
8354 spin_unlock(&root->fs_info->delalloc_lock);
8355
8356 list_for_each_entry_safe(work, next, &works, list) {
8357 list_del_init(&work->list);
8358 btrfs_wait_and_free_delalloc_work(work);
8359 }
8360
8361
8362
8363
8364
8365 atomic_inc(&root->fs_info->async_submit_draining);
8366 while (atomic_read(&root->fs_info->nr_async_submits) ||
8367 atomic_read(&root->fs_info->async_delalloc_pages)) {
8368 wait_event(root->fs_info->async_submit_wait,
8369 (atomic_read(&root->fs_info->nr_async_submits) == 0 &&
8370 atomic_read(&root->fs_info->async_delalloc_pages) == 0));
8371 }
8372 atomic_dec(&root->fs_info->async_submit_draining);
8373 return 0;
8374out:
8375 list_for_each_entry_safe(work, next, &works, list) {
8376 list_del_init(&work->list);
8377 btrfs_wait_and_free_delalloc_work(work);
8378 }
8379
8380 if (!list_empty_careful(&splice)) {
8381 spin_lock(&root->fs_info->delalloc_lock);
8382 list_splice_tail(&splice, &root->fs_info->delalloc_inodes);
8383 spin_unlock(&root->fs_info->delalloc_lock);
8384 }
8385 return ret;
8386}
8387
8388static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
8389 const char *symname)
8390{
8391 struct btrfs_trans_handle *trans;
8392 struct btrfs_root *root = BTRFS_I(dir)->root;
8393 struct btrfs_path *path;
8394 struct btrfs_key key;
8395 struct inode *inode = NULL;
8396 int err;
8397 int drop_inode = 0;
8398 u64 objectid;
8399 u64 index = 0 ;
8400 int name_len;
8401 int datasize;
8402 unsigned long ptr;
8403 struct btrfs_file_extent_item *ei;
8404 struct extent_buffer *leaf;
8405
8406 name_len = strlen(symname) + 1;
8407 if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root))
8408 return -ENAMETOOLONG;
8409
8410
8411
8412
8413
8414
8415 trans = btrfs_start_transaction(root, 5);
8416 if (IS_ERR(trans))
8417 return PTR_ERR(trans);
8418
8419 err = btrfs_find_free_ino(root, &objectid);
8420 if (err)
8421 goto out_unlock;
8422
8423 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
8424 dentry->d_name.len, btrfs_ino(dir), objectid,
8425 S_IFLNK|S_IRWXUGO, &index);
8426 if (IS_ERR(inode)) {
8427 err = PTR_ERR(inode);
8428 goto out_unlock;
8429 }
8430
8431 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
8432 if (err) {
8433 drop_inode = 1;
8434 goto out_unlock;
8435 }
8436
8437
8438
8439
8440
8441
8442
8443 inode->i_fop = &btrfs_file_operations;
8444 inode->i_op = &btrfs_file_inode_operations;
8445
8446 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
8447 if (err)
8448 drop_inode = 1;
8449 else {
8450 inode->i_mapping->a_ops = &btrfs_aops;
8451 inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
8452 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
8453 }
8454 if (drop_inode)
8455 goto out_unlock;
8456
8457 path = btrfs_alloc_path();
8458 if (!path) {
8459 err = -ENOMEM;
8460 drop_inode = 1;
8461 goto out_unlock;
8462 }
8463 key.objectid = btrfs_ino(inode);
8464 key.offset = 0;
8465 btrfs_set_key_type(&key, BTRFS_EXTENT_DATA_KEY);
8466 datasize = btrfs_file_extent_calc_inline_size(name_len);
8467 err = btrfs_insert_empty_item(trans, root, path, &key,
8468 datasize);
8469 if (err) {
8470 drop_inode = 1;
8471 btrfs_free_path(path);
8472 goto out_unlock;
8473 }
8474 leaf = path->nodes[0];
8475 ei = btrfs_item_ptr(leaf, path->slots[0],
8476 struct btrfs_file_extent_item);
8477 btrfs_set_file_extent_generation(leaf, ei, trans->transid);
8478 btrfs_set_file_extent_type(leaf, ei,
8479 BTRFS_FILE_EXTENT_INLINE);
8480 btrfs_set_file_extent_encryption(leaf, ei, 0);
8481 btrfs_set_file_extent_compression(leaf, ei, 0);
8482 btrfs_set_file_extent_other_encoding(leaf, ei, 0);
8483 btrfs_set_file_extent_ram_bytes(leaf, ei, name_len);
8484
8485 ptr = btrfs_file_extent_inline_start(ei);
8486 write_extent_buffer(leaf, symname, ptr, name_len);
8487 btrfs_mark_buffer_dirty(leaf);
8488 btrfs_free_path(path);
8489
8490 inode->i_op = &btrfs_symlink_inode_operations;
8491 inode->i_mapping->a_ops = &btrfs_symlink_aops;
8492 inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
8493 inode_set_bytes(inode, name_len);
8494 btrfs_i_size_write(inode, name_len - 1);
8495 err = btrfs_update_inode(trans, root, inode);
8496 if (err)
8497 drop_inode = 1;
8498
8499out_unlock:
8500 if (!err)
8501 d_instantiate(dentry, inode);
8502 btrfs_end_transaction(trans, root);
8503 if (drop_inode) {
8504 inode_dec_link_count(inode);
8505 iput(inode);
8506 }
8507 btrfs_btree_balance_dirty(root);
8508 return err;
8509}
8510
8511static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
8512 u64 start, u64 num_bytes, u64 min_size,
8513 loff_t actual_len, u64 *alloc_hint,
8514 struct btrfs_trans_handle *trans)
8515{
8516 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
8517 struct extent_map *em;
8518 struct btrfs_root *root = BTRFS_I(inode)->root;
8519 struct btrfs_key ins;
8520 u64 cur_offset = start;
8521 u64 i_size;
8522 u64 cur_bytes;
8523 int ret = 0;
8524 bool own_trans = true;
8525
8526 if (trans)
8527 own_trans = false;
8528 while (num_bytes > 0) {
8529 if (own_trans) {
8530 trans = btrfs_start_transaction(root, 3);
8531 if (IS_ERR(trans)) {
8532 ret = PTR_ERR(trans);
8533 break;
8534 }
8535 }
8536
8537 cur_bytes = min(num_bytes, 256ULL * 1024 * 1024);
8538 cur_bytes = max(cur_bytes, min_size);
8539 ret = btrfs_reserve_extent(trans, root, cur_bytes,
8540 min_size, 0, *alloc_hint, &ins, 1);
8541 if (ret) {
8542 if (own_trans)
8543 btrfs_end_transaction(trans, root);
8544 break;
8545 }
8546
8547 ret = insert_reserved_file_extent(trans, inode,
8548 cur_offset, ins.objectid,
8549 ins.offset, ins.offset,
8550 ins.offset, 0, 0, 0,
8551 BTRFS_FILE_EXTENT_PREALLOC);
8552 if (ret) {
8553 btrfs_abort_transaction(trans, root, ret);
8554 if (own_trans)
8555 btrfs_end_transaction(trans, root);
8556 break;
8557 }
8558 btrfs_drop_extent_cache(inode, cur_offset,
8559 cur_offset + ins.offset -1, 0);
8560
8561 em = alloc_extent_map();
8562 if (!em) {
8563 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
8564 &BTRFS_I(inode)->runtime_flags);
8565 goto next;
8566 }
8567
8568 em->start = cur_offset;
8569 em->orig_start = cur_offset;
8570 em->len = ins.offset;
8571 em->block_start = ins.objectid;
8572 em->block_len = ins.offset;
8573 em->orig_block_len = ins.offset;
8574 em->bdev = root->fs_info->fs_devices->latest_bdev;
8575 set_bit(EXTENT_FLAG_PREALLOC, &em->flags);
8576 em->generation = trans->transid;
8577
8578 while (1) {
8579 write_lock(&em_tree->lock);
8580 ret = add_extent_mapping(em_tree, em);
8581 if (!ret)
8582 list_move(&em->list,
8583 &em_tree->modified_extents);
8584 write_unlock(&em_tree->lock);
8585 if (ret != -EEXIST)
8586 break;
8587 btrfs_drop_extent_cache(inode, cur_offset,
8588 cur_offset + ins.offset - 1,
8589 0);
8590 }
8591 free_extent_map(em);
8592next:
8593 num_bytes -= ins.offset;
8594 cur_offset += ins.offset;
8595 *alloc_hint = ins.objectid + ins.offset;
8596
8597 inode_inc_iversion(inode);
8598 inode->i_ctime = CURRENT_TIME;
8599 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC;
8600 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
8601 (actual_len > inode->i_size) &&
8602 (cur_offset > inode->i_size)) {
8603 if (cur_offset > actual_len)
8604 i_size = actual_len;
8605 else
8606 i_size = cur_offset;
8607 i_size_write(inode, i_size);
8608 btrfs_ordered_update_i_size(inode, i_size, NULL);
8609 }
8610
8611 ret = btrfs_update_inode(trans, root, inode);
8612
8613 if (ret) {
8614 btrfs_abort_transaction(trans, root, ret);
8615 if (own_trans)
8616 btrfs_end_transaction(trans, root);
8617 break;
8618 }
8619
8620 if (own_trans)
8621 btrfs_end_transaction(trans, root);
8622 }
8623 return ret;
8624}
8625
8626int btrfs_prealloc_file_range(struct inode *inode, int mode,
8627 u64 start, u64 num_bytes, u64 min_size,
8628 loff_t actual_len, u64 *alloc_hint)
8629{
8630 return __btrfs_prealloc_file_range(inode, mode, start, num_bytes,
8631 min_size, actual_len, alloc_hint,
8632 NULL);
8633}
8634
8635int btrfs_prealloc_file_range_trans(struct inode *inode,
8636 struct btrfs_trans_handle *trans, int mode,
8637 u64 start, u64 num_bytes, u64 min_size,
8638 loff_t actual_len, u64 *alloc_hint)
8639{
8640 return __btrfs_prealloc_file_range(inode, mode, start, num_bytes,
8641 min_size, actual_len, alloc_hint, trans);
8642}
8643
8644static int btrfs_set_page_dirty(struct page *page)
8645{
8646 return __set_page_dirty_nobuffers(page);
8647}
8648
8649static int btrfs_permission(struct inode *inode, int mask)
8650{
8651 struct btrfs_root *root = BTRFS_I(inode)->root;
8652 umode_t mode = inode->i_mode;
8653
8654 if (mask & MAY_WRITE &&
8655 (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) {
8656 if (btrfs_root_readonly(root))
8657 return -EROFS;
8658 if (BTRFS_I(inode)->flags & BTRFS_INODE_READONLY)
8659 return -EACCES;
8660 }
8661 return generic_permission(inode, mask);
8662}
8663
8664static const struct inode_operations btrfs_dir_inode_operations = {
8665 .getattr = btrfs_getattr,
8666 .lookup = btrfs_lookup,
8667 .create = btrfs_create,
8668 .unlink = btrfs_unlink,
8669 .link = btrfs_link,
8670 .mkdir = btrfs_mkdir,
8671 .rmdir = btrfs_rmdir,
8672 .rename = btrfs_rename,
8673 .symlink = btrfs_symlink,
8674 .setattr = btrfs_setattr,
8675 .mknod = btrfs_mknod,
8676 .setxattr = btrfs_setxattr,
8677 .getxattr = btrfs_getxattr,
8678 .listxattr = btrfs_listxattr,
8679 .removexattr = btrfs_removexattr,
8680 .permission = btrfs_permission,
8681 .get_acl = btrfs_get_acl,
8682};
8683static const struct inode_operations btrfs_dir_ro_inode_operations = {
8684 .lookup = btrfs_lookup,
8685 .permission = btrfs_permission,
8686 .get_acl = btrfs_get_acl,
8687};
8688
8689static const struct file_operations btrfs_dir_file_operations = {
8690 .llseek = generic_file_llseek,
8691 .read = generic_read_dir,
8692 .readdir = btrfs_real_readdir,
8693 .unlocked_ioctl = btrfs_ioctl,
8694#ifdef CONFIG_COMPAT
8695 .compat_ioctl = btrfs_ioctl,
8696#endif
8697 .release = btrfs_release_file,
8698 .fsync = btrfs_sync_file,
8699};
8700
8701static struct extent_io_ops btrfs_extent_io_ops = {
8702 .fill_delalloc = run_delalloc_range,
8703 .submit_bio_hook = btrfs_submit_bio_hook,
8704 .merge_bio_hook = btrfs_merge_bio_hook,
8705 .readpage_end_io_hook = btrfs_readpage_end_io_hook,
8706 .writepage_end_io_hook = btrfs_writepage_end_io_hook,
8707 .writepage_start_hook = btrfs_writepage_start_hook,
8708 .set_bit_hook = btrfs_set_bit_hook,
8709 .clear_bit_hook = btrfs_clear_bit_hook,
8710 .merge_extent_hook = btrfs_merge_extent_hook,
8711 .split_extent_hook = btrfs_split_extent_hook,
8712};
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726static const struct address_space_operations btrfs_aops = {
8727 .readpage = btrfs_readpage,
8728 .writepage = btrfs_writepage,
8729 .writepages = btrfs_writepages,
8730 .readpages = btrfs_readpages,
8731 .direct_IO = btrfs_direct_IO,
8732 .invalidatepage = btrfs_invalidatepage,
8733 .releasepage = btrfs_releasepage,
8734 .set_page_dirty = btrfs_set_page_dirty,
8735 .error_remove_page = generic_error_remove_page,
8736};
8737
8738static const struct address_space_operations btrfs_symlink_aops = {
8739 .readpage = btrfs_readpage,
8740 .writepage = btrfs_writepage,
8741 .invalidatepage = btrfs_invalidatepage,
8742 .releasepage = btrfs_releasepage,
8743};
8744
8745static const struct inode_operations btrfs_file_inode_operations = {
8746 .getattr = btrfs_getattr,
8747 .setattr = btrfs_setattr,
8748 .setxattr = btrfs_setxattr,
8749 .getxattr = btrfs_getxattr,
8750 .listxattr = btrfs_listxattr,
8751 .removexattr = btrfs_removexattr,
8752 .permission = btrfs_permission,
8753 .fiemap = btrfs_fiemap,
8754 .get_acl = btrfs_get_acl,
8755 .update_time = btrfs_update_time,
8756};
8757static const struct inode_operations btrfs_special_inode_operations = {
8758 .getattr = btrfs_getattr,
8759 .setattr = btrfs_setattr,
8760 .permission = btrfs_permission,
8761 .setxattr = btrfs_setxattr,
8762 .getxattr = btrfs_getxattr,
8763 .listxattr = btrfs_listxattr,
8764 .removexattr = btrfs_removexattr,
8765 .get_acl = btrfs_get_acl,
8766 .update_time = btrfs_update_time,
8767};
8768static const struct inode_operations btrfs_symlink_inode_operations = {
8769 .readlink = generic_readlink,
8770 .follow_link = page_follow_link_light,
8771 .put_link = page_put_link,
8772 .getattr = btrfs_getattr,
8773 .setattr = btrfs_setattr,
8774 .permission = btrfs_permission,
8775 .setxattr = btrfs_setxattr,
8776 .getxattr = btrfs_getxattr,
8777 .listxattr = btrfs_listxattr,
8778 .removexattr = btrfs_removexattr,
8779 .get_acl = btrfs_get_acl,
8780 .update_time = btrfs_update_time,
8781};
8782
8783const struct dentry_operations btrfs_dentry_operations = {
8784 .d_delete = btrfs_dentry_delete,
8785 .d_release = btrfs_dentry_release,
8786};
8787