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