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