GNU Linux-libre 6.1.90-gnu
[releases.git] / fs / btrfs / file.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2007 Oracle.  All rights reserved.
4  */
5
6 #include <linux/fs.h>
7 #include <linux/pagemap.h>
8 #include <linux/time.h>
9 #include <linux/init.h>
10 #include <linux/string.h>
11 #include <linux/backing-dev.h>
12 #include <linux/falloc.h>
13 #include <linux/writeback.h>
14 #include <linux/compat.h>
15 #include <linux/slab.h>
16 #include <linux/btrfs.h>
17 #include <linux/uio.h>
18 #include <linux/iversion.h>
19 #include <linux/fsverity.h>
20 #include "ctree.h"
21 #include "disk-io.h"
22 #include "transaction.h"
23 #include "btrfs_inode.h"
24 #include "print-tree.h"
25 #include "tree-log.h"
26 #include "locking.h"
27 #include "volumes.h"
28 #include "qgroup.h"
29 #include "compression.h"
30 #include "delalloc-space.h"
31 #include "reflink.h"
32 #include "subpage.h"
33
34 /* simple helper to fault in pages and copy.  This should go away
35  * and be replaced with calls into generic code.
36  */
37 static noinline int btrfs_copy_from_user(loff_t pos, size_t write_bytes,
38                                          struct page **prepared_pages,
39                                          struct iov_iter *i)
40 {
41         size_t copied = 0;
42         size_t total_copied = 0;
43         int pg = 0;
44         int offset = offset_in_page(pos);
45
46         while (write_bytes > 0) {
47                 size_t count = min_t(size_t,
48                                      PAGE_SIZE - offset, write_bytes);
49                 struct page *page = prepared_pages[pg];
50                 /*
51                  * Copy data from userspace to the current page
52                  */
53                 copied = copy_page_from_iter_atomic(page, offset, count, i);
54
55                 /* Flush processor's dcache for this page */
56                 flush_dcache_page(page);
57
58                 /*
59                  * if we get a partial write, we can end up with
60                  * partially up to date pages.  These add
61                  * a lot of complexity, so make sure they don't
62                  * happen by forcing this copy to be retried.
63                  *
64                  * The rest of the btrfs_file_write code will fall
65                  * back to page at a time copies after we return 0.
66                  */
67                 if (unlikely(copied < count)) {
68                         if (!PageUptodate(page)) {
69                                 iov_iter_revert(i, copied);
70                                 copied = 0;
71                         }
72                         if (!copied)
73                                 break;
74                 }
75
76                 write_bytes -= copied;
77                 total_copied += copied;
78                 offset += copied;
79                 if (offset == PAGE_SIZE) {
80                         pg++;
81                         offset = 0;
82                 }
83         }
84         return total_copied;
85 }
86
87 /*
88  * unlocks pages after btrfs_file_write is done with them
89  */
90 static void btrfs_drop_pages(struct btrfs_fs_info *fs_info,
91                              struct page **pages, size_t num_pages,
92                              u64 pos, u64 copied)
93 {
94         size_t i;
95         u64 block_start = round_down(pos, fs_info->sectorsize);
96         u64 block_len = round_up(pos + copied, fs_info->sectorsize) - block_start;
97
98         ASSERT(block_len <= U32_MAX);
99         for (i = 0; i < num_pages; i++) {
100                 /* page checked is some magic around finding pages that
101                  * have been modified without going through btrfs_set_page_dirty
102                  * clear it here. There should be no need to mark the pages
103                  * accessed as prepare_pages should have marked them accessed
104                  * in prepare_pages via find_or_create_page()
105                  */
106                 btrfs_page_clamp_clear_checked(fs_info, pages[i], block_start,
107                                                block_len);
108                 unlock_page(pages[i]);
109                 put_page(pages[i]);
110         }
111 }
112
113 /*
114  * After btrfs_copy_from_user(), update the following things for delalloc:
115  * - Mark newly dirtied pages as DELALLOC in the io tree.
116  *   Used to advise which range is to be written back.
117  * - Mark modified pages as Uptodate/Dirty and not needing COW fixup
118  * - Update inode size for past EOF write
119  */
120 int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
121                       size_t num_pages, loff_t pos, size_t write_bytes,
122                       struct extent_state **cached, bool noreserve)
123 {
124         struct btrfs_fs_info *fs_info = inode->root->fs_info;
125         int err = 0;
126         int i;
127         u64 num_bytes;
128         u64 start_pos;
129         u64 end_of_last_block;
130         u64 end_pos = pos + write_bytes;
131         loff_t isize = i_size_read(&inode->vfs_inode);
132         unsigned int extra_bits = 0;
133
134         if (write_bytes == 0)
135                 return 0;
136
137         if (noreserve)
138                 extra_bits |= EXTENT_NORESERVE;
139
140         start_pos = round_down(pos, fs_info->sectorsize);
141         num_bytes = round_up(write_bytes + pos - start_pos,
142                              fs_info->sectorsize);
143         ASSERT(num_bytes <= U32_MAX);
144
145         end_of_last_block = start_pos + num_bytes - 1;
146
147         /*
148          * The pages may have already been dirty, clear out old accounting so
149          * we can set things up properly
150          */
151         clear_extent_bit(&inode->io_tree, start_pos, end_of_last_block,
152                          EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,
153                          cached);
154
155         err = btrfs_set_extent_delalloc(inode, start_pos, end_of_last_block,
156                                         extra_bits, cached);
157         if (err)
158                 return err;
159
160         for (i = 0; i < num_pages; i++) {
161                 struct page *p = pages[i];
162
163                 btrfs_page_clamp_set_uptodate(fs_info, p, start_pos, num_bytes);
164                 btrfs_page_clamp_clear_checked(fs_info, p, start_pos, num_bytes);
165                 btrfs_page_clamp_set_dirty(fs_info, p, start_pos, num_bytes);
166         }
167
168         /*
169          * we've only changed i_size in ram, and we haven't updated
170          * the disk i_size.  There is no need to log the inode
171          * at this time.
172          */
173         if (end_pos > isize)
174                 i_size_write(&inode->vfs_inode, end_pos);
175         return 0;
176 }
177
178 /*
179  * this is very complex, but the basic idea is to drop all extents
180  * in the range start - end.  hint_block is filled in with a block number
181  * that would be a good hint to the block allocator for this file.
182  *
183  * If an extent intersects the range but is not entirely inside the range
184  * it is either truncated or split.  Anything entirely inside the range
185  * is deleted from the tree.
186  *
187  * Note: the VFS' inode number of bytes is not updated, it's up to the caller
188  * to deal with that. We set the field 'bytes_found' of the arguments structure
189  * with the number of allocated bytes found in the target range, so that the
190  * caller can update the inode's number of bytes in an atomic way when
191  * replacing extents in a range to avoid races with stat(2).
192  */
193 int btrfs_drop_extents(struct btrfs_trans_handle *trans,
194                        struct btrfs_root *root, struct btrfs_inode *inode,
195                        struct btrfs_drop_extents_args *args)
196 {
197         struct btrfs_fs_info *fs_info = root->fs_info;
198         struct extent_buffer *leaf;
199         struct btrfs_file_extent_item *fi;
200         struct btrfs_ref ref = { 0 };
201         struct btrfs_key key;
202         struct btrfs_key new_key;
203         u64 ino = btrfs_ino(inode);
204         u64 search_start = args->start;
205         u64 disk_bytenr = 0;
206         u64 num_bytes = 0;
207         u64 extent_offset = 0;
208         u64 extent_end = 0;
209         u64 last_end = args->start;
210         int del_nr = 0;
211         int del_slot = 0;
212         int extent_type;
213         int recow;
214         int ret;
215         int modify_tree = -1;
216         int update_refs;
217         int found = 0;
218         struct btrfs_path *path = args->path;
219
220         args->bytes_found = 0;
221         args->extent_inserted = false;
222
223         /* Must always have a path if ->replace_extent is true */
224         ASSERT(!(args->replace_extent && !args->path));
225
226         if (!path) {
227                 path = btrfs_alloc_path();
228                 if (!path) {
229                         ret = -ENOMEM;
230                         goto out;
231                 }
232         }
233
234         if (args->drop_cache)
235                 btrfs_drop_extent_map_range(inode, args->start, args->end - 1, false);
236
237         if (args->start >= inode->disk_i_size && !args->replace_extent)
238                 modify_tree = 0;
239
240         update_refs = (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID);
241         while (1) {
242                 recow = 0;
243                 ret = btrfs_lookup_file_extent(trans, root, path, ino,
244                                                search_start, modify_tree);
245                 if (ret < 0)
246                         break;
247                 if (ret > 0 && path->slots[0] > 0 && search_start == args->start) {
248                         leaf = path->nodes[0];
249                         btrfs_item_key_to_cpu(leaf, &key, path->slots[0] - 1);
250                         if (key.objectid == ino &&
251                             key.type == BTRFS_EXTENT_DATA_KEY)
252                                 path->slots[0]--;
253                 }
254                 ret = 0;
255 next_slot:
256                 leaf = path->nodes[0];
257                 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
258                         BUG_ON(del_nr > 0);
259                         ret = btrfs_next_leaf(root, path);
260                         if (ret < 0)
261                                 break;
262                         if (ret > 0) {
263                                 ret = 0;
264                                 break;
265                         }
266                         leaf = path->nodes[0];
267                         recow = 1;
268                 }
269
270                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
271
272                 if (key.objectid > ino)
273                         break;
274                 if (WARN_ON_ONCE(key.objectid < ino) ||
275                     key.type < BTRFS_EXTENT_DATA_KEY) {
276                         ASSERT(del_nr == 0);
277                         path->slots[0]++;
278                         goto next_slot;
279                 }
280                 if (key.type > BTRFS_EXTENT_DATA_KEY || key.offset >= args->end)
281                         break;
282
283                 fi = btrfs_item_ptr(leaf, path->slots[0],
284                                     struct btrfs_file_extent_item);
285                 extent_type = btrfs_file_extent_type(leaf, fi);
286
287                 if (extent_type == BTRFS_FILE_EXTENT_REG ||
288                     extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
289                         disk_bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
290                         num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
291                         extent_offset = btrfs_file_extent_offset(leaf, fi);
292                         extent_end = key.offset +
293                                 btrfs_file_extent_num_bytes(leaf, fi);
294                 } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
295                         extent_end = key.offset +
296                                 btrfs_file_extent_ram_bytes(leaf, fi);
297                 } else {
298                         /* can't happen */
299                         BUG();
300                 }
301
302                 /*
303                  * Don't skip extent items representing 0 byte lengths. They
304                  * used to be created (bug) if while punching holes we hit
305                  * -ENOSPC condition. So if we find one here, just ensure we
306                  * delete it, otherwise we would insert a new file extent item
307                  * with the same key (offset) as that 0 bytes length file
308                  * extent item in the call to setup_items_for_insert() later
309                  * in this function.
310                  */
311                 if (extent_end == key.offset && extent_end >= search_start) {
312                         last_end = extent_end;
313                         goto delete_extent_item;
314                 }
315
316                 if (extent_end <= search_start) {
317                         path->slots[0]++;
318                         goto next_slot;
319                 }
320
321                 found = 1;
322                 search_start = max(key.offset, args->start);
323                 if (recow || !modify_tree) {
324                         modify_tree = -1;
325                         btrfs_release_path(path);
326                         continue;
327                 }
328
329                 /*
330                  *     | - range to drop - |
331                  *  | -------- extent -------- |
332                  */
333                 if (args->start > key.offset && args->end < extent_end) {
334                         BUG_ON(del_nr > 0);
335                         if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
336                                 ret = -EOPNOTSUPP;
337                                 break;
338                         }
339
340                         memcpy(&new_key, &key, sizeof(new_key));
341                         new_key.offset = args->start;
342                         ret = btrfs_duplicate_item(trans, root, path,
343                                                    &new_key);
344                         if (ret == -EAGAIN) {
345                                 btrfs_release_path(path);
346                                 continue;
347                         }
348                         if (ret < 0)
349                                 break;
350
351                         leaf = path->nodes[0];
352                         fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
353                                             struct btrfs_file_extent_item);
354                         btrfs_set_file_extent_num_bytes(leaf, fi,
355                                                         args->start - key.offset);
356
357                         fi = btrfs_item_ptr(leaf, path->slots[0],
358                                             struct btrfs_file_extent_item);
359
360                         extent_offset += args->start - key.offset;
361                         btrfs_set_file_extent_offset(leaf, fi, extent_offset);
362                         btrfs_set_file_extent_num_bytes(leaf, fi,
363                                                         extent_end - args->start);
364                         btrfs_mark_buffer_dirty(leaf);
365
366                         if (update_refs && disk_bytenr > 0) {
367                                 btrfs_init_generic_ref(&ref,
368                                                 BTRFS_ADD_DELAYED_REF,
369                                                 disk_bytenr, num_bytes, 0);
370                                 btrfs_init_data_ref(&ref,
371                                                 root->root_key.objectid,
372                                                 new_key.objectid,
373                                                 args->start - extent_offset,
374                                                 0, false);
375                                 ret = btrfs_inc_extent_ref(trans, &ref);
376                                 if (ret) {
377                                         btrfs_abort_transaction(trans, ret);
378                                         break;
379                                 }
380                         }
381                         key.offset = args->start;
382                 }
383                 /*
384                  * From here on out we will have actually dropped something, so
385                  * last_end can be updated.
386                  */
387                 last_end = extent_end;
388
389                 /*
390                  *  | ---- range to drop ----- |
391                  *      | -------- extent -------- |
392                  */
393                 if (args->start <= key.offset && args->end < extent_end) {
394                         if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
395                                 ret = -EOPNOTSUPP;
396                                 break;
397                         }
398
399                         memcpy(&new_key, &key, sizeof(new_key));
400                         new_key.offset = args->end;
401                         btrfs_set_item_key_safe(fs_info, path, &new_key);
402
403                         extent_offset += args->end - key.offset;
404                         btrfs_set_file_extent_offset(leaf, fi, extent_offset);
405                         btrfs_set_file_extent_num_bytes(leaf, fi,
406                                                         extent_end - args->end);
407                         btrfs_mark_buffer_dirty(leaf);
408                         if (update_refs && disk_bytenr > 0)
409                                 args->bytes_found += args->end - key.offset;
410                         break;
411                 }
412
413                 search_start = extent_end;
414                 /*
415                  *       | ---- range to drop ----- |
416                  *  | -------- extent -------- |
417                  */
418                 if (args->start > key.offset && args->end >= extent_end) {
419                         BUG_ON(del_nr > 0);
420                         if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
421                                 ret = -EOPNOTSUPP;
422                                 break;
423                         }
424
425                         btrfs_set_file_extent_num_bytes(leaf, fi,
426                                                         args->start - key.offset);
427                         btrfs_mark_buffer_dirty(leaf);
428                         if (update_refs && disk_bytenr > 0)
429                                 args->bytes_found += extent_end - args->start;
430                         if (args->end == extent_end)
431                                 break;
432
433                         path->slots[0]++;
434                         goto next_slot;
435                 }
436
437                 /*
438                  *  | ---- range to drop ----- |
439                  *    | ------ extent ------ |
440                  */
441                 if (args->start <= key.offset && args->end >= extent_end) {
442 delete_extent_item:
443                         if (del_nr == 0) {
444                                 del_slot = path->slots[0];
445                                 del_nr = 1;
446                         } else {
447                                 BUG_ON(del_slot + del_nr != path->slots[0]);
448                                 del_nr++;
449                         }
450
451                         if (update_refs &&
452                             extent_type == BTRFS_FILE_EXTENT_INLINE) {
453                                 args->bytes_found += extent_end - key.offset;
454                                 extent_end = ALIGN(extent_end,
455                                                    fs_info->sectorsize);
456                         } else if (update_refs && disk_bytenr > 0) {
457                                 btrfs_init_generic_ref(&ref,
458                                                 BTRFS_DROP_DELAYED_REF,
459                                                 disk_bytenr, num_bytes, 0);
460                                 btrfs_init_data_ref(&ref,
461                                                 root->root_key.objectid,
462                                                 key.objectid,
463                                                 key.offset - extent_offset, 0,
464                                                 false);
465                                 ret = btrfs_free_extent(trans, &ref);
466                                 if (ret) {
467                                         btrfs_abort_transaction(trans, ret);
468                                         break;
469                                 }
470                                 args->bytes_found += extent_end - key.offset;
471                         }
472
473                         if (args->end == extent_end)
474                                 break;
475
476                         if (path->slots[0] + 1 < btrfs_header_nritems(leaf)) {
477                                 path->slots[0]++;
478                                 goto next_slot;
479                         }
480
481                         ret = btrfs_del_items(trans, root, path, del_slot,
482                                               del_nr);
483                         if (ret) {
484                                 btrfs_abort_transaction(trans, ret);
485                                 break;
486                         }
487
488                         del_nr = 0;
489                         del_slot = 0;
490
491                         btrfs_release_path(path);
492                         continue;
493                 }
494
495                 BUG();
496         }
497
498         if (!ret && del_nr > 0) {
499                 /*
500                  * Set path->slots[0] to first slot, so that after the delete
501                  * if items are move off from our leaf to its immediate left or
502                  * right neighbor leafs, we end up with a correct and adjusted
503                  * path->slots[0] for our insertion (if args->replace_extent).
504                  */
505                 path->slots[0] = del_slot;
506                 ret = btrfs_del_items(trans, root, path, del_slot, del_nr);
507                 if (ret)
508                         btrfs_abort_transaction(trans, ret);
509         }
510
511         leaf = path->nodes[0];
512         /*
513          * If btrfs_del_items() was called, it might have deleted a leaf, in
514          * which case it unlocked our path, so check path->locks[0] matches a
515          * write lock.
516          */
517         if (!ret && args->replace_extent &&
518             path->locks[0] == BTRFS_WRITE_LOCK &&
519             btrfs_leaf_free_space(leaf) >=
520             sizeof(struct btrfs_item) + args->extent_item_size) {
521
522                 key.objectid = ino;
523                 key.type = BTRFS_EXTENT_DATA_KEY;
524                 key.offset = args->start;
525                 if (!del_nr && path->slots[0] < btrfs_header_nritems(leaf)) {
526                         struct btrfs_key slot_key;
527
528                         btrfs_item_key_to_cpu(leaf, &slot_key, path->slots[0]);
529                         if (btrfs_comp_cpu_keys(&key, &slot_key) > 0)
530                                 path->slots[0]++;
531                 }
532                 btrfs_setup_item_for_insert(root, path, &key, args->extent_item_size);
533                 args->extent_inserted = true;
534         }
535
536         if (!args->path)
537                 btrfs_free_path(path);
538         else if (!args->extent_inserted)
539                 btrfs_release_path(path);
540 out:
541         args->drop_end = found ? min(args->end, last_end) : args->end;
542
543         return ret;
544 }
545
546 static int extent_mergeable(struct extent_buffer *leaf, int slot,
547                             u64 objectid, u64 bytenr, u64 orig_offset,
548                             u64 *start, u64 *end)
549 {
550         struct btrfs_file_extent_item *fi;
551         struct btrfs_key key;
552         u64 extent_end;
553
554         if (slot < 0 || slot >= btrfs_header_nritems(leaf))
555                 return 0;
556
557         btrfs_item_key_to_cpu(leaf, &key, slot);
558         if (key.objectid != objectid || key.type != BTRFS_EXTENT_DATA_KEY)
559                 return 0;
560
561         fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
562         if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG ||
563             btrfs_file_extent_disk_bytenr(leaf, fi) != bytenr ||
564             btrfs_file_extent_offset(leaf, fi) != key.offset - orig_offset ||
565             btrfs_file_extent_compression(leaf, fi) ||
566             btrfs_file_extent_encryption(leaf, fi) ||
567             btrfs_file_extent_other_encoding(leaf, fi))
568                 return 0;
569
570         extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
571         if ((*start && *start != key.offset) || (*end && *end != extent_end))
572                 return 0;
573
574         *start = key.offset;
575         *end = extent_end;
576         return 1;
577 }
578
579 /*
580  * Mark extent in the range start - end as written.
581  *
582  * This changes extent type from 'pre-allocated' to 'regular'. If only
583  * part of extent is marked as written, the extent will be split into
584  * two or three.
585  */
586 int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
587                               struct btrfs_inode *inode, u64 start, u64 end)
588 {
589         struct btrfs_fs_info *fs_info = trans->fs_info;
590         struct btrfs_root *root = inode->root;
591         struct extent_buffer *leaf;
592         struct btrfs_path *path;
593         struct btrfs_file_extent_item *fi;
594         struct btrfs_ref ref = { 0 };
595         struct btrfs_key key;
596         struct btrfs_key new_key;
597         u64 bytenr;
598         u64 num_bytes;
599         u64 extent_end;
600         u64 orig_offset;
601         u64 other_start;
602         u64 other_end;
603         u64 split;
604         int del_nr = 0;
605         int del_slot = 0;
606         int recow;
607         int ret = 0;
608         u64 ino = btrfs_ino(inode);
609
610         path = btrfs_alloc_path();
611         if (!path)
612                 return -ENOMEM;
613 again:
614         recow = 0;
615         split = start;
616         key.objectid = ino;
617         key.type = BTRFS_EXTENT_DATA_KEY;
618         key.offset = split;
619
620         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
621         if (ret < 0)
622                 goto out;
623         if (ret > 0 && path->slots[0] > 0)
624                 path->slots[0]--;
625
626         leaf = path->nodes[0];
627         btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
628         if (key.objectid != ino ||
629             key.type != BTRFS_EXTENT_DATA_KEY) {
630                 ret = -EINVAL;
631                 btrfs_abort_transaction(trans, ret);
632                 goto out;
633         }
634         fi = btrfs_item_ptr(leaf, path->slots[0],
635                             struct btrfs_file_extent_item);
636         if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_PREALLOC) {
637                 ret = -EINVAL;
638                 btrfs_abort_transaction(trans, ret);
639                 goto out;
640         }
641         extent_end = key.offset + btrfs_file_extent_num_bytes(leaf, fi);
642         if (key.offset > start || extent_end < end) {
643                 ret = -EINVAL;
644                 btrfs_abort_transaction(trans, ret);
645                 goto out;
646         }
647
648         bytenr = btrfs_file_extent_disk_bytenr(leaf, fi);
649         num_bytes = btrfs_file_extent_disk_num_bytes(leaf, fi);
650         orig_offset = key.offset - btrfs_file_extent_offset(leaf, fi);
651         memcpy(&new_key, &key, sizeof(new_key));
652
653         if (start == key.offset && end < extent_end) {
654                 other_start = 0;
655                 other_end = start;
656                 if (extent_mergeable(leaf, path->slots[0] - 1,
657                                      ino, bytenr, orig_offset,
658                                      &other_start, &other_end)) {
659                         new_key.offset = end;
660                         btrfs_set_item_key_safe(fs_info, path, &new_key);
661                         fi = btrfs_item_ptr(leaf, path->slots[0],
662                                             struct btrfs_file_extent_item);
663                         btrfs_set_file_extent_generation(leaf, fi,
664                                                          trans->transid);
665                         btrfs_set_file_extent_num_bytes(leaf, fi,
666                                                         extent_end - end);
667                         btrfs_set_file_extent_offset(leaf, fi,
668                                                      end - orig_offset);
669                         fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
670                                             struct btrfs_file_extent_item);
671                         btrfs_set_file_extent_generation(leaf, fi,
672                                                          trans->transid);
673                         btrfs_set_file_extent_num_bytes(leaf, fi,
674                                                         end - other_start);
675                         btrfs_mark_buffer_dirty(leaf);
676                         goto out;
677                 }
678         }
679
680         if (start > key.offset && end == extent_end) {
681                 other_start = end;
682                 other_end = 0;
683                 if (extent_mergeable(leaf, path->slots[0] + 1,
684                                      ino, bytenr, orig_offset,
685                                      &other_start, &other_end)) {
686                         fi = btrfs_item_ptr(leaf, path->slots[0],
687                                             struct btrfs_file_extent_item);
688                         btrfs_set_file_extent_num_bytes(leaf, fi,
689                                                         start - key.offset);
690                         btrfs_set_file_extent_generation(leaf, fi,
691                                                          trans->transid);
692                         path->slots[0]++;
693                         new_key.offset = start;
694                         btrfs_set_item_key_safe(fs_info, path, &new_key);
695
696                         fi = btrfs_item_ptr(leaf, path->slots[0],
697                                             struct btrfs_file_extent_item);
698                         btrfs_set_file_extent_generation(leaf, fi,
699                                                          trans->transid);
700                         btrfs_set_file_extent_num_bytes(leaf, fi,
701                                                         other_end - start);
702                         btrfs_set_file_extent_offset(leaf, fi,
703                                                      start - orig_offset);
704                         btrfs_mark_buffer_dirty(leaf);
705                         goto out;
706                 }
707         }
708
709         while (start > key.offset || end < extent_end) {
710                 if (key.offset == start)
711                         split = end;
712
713                 new_key.offset = split;
714                 ret = btrfs_duplicate_item(trans, root, path, &new_key);
715                 if (ret == -EAGAIN) {
716                         btrfs_release_path(path);
717                         goto again;
718                 }
719                 if (ret < 0) {
720                         btrfs_abort_transaction(trans, ret);
721                         goto out;
722                 }
723
724                 leaf = path->nodes[0];
725                 fi = btrfs_item_ptr(leaf, path->slots[0] - 1,
726                                     struct btrfs_file_extent_item);
727                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
728                 btrfs_set_file_extent_num_bytes(leaf, fi,
729                                                 split - key.offset);
730
731                 fi = btrfs_item_ptr(leaf, path->slots[0],
732                                     struct btrfs_file_extent_item);
733
734                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
735                 btrfs_set_file_extent_offset(leaf, fi, split - orig_offset);
736                 btrfs_set_file_extent_num_bytes(leaf, fi,
737                                                 extent_end - split);
738                 btrfs_mark_buffer_dirty(leaf);
739
740                 btrfs_init_generic_ref(&ref, BTRFS_ADD_DELAYED_REF, bytenr,
741                                        num_bytes, 0);
742                 btrfs_init_data_ref(&ref, root->root_key.objectid, ino,
743                                     orig_offset, 0, false);
744                 ret = btrfs_inc_extent_ref(trans, &ref);
745                 if (ret) {
746                         btrfs_abort_transaction(trans, ret);
747                         goto out;
748                 }
749
750                 if (split == start) {
751                         key.offset = start;
752                 } else {
753                         if (start != key.offset) {
754                                 ret = -EINVAL;
755                                 btrfs_abort_transaction(trans, ret);
756                                 goto out;
757                         }
758                         path->slots[0]--;
759                         extent_end = end;
760                 }
761                 recow = 1;
762         }
763
764         other_start = end;
765         other_end = 0;
766         btrfs_init_generic_ref(&ref, BTRFS_DROP_DELAYED_REF, bytenr,
767                                num_bytes, 0);
768         btrfs_init_data_ref(&ref, root->root_key.objectid, ino, orig_offset,
769                             0, false);
770         if (extent_mergeable(leaf, path->slots[0] + 1,
771                              ino, bytenr, orig_offset,
772                              &other_start, &other_end)) {
773                 if (recow) {
774                         btrfs_release_path(path);
775                         goto again;
776                 }
777                 extent_end = other_end;
778                 del_slot = path->slots[0] + 1;
779                 del_nr++;
780                 ret = btrfs_free_extent(trans, &ref);
781                 if (ret) {
782                         btrfs_abort_transaction(trans, ret);
783                         goto out;
784                 }
785         }
786         other_start = 0;
787         other_end = start;
788         if (extent_mergeable(leaf, path->slots[0] - 1,
789                              ino, bytenr, orig_offset,
790                              &other_start, &other_end)) {
791                 if (recow) {
792                         btrfs_release_path(path);
793                         goto again;
794                 }
795                 key.offset = other_start;
796                 del_slot = path->slots[0];
797                 del_nr++;
798                 ret = btrfs_free_extent(trans, &ref);
799                 if (ret) {
800                         btrfs_abort_transaction(trans, ret);
801                         goto out;
802                 }
803         }
804         if (del_nr == 0) {
805                 fi = btrfs_item_ptr(leaf, path->slots[0],
806                            struct btrfs_file_extent_item);
807                 btrfs_set_file_extent_type(leaf, fi,
808                                            BTRFS_FILE_EXTENT_REG);
809                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
810                 btrfs_mark_buffer_dirty(leaf);
811         } else {
812                 fi = btrfs_item_ptr(leaf, del_slot - 1,
813                            struct btrfs_file_extent_item);
814                 btrfs_set_file_extent_type(leaf, fi,
815                                            BTRFS_FILE_EXTENT_REG);
816                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
817                 btrfs_set_file_extent_num_bytes(leaf, fi,
818                                                 extent_end - key.offset);
819                 btrfs_mark_buffer_dirty(leaf);
820
821                 ret = btrfs_del_items(trans, root, path, del_slot, del_nr);
822                 if (ret < 0) {
823                         btrfs_abort_transaction(trans, ret);
824                         goto out;
825                 }
826         }
827 out:
828         btrfs_free_path(path);
829         return ret;
830 }
831
832 /*
833  * on error we return an unlocked page and the error value
834  * on success we return a locked page and 0
835  */
836 static int prepare_uptodate_page(struct inode *inode,
837                                  struct page *page, u64 pos,
838                                  bool force_uptodate)
839 {
840         struct folio *folio = page_folio(page);
841         int ret = 0;
842
843         if (((pos & (PAGE_SIZE - 1)) || force_uptodate) &&
844             !PageUptodate(page)) {
845                 ret = btrfs_read_folio(NULL, folio);
846                 if (ret)
847                         return ret;
848                 lock_page(page);
849                 if (!PageUptodate(page)) {
850                         unlock_page(page);
851                         return -EIO;
852                 }
853
854                 /*
855                  * Since btrfs_read_folio() will unlock the folio before it
856                  * returns, there is a window where btrfs_release_folio() can be
857                  * called to release the page.  Here we check both inode
858                  * mapping and PagePrivate() to make sure the page was not
859                  * released.
860                  *
861                  * The private flag check is essential for subpage as we need
862                  * to store extra bitmap using page->private.
863                  */
864                 if (page->mapping != inode->i_mapping || !PagePrivate(page)) {
865                         unlock_page(page);
866                         return -EAGAIN;
867                 }
868         }
869         return 0;
870 }
871
872 static unsigned int get_prepare_fgp_flags(bool nowait)
873 {
874         unsigned int fgp_flags = FGP_LOCK | FGP_ACCESSED | FGP_CREAT;
875
876         if (nowait)
877                 fgp_flags |= FGP_NOWAIT;
878
879         return fgp_flags;
880 }
881
882 static gfp_t get_prepare_gfp_flags(struct inode *inode, bool nowait)
883 {
884         gfp_t gfp;
885
886         gfp = btrfs_alloc_write_mask(inode->i_mapping);
887         if (nowait) {
888                 gfp &= ~__GFP_DIRECT_RECLAIM;
889                 gfp |= GFP_NOWAIT;
890         }
891
892         return gfp;
893 }
894
895 /*
896  * this just gets pages into the page cache and locks them down.
897  */
898 static noinline int prepare_pages(struct inode *inode, struct page **pages,
899                                   size_t num_pages, loff_t pos,
900                                   size_t write_bytes, bool force_uptodate,
901                                   bool nowait)
902 {
903         int i;
904         unsigned long index = pos >> PAGE_SHIFT;
905         gfp_t mask = get_prepare_gfp_flags(inode, nowait);
906         unsigned int fgp_flags = get_prepare_fgp_flags(nowait);
907         int err = 0;
908         int faili;
909
910         for (i = 0; i < num_pages; i++) {
911 again:
912                 pages[i] = pagecache_get_page(inode->i_mapping, index + i,
913                                               fgp_flags, mask | __GFP_WRITE);
914                 if (!pages[i]) {
915                         faili = i - 1;
916                         if (nowait)
917                                 err = -EAGAIN;
918                         else
919                                 err = -ENOMEM;
920                         goto fail;
921                 }
922
923                 err = set_page_extent_mapped(pages[i]);
924                 if (err < 0) {
925                         faili = i;
926                         goto fail;
927                 }
928
929                 if (i == 0)
930                         err = prepare_uptodate_page(inode, pages[i], pos,
931                                                     force_uptodate);
932                 if (!err && i == num_pages - 1)
933                         err = prepare_uptodate_page(inode, pages[i],
934                                                     pos + write_bytes, false);
935                 if (err) {
936                         put_page(pages[i]);
937                         if (!nowait && err == -EAGAIN) {
938                                 err = 0;
939                                 goto again;
940                         }
941                         faili = i - 1;
942                         goto fail;
943                 }
944                 wait_on_page_writeback(pages[i]);
945         }
946
947         return 0;
948 fail:
949         while (faili >= 0) {
950                 unlock_page(pages[faili]);
951                 put_page(pages[faili]);
952                 faili--;
953         }
954         return err;
955
956 }
957
958 /*
959  * This function locks the extent and properly waits for data=ordered extents
960  * to finish before allowing the pages to be modified if need.
961  *
962  * The return value:
963  * 1 - the extent is locked
964  * 0 - the extent is not locked, and everything is OK
965  * -EAGAIN - need re-prepare the pages
966  * the other < 0 number - Something wrong happens
967  */
968 static noinline int
969 lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
970                                 size_t num_pages, loff_t pos,
971                                 size_t write_bytes,
972                                 u64 *lockstart, u64 *lockend, bool nowait,
973                                 struct extent_state **cached_state)
974 {
975         struct btrfs_fs_info *fs_info = inode->root->fs_info;
976         u64 start_pos;
977         u64 last_pos;
978         int i;
979         int ret = 0;
980
981         start_pos = round_down(pos, fs_info->sectorsize);
982         last_pos = round_up(pos + write_bytes, fs_info->sectorsize) - 1;
983
984         if (start_pos < inode->vfs_inode.i_size) {
985                 struct btrfs_ordered_extent *ordered;
986
987                 if (nowait) {
988                         if (!try_lock_extent(&inode->io_tree, start_pos, last_pos)) {
989                                 for (i = 0; i < num_pages; i++) {
990                                         unlock_page(pages[i]);
991                                         put_page(pages[i]);
992                                         pages[i] = NULL;
993                                 }
994
995                                 return -EAGAIN;
996                         }
997                 } else {
998                         lock_extent(&inode->io_tree, start_pos, last_pos, cached_state);
999                 }
1000
1001                 ordered = btrfs_lookup_ordered_range(inode, start_pos,
1002                                                      last_pos - start_pos + 1);
1003                 if (ordered &&
1004                     ordered->file_offset + ordered->num_bytes > start_pos &&
1005                     ordered->file_offset <= last_pos) {
1006                         unlock_extent(&inode->io_tree, start_pos, last_pos,
1007                                       cached_state);
1008                         for (i = 0; i < num_pages; i++) {
1009                                 unlock_page(pages[i]);
1010                                 put_page(pages[i]);
1011                         }
1012                         btrfs_start_ordered_extent(ordered, 1);
1013                         btrfs_put_ordered_extent(ordered);
1014                         return -EAGAIN;
1015                 }
1016                 if (ordered)
1017                         btrfs_put_ordered_extent(ordered);
1018
1019                 *lockstart = start_pos;
1020                 *lockend = last_pos;
1021                 ret = 1;
1022         }
1023
1024         /*
1025          * We should be called after prepare_pages() which should have locked
1026          * all pages in the range.
1027          */
1028         for (i = 0; i < num_pages; i++)
1029                 WARN_ON(!PageLocked(pages[i]));
1030
1031         return ret;
1032 }
1033
1034 /*
1035  * Check if we can do nocow write into the range [@pos, @pos + @write_bytes)
1036  *
1037  * @pos:         File offset.
1038  * @write_bytes: The length to write, will be updated to the nocow writeable
1039  *               range.
1040  *
1041  * This function will flush ordered extents in the range to ensure proper
1042  * nocow checks.
1043  *
1044  * Return:
1045  * > 0          If we can nocow, and updates @write_bytes.
1046  *  0           If we can't do a nocow write.
1047  * -EAGAIN      If we can't do a nocow write because snapshoting of the inode's
1048  *              root is in progress.
1049  * < 0          If an error happened.
1050  *
1051  * NOTE: Callers need to call btrfs_check_nocow_unlock() if we return > 0.
1052  */
1053 int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,
1054                            size_t *write_bytes, bool nowait)
1055 {
1056         struct btrfs_fs_info *fs_info = inode->root->fs_info;
1057         struct btrfs_root *root = inode->root;
1058         u64 lockstart, lockend;
1059         u64 num_bytes;
1060         int ret;
1061
1062         if (!(inode->flags & (BTRFS_INODE_NODATACOW | BTRFS_INODE_PREALLOC)))
1063                 return 0;
1064
1065         if (!btrfs_drew_try_write_lock(&root->snapshot_lock))
1066                 return -EAGAIN;
1067
1068         lockstart = round_down(pos, fs_info->sectorsize);
1069         lockend = round_up(pos + *write_bytes,
1070                            fs_info->sectorsize) - 1;
1071         num_bytes = lockend - lockstart + 1;
1072
1073         if (nowait) {
1074                 if (!btrfs_try_lock_ordered_range(inode, lockstart, lockend)) {
1075                         btrfs_drew_write_unlock(&root->snapshot_lock);
1076                         return -EAGAIN;
1077                 }
1078         } else {
1079                 btrfs_lock_and_flush_ordered_range(inode, lockstart, lockend, NULL);
1080         }
1081         ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes,
1082                         NULL, NULL, NULL, nowait, false);
1083         if (ret <= 0)
1084                 btrfs_drew_write_unlock(&root->snapshot_lock);
1085         else
1086                 *write_bytes = min_t(size_t, *write_bytes ,
1087                                      num_bytes - pos + lockstart);
1088         unlock_extent(&inode->io_tree, lockstart, lockend, NULL);
1089
1090         return ret;
1091 }
1092
1093 void btrfs_check_nocow_unlock(struct btrfs_inode *inode)
1094 {
1095         btrfs_drew_write_unlock(&inode->root->snapshot_lock);
1096 }
1097
1098 static void update_time_for_write(struct inode *inode)
1099 {
1100         struct timespec64 now;
1101
1102         if (IS_NOCMTIME(inode))
1103                 return;
1104
1105         now = current_time(inode);
1106         if (!timespec64_equal(&inode->i_mtime, &now))
1107                 inode->i_mtime = now;
1108
1109         if (!timespec64_equal(&inode->i_ctime, &now))
1110                 inode->i_ctime = now;
1111
1112         if (IS_I_VERSION(inode))
1113                 inode_inc_iversion(inode);
1114 }
1115
1116 static int btrfs_write_check(struct kiocb *iocb, struct iov_iter *from,
1117                              size_t count)
1118 {
1119         struct file *file = iocb->ki_filp;
1120         struct inode *inode = file_inode(file);
1121         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
1122         loff_t pos = iocb->ki_pos;
1123         int ret;
1124         loff_t oldsize;
1125         loff_t start_pos;
1126
1127         /*
1128          * Quickly bail out on NOWAIT writes if we don't have the nodatacow or
1129          * prealloc flags, as without those flags we always have to COW. We will
1130          * later check if we can really COW into the target range (using
1131          * can_nocow_extent() at btrfs_get_blocks_direct_write()).
1132          */
1133         if ((iocb->ki_flags & IOCB_NOWAIT) &&
1134             !(BTRFS_I(inode)->flags & (BTRFS_INODE_NODATACOW | BTRFS_INODE_PREALLOC)))
1135                 return -EAGAIN;
1136
1137         current->backing_dev_info = inode_to_bdi(inode);
1138         ret = file_remove_privs(file);
1139         if (ret)
1140                 return ret;
1141
1142         /*
1143          * We reserve space for updating the inode when we reserve space for the
1144          * extent we are going to write, so we will enospc out there.  We don't
1145          * need to start yet another transaction to update the inode as we will
1146          * update the inode when we finish writing whatever data we write.
1147          */
1148         update_time_for_write(inode);
1149
1150         start_pos = round_down(pos, fs_info->sectorsize);
1151         oldsize = i_size_read(inode);
1152         if (start_pos > oldsize) {
1153                 /* Expand hole size to cover write data, preventing empty gap */
1154                 loff_t end_pos = round_up(pos + count, fs_info->sectorsize);
1155
1156                 ret = btrfs_cont_expand(BTRFS_I(inode), oldsize, end_pos);
1157                 if (ret) {
1158                         current->backing_dev_info = NULL;
1159                         return ret;
1160                 }
1161         }
1162
1163         return 0;
1164 }
1165
1166 static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb,
1167                                                struct iov_iter *i)
1168 {
1169         struct file *file = iocb->ki_filp;
1170         loff_t pos;
1171         struct inode *inode = file_inode(file);
1172         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
1173         struct page **pages = NULL;
1174         struct extent_changeset *data_reserved = NULL;
1175         u64 release_bytes = 0;
1176         u64 lockstart;
1177         u64 lockend;
1178         size_t num_written = 0;
1179         int nrptrs;
1180         ssize_t ret;
1181         bool only_release_metadata = false;
1182         bool force_page_uptodate = false;
1183         loff_t old_isize = i_size_read(inode);
1184         unsigned int ilock_flags = 0;
1185         const bool nowait = (iocb->ki_flags & IOCB_NOWAIT);
1186         unsigned int bdp_flags = (nowait ? BDP_ASYNC : 0);
1187
1188         if (nowait)
1189                 ilock_flags |= BTRFS_ILOCK_TRY;
1190
1191         ret = btrfs_inode_lock(inode, ilock_flags);
1192         if (ret < 0)
1193                 return ret;
1194
1195         ret = generic_write_checks(iocb, i);
1196         if (ret <= 0)
1197                 goto out;
1198
1199         ret = btrfs_write_check(iocb, i, ret);
1200         if (ret < 0)
1201                 goto out;
1202
1203         pos = iocb->ki_pos;
1204         nrptrs = min(DIV_ROUND_UP(iov_iter_count(i), PAGE_SIZE),
1205                         PAGE_SIZE / (sizeof(struct page *)));
1206         nrptrs = min(nrptrs, current->nr_dirtied_pause - current->nr_dirtied);
1207         nrptrs = max(nrptrs, 8);
1208         pages = kmalloc_array(nrptrs, sizeof(struct page *), GFP_KERNEL);
1209         if (!pages) {
1210                 ret = -ENOMEM;
1211                 goto out;
1212         }
1213
1214         while (iov_iter_count(i) > 0) {
1215                 struct extent_state *cached_state = NULL;
1216                 size_t offset = offset_in_page(pos);
1217                 size_t sector_offset;
1218                 size_t write_bytes = min(iov_iter_count(i),
1219                                          nrptrs * (size_t)PAGE_SIZE -
1220                                          offset);
1221                 size_t num_pages;
1222                 size_t reserve_bytes;
1223                 size_t dirty_pages;
1224                 size_t copied;
1225                 size_t dirty_sectors;
1226                 size_t num_sectors;
1227                 int extents_locked;
1228
1229                 /*
1230                  * Fault pages before locking them in prepare_pages
1231                  * to avoid recursive lock
1232                  */
1233                 if (unlikely(fault_in_iov_iter_readable(i, write_bytes))) {
1234                         ret = -EFAULT;
1235                         break;
1236                 }
1237
1238                 only_release_metadata = false;
1239                 sector_offset = pos & (fs_info->sectorsize - 1);
1240
1241                 extent_changeset_release(data_reserved);
1242                 ret = btrfs_check_data_free_space(BTRFS_I(inode),
1243                                                   &data_reserved, pos,
1244                                                   write_bytes, nowait);
1245                 if (ret < 0) {
1246                         int can_nocow;
1247
1248                         if (nowait && (ret == -ENOSPC || ret == -EAGAIN)) {
1249                                 ret = -EAGAIN;
1250                                 break;
1251                         }
1252
1253                         /*
1254                          * If we don't have to COW at the offset, reserve
1255                          * metadata only. write_bytes may get smaller than
1256                          * requested here.
1257                          */
1258                         can_nocow = btrfs_check_nocow_lock(BTRFS_I(inode), pos,
1259                                                            &write_bytes, nowait);
1260                         if (can_nocow < 0)
1261                                 ret = can_nocow;
1262                         if (can_nocow > 0)
1263                                 ret = 0;
1264                         if (ret)
1265                                 break;
1266                         only_release_metadata = true;
1267                 }
1268
1269                 num_pages = DIV_ROUND_UP(write_bytes + offset, PAGE_SIZE);
1270                 WARN_ON(num_pages > nrptrs);
1271                 reserve_bytes = round_up(write_bytes + sector_offset,
1272                                          fs_info->sectorsize);
1273                 WARN_ON(reserve_bytes == 0);
1274                 ret = btrfs_delalloc_reserve_metadata(BTRFS_I(inode),
1275                                                       reserve_bytes,
1276                                                       reserve_bytes, nowait);
1277                 if (ret) {
1278                         if (!only_release_metadata)
1279                                 btrfs_free_reserved_data_space(BTRFS_I(inode),
1280                                                 data_reserved, pos,
1281                                                 write_bytes);
1282                         else
1283                                 btrfs_check_nocow_unlock(BTRFS_I(inode));
1284
1285                         if (nowait && ret == -ENOSPC)
1286                                 ret = -EAGAIN;
1287                         break;
1288                 }
1289
1290                 release_bytes = reserve_bytes;
1291 again:
1292                 ret = balance_dirty_pages_ratelimited_flags(inode->i_mapping, bdp_flags);
1293                 if (ret) {
1294                         btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);
1295                         break;
1296                 }
1297
1298                 /*
1299                  * This is going to setup the pages array with the number of
1300                  * pages we want, so we don't really need to worry about the
1301                  * contents of pages from loop to loop
1302                  */
1303                 ret = prepare_pages(inode, pages, num_pages,
1304                                     pos, write_bytes, force_page_uptodate, false);
1305                 if (ret) {
1306                         btrfs_delalloc_release_extents(BTRFS_I(inode),
1307                                                        reserve_bytes);
1308                         break;
1309                 }
1310
1311                 extents_locked = lock_and_cleanup_extent_if_need(
1312                                 BTRFS_I(inode), pages,
1313                                 num_pages, pos, write_bytes, &lockstart,
1314                                 &lockend, nowait, &cached_state);
1315                 if (extents_locked < 0) {
1316                         if (!nowait && extents_locked == -EAGAIN)
1317                                 goto again;
1318
1319                         btrfs_delalloc_release_extents(BTRFS_I(inode),
1320                                                        reserve_bytes);
1321                         ret = extents_locked;
1322                         break;
1323                 }
1324
1325                 copied = btrfs_copy_from_user(pos, write_bytes, pages, i);
1326
1327                 num_sectors = BTRFS_BYTES_TO_BLKS(fs_info, reserve_bytes);
1328                 dirty_sectors = round_up(copied + sector_offset,
1329                                         fs_info->sectorsize);
1330                 dirty_sectors = BTRFS_BYTES_TO_BLKS(fs_info, dirty_sectors);
1331
1332                 /*
1333                  * if we have trouble faulting in the pages, fall
1334                  * back to one page at a time
1335                  */
1336                 if (copied < write_bytes)
1337                         nrptrs = 1;
1338
1339                 if (copied == 0) {
1340                         force_page_uptodate = true;
1341                         dirty_sectors = 0;
1342                         dirty_pages = 0;
1343                 } else {
1344                         force_page_uptodate = false;
1345                         dirty_pages = DIV_ROUND_UP(copied + offset,
1346                                                    PAGE_SIZE);
1347                 }
1348
1349                 if (num_sectors > dirty_sectors) {
1350                         /* release everything except the sectors we dirtied */
1351                         release_bytes -= dirty_sectors << fs_info->sectorsize_bits;
1352                         if (only_release_metadata) {
1353                                 btrfs_delalloc_release_metadata(BTRFS_I(inode),
1354                                                         release_bytes, true);
1355                         } else {
1356                                 u64 __pos;
1357
1358                                 __pos = round_down(pos,
1359                                                    fs_info->sectorsize) +
1360                                         (dirty_pages << PAGE_SHIFT);
1361                                 btrfs_delalloc_release_space(BTRFS_I(inode),
1362                                                 data_reserved, __pos,
1363                                                 release_bytes, true);
1364                         }
1365                 }
1366
1367                 release_bytes = round_up(copied + sector_offset,
1368                                         fs_info->sectorsize);
1369
1370                 ret = btrfs_dirty_pages(BTRFS_I(inode), pages,
1371                                         dirty_pages, pos, copied,
1372                                         &cached_state, only_release_metadata);
1373
1374                 /*
1375                  * If we have not locked the extent range, because the range's
1376                  * start offset is >= i_size, we might still have a non-NULL
1377                  * cached extent state, acquired while marking the extent range
1378                  * as delalloc through btrfs_dirty_pages(). Therefore free any
1379                  * possible cached extent state to avoid a memory leak.
1380                  */
1381                 if (extents_locked)
1382                         unlock_extent(&BTRFS_I(inode)->io_tree, lockstart,
1383                                       lockend, &cached_state);
1384                 else
1385                         free_extent_state(cached_state);
1386
1387                 btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes);
1388                 if (ret) {
1389                         btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);
1390                         break;
1391                 }
1392
1393                 release_bytes = 0;
1394                 if (only_release_metadata)
1395                         btrfs_check_nocow_unlock(BTRFS_I(inode));
1396
1397                 btrfs_drop_pages(fs_info, pages, num_pages, pos, copied);
1398
1399                 cond_resched();
1400
1401                 pos += copied;
1402                 num_written += copied;
1403         }
1404
1405         kfree(pages);
1406
1407         if (release_bytes) {
1408                 if (only_release_metadata) {
1409                         btrfs_check_nocow_unlock(BTRFS_I(inode));
1410                         btrfs_delalloc_release_metadata(BTRFS_I(inode),
1411                                         release_bytes, true);
1412                 } else {
1413                         btrfs_delalloc_release_space(BTRFS_I(inode),
1414                                         data_reserved,
1415                                         round_down(pos, fs_info->sectorsize),
1416                                         release_bytes, true);
1417                 }
1418         }
1419
1420         extent_changeset_free(data_reserved);
1421         if (num_written > 0) {
1422                 pagecache_isize_extended(inode, old_isize, iocb->ki_pos);
1423                 iocb->ki_pos += num_written;
1424         }
1425 out:
1426         btrfs_inode_unlock(inode, ilock_flags);
1427         return num_written ? num_written : ret;
1428 }
1429
1430 static ssize_t check_direct_IO(struct btrfs_fs_info *fs_info,
1431                                const struct iov_iter *iter, loff_t offset)
1432 {
1433         const u32 blocksize_mask = fs_info->sectorsize - 1;
1434
1435         if (offset & blocksize_mask)
1436                 return -EINVAL;
1437
1438         if (iov_iter_alignment(iter) & blocksize_mask)
1439                 return -EINVAL;
1440
1441         return 0;
1442 }
1443
1444 static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from)
1445 {
1446         struct file *file = iocb->ki_filp;
1447         struct inode *inode = file_inode(file);
1448         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
1449         loff_t pos;
1450         ssize_t written = 0;
1451         ssize_t written_buffered;
1452         size_t prev_left = 0;
1453         loff_t endbyte;
1454         ssize_t err;
1455         unsigned int ilock_flags = 0;
1456         struct iomap_dio *dio;
1457
1458         if (iocb->ki_flags & IOCB_NOWAIT)
1459                 ilock_flags |= BTRFS_ILOCK_TRY;
1460
1461         /*
1462          * If the write DIO is within EOF, use a shared lock and also only if
1463          * security bits will likely not be dropped by file_remove_privs() called
1464          * from btrfs_write_check(). Either will need to be rechecked after the
1465          * lock was acquired.
1466          */
1467         if (iocb->ki_pos + iov_iter_count(from) <= i_size_read(inode) && IS_NOSEC(inode))
1468                 ilock_flags |= BTRFS_ILOCK_SHARED;
1469
1470 relock:
1471         err = btrfs_inode_lock(inode, ilock_flags);
1472         if (err < 0)
1473                 return err;
1474
1475         /* Shared lock cannot be used with security bits set. */
1476         if ((ilock_flags & BTRFS_ILOCK_SHARED) && !IS_NOSEC(inode)) {
1477                 btrfs_inode_unlock(inode, ilock_flags);
1478                 ilock_flags &= ~BTRFS_ILOCK_SHARED;
1479                 goto relock;
1480         }
1481
1482         err = generic_write_checks(iocb, from);
1483         if (err <= 0) {
1484                 btrfs_inode_unlock(inode, ilock_flags);
1485                 return err;
1486         }
1487
1488         err = btrfs_write_check(iocb, from, err);
1489         if (err < 0) {
1490                 btrfs_inode_unlock(inode, ilock_flags);
1491                 goto out;
1492         }
1493
1494         pos = iocb->ki_pos;
1495         /*
1496          * Re-check since file size may have changed just before taking the
1497          * lock or pos may have changed because of O_APPEND in generic_write_check()
1498          */
1499         if ((ilock_flags & BTRFS_ILOCK_SHARED) &&
1500             pos + iov_iter_count(from) > i_size_read(inode)) {
1501                 btrfs_inode_unlock(inode, ilock_flags);
1502                 ilock_flags &= ~BTRFS_ILOCK_SHARED;
1503                 goto relock;
1504         }
1505
1506         if (check_direct_IO(fs_info, from, pos)) {
1507                 btrfs_inode_unlock(inode, ilock_flags);
1508                 goto buffered;
1509         }
1510
1511         /*
1512          * The iov_iter can be mapped to the same file range we are writing to.
1513          * If that's the case, then we will deadlock in the iomap code, because
1514          * it first calls our callback btrfs_dio_iomap_begin(), which will create
1515          * an ordered extent, and after that it will fault in the pages that the
1516          * iov_iter refers to. During the fault in we end up in the readahead
1517          * pages code (starting at btrfs_readahead()), which will lock the range,
1518          * find that ordered extent and then wait for it to complete (at
1519          * btrfs_lock_and_flush_ordered_range()), resulting in a deadlock since
1520          * obviously the ordered extent can never complete as we didn't submit
1521          * yet the respective bio(s). This always happens when the buffer is
1522          * memory mapped to the same file range, since the iomap DIO code always
1523          * invalidates pages in the target file range (after starting and waiting
1524          * for any writeback).
1525          *
1526          * So here we disable page faults in the iov_iter and then retry if we
1527          * got -EFAULT, faulting in the pages before the retry.
1528          */
1529         from->nofault = true;
1530         dio = btrfs_dio_write(iocb, from, written);
1531         from->nofault = false;
1532
1533         /*
1534          * iomap_dio_complete() will call btrfs_sync_file() if we have a dsync
1535          * iocb, and that needs to lock the inode. So unlock it before calling
1536          * iomap_dio_complete() to avoid a deadlock.
1537          */
1538         btrfs_inode_unlock(inode, ilock_flags);
1539
1540         if (IS_ERR_OR_NULL(dio))
1541                 err = PTR_ERR_OR_ZERO(dio);
1542         else
1543                 err = iomap_dio_complete(dio);
1544
1545         /* No increment (+=) because iomap returns a cumulative value. */
1546         if (err > 0)
1547                 written = err;
1548
1549         if (iov_iter_count(from) > 0 && (err == -EFAULT || err > 0)) {
1550                 const size_t left = iov_iter_count(from);
1551                 /*
1552                  * We have more data left to write. Try to fault in as many as
1553                  * possible of the remainder pages and retry. We do this without
1554                  * releasing and locking again the inode, to prevent races with
1555                  * truncate.
1556                  *
1557                  * Also, in case the iov refers to pages in the file range of the
1558                  * file we want to write to (due to a mmap), we could enter an
1559                  * infinite loop if we retry after faulting the pages in, since
1560                  * iomap will invalidate any pages in the range early on, before
1561                  * it tries to fault in the pages of the iov. So we keep track of
1562                  * how much was left of iov in the previous EFAULT and fallback
1563                  * to buffered IO in case we haven't made any progress.
1564                  */
1565                 if (left == prev_left) {
1566                         err = -ENOTBLK;
1567                 } else {
1568                         fault_in_iov_iter_readable(from, left);
1569                         prev_left = left;
1570                         goto relock;
1571                 }
1572         }
1573
1574         /*
1575          * If 'err' is -ENOTBLK or we have not written all data, then it means
1576          * we must fallback to buffered IO.
1577          */
1578         if ((err < 0 && err != -ENOTBLK) || !iov_iter_count(from))
1579                 goto out;
1580
1581 buffered:
1582         /*
1583          * If we are in a NOWAIT context, then return -EAGAIN to signal the caller
1584          * it must retry the operation in a context where blocking is acceptable,
1585          * since we currently don't have NOWAIT semantics support for buffered IO
1586          * and may block there for many reasons (reserving space for example).
1587          */
1588         if (iocb->ki_flags & IOCB_NOWAIT) {
1589                 err = -EAGAIN;
1590                 goto out;
1591         }
1592
1593         pos = iocb->ki_pos;
1594         written_buffered = btrfs_buffered_write(iocb, from);
1595         if (written_buffered < 0) {
1596                 err = written_buffered;
1597                 goto out;
1598         }
1599         /*
1600          * Ensure all data is persisted. We want the next direct IO read to be
1601          * able to read what was just written.
1602          */
1603         endbyte = pos + written_buffered - 1;
1604         err = btrfs_fdatawrite_range(inode, pos, endbyte);
1605         if (err)
1606                 goto out;
1607         err = filemap_fdatawait_range(inode->i_mapping, pos, endbyte);
1608         if (err)
1609                 goto out;
1610         written += written_buffered;
1611         iocb->ki_pos = pos + written_buffered;
1612         invalidate_mapping_pages(file->f_mapping, pos >> PAGE_SHIFT,
1613                                  endbyte >> PAGE_SHIFT);
1614 out:
1615         return err < 0 ? err : written;
1616 }
1617
1618 static ssize_t btrfs_encoded_write(struct kiocb *iocb, struct iov_iter *from,
1619                         const struct btrfs_ioctl_encoded_io_args *encoded)
1620 {
1621         struct file *file = iocb->ki_filp;
1622         struct inode *inode = file_inode(file);
1623         loff_t count;
1624         ssize_t ret;
1625
1626         btrfs_inode_lock(inode, 0);
1627         count = encoded->len;
1628         ret = generic_write_checks_count(iocb, &count);
1629         if (ret == 0 && count != encoded->len) {
1630                 /*
1631                  * The write got truncated by generic_write_checks_count(). We
1632                  * can't do a partial encoded write.
1633                  */
1634                 ret = -EFBIG;
1635         }
1636         if (ret || encoded->len == 0)
1637                 goto out;
1638
1639         ret = btrfs_write_check(iocb, from, encoded->len);
1640         if (ret < 0)
1641                 goto out;
1642
1643         ret = btrfs_do_encoded_write(iocb, from, encoded);
1644 out:
1645         btrfs_inode_unlock(inode, 0);
1646         return ret;
1647 }
1648
1649 ssize_t btrfs_do_write_iter(struct kiocb *iocb, struct iov_iter *from,
1650                             const struct btrfs_ioctl_encoded_io_args *encoded)
1651 {
1652         struct file *file = iocb->ki_filp;
1653         struct btrfs_inode *inode = BTRFS_I(file_inode(file));
1654         ssize_t num_written, num_sync;
1655         const bool sync = iocb_is_dsync(iocb);
1656
1657         /*
1658          * If the fs flips readonly due to some impossible error, although we
1659          * have opened a file as writable, we have to stop this write operation
1660          * to ensure consistency.
1661          */
1662         if (BTRFS_FS_ERROR(inode->root->fs_info))
1663                 return -EROFS;
1664
1665         if (encoded && (iocb->ki_flags & IOCB_NOWAIT))
1666                 return -EOPNOTSUPP;
1667
1668         if (sync)
1669                 atomic_inc(&inode->sync_writers);
1670
1671         if (encoded) {
1672                 num_written = btrfs_encoded_write(iocb, from, encoded);
1673                 num_sync = encoded->len;
1674         } else if (iocb->ki_flags & IOCB_DIRECT) {
1675                 num_written = btrfs_direct_write(iocb, from);
1676                 num_sync = num_written;
1677         } else {
1678                 num_written = btrfs_buffered_write(iocb, from);
1679                 num_sync = num_written;
1680         }
1681
1682         btrfs_set_inode_last_sub_trans(inode);
1683
1684         if (num_sync > 0) {
1685                 num_sync = generic_write_sync(iocb, num_sync);
1686                 if (num_sync < 0)
1687                         num_written = num_sync;
1688         }
1689
1690         if (sync)
1691                 atomic_dec(&inode->sync_writers);
1692
1693         current->backing_dev_info = NULL;
1694         return num_written;
1695 }
1696
1697 static ssize_t btrfs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1698 {
1699         return btrfs_do_write_iter(iocb, from, NULL);
1700 }
1701
1702 int btrfs_release_file(struct inode *inode, struct file *filp)
1703 {
1704         struct btrfs_file_private *private = filp->private_data;
1705
1706         if (private && private->filldir_buf)
1707                 kfree(private->filldir_buf);
1708         kfree(private);
1709         filp->private_data = NULL;
1710
1711         /*
1712          * Set by setattr when we are about to truncate a file from a non-zero
1713          * size to a zero size.  This tries to flush down new bytes that may
1714          * have been written if the application were using truncate to replace
1715          * a file in place.
1716          */
1717         if (test_and_clear_bit(BTRFS_INODE_FLUSH_ON_CLOSE,
1718                                &BTRFS_I(inode)->runtime_flags))
1719                         filemap_flush(inode->i_mapping);
1720         return 0;
1721 }
1722
1723 static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
1724 {
1725         int ret;
1726         struct blk_plug plug;
1727
1728         /*
1729          * This is only called in fsync, which would do synchronous writes, so
1730          * a plug can merge adjacent IOs as much as possible.  Esp. in case of
1731          * multiple disks using raid profile, a large IO can be split to
1732          * several segments of stripe length (currently 64K).
1733          */
1734         blk_start_plug(&plug);
1735         atomic_inc(&BTRFS_I(inode)->sync_writers);
1736         ret = btrfs_fdatawrite_range(inode, start, end);
1737         atomic_dec(&BTRFS_I(inode)->sync_writers);
1738         blk_finish_plug(&plug);
1739
1740         return ret;
1741 }
1742
1743 static inline bool skip_inode_logging(const struct btrfs_log_ctx *ctx)
1744 {
1745         struct btrfs_inode *inode = BTRFS_I(ctx->inode);
1746         struct btrfs_fs_info *fs_info = inode->root->fs_info;
1747
1748         if (btrfs_inode_in_log(inode, fs_info->generation) &&
1749             list_empty(&ctx->ordered_extents))
1750                 return true;
1751
1752         /*
1753          * If we are doing a fast fsync we can not bail out if the inode's
1754          * last_trans is <= then the last committed transaction, because we only
1755          * update the last_trans of the inode during ordered extent completion,
1756          * and for a fast fsync we don't wait for that, we only wait for the
1757          * writeback to complete.
1758          */
1759         if (inode->last_trans <= fs_info->last_trans_committed &&
1760             (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags) ||
1761              list_empty(&ctx->ordered_extents)))
1762                 return true;
1763
1764         return false;
1765 }
1766
1767 /*
1768  * fsync call for both files and directories.  This logs the inode into
1769  * the tree log instead of forcing full commits whenever possible.
1770  *
1771  * It needs to call filemap_fdatawait so that all ordered extent updates are
1772  * in the metadata btree are up to date for copying to the log.
1773  *
1774  * It drops the inode mutex before doing the tree log commit.  This is an
1775  * important optimization for directories because holding the mutex prevents
1776  * new operations on the dir while we write to disk.
1777  */
1778 int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1779 {
1780         struct dentry *dentry = file_dentry(file);
1781         struct inode *inode = d_inode(dentry);
1782         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
1783         struct btrfs_root *root = BTRFS_I(inode)->root;
1784         struct btrfs_trans_handle *trans;
1785         struct btrfs_log_ctx ctx;
1786         int ret = 0, err;
1787         u64 len;
1788         bool full_sync;
1789
1790         trace_btrfs_sync_file(file, datasync);
1791
1792         btrfs_init_log_ctx(&ctx, inode);
1793
1794         /*
1795          * Always set the range to a full range, otherwise we can get into
1796          * several problems, from missing file extent items to represent holes
1797          * when not using the NO_HOLES feature, to log tree corruption due to
1798          * races between hole detection during logging and completion of ordered
1799          * extents outside the range, to missing checksums due to ordered extents
1800          * for which we flushed only a subset of their pages.
1801          */
1802         start = 0;
1803         end = LLONG_MAX;
1804         len = (u64)LLONG_MAX + 1;
1805
1806         /*
1807          * We write the dirty pages in the range and wait until they complete
1808          * out of the ->i_mutex. If so, we can flush the dirty pages by
1809          * multi-task, and make the performance up.  See
1810          * btrfs_wait_ordered_range for an explanation of the ASYNC check.
1811          */
1812         ret = start_ordered_ops(inode, start, end);
1813         if (ret)
1814                 goto out;
1815
1816         btrfs_inode_lock(inode, BTRFS_ILOCK_MMAP);
1817
1818         atomic_inc(&root->log_batch);
1819
1820         /*
1821          * Before we acquired the inode's lock and the mmap lock, someone may
1822          * have dirtied more pages in the target range. We need to make sure
1823          * that writeback for any such pages does not start while we are logging
1824          * the inode, because if it does, any of the following might happen when
1825          * we are not doing a full inode sync:
1826          *
1827          * 1) We log an extent after its writeback finishes but before its
1828          *    checksums are added to the csum tree, leading to -EIO errors
1829          *    when attempting to read the extent after a log replay.
1830          *
1831          * 2) We can end up logging an extent before its writeback finishes.
1832          *    Therefore after the log replay we will have a file extent item
1833          *    pointing to an unwritten extent (and no data checksums as well).
1834          *
1835          * So trigger writeback for any eventual new dirty pages and then we
1836          * wait for all ordered extents to complete below.
1837          */
1838         ret = start_ordered_ops(inode, start, end);
1839         if (ret) {
1840                 btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
1841                 goto out;
1842         }
1843
1844         /*
1845          * Always check for the full sync flag while holding the inode's lock,
1846          * to avoid races with other tasks. The flag must be either set all the
1847          * time during logging or always off all the time while logging.
1848          * We check the flag here after starting delalloc above, because when
1849          * running delalloc the full sync flag may be set if we need to drop
1850          * extra extent map ranges due to temporary memory allocation failures.
1851          */
1852         full_sync = test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
1853                              &BTRFS_I(inode)->runtime_flags);
1854
1855         /*
1856          * We have to do this here to avoid the priority inversion of waiting on
1857          * IO of a lower priority task while holding a transaction open.
1858          *
1859          * For a full fsync we wait for the ordered extents to complete while
1860          * for a fast fsync we wait just for writeback to complete, and then
1861          * attach the ordered extents to the transaction so that a transaction
1862          * commit waits for their completion, to avoid data loss if we fsync,
1863          * the current transaction commits before the ordered extents complete
1864          * and a power failure happens right after that.
1865          *
1866          * For zoned filesystem, if a write IO uses a ZONE_APPEND command, the
1867          * logical address recorded in the ordered extent may change. We need
1868          * to wait for the IO to stabilize the logical address.
1869          */
1870         if (full_sync || btrfs_is_zoned(fs_info)) {
1871                 ret = btrfs_wait_ordered_range(inode, start, len);
1872         } else {
1873                 /*
1874                  * Get our ordered extents as soon as possible to avoid doing
1875                  * checksum lookups in the csum tree, and use instead the
1876                  * checksums attached to the ordered extents.
1877                  */
1878                 btrfs_get_ordered_extents_for_logging(BTRFS_I(inode),
1879                                                       &ctx.ordered_extents);
1880                 ret = filemap_fdatawait_range(inode->i_mapping, start, end);
1881         }
1882
1883         if (ret)
1884                 goto out_release_extents;
1885
1886         atomic_inc(&root->log_batch);
1887
1888         smp_mb();
1889         if (skip_inode_logging(&ctx)) {
1890                 /*
1891                  * We've had everything committed since the last time we were
1892                  * modified so clear this flag in case it was set for whatever
1893                  * reason, it's no longer relevant.
1894                  */
1895                 clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
1896                           &BTRFS_I(inode)->runtime_flags);
1897                 /*
1898                  * An ordered extent might have started before and completed
1899                  * already with io errors, in which case the inode was not
1900                  * updated and we end up here. So check the inode's mapping
1901                  * for any errors that might have happened since we last
1902                  * checked called fsync.
1903                  */
1904                 ret = filemap_check_wb_err(inode->i_mapping, file->f_wb_err);
1905                 goto out_release_extents;
1906         }
1907
1908         /*
1909          * We use start here because we will need to wait on the IO to complete
1910          * in btrfs_sync_log, which could require joining a transaction (for
1911          * example checking cross references in the nocow path).  If we use join
1912          * here we could get into a situation where we're waiting on IO to
1913          * happen that is blocked on a transaction trying to commit.  With start
1914          * we inc the extwriter counter, so we wait for all extwriters to exit
1915          * before we start blocking joiners.  This comment is to keep somebody
1916          * from thinking they are super smart and changing this to
1917          * btrfs_join_transaction *cough*Josef*cough*.
1918          */
1919         trans = btrfs_start_transaction(root, 0);
1920         if (IS_ERR(trans)) {
1921                 ret = PTR_ERR(trans);
1922                 goto out_release_extents;
1923         }
1924         trans->in_fsync = true;
1925
1926         ret = btrfs_log_dentry_safe(trans, dentry, &ctx);
1927         btrfs_release_log_ctx_extents(&ctx);
1928         if (ret < 0) {
1929                 /* Fallthrough and commit/free transaction. */
1930                 ret = BTRFS_LOG_FORCE_COMMIT;
1931         }
1932
1933         /* we've logged all the items and now have a consistent
1934          * version of the file in the log.  It is possible that
1935          * someone will come in and modify the file, but that's
1936          * fine because the log is consistent on disk, and we
1937          * have references to all of the file's extents
1938          *
1939          * It is possible that someone will come in and log the
1940          * file again, but that will end up using the synchronization
1941          * inside btrfs_sync_log to keep things safe.
1942          */
1943         btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
1944
1945         if (ret == BTRFS_NO_LOG_SYNC) {
1946                 ret = btrfs_end_transaction(trans);
1947                 goto out;
1948         }
1949
1950         /* We successfully logged the inode, attempt to sync the log. */
1951         if (!ret) {
1952                 ret = btrfs_sync_log(trans, root, &ctx);
1953                 if (!ret) {
1954                         ret = btrfs_end_transaction(trans);
1955                         goto out;
1956                 }
1957         }
1958
1959         /*
1960          * At this point we need to commit the transaction because we had
1961          * btrfs_need_log_full_commit() or some other error.
1962          *
1963          * If we didn't do a full sync we have to stop the trans handle, wait on
1964          * the ordered extents, start it again and commit the transaction.  If
1965          * we attempt to wait on the ordered extents here we could deadlock with
1966          * something like fallocate() that is holding the extent lock trying to
1967          * start a transaction while some other thread is trying to commit the
1968          * transaction while we (fsync) are currently holding the transaction
1969          * open.
1970          */
1971         if (!full_sync) {
1972                 ret = btrfs_end_transaction(trans);
1973                 if (ret)
1974                         goto out;
1975                 ret = btrfs_wait_ordered_range(inode, start, len);
1976                 if (ret)
1977                         goto out;
1978
1979                 /*
1980                  * This is safe to use here because we're only interested in
1981                  * making sure the transaction that had the ordered extents is
1982                  * committed.  We aren't waiting on anything past this point,
1983                  * we're purely getting the transaction and committing it.
1984                  */
1985                 trans = btrfs_attach_transaction_barrier(root);
1986                 if (IS_ERR(trans)) {
1987                         ret = PTR_ERR(trans);
1988
1989                         /*
1990                          * We committed the transaction and there's no currently
1991                          * running transaction, this means everything we care
1992                          * about made it to disk and we are done.
1993                          */
1994                         if (ret == -ENOENT)
1995                                 ret = 0;
1996                         goto out;
1997                 }
1998         }
1999
2000         ret = btrfs_commit_transaction(trans);
2001 out:
2002         ASSERT(list_empty(&ctx.list));
2003         ASSERT(list_empty(&ctx.conflict_inodes));
2004         err = file_check_and_advance_wb_err(file);
2005         if (!ret)
2006                 ret = err;
2007         return ret > 0 ? -EIO : ret;
2008
2009 out_release_extents:
2010         btrfs_release_log_ctx_extents(&ctx);
2011         btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
2012         goto out;
2013 }
2014
2015 static const struct vm_operations_struct btrfs_file_vm_ops = {
2016         .fault          = filemap_fault,
2017         .map_pages      = filemap_map_pages,
2018         .page_mkwrite   = btrfs_page_mkwrite,
2019 };
2020
2021 static int btrfs_file_mmap(struct file  *filp, struct vm_area_struct *vma)
2022 {
2023         struct address_space *mapping = filp->f_mapping;
2024
2025         if (!mapping->a_ops->read_folio)
2026                 return -ENOEXEC;
2027
2028         file_accessed(filp);
2029         vma->vm_ops = &btrfs_file_vm_ops;
2030
2031         return 0;
2032 }
2033
2034 static int hole_mergeable(struct btrfs_inode *inode, struct extent_buffer *leaf,
2035                           int slot, u64 start, u64 end)
2036 {
2037         struct btrfs_file_extent_item *fi;
2038         struct btrfs_key key;
2039
2040         if (slot < 0 || slot >= btrfs_header_nritems(leaf))
2041                 return 0;
2042
2043         btrfs_item_key_to_cpu(leaf, &key, slot);
2044         if (key.objectid != btrfs_ino(inode) ||
2045             key.type != BTRFS_EXTENT_DATA_KEY)
2046                 return 0;
2047
2048         fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
2049
2050         if (btrfs_file_extent_type(leaf, fi) != BTRFS_FILE_EXTENT_REG)
2051                 return 0;
2052
2053         if (btrfs_file_extent_disk_bytenr(leaf, fi))
2054                 return 0;
2055
2056         if (key.offset == end)
2057                 return 1;
2058         if (key.offset + btrfs_file_extent_num_bytes(leaf, fi) == start)
2059                 return 1;
2060         return 0;
2061 }
2062
2063 static int fill_holes(struct btrfs_trans_handle *trans,
2064                 struct btrfs_inode *inode,
2065                 struct btrfs_path *path, u64 offset, u64 end)
2066 {
2067         struct btrfs_fs_info *fs_info = trans->fs_info;
2068         struct btrfs_root *root = inode->root;
2069         struct extent_buffer *leaf;
2070         struct btrfs_file_extent_item *fi;
2071         struct extent_map *hole_em;
2072         struct btrfs_key key;
2073         int ret;
2074
2075         if (btrfs_fs_incompat(fs_info, NO_HOLES))
2076                 goto out;
2077
2078         key.objectid = btrfs_ino(inode);
2079         key.type = BTRFS_EXTENT_DATA_KEY;
2080         key.offset = offset;
2081
2082         ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
2083         if (ret <= 0) {
2084                 /*
2085                  * We should have dropped this offset, so if we find it then
2086                  * something has gone horribly wrong.
2087                  */
2088                 if (ret == 0)
2089                         ret = -EINVAL;
2090                 return ret;
2091         }
2092
2093         leaf = path->nodes[0];
2094         if (hole_mergeable(inode, leaf, path->slots[0] - 1, offset, end)) {
2095                 u64 num_bytes;
2096
2097                 path->slots[0]--;
2098                 fi = btrfs_item_ptr(leaf, path->slots[0],
2099                                     struct btrfs_file_extent_item);
2100                 num_bytes = btrfs_file_extent_num_bytes(leaf, fi) +
2101                         end - offset;
2102                 btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);
2103                 btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);
2104                 btrfs_set_file_extent_offset(leaf, fi, 0);
2105                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
2106                 btrfs_mark_buffer_dirty(leaf);
2107                 goto out;
2108         }
2109
2110         if (hole_mergeable(inode, leaf, path->slots[0], offset, end)) {
2111                 u64 num_bytes;
2112
2113                 key.offset = offset;
2114                 btrfs_set_item_key_safe(fs_info, path, &key);
2115                 fi = btrfs_item_ptr(leaf, path->slots[0],
2116                                     struct btrfs_file_extent_item);
2117                 num_bytes = btrfs_file_extent_num_bytes(leaf, fi) + end -
2118                         offset;
2119                 btrfs_set_file_extent_num_bytes(leaf, fi, num_bytes);
2120                 btrfs_set_file_extent_ram_bytes(leaf, fi, num_bytes);
2121                 btrfs_set_file_extent_offset(leaf, fi, 0);
2122                 btrfs_set_file_extent_generation(leaf, fi, trans->transid);
2123                 btrfs_mark_buffer_dirty(leaf);
2124                 goto out;
2125         }
2126         btrfs_release_path(path);
2127
2128         ret = btrfs_insert_hole_extent(trans, root, btrfs_ino(inode), offset,
2129                                        end - offset);
2130         if (ret)
2131                 return ret;
2132
2133 out:
2134         btrfs_release_path(path);
2135
2136         hole_em = alloc_extent_map();
2137         if (!hole_em) {
2138                 btrfs_drop_extent_map_range(inode, offset, end - 1, false);
2139                 btrfs_set_inode_full_sync(inode);
2140         } else {
2141                 hole_em->start = offset;
2142                 hole_em->len = end - offset;
2143                 hole_em->ram_bytes = hole_em->len;
2144                 hole_em->orig_start = offset;
2145
2146                 hole_em->block_start = EXTENT_MAP_HOLE;
2147                 hole_em->block_len = 0;
2148                 hole_em->orig_block_len = 0;
2149                 hole_em->compress_type = BTRFS_COMPRESS_NONE;
2150                 hole_em->generation = trans->transid;
2151
2152                 ret = btrfs_replace_extent_map_range(inode, hole_em, true);
2153                 free_extent_map(hole_em);
2154                 if (ret)
2155                         btrfs_set_inode_full_sync(inode);
2156         }
2157
2158         return 0;
2159 }
2160
2161 /*
2162  * Find a hole extent on given inode and change start/len to the end of hole
2163  * extent.(hole/vacuum extent whose em->start <= start &&
2164  *         em->start + em->len > start)
2165  * When a hole extent is found, return 1 and modify start/len.
2166  */
2167 static int find_first_non_hole(struct btrfs_inode *inode, u64 *start, u64 *len)
2168 {
2169         struct btrfs_fs_info *fs_info = inode->root->fs_info;
2170         struct extent_map *em;
2171         int ret = 0;
2172
2173         em = btrfs_get_extent(inode, NULL, 0,
2174                               round_down(*start, fs_info->sectorsize),
2175                               round_up(*len, fs_info->sectorsize));
2176         if (IS_ERR(em))
2177                 return PTR_ERR(em);
2178
2179         /* Hole or vacuum extent(only exists in no-hole mode) */
2180         if (em->block_start == EXTENT_MAP_HOLE) {
2181                 ret = 1;
2182                 *len = em->start + em->len > *start + *len ?
2183                        0 : *start + *len - em->start - em->len;
2184                 *start = em->start + em->len;
2185         }
2186         free_extent_map(em);
2187         return ret;
2188 }
2189
2190 static void btrfs_punch_hole_lock_range(struct inode *inode,
2191                                         const u64 lockstart,
2192                                         const u64 lockend,
2193                                         struct extent_state **cached_state)
2194 {
2195         /*
2196          * For subpage case, if the range is not at page boundary, we could
2197          * have pages at the leading/tailing part of the range.
2198          * This could lead to dead loop since filemap_range_has_page()
2199          * will always return true.
2200          * So here we need to do extra page alignment for
2201          * filemap_range_has_page().
2202          */
2203         const u64 page_lockstart = round_up(lockstart, PAGE_SIZE);
2204         const u64 page_lockend = round_down(lockend + 1, PAGE_SIZE) - 1;
2205
2206         while (1) {
2207                 truncate_pagecache_range(inode, lockstart, lockend);
2208
2209                 lock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,
2210                             cached_state);
2211                 /*
2212                  * We can't have ordered extents in the range, nor dirty/writeback
2213                  * pages, because we have locked the inode's VFS lock in exclusive
2214                  * mode, we have locked the inode's i_mmap_lock in exclusive mode,
2215                  * we have flushed all delalloc in the range and we have waited
2216                  * for any ordered extents in the range to complete.
2217                  * We can race with anyone reading pages from this range, so after
2218                  * locking the range check if we have pages in the range, and if
2219                  * we do, unlock the range and retry.
2220                  */
2221                 if (!filemap_range_has_page(inode->i_mapping, page_lockstart,
2222                                             page_lockend))
2223                         break;
2224
2225                 unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,
2226                               cached_state);
2227         }
2228
2229         btrfs_assert_inode_range_clean(BTRFS_I(inode), lockstart, lockend);
2230 }
2231
2232 static int btrfs_insert_replace_extent(struct btrfs_trans_handle *trans,
2233                                      struct btrfs_inode *inode,
2234                                      struct btrfs_path *path,
2235                                      struct btrfs_replace_extent_info *extent_info,
2236                                      const u64 replace_len,
2237                                      const u64 bytes_to_drop)
2238 {
2239         struct btrfs_fs_info *fs_info = trans->fs_info;
2240         struct btrfs_root *root = inode->root;
2241         struct btrfs_file_extent_item *extent;
2242         struct extent_buffer *leaf;
2243         struct btrfs_key key;
2244         int slot;
2245         struct btrfs_ref ref = { 0 };
2246         int ret;
2247
2248         if (replace_len == 0)
2249                 return 0;
2250
2251         if (extent_info->disk_offset == 0 &&
2252             btrfs_fs_incompat(fs_info, NO_HOLES)) {
2253                 btrfs_update_inode_bytes(inode, 0, bytes_to_drop);
2254                 return 0;
2255         }
2256
2257         key.objectid = btrfs_ino(inode);
2258         key.type = BTRFS_EXTENT_DATA_KEY;
2259         key.offset = extent_info->file_offset;
2260         ret = btrfs_insert_empty_item(trans, root, path, &key,
2261                                       sizeof(struct btrfs_file_extent_item));
2262         if (ret)
2263                 return ret;
2264         leaf = path->nodes[0];
2265         slot = path->slots[0];
2266         write_extent_buffer(leaf, extent_info->extent_buf,
2267                             btrfs_item_ptr_offset(leaf, slot),
2268                             sizeof(struct btrfs_file_extent_item));
2269         extent = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
2270         ASSERT(btrfs_file_extent_type(leaf, extent) != BTRFS_FILE_EXTENT_INLINE);
2271         btrfs_set_file_extent_offset(leaf, extent, extent_info->data_offset);
2272         btrfs_set_file_extent_num_bytes(leaf, extent, replace_len);
2273         if (extent_info->is_new_extent)
2274                 btrfs_set_file_extent_generation(leaf, extent, trans->transid);
2275         btrfs_mark_buffer_dirty(leaf);
2276         btrfs_release_path(path);
2277
2278         ret = btrfs_inode_set_file_extent_range(inode, extent_info->file_offset,
2279                                                 replace_len);
2280         if (ret)
2281                 return ret;
2282
2283         /* If it's a hole, nothing more needs to be done. */
2284         if (extent_info->disk_offset == 0) {
2285                 btrfs_update_inode_bytes(inode, 0, bytes_to_drop);
2286                 return 0;
2287         }
2288
2289         btrfs_update_inode_bytes(inode, replace_len, bytes_to_drop);
2290
2291         if (extent_info->is_new_extent && extent_info->insertions == 0) {
2292                 key.objectid = extent_info->disk_offset;
2293                 key.type = BTRFS_EXTENT_ITEM_KEY;
2294                 key.offset = extent_info->disk_len;
2295                 ret = btrfs_alloc_reserved_file_extent(trans, root,
2296                                                        btrfs_ino(inode),
2297                                                        extent_info->file_offset,
2298                                                        extent_info->qgroup_reserved,
2299                                                        &key);
2300         } else {
2301                 u64 ref_offset;
2302
2303                 btrfs_init_generic_ref(&ref, BTRFS_ADD_DELAYED_REF,
2304                                        extent_info->disk_offset,
2305                                        extent_info->disk_len, 0);
2306                 ref_offset = extent_info->file_offset - extent_info->data_offset;
2307                 btrfs_init_data_ref(&ref, root->root_key.objectid,
2308                                     btrfs_ino(inode), ref_offset, 0, false);
2309                 ret = btrfs_inc_extent_ref(trans, &ref);
2310         }
2311
2312         extent_info->insertions++;
2313
2314         return ret;
2315 }
2316
2317 /*
2318  * The respective range must have been previously locked, as well as the inode.
2319  * The end offset is inclusive (last byte of the range).
2320  * @extent_info is NULL for fallocate's hole punching and non-NULL when replacing
2321  * the file range with an extent.
2322  * When not punching a hole, we don't want to end up in a state where we dropped
2323  * extents without inserting a new one, so we must abort the transaction to avoid
2324  * a corruption.
2325  */
2326 int btrfs_replace_file_extents(struct btrfs_inode *inode,
2327                                struct btrfs_path *path, const u64 start,
2328                                const u64 end,
2329                                struct btrfs_replace_extent_info *extent_info,
2330                                struct btrfs_trans_handle **trans_out)
2331 {
2332         struct btrfs_drop_extents_args drop_args = { 0 };
2333         struct btrfs_root *root = inode->root;
2334         struct btrfs_fs_info *fs_info = root->fs_info;
2335         u64 min_size = btrfs_calc_insert_metadata_size(fs_info, 1);
2336         u64 ino_size = round_up(inode->vfs_inode.i_size, fs_info->sectorsize);
2337         struct btrfs_trans_handle *trans = NULL;
2338         struct btrfs_block_rsv *rsv;
2339         unsigned int rsv_count;
2340         u64 cur_offset;
2341         u64 len = end - start;
2342         int ret = 0;
2343
2344         if (end <= start)
2345                 return -EINVAL;
2346
2347         rsv = btrfs_alloc_block_rsv(fs_info, BTRFS_BLOCK_RSV_TEMP);
2348         if (!rsv) {
2349                 ret = -ENOMEM;
2350                 goto out;
2351         }
2352         rsv->size = btrfs_calc_insert_metadata_size(fs_info, 1);
2353         rsv->failfast = true;
2354
2355         /*
2356          * 1 - update the inode
2357          * 1 - removing the extents in the range
2358          * 1 - adding the hole extent if no_holes isn't set or if we are
2359          *     replacing the range with a new extent
2360          */
2361         if (!btrfs_fs_incompat(fs_info, NO_HOLES) || extent_info)
2362                 rsv_count = 3;
2363         else
2364                 rsv_count = 2;
2365
2366         trans = btrfs_start_transaction(root, rsv_count);
2367         if (IS_ERR(trans)) {
2368                 ret = PTR_ERR(trans);
2369                 trans = NULL;
2370                 goto out_free;
2371         }
2372
2373         ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv, rsv,
2374                                       min_size, false);
2375         if (WARN_ON(ret))
2376                 goto out_trans;
2377         trans->block_rsv = rsv;
2378
2379         cur_offset = start;
2380         drop_args.path = path;
2381         drop_args.end = end + 1;
2382         drop_args.drop_cache = true;
2383         while (cur_offset < end) {
2384                 drop_args.start = cur_offset;
2385                 ret = btrfs_drop_extents(trans, root, inode, &drop_args);
2386                 /* If we are punching a hole decrement the inode's byte count */
2387                 if (!extent_info)
2388                         btrfs_update_inode_bytes(inode, 0,
2389                                                  drop_args.bytes_found);
2390                 if (ret != -ENOSPC) {
2391                         /*
2392                          * The only time we don't want to abort is if we are
2393                          * attempting to clone a partial inline extent, in which
2394                          * case we'll get EOPNOTSUPP.  However if we aren't
2395                          * clone we need to abort no matter what, because if we
2396                          * got EOPNOTSUPP via prealloc then we messed up and
2397                          * need to abort.
2398                          */
2399                         if (ret &&
2400                             (ret != -EOPNOTSUPP ||
2401                              (extent_info && extent_info->is_new_extent)))
2402                                 btrfs_abort_transaction(trans, ret);
2403                         break;
2404                 }
2405
2406                 trans->block_rsv = &fs_info->trans_block_rsv;
2407
2408                 if (!extent_info && cur_offset < drop_args.drop_end &&
2409                     cur_offset < ino_size) {
2410                         ret = fill_holes(trans, inode, path, cur_offset,
2411                                          drop_args.drop_end);
2412                         if (ret) {
2413                                 /*
2414                                  * If we failed then we didn't insert our hole
2415                                  * entries for the area we dropped, so now the
2416                                  * fs is corrupted, so we must abort the
2417                                  * transaction.
2418                                  */
2419                                 btrfs_abort_transaction(trans, ret);
2420                                 break;
2421                         }
2422                 } else if (!extent_info && cur_offset < drop_args.drop_end) {
2423                         /*
2424                          * We are past the i_size here, but since we didn't
2425                          * insert holes we need to clear the mapped area so we
2426                          * know to not set disk_i_size in this area until a new
2427                          * file extent is inserted here.
2428                          */
2429                         ret = btrfs_inode_clear_file_extent_range(inode,
2430                                         cur_offset,
2431                                         drop_args.drop_end - cur_offset);
2432                         if (ret) {
2433                                 /*
2434                                  * We couldn't clear our area, so we could
2435                                  * presumably adjust up and corrupt the fs, so
2436                                  * we need to abort.
2437                                  */
2438                                 btrfs_abort_transaction(trans, ret);
2439                                 break;
2440                         }
2441                 }
2442
2443                 if (extent_info &&
2444                     drop_args.drop_end > extent_info->file_offset) {
2445                         u64 replace_len = drop_args.drop_end -
2446                                           extent_info->file_offset;
2447
2448                         ret = btrfs_insert_replace_extent(trans, inode, path,
2449                                         extent_info, replace_len,
2450                                         drop_args.bytes_found);
2451                         if (ret) {
2452                                 btrfs_abort_transaction(trans, ret);
2453                                 break;
2454                         }
2455                         extent_info->data_len -= replace_len;
2456                         extent_info->data_offset += replace_len;
2457                         extent_info->file_offset += replace_len;
2458                 }
2459
2460                 /*
2461                  * We are releasing our handle on the transaction, balance the
2462                  * dirty pages of the btree inode and flush delayed items, and
2463                  * then get a new transaction handle, which may now point to a
2464                  * new transaction in case someone else may have committed the
2465                  * transaction we used to replace/drop file extent items. So
2466                  * bump the inode's iversion and update mtime and ctime except
2467                  * if we are called from a dedupe context. This is because a
2468                  * power failure/crash may happen after the transaction is
2469                  * committed and before we finish replacing/dropping all the
2470                  * file extent items we need.
2471                  */
2472                 inode_inc_iversion(&inode->vfs_inode);
2473
2474                 if (!extent_info || extent_info->update_times) {
2475                         inode->vfs_inode.i_mtime = current_time(&inode->vfs_inode);
2476                         inode->vfs_inode.i_ctime = inode->vfs_inode.i_mtime;
2477                 }
2478
2479                 ret = btrfs_update_inode(trans, root, inode);
2480                 if (ret)
2481                         break;
2482
2483                 btrfs_end_transaction(trans);
2484                 btrfs_btree_balance_dirty(fs_info);
2485
2486                 trans = btrfs_start_transaction(root, rsv_count);
2487                 if (IS_ERR(trans)) {
2488                         ret = PTR_ERR(trans);
2489                         trans = NULL;
2490                         break;
2491                 }
2492
2493                 ret = btrfs_block_rsv_migrate(&fs_info->trans_block_rsv,
2494                                               rsv, min_size, false);
2495                 if (WARN_ON(ret))
2496                         break;
2497                 trans->block_rsv = rsv;
2498
2499                 cur_offset = drop_args.drop_end;
2500                 len = end - cur_offset;
2501                 if (!extent_info && len) {
2502                         ret = find_first_non_hole(inode, &cur_offset, &len);
2503                         if (unlikely(ret < 0))
2504                                 break;
2505                         if (ret && !len) {
2506                                 ret = 0;
2507                                 break;
2508                         }
2509                 }
2510         }
2511
2512         /*
2513          * If we were cloning, force the next fsync to be a full one since we
2514          * we replaced (or just dropped in the case of cloning holes when
2515          * NO_HOLES is enabled) file extent items and did not setup new extent
2516          * maps for the replacement extents (or holes).
2517          */
2518         if (extent_info && !extent_info->is_new_extent)
2519                 btrfs_set_inode_full_sync(inode);
2520
2521         if (ret)
2522                 goto out_trans;
2523
2524         trans->block_rsv = &fs_info->trans_block_rsv;
2525         /*
2526          * If we are using the NO_HOLES feature we might have had already an
2527          * hole that overlaps a part of the region [lockstart, lockend] and
2528          * ends at (or beyond) lockend. Since we have no file extent items to
2529          * represent holes, drop_end can be less than lockend and so we must
2530          * make sure we have an extent map representing the existing hole (the
2531          * call to __btrfs_drop_extents() might have dropped the existing extent
2532          * map representing the existing hole), otherwise the fast fsync path
2533          * will not record the existence of the hole region
2534          * [existing_hole_start, lockend].
2535          */
2536         if (drop_args.drop_end <= end)
2537                 drop_args.drop_end = end + 1;
2538         /*
2539          * Don't insert file hole extent item if it's for a range beyond eof
2540          * (because it's useless) or if it represents a 0 bytes range (when
2541          * cur_offset == drop_end).
2542          */
2543         if (!extent_info && cur_offset < ino_size &&
2544             cur_offset < drop_args.drop_end) {
2545                 ret = fill_holes(trans, inode, path, cur_offset,
2546                                  drop_args.drop_end);
2547                 if (ret) {
2548                         /* Same comment as above. */
2549                         btrfs_abort_transaction(trans, ret);
2550                         goto out_trans;
2551                 }
2552         } else if (!extent_info && cur_offset < drop_args.drop_end) {
2553                 /* See the comment in the loop above for the reasoning here. */
2554                 ret = btrfs_inode_clear_file_extent_range(inode, cur_offset,
2555                                         drop_args.drop_end - cur_offset);
2556                 if (ret) {
2557                         btrfs_abort_transaction(trans, ret);
2558                         goto out_trans;
2559                 }
2560
2561         }
2562         if (extent_info) {
2563                 ret = btrfs_insert_replace_extent(trans, inode, path,
2564                                 extent_info, extent_info->data_len,
2565                                 drop_args.bytes_found);
2566                 if (ret) {
2567                         btrfs_abort_transaction(trans, ret);
2568                         goto out_trans;
2569                 }
2570         }
2571
2572 out_trans:
2573         if (!trans)
2574                 goto out_free;
2575
2576         trans->block_rsv = &fs_info->trans_block_rsv;
2577         if (ret)
2578                 btrfs_end_transaction(trans);
2579         else
2580                 *trans_out = trans;
2581 out_free:
2582         btrfs_free_block_rsv(fs_info, rsv);
2583 out:
2584         return ret;
2585 }
2586
2587 static int btrfs_punch_hole(struct file *file, loff_t offset, loff_t len)
2588 {
2589         struct inode *inode = file_inode(file);
2590         struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
2591         struct btrfs_root *root = BTRFS_I(inode)->root;
2592         struct extent_state *cached_state = NULL;
2593         struct btrfs_path *path;
2594         struct btrfs_trans_handle *trans = NULL;
2595         u64 lockstart;
2596         u64 lockend;
2597         u64 tail_start;
2598         u64 tail_len;
2599         u64 orig_start = offset;
2600         int ret = 0;
2601         bool same_block;
2602         u64 ino_size;
2603         bool truncated_block = false;
2604         bool updated_inode = false;
2605
2606         btrfs_inode_lock(inode, BTRFS_ILOCK_MMAP);
2607
2608         ret = btrfs_wait_ordered_range(inode, offset, len);
2609         if (ret)
2610                 goto out_only_mutex;
2611
2612         ino_size = round_up(inode->i_size, fs_info->sectorsize);
2613         ret = find_first_non_hole(BTRFS_I(inode), &offset, &len);
2614         if (ret < 0)
2615                 goto out_only_mutex;
2616         if (ret && !len) {
2617                 /* Already in a large hole */
2618                 ret = 0;
2619                 goto out_only_mutex;
2620         }
2621
2622         ret = file_modified(file);
2623         if (ret)
2624                 goto out_only_mutex;
2625
2626         lockstart = round_up(offset, fs_info->sectorsize);
2627         lockend = round_down(offset + len, fs_info->sectorsize) - 1;
2628         same_block = (BTRFS_BYTES_TO_BLKS(fs_info, offset))
2629                 == (BTRFS_BYTES_TO_BLKS(fs_info, offset + len - 1));
2630         /*
2631          * We needn't truncate any block which is beyond the end of the file
2632          * because we are sure there is no data there.
2633          */
2634         /*
2635          * Only do this if we are in the same block and we aren't doing the
2636          * entire block.
2637          */
2638         if (same_block && len < fs_info->sectorsize) {
2639                 if (offset < ino_size) {
2640                         truncated_block = true;
2641                         ret = btrfs_truncate_block(BTRFS_I(inode), offset, len,
2642                                                    0);
2643                 } else {
2644                         ret = 0;
2645                 }
2646                 goto out_only_mutex;
2647         }
2648
2649         /* zero back part of the first block */
2650         if (offset < ino_size) {
2651                 truncated_block = true;
2652                 ret = btrfs_truncate_block(BTRFS_I(inode), offset, 0, 0);
2653                 if (ret) {
2654                         btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
2655                         return ret;
2656                 }
2657         }
2658
2659         /* Check the aligned pages after the first unaligned page,
2660          * if offset != orig_start, which means the first unaligned page
2661          * including several following pages are already in holes,
2662          * the extra check can be skipped */
2663         if (offset == orig_start) {
2664                 /* after truncate page, check hole again */
2665                 len = offset + len - lockstart;
2666                 offset = lockstart;
2667                 ret = find_first_non_hole(BTRFS_I(inode), &offset, &len);
2668                 if (ret < 0)
2669                         goto out_only_mutex;
2670                 if (ret && !len) {
2671                         ret = 0;
2672                         goto out_only_mutex;
2673                 }
2674                 lockstart = offset;
2675         }
2676
2677         /* Check the tail unaligned part is in a hole */
2678         tail_start = lockend + 1;
2679         tail_len = offset + len - tail_start;
2680         if (tail_len) {
2681                 ret = find_first_non_hole(BTRFS_I(inode), &tail_start, &tail_len);
2682                 if (unlikely(ret < 0))
2683                         goto out_only_mutex;
2684                 if (!ret) {
2685                         /* zero the front end of the last page */
2686                         if (tail_start + tail_len < ino_size) {
2687                                 truncated_block = true;
2688                                 ret = btrfs_truncate_block(BTRFS_I(inode),
2689                                                         tail_start + tail_len,
2690                                                         0, 1);
2691                                 if (ret)
2692                                         goto out_only_mutex;
2693                         }
2694                 }
2695         }
2696
2697         if (lockend < lockstart) {
2698                 ret = 0;
2699                 goto out_only_mutex;
2700         }
2701
2702         btrfs_punch_hole_lock_range(inode, lockstart, lockend, &cached_state);
2703
2704         path = btrfs_alloc_path();
2705         if (!path) {
2706                 ret = -ENOMEM;
2707                 goto out;
2708         }
2709
2710         ret = btrfs_replace_file_extents(BTRFS_I(inode), path, lockstart,
2711                                          lockend, NULL, &trans);
2712         btrfs_free_path(path);
2713         if (ret)
2714                 goto out;
2715
2716         ASSERT(trans != NULL);
2717         inode_inc_iversion(inode);
2718         inode->i_mtime = current_time(inode);
2719         inode->i_ctime = inode->i_mtime;
2720         ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
2721         updated_inode = true;
2722         btrfs_end_transaction(trans);
2723         btrfs_btree_balance_dirty(fs_info);
2724 out:
2725         unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,
2726                       &cached_state);
2727 out_only_mutex:
2728         if (!updated_inode && truncated_block && !ret) {
2729                 /*
2730                  * If we only end up zeroing part of a page, we still need to
2731                  * update the inode item, so that all the time fields are
2732                  * updated as well as the necessary btrfs inode in memory fields
2733                  * for detecting, at fsync time, if the inode isn't yet in the
2734                  * log tree or it's there but not up to date.
2735                  */
2736                 struct timespec64 now = current_time(inode);
2737
2738                 inode_inc_iversion(inode);
2739                 inode->i_mtime = now;
2740                 inode->i_ctime = now;
2741                 trans = btrfs_start_transaction(root, 1);
2742                 if (IS_ERR(trans)) {
2743                         ret = PTR_ERR(trans);
2744                 } else {
2745                         int ret2;
2746
2747                         ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
2748                         ret2 = btrfs_end_transaction(trans);
2749                         if (!ret)
2750                                 ret = ret2;
2751                 }
2752         }
2753         btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
2754         return ret;
2755 }
2756
2757 /* Helper structure to record which range is already reserved */
2758 struct falloc_range {
2759         struct list_head list;
2760         u64 start;
2761         u64 len;
2762 };
2763
2764 /*
2765  * Helper function to add falloc range
2766  *
2767  * Caller should have locked the larger range of extent containing
2768  * [start, len)
2769  */
2770 static int add_falloc_range(struct list_head *head, u64 start, u64 len)
2771 {
2772         struct falloc_range *range = NULL;
2773
2774         if (!list_empty(head)) {
2775                 /*
2776                  * As fallocate iterates by bytenr order, we only need to check
2777                  * the last range.
2778                  */
2779                 range = list_last_entry(head, struct falloc_range, list);
2780                 if (range->start + range->len == start) {
2781                         range->len += len;
2782                         return 0;
2783                 }
2784         }
2785
2786         range = kmalloc(sizeof(*range), GFP_KERNEL);
2787         if (!range)
2788                 return -ENOMEM;
2789         range->start = start;
2790         range->len = len;
2791         list_add_tail(&range->list, head);
2792         return 0;
2793 }
2794
2795 static int btrfs_fallocate_update_isize(struct inode *inode,
2796                                         const u64 end,
2797                                         const int mode)
2798 {
2799         struct btrfs_trans_handle *trans;
2800         struct btrfs_root *root = BTRFS_I(inode)->root;
2801         int ret;
2802         int ret2;
2803
2804         if (mode & FALLOC_FL_KEEP_SIZE || end <= i_size_read(inode))
2805                 return 0;
2806
2807         trans = btrfs_start_transaction(root, 1);
2808         if (IS_ERR(trans))
2809                 return PTR_ERR(trans);
2810
2811         inode->i_ctime = current_time(inode);
2812         i_size_write(inode, end);
2813         btrfs_inode_safe_disk_i_size_write(BTRFS_I(inode), 0);
2814         ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
2815         ret2 = btrfs_end_transaction(trans);
2816
2817         return ret ? ret : ret2;
2818 }
2819
2820 enum {
2821         RANGE_BOUNDARY_WRITTEN_EXTENT,
2822         RANGE_BOUNDARY_PREALLOC_EXTENT,
2823         RANGE_BOUNDARY_HOLE,
2824 };
2825
2826 static int btrfs_zero_range_check_range_boundary(struct btrfs_inode *inode,
2827                                                  u64 offset)
2828 {
2829         const u64 sectorsize = inode->root->fs_info->sectorsize;
2830         struct extent_map *em;
2831         int ret;
2832
2833         offset = round_down(offset, sectorsize);
2834         em = btrfs_get_extent(inode, NULL, 0, offset, sectorsize);
2835         if (IS_ERR(em))
2836                 return PTR_ERR(em);
2837
2838         if (em->block_start == EXTENT_MAP_HOLE)
2839                 ret = RANGE_BOUNDARY_HOLE;
2840         else if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
2841                 ret = RANGE_BOUNDARY_PREALLOC_EXTENT;
2842         else
2843                 ret = RANGE_BOUNDARY_WRITTEN_EXTENT;
2844
2845         free_extent_map(em);
2846         return ret;
2847 }
2848
2849 static int btrfs_zero_range(struct inode *inode,
2850                             loff_t offset,
2851                             loff_t len,
2852                             const int mode)
2853 {
2854         struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
2855         struct extent_map *em;
2856         struct extent_changeset *data_reserved = NULL;
2857         int ret;
2858         u64 alloc_hint = 0;
2859         const u64 sectorsize = fs_info->sectorsize;
2860         u64 alloc_start = round_down(offset, sectorsize);
2861         u64 alloc_end = round_up(offset + len, sectorsize);
2862         u64 bytes_to_reserve = 0;
2863         bool space_reserved = false;
2864
2865         em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, alloc_start,
2866                               alloc_end - alloc_start);
2867         if (IS_ERR(em)) {
2868                 ret = PTR_ERR(em);
2869                 goto out;
2870         }
2871
2872         /*
2873          * Avoid hole punching and extent allocation for some cases. More cases
2874          * could be considered, but these are unlikely common and we keep things
2875          * as simple as possible for now. Also, intentionally, if the target
2876          * range contains one or more prealloc extents together with regular
2877          * extents and holes, we drop all the existing extents and allocate a
2878          * new prealloc extent, so that we get a larger contiguous disk extent.
2879          */
2880         if (em->start <= alloc_start &&
2881             test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
2882                 const u64 em_end = em->start + em->len;
2883
2884                 if (em_end >= offset + len) {
2885                         /*
2886                          * The whole range is already a prealloc extent,
2887                          * do nothing except updating the inode's i_size if
2888                          * needed.
2889                          */
2890                         free_extent_map(em);
2891                         ret = btrfs_fallocate_update_isize(inode, offset + len,
2892                                                            mode);
2893                         goto out;
2894                 }
2895                 /*
2896                  * Part of the range is already a prealloc extent, so operate
2897                  * only on the remaining part of the range.
2898                  */
2899                 alloc_start = em_end;
2900                 ASSERT(IS_ALIGNED(alloc_start, sectorsize));
2901                 len = offset + len - alloc_start;
2902                 offset = alloc_start;
2903                 alloc_hint = em->block_start + em->len;
2904         }
2905         free_extent_map(em);
2906
2907         if (BTRFS_BYTES_TO_BLKS(fs_info, offset) ==
2908             BTRFS_BYTES_TO_BLKS(fs_info, offset + len - 1)) {
2909                 em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, alloc_start,
2910                                       sectorsize);
2911                 if (IS_ERR(em)) {
2912                         ret = PTR_ERR(em);
2913                         goto out;
2914                 }
2915
2916                 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
2917                         free_extent_map(em);
2918                         ret = btrfs_fallocate_update_isize(inode, offset + len,
2919                                                            mode);
2920                         goto out;
2921                 }
2922                 if (len < sectorsize && em->block_start != EXTENT_MAP_HOLE) {
2923                         free_extent_map(em);
2924                         ret = btrfs_truncate_block(BTRFS_I(inode), offset, len,
2925                                                    0);
2926                         if (!ret)
2927                                 ret = btrfs_fallocate_update_isize(inode,
2928                                                                    offset + len,
2929                                                                    mode);
2930                         return ret;
2931                 }
2932                 free_extent_map(em);
2933                 alloc_start = round_down(offset, sectorsize);
2934                 alloc_end = alloc_start + sectorsize;
2935                 goto reserve_space;
2936         }
2937
2938         alloc_start = round_up(offset, sectorsize);
2939         alloc_end = round_down(offset + len, sectorsize);
2940
2941         /*
2942          * For unaligned ranges, check the pages at the boundaries, they might
2943          * map to an extent, in which case we need to partially zero them, or
2944          * they might map to a hole, in which case we need our allocation range
2945          * to cover them.
2946          */
2947         if (!IS_ALIGNED(offset, sectorsize)) {
2948                 ret = btrfs_zero_range_check_range_boundary(BTRFS_I(inode),
2949                                                             offset);
2950                 if (ret < 0)
2951                         goto out;
2952                 if (ret == RANGE_BOUNDARY_HOLE) {
2953                         alloc_start = round_down(offset, sectorsize);
2954                         ret = 0;
2955                 } else if (ret == RANGE_BOUNDARY_WRITTEN_EXTENT) {
2956                         ret = btrfs_truncate_block(BTRFS_I(inode), offset, 0, 0);
2957                         if (ret)
2958                                 goto out;
2959                 } else {
2960                         ret = 0;
2961                 }
2962         }
2963
2964         if (!IS_ALIGNED(offset + len, sectorsize)) {
2965                 ret = btrfs_zero_range_check_range_boundary(BTRFS_I(inode),
2966                                                             offset + len);
2967                 if (ret < 0)
2968                         goto out;
2969                 if (ret == RANGE_BOUNDARY_HOLE) {
2970                         alloc_end = round_up(offset + len, sectorsize);
2971                         ret = 0;
2972                 } else if (ret == RANGE_BOUNDARY_WRITTEN_EXTENT) {
2973                         ret = btrfs_truncate_block(BTRFS_I(inode), offset + len,
2974                                                    0, 1);
2975                         if (ret)
2976                                 goto out;
2977                 } else {
2978                         ret = 0;
2979                 }
2980         }
2981
2982 reserve_space:
2983         if (alloc_start < alloc_end) {
2984                 struct extent_state *cached_state = NULL;
2985                 const u64 lockstart = alloc_start;
2986                 const u64 lockend = alloc_end - 1;
2987
2988                 bytes_to_reserve = alloc_end - alloc_start;
2989                 ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode),
2990                                                       bytes_to_reserve);
2991                 if (ret < 0)
2992                         goto out;
2993                 space_reserved = true;
2994                 btrfs_punch_hole_lock_range(inode, lockstart, lockend,
2995                                             &cached_state);
2996                 ret = btrfs_qgroup_reserve_data(BTRFS_I(inode), &data_reserved,
2997                                                 alloc_start, bytes_to_reserve);
2998                 if (ret) {
2999                         unlock_extent(&BTRFS_I(inode)->io_tree, lockstart,
3000                                       lockend, &cached_state);
3001                         goto out;
3002                 }
3003                 ret = btrfs_prealloc_file_range(inode, mode, alloc_start,
3004                                                 alloc_end - alloc_start,
3005                                                 i_blocksize(inode),
3006                                                 offset + len, &alloc_hint);
3007                 unlock_extent(&BTRFS_I(inode)->io_tree, lockstart, lockend,
3008                               &cached_state);
3009                 /* btrfs_prealloc_file_range releases reserved space on error */
3010                 if (ret) {
3011                         space_reserved = false;
3012                         goto out;
3013                 }
3014         }
3015         ret = btrfs_fallocate_update_isize(inode, offset + len, mode);
3016  out:
3017         if (ret && space_reserved)
3018                 btrfs_free_reserved_data_space(BTRFS_I(inode), data_reserved,
3019                                                alloc_start, bytes_to_reserve);
3020         extent_changeset_free(data_reserved);
3021
3022         return ret;
3023 }
3024
3025 static long btrfs_fallocate(struct file *file, int mode,
3026                             loff_t offset, loff_t len)
3027 {
3028         struct inode *inode = file_inode(file);
3029         struct extent_state *cached_state = NULL;
3030         struct extent_changeset *data_reserved = NULL;
3031         struct falloc_range *range;
3032         struct falloc_range *tmp;
3033         struct list_head reserve_list;
3034         u64 cur_offset;
3035         u64 last_byte;
3036         u64 alloc_start;
3037         u64 alloc_end;
3038         u64 alloc_hint = 0;
3039         u64 locked_end;
3040         u64 actual_end = 0;
3041         u64 data_space_needed = 0;
3042         u64 data_space_reserved = 0;
3043         u64 qgroup_reserved = 0;
3044         struct extent_map *em;
3045         int blocksize = BTRFS_I(inode)->root->fs_info->sectorsize;
3046         int ret;
3047
3048         /* Do not allow fallocate in ZONED mode */
3049         if (btrfs_is_zoned(btrfs_sb(inode->i_sb)))
3050                 return -EOPNOTSUPP;
3051
3052         alloc_start = round_down(offset, blocksize);
3053         alloc_end = round_up(offset + len, blocksize);
3054         cur_offset = alloc_start;
3055
3056         /* Make sure we aren't being give some crap mode */
3057         if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
3058                      FALLOC_FL_ZERO_RANGE))
3059                 return -EOPNOTSUPP;
3060
3061         if (mode & FALLOC_FL_PUNCH_HOLE)
3062                 return btrfs_punch_hole(file, offset, len);
3063
3064         btrfs_inode_lock(inode, BTRFS_ILOCK_MMAP);
3065
3066         if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > inode->i_size) {
3067                 ret = inode_newsize_ok(inode, offset + len);
3068                 if (ret)
3069                         goto out;
3070         }
3071
3072         ret = file_modified(file);
3073         if (ret)
3074                 goto out;
3075
3076         /*
3077          * TODO: Move these two operations after we have checked
3078          * accurate reserved space, or fallocate can still fail but
3079          * with page truncated or size expanded.
3080          *
3081          * But that's a minor problem and won't do much harm BTW.
3082          */
3083         if (alloc_start > inode->i_size) {
3084                 ret = btrfs_cont_expand(BTRFS_I(inode), i_size_read(inode),
3085                                         alloc_start);
3086                 if (ret)
3087                         goto out;
3088         } else if (offset + len > inode->i_size) {
3089                 /*
3090                  * If we are fallocating from the end of the file onward we
3091                  * need to zero out the end of the block if i_size lands in the
3092                  * middle of a block.
3093                  */
3094                 ret = btrfs_truncate_block(BTRFS_I(inode), inode->i_size, 0, 0);
3095                 if (ret)
3096                         goto out;
3097         }
3098
3099         /*
3100          * We have locked the inode at the VFS level (in exclusive mode) and we
3101          * have locked the i_mmap_lock lock (in exclusive mode). Now before
3102          * locking the file range, flush all dealloc in the range and wait for
3103          * all ordered extents in the range to complete. After this we can lock
3104          * the file range and, due to the previous locking we did, we know there
3105          * can't be more delalloc or ordered extents in the range.
3106          */
3107         ret = btrfs_wait_ordered_range(inode, alloc_start,
3108                                        alloc_end - alloc_start);
3109         if (ret)
3110                 goto out;
3111
3112         if (mode & FALLOC_FL_ZERO_RANGE) {
3113                 ret = btrfs_zero_range(inode, offset, len, mode);
3114                 btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
3115                 return ret;
3116         }
3117
3118         locked_end = alloc_end - 1;
3119         lock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end,
3120                     &cached_state);
3121
3122         btrfs_assert_inode_range_clean(BTRFS_I(inode), alloc_start, locked_end);
3123
3124         /* First, check if we exceed the qgroup limit */
3125         INIT_LIST_HEAD(&reserve_list);
3126         while (cur_offset < alloc_end) {
3127                 em = btrfs_get_extent(BTRFS_I(inode), NULL, 0, cur_offset,
3128                                       alloc_end - cur_offset);
3129                 if (IS_ERR(em)) {
3130                         ret = PTR_ERR(em);
3131                         break;
3132                 }
3133                 last_byte = min(extent_map_end(em), alloc_end);
3134                 actual_end = min_t(u64, extent_map_end(em), offset + len);
3135                 last_byte = ALIGN(last_byte, blocksize);
3136                 if (em->block_start == EXTENT_MAP_HOLE ||
3137                     (cur_offset >= inode->i_size &&
3138                      !test_bit(EXTENT_FLAG_PREALLOC, &em->flags))) {
3139                         const u64 range_len = last_byte - cur_offset;
3140
3141                         ret = add_falloc_range(&reserve_list, cur_offset, range_len);
3142                         if (ret < 0) {
3143                                 free_extent_map(em);
3144                                 break;
3145                         }
3146                         ret = btrfs_qgroup_reserve_data(BTRFS_I(inode),
3147                                         &data_reserved, cur_offset, range_len);
3148                         if (ret < 0) {
3149                                 free_extent_map(em);
3150                                 break;
3151                         }
3152                         qgroup_reserved += range_len;
3153                         data_space_needed += range_len;
3154                 }
3155                 free_extent_map(em);
3156                 cur_offset = last_byte;
3157         }
3158
3159         if (!ret && data_space_needed > 0) {
3160                 /*
3161                  * We are safe to reserve space here as we can't have delalloc
3162                  * in the range, see above.
3163                  */
3164                 ret = btrfs_alloc_data_chunk_ondemand(BTRFS_I(inode),
3165                                                       data_space_needed);
3166                 if (!ret)
3167                         data_space_reserved = data_space_needed;
3168         }
3169
3170         /*
3171          * If ret is still 0, means we're OK to fallocate.
3172          * Or just cleanup the list and exit.
3173          */
3174         list_for_each_entry_safe(range, tmp, &reserve_list, list) {
3175                 if (!ret) {
3176                         ret = btrfs_prealloc_file_range(inode, mode,
3177                                         range->start,
3178                                         range->len, i_blocksize(inode),
3179                                         offset + len, &alloc_hint);
3180                         /*
3181                          * btrfs_prealloc_file_range() releases space even
3182                          * if it returns an error.
3183                          */
3184                         data_space_reserved -= range->len;
3185                         qgroup_reserved -= range->len;
3186                 } else if (data_space_reserved > 0) {
3187                         btrfs_free_reserved_data_space(BTRFS_I(inode),
3188                                                data_reserved, range->start,
3189                                                range->len);
3190                         data_space_reserved -= range->len;
3191                         qgroup_reserved -= range->len;
3192                 } else if (qgroup_reserved > 0) {
3193                         btrfs_qgroup_free_data(BTRFS_I(inode), data_reserved,
3194                                                range->start, range->len, NULL);
3195                         qgroup_reserved -= range->len;
3196                 }
3197                 list_del(&range->list);
3198                 kfree(range);
3199         }
3200         if (ret < 0)
3201                 goto out_unlock;
3202
3203         /*
3204          * We didn't need to allocate any more space, but we still extended the
3205          * size of the file so we need to update i_size and the inode item.
3206          */
3207         ret = btrfs_fallocate_update_isize(inode, actual_end, mode);
3208 out_unlock:
3209         unlock_extent(&BTRFS_I(inode)->io_tree, alloc_start, locked_end,
3210                       &cached_state);
3211 out:
3212         btrfs_inode_unlock(inode, BTRFS_ILOCK_MMAP);
3213         extent_changeset_free(data_reserved);
3214         return ret;
3215 }
3216
3217 /*
3218  * Helper for btrfs_find_delalloc_in_range(). Find a subrange in a given range
3219  * that has unflushed and/or flushing delalloc. There might be other adjacent
3220  * subranges after the one it found, so btrfs_find_delalloc_in_range() keeps
3221  * looping while it gets adjacent subranges, and merging them together.
3222  */
3223 static bool find_delalloc_subrange(struct btrfs_inode *inode, u64 start, u64 end,
3224                                    u64 *delalloc_start_ret, u64 *delalloc_end_ret)
3225 {
3226         const u64 len = end + 1 - start;
3227         struct extent_map_tree *em_tree = &inode->extent_tree;
3228         struct extent_map *em;
3229         u64 em_end;
3230         u64 delalloc_len;
3231
3232         /*
3233          * Search the io tree first for EXTENT_DELALLOC. If we find any, it
3234          * means we have delalloc (dirty pages) for which writeback has not
3235          * started yet.
3236          */
3237         *delalloc_start_ret = start;
3238         delalloc_len = count_range_bits(&inode->io_tree, delalloc_start_ret, end,
3239                                         len, EXTENT_DELALLOC, 1);
3240         /*
3241          * If delalloc was found then *delalloc_start_ret has a sector size
3242          * aligned value (rounded down).
3243          */
3244         if (delalloc_len > 0)
3245                 *delalloc_end_ret = *delalloc_start_ret + delalloc_len - 1;
3246
3247         /*
3248          * Now also check if there's any extent map in the range that does not
3249          * map to a hole or prealloc extent. We do this because:
3250          *
3251          * 1) When delalloc is flushed, the file range is locked, we clear the
3252          *    EXTENT_DELALLOC bit from the io tree and create an extent map for
3253          *    an allocated extent. So we might just have been called after
3254          *    delalloc is flushed and before the ordered extent completes and
3255          *    inserts the new file extent item in the subvolume's btree;
3256          *
3257          * 2) We may have an extent map created by flushing delalloc for a
3258          *    subrange that starts before the subrange we found marked with
3259          *    EXTENT_DELALLOC in the io tree.
3260          */
3261         read_lock(&em_tree->lock);
3262         em = lookup_extent_mapping(em_tree, start, len);
3263         if (!em) {
3264                 read_unlock(&em_tree->lock);
3265                 return (delalloc_len > 0);
3266         }
3267
3268         /* extent_map_end() returns a non-inclusive end offset. */
3269         em_end = extent_map_end(em);
3270
3271         /*
3272          * If we have a hole/prealloc extent map, check the next one if this one
3273          * ends before our range's end.
3274          */
3275         if ((em->block_start == EXTENT_MAP_HOLE ||
3276              test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) && em_end < end) {
3277                 struct extent_map *next_em;
3278
3279                 next_em = btrfs_next_extent_map(em_tree, em);
3280                 free_extent_map(em);
3281
3282                 /*
3283                  * There's no next extent map or the next one starts beyond our
3284                  * range, return the range found in the io tree (if any).
3285                  */
3286                 if (!next_em || next_em->start > end) {
3287                         read_unlock(&em_tree->lock);
3288                         free_extent_map(next_em);
3289                         return (delalloc_len > 0);
3290                 }
3291
3292                 em_end = extent_map_end(next_em);
3293                 em = next_em;
3294         }
3295
3296         read_unlock(&em_tree->lock);
3297
3298         /*
3299          * We have a hole or prealloc extent that ends at or beyond our range's
3300          * end, return the range found in the io tree (if any).
3301          */
3302         if (em->block_start == EXTENT_MAP_HOLE ||
3303             test_bit(EXTENT_FLAG_PREALLOC, &em->flags)) {
3304                 free_extent_map(em);
3305                 return (delalloc_len > 0);
3306         }
3307
3308         /*
3309          * We don't have any range as EXTENT_DELALLOC in the io tree, so the
3310          * extent map is the only subrange representing delalloc.
3311          */
3312         if (delalloc_len == 0) {
3313                 *delalloc_start_ret = em->start;
3314                 *delalloc_end_ret = min(end, em_end - 1);
3315                 free_extent_map(em);
3316                 return true;
3317         }
3318
3319         /*
3320          * The extent map represents a delalloc range that starts before the
3321          * delalloc range we found in the io tree.
3322          */
3323         if (em->start < *delalloc_start_ret) {
3324                 *delalloc_start_ret = em->start;
3325                 /*
3326                  * If the ranges are adjacent, return a combined range.
3327                  * Otherwise return the extent map's range.
3328                  */
3329                 if (em_end < *delalloc_start_ret)
3330                         *delalloc_end_ret = min(end, em_end - 1);
3331
3332                 free_extent_map(em);
3333                 return true;
3334         }
3335
3336         /*
3337          * The extent map starts after the delalloc range we found in the io
3338          * tree. If it's adjacent, return a combined range, otherwise return
3339          * the range found in the io tree.
3340          */
3341         if (*delalloc_end_ret + 1 == em->start)
3342                 *delalloc_end_ret = min(end, em_end - 1);
3343
3344         free_extent_map(em);
3345         return true;
3346 }
3347
3348 /*
3349  * Check if there's delalloc in a given range.
3350  *
3351  * @inode:               The inode.
3352  * @start:               The start offset of the range. It does not need to be
3353  *                       sector size aligned.
3354  * @end:                 The end offset (inclusive value) of the search range.
3355  *                       It does not need to be sector size aligned.
3356  * @delalloc_start_ret:  Output argument, set to the start offset of the
3357  *                       subrange found with delalloc (may not be sector size
3358  *                       aligned).
3359  * @delalloc_end_ret:    Output argument, set to he end offset (inclusive value)
3360  *                       of the subrange found with delalloc.
3361  *
3362  * Returns true if a subrange with delalloc is found within the given range, and
3363  * if so it sets @delalloc_start_ret and @delalloc_end_ret with the start and
3364  * end offsets of the subrange.
3365  */
3366 bool btrfs_find_delalloc_in_range(struct btrfs_inode *inode, u64 start, u64 end,
3367                                   u64 *delalloc_start_ret, u64 *delalloc_end_ret)
3368 {
3369         u64 cur_offset = round_down(start, inode->root->fs_info->sectorsize);
3370         u64 prev_delalloc_end = 0;
3371         bool ret = false;
3372
3373         while (cur_offset <= end) {
3374                 u64 delalloc_start;
3375                 u64 delalloc_end;
3376                 bool delalloc;
3377
3378                 delalloc = find_delalloc_subrange(inode, cur_offset, end,
3379                                                   &delalloc_start,
3380                                                   &delalloc_end);
3381                 if (!delalloc)
3382                         break;
3383
3384                 if (prev_delalloc_end == 0) {
3385                         /* First subrange found. */
3386                         *delalloc_start_ret = max(delalloc_start, start);
3387                         *delalloc_end_ret = delalloc_end;
3388                         ret = true;
3389                 } else if (delalloc_start == prev_delalloc_end + 1) {
3390                         /* Subrange adjacent to the previous one, merge them. */
3391                         *delalloc_end_ret = delalloc_end;
3392                 } else {
3393                         /* Subrange not adjacent to the previous one, exit. */
3394                         break;
3395                 }
3396
3397                 prev_delalloc_end = delalloc_end;
3398                 cur_offset = delalloc_end + 1;
3399                 cond_resched();
3400         }
3401
3402         return ret;
3403 }
3404
3405 /*
3406  * Check if there's a hole or delalloc range in a range representing a hole (or
3407  * prealloc extent) found in the inode's subvolume btree.
3408  *
3409  * @inode:      The inode.
3410  * @whence:     Seek mode (SEEK_DATA or SEEK_HOLE).
3411  * @start:      Start offset of the hole region. It does not need to be sector
3412  *              size aligned.
3413  * @end:        End offset (inclusive value) of the hole region. It does not
3414  *              need to be sector size aligned.
3415  * @start_ret:  Return parameter, used to set the start of the subrange in the
3416  *              hole that matches the search criteria (seek mode), if such
3417  *              subrange is found (return value of the function is true).
3418  *              The value returned here may not be sector size aligned.
3419  *
3420  * Returns true if a subrange matching the given seek mode is found, and if one
3421  * is found, it updates @start_ret with the start of the subrange.
3422  */
3423 static bool find_desired_extent_in_hole(struct btrfs_inode *inode, int whence,
3424                                         u64 start, u64 end, u64 *start_ret)
3425 {
3426         u64 delalloc_start;
3427         u64 delalloc_end;
3428         bool delalloc;
3429
3430         delalloc = btrfs_find_delalloc_in_range(inode, start, end,
3431                                                 &delalloc_start, &delalloc_end);
3432         if (delalloc && whence == SEEK_DATA) {
3433                 *start_ret = delalloc_start;
3434                 return true;
3435         }
3436
3437         if (delalloc && whence == SEEK_HOLE) {
3438                 /*
3439                  * We found delalloc but it starts after out start offset. So we
3440                  * have a hole between our start offset and the delalloc start.
3441                  */
3442                 if (start < delalloc_start) {
3443                         *start_ret = start;
3444                         return true;
3445                 }
3446                 /*
3447                  * Delalloc range starts at our start offset.
3448                  * If the delalloc range's length is smaller than our range,
3449                  * then it means we have a hole that starts where the delalloc
3450                  * subrange ends.
3451                  */
3452                 if (delalloc_end < end) {
3453                         *start_ret = delalloc_end + 1;
3454                         return true;
3455                 }
3456
3457                 /* There's delalloc for the whole range. */
3458                 return false;
3459         }
3460
3461         if (!delalloc && whence == SEEK_HOLE) {
3462                 *start_ret = start;
3463                 return true;
3464         }
3465
3466         /*
3467          * No delalloc in the range and we are seeking for data. The caller has
3468          * to iterate to the next extent item in the subvolume btree.
3469          */
3470         return false;
3471 }
3472
3473 static loff_t find_desired_extent(struct btrfs_inode *inode, loff_t offset,
3474                                   int whence)
3475 {
3476         struct btrfs_fs_info *fs_info = inode->root->fs_info;
3477         struct extent_state *cached_state = NULL;
3478         const loff_t i_size = i_size_read(&inode->vfs_inode);
3479         const u64 ino = btrfs_ino(inode);
3480         struct btrfs_root *root = inode->root;
3481         struct btrfs_path *path;
3482         struct btrfs_key key;
3483         u64 last_extent_end;
3484         u64 lockstart;
3485         u64 lockend;
3486         u64 start;
3487         int ret;
3488         bool found = false;
3489
3490         if (i_size == 0 || offset >= i_size)
3491                 return -ENXIO;
3492
3493         /*
3494          * Quick path. If the inode has no prealloc extents and its number of
3495          * bytes used matches its i_size, then it can not have holes.
3496          */
3497         if (whence == SEEK_HOLE &&
3498             !(inode->flags & BTRFS_INODE_PREALLOC) &&
3499             inode_get_bytes(&inode->vfs_inode) == i_size)
3500                 return i_size;
3501
3502         /*
3503          * offset can be negative, in this case we start finding DATA/HOLE from
3504          * the very start of the file.
3505          */
3506         start = max_t(loff_t, 0, offset);
3507
3508         lockstart = round_down(start, fs_info->sectorsize);
3509         lockend = round_up(i_size, fs_info->sectorsize);
3510         if (lockend <= lockstart)
3511                 lockend = lockstart + fs_info->sectorsize;
3512         lockend--;
3513
3514         path = btrfs_alloc_path();
3515         if (!path)
3516                 return -ENOMEM;
3517         path->reada = READA_FORWARD;
3518
3519         key.objectid = ino;
3520         key.type = BTRFS_EXTENT_DATA_KEY;
3521         key.offset = start;
3522
3523         last_extent_end = lockstart;
3524
3525         lock_extent(&inode->io_tree, lockstart, lockend, &cached_state);
3526
3527         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3528         if (ret < 0) {
3529                 goto out;
3530         } else if (ret > 0 && path->slots[0] > 0) {
3531                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1);
3532                 if (key.objectid == ino && key.type == BTRFS_EXTENT_DATA_KEY)
3533                         path->slots[0]--;
3534         }
3535
3536         while (start < i_size) {
3537                 struct extent_buffer *leaf = path->nodes[0];
3538                 struct btrfs_file_extent_item *extent;
3539                 u64 extent_end;
3540                 u8 type;
3541
3542                 if (path->slots[0] >= btrfs_header_nritems(leaf)) {
3543                         ret = btrfs_next_leaf(root, path);
3544                         if (ret < 0)
3545                                 goto out;
3546                         else if (ret > 0)
3547                                 break;
3548
3549                         leaf = path->nodes[0];
3550                 }
3551
3552                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
3553                 if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)
3554                         break;
3555
3556                 extent_end = btrfs_file_extent_end(path);
3557
3558                 /*
3559                  * In the first iteration we may have a slot that points to an
3560                  * extent that ends before our start offset, so skip it.
3561                  */
3562                 if (extent_end <= start) {
3563                         path->slots[0]++;
3564                         continue;
3565                 }
3566
3567                 /* We have an implicit hole, NO_HOLES feature is likely set. */
3568                 if (last_extent_end < key.offset) {
3569                         u64 search_start = last_extent_end;
3570                         u64 found_start;
3571
3572                         /*
3573                          * First iteration, @start matches @offset and it's
3574                          * within the hole.
3575                          */
3576                         if (start == offset)
3577                                 search_start = offset;
3578
3579                         found = find_desired_extent_in_hole(inode, whence,
3580                                                             search_start,
3581                                                             key.offset - 1,
3582                                                             &found_start);
3583                         if (found) {
3584                                 start = found_start;
3585                                 break;
3586                         }
3587                         /*
3588                          * Didn't find data or a hole (due to delalloc) in the
3589                          * implicit hole range, so need to analyze the extent.
3590                          */
3591                 }
3592
3593                 extent = btrfs_item_ptr(leaf, path->slots[0],
3594                                         struct btrfs_file_extent_item);
3595                 type = btrfs_file_extent_type(leaf, extent);
3596
3597                 /*
3598                  * Can't access the extent's disk_bytenr field if this is an
3599                  * inline extent, since at that offset, it's where the extent
3600                  * data starts.
3601                  */
3602                 if (type == BTRFS_FILE_EXTENT_PREALLOC ||
3603                     (type == BTRFS_FILE_EXTENT_REG &&
3604                      btrfs_file_extent_disk_bytenr(leaf, extent) == 0)) {
3605                         /*
3606                          * Explicit hole or prealloc extent, search for delalloc.
3607                          * A prealloc extent is treated like a hole.
3608                          */
3609                         u64 search_start = key.offset;
3610                         u64 found_start;
3611
3612                         /*
3613                          * First iteration, @start matches @offset and it's
3614                          * within the hole.
3615                          */
3616                         if (start == offset)
3617                                 search_start = offset;
3618
3619                         found = find_desired_extent_in_hole(inode, whence,
3620                                                             search_start,
3621                                                             extent_end - 1,
3622                                                             &found_start);
3623                         if (found) {
3624                                 start = found_start;
3625                                 break;
3626                         }
3627                         /*
3628                          * Didn't find data or a hole (due to delalloc) in the
3629                          * implicit hole range, so need to analyze the next
3630                          * extent item.
3631                          */
3632                 } else {
3633                         /*
3634                          * Found a regular or inline extent.
3635                          * If we are seeking for data, adjust the start offset
3636                          * and stop, we're done.
3637                          */
3638                         if (whence == SEEK_DATA) {
3639                                 start = max_t(u64, key.offset, offset);
3640                                 found = true;
3641                                 break;
3642                         }
3643                         /*
3644                          * Else, we are seeking for a hole, check the next file
3645                          * extent item.
3646                          */
3647                 }
3648
3649                 start = extent_end;
3650                 last_extent_end = extent_end;
3651                 path->slots[0]++;
3652                 if (fatal_signal_pending(current)) {
3653                         ret = -EINTR;
3654                         goto out;
3655                 }
3656                 cond_resched();
3657         }
3658
3659         /* We have an implicit hole from the last extent found up to i_size. */
3660         if (!found && start < i_size) {
3661                 found = find_desired_extent_in_hole(inode, whence, start,
3662                                                     i_size - 1, &start);
3663                 if (!found)
3664                         start = i_size;
3665         }
3666
3667 out:
3668         unlock_extent(&inode->io_tree, lockstart, lockend, &cached_state);
3669         btrfs_free_path(path);
3670
3671         if (ret < 0)
3672                 return ret;
3673
3674         if (whence == SEEK_DATA && start >= i_size)
3675                 return -ENXIO;
3676
3677         return min_t(loff_t, start, i_size);
3678 }
3679
3680 static loff_t btrfs_file_llseek(struct file *file, loff_t offset, int whence)
3681 {
3682         struct inode *inode = file->f_mapping->host;
3683
3684         switch (whence) {
3685         default:
3686                 return generic_file_llseek(file, offset, whence);
3687         case SEEK_DATA:
3688         case SEEK_HOLE:
3689                 btrfs_inode_lock(inode, BTRFS_ILOCK_SHARED);
3690                 offset = find_desired_extent(BTRFS_I(inode), offset, whence);
3691                 btrfs_inode_unlock(inode, BTRFS_ILOCK_SHARED);
3692                 break;
3693         }
3694
3695         if (offset < 0)
3696                 return offset;
3697
3698         return vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
3699 }
3700
3701 static int btrfs_file_open(struct inode *inode, struct file *filp)
3702 {
3703         int ret;
3704
3705         filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_BUF_WASYNC;
3706
3707         ret = fsverity_file_open(inode, filp);
3708         if (ret)
3709                 return ret;
3710         return generic_file_open(inode, filp);
3711 }
3712
3713 static int check_direct_read(struct btrfs_fs_info *fs_info,
3714                              const struct iov_iter *iter, loff_t offset)
3715 {
3716         int ret;
3717         int i, seg;
3718
3719         ret = check_direct_IO(fs_info, iter, offset);
3720         if (ret < 0)
3721                 return ret;
3722
3723         if (!iter_is_iovec(iter))
3724                 return 0;
3725
3726         for (seg = 0; seg < iter->nr_segs; seg++)
3727                 for (i = seg + 1; i < iter->nr_segs; i++)
3728                         if (iter->iov[seg].iov_base == iter->iov[i].iov_base)
3729                                 return -EINVAL;
3730         return 0;
3731 }
3732
3733 static ssize_t btrfs_direct_read(struct kiocb *iocb, struct iov_iter *to)
3734 {
3735         struct inode *inode = file_inode(iocb->ki_filp);
3736         size_t prev_left = 0;
3737         ssize_t read = 0;
3738         ssize_t ret;
3739
3740         if (fsverity_active(inode))
3741                 return 0;
3742
3743         if (check_direct_read(btrfs_sb(inode->i_sb), to, iocb->ki_pos))
3744                 return 0;
3745
3746         btrfs_inode_lock(inode, BTRFS_ILOCK_SHARED);
3747 again:
3748         /*
3749          * This is similar to what we do for direct IO writes, see the comment
3750          * at btrfs_direct_write(), but we also disable page faults in addition
3751          * to disabling them only at the iov_iter level. This is because when
3752          * reading from a hole or prealloc extent, iomap calls iov_iter_zero(),
3753          * which can still trigger page fault ins despite having set ->nofault
3754          * to true of our 'to' iov_iter.
3755          *
3756          * The difference to direct IO writes is that we deadlock when trying
3757          * to lock the extent range in the inode's tree during he page reads
3758          * triggered by the fault in (while for writes it is due to waiting for
3759          * our own ordered extent). This is because for direct IO reads,
3760          * btrfs_dio_iomap_begin() returns with the extent range locked, which
3761          * is only unlocked in the endio callback (end_bio_extent_readpage()).
3762          */
3763         pagefault_disable();
3764         to->nofault = true;
3765         ret = btrfs_dio_read(iocb, to, read);
3766         to->nofault = false;
3767         pagefault_enable();
3768
3769         /* No increment (+=) because iomap returns a cumulative value. */
3770         if (ret > 0)
3771                 read = ret;
3772
3773         if (iov_iter_count(to) > 0 && (ret == -EFAULT || ret > 0)) {
3774                 const size_t left = iov_iter_count(to);
3775
3776                 if (left == prev_left) {
3777                         /*
3778                          * We didn't make any progress since the last attempt,
3779                          * fallback to a buffered read for the remainder of the
3780                          * range. This is just to avoid any possibility of looping
3781                          * for too long.
3782                          */
3783                         ret = read;
3784                 } else {
3785                         /*
3786                          * We made some progress since the last retry or this is
3787                          * the first time we are retrying. Fault in as many pages
3788                          * as possible and retry.
3789                          */
3790                         fault_in_iov_iter_writeable(to, left);
3791                         prev_left = left;
3792                         goto again;
3793                 }
3794         }
3795         btrfs_inode_unlock(inode, BTRFS_ILOCK_SHARED);
3796         return ret < 0 ? ret : read;
3797 }
3798
3799 static ssize_t btrfs_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
3800 {
3801         ssize_t ret = 0;
3802
3803         if (iocb->ki_flags & IOCB_DIRECT) {
3804                 ret = btrfs_direct_read(iocb, to);
3805                 if (ret < 0 || !iov_iter_count(to) ||
3806                     iocb->ki_pos >= i_size_read(file_inode(iocb->ki_filp)))
3807                         return ret;
3808         }
3809
3810         return filemap_read(iocb, to, ret);
3811 }
3812
3813 const struct file_operations btrfs_file_operations = {
3814         .llseek         = btrfs_file_llseek,
3815         .read_iter      = btrfs_file_read_iter,
3816         .splice_read    = generic_file_splice_read,
3817         .write_iter     = btrfs_file_write_iter,
3818         .splice_write   = iter_file_splice_write,
3819         .mmap           = btrfs_file_mmap,
3820         .open           = btrfs_file_open,
3821         .release        = btrfs_release_file,
3822         .get_unmapped_area = thp_get_unmapped_area,
3823         .fsync          = btrfs_sync_file,
3824         .fallocate      = btrfs_fallocate,
3825         .unlocked_ioctl = btrfs_ioctl,
3826 #ifdef CONFIG_COMPAT
3827         .compat_ioctl   = btrfs_compat_ioctl,
3828 #endif
3829         .remap_file_range = btrfs_remap_file_range,
3830 };
3831
3832 int btrfs_fdatawrite_range(struct inode *inode, loff_t start, loff_t end)
3833 {
3834         int ret;
3835
3836         /*
3837          * So with compression we will find and lock a dirty page and clear the
3838          * first one as dirty, setup an async extent, and immediately return
3839          * with the entire range locked but with nobody actually marked with
3840          * writeback.  So we can't just filemap_write_and_wait_range() and
3841          * expect it to work since it will just kick off a thread to do the
3842          * actual work.  So we need to call filemap_fdatawrite_range _again_
3843          * since it will wait on the page lock, which won't be unlocked until
3844          * after the pages have been marked as writeback and so we're good to go
3845          * from there.  We have to do this otherwise we'll miss the ordered
3846          * extents and that results in badness.  Please Josef, do not think you
3847          * know better and pull this out at some point in the future, it is
3848          * right and you are wrong.
3849          */
3850         ret = filemap_fdatawrite_range(inode->i_mapping, start, end);
3851         if (!ret && test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
3852                              &BTRFS_I(inode)->runtime_flags))
3853                 ret = filemap_fdatawrite_range(inode->i_mapping, start, end);
3854
3855         return ret;
3856 }