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