xref: /openbmc/linux/fs/btrfs/reflink.c (revision 710b797c)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <linux/blkdev.h>
4 #include <linux/iversion.h>
5 #include "compression.h"
6 #include "ctree.h"
7 #include "delalloc-space.h"
8 #include "reflink.h"
9 #include "transaction.h"
10 
11 #define BTRFS_MAX_DEDUPE_LEN	SZ_16M
12 
13 static int clone_finish_inode_update(struct btrfs_trans_handle *trans,
14 				     struct inode *inode,
15 				     u64 endoff,
16 				     const u64 destoff,
17 				     const u64 olen,
18 				     int no_time_update)
19 {
20 	struct btrfs_root *root = BTRFS_I(inode)->root;
21 	int ret;
22 
23 	inode_inc_iversion(inode);
24 	if (!no_time_update)
25 		inode->i_mtime = inode->i_ctime = current_time(inode);
26 	/*
27 	 * We round up to the block size at eof when determining which
28 	 * extents to clone above, but shouldn't round up the file size.
29 	 */
30 	if (endoff > destoff + olen)
31 		endoff = destoff + olen;
32 	if (endoff > inode->i_size) {
33 		i_size_write(inode, endoff);
34 		btrfs_inode_safe_disk_i_size_write(BTRFS_I(inode), 0);
35 	}
36 
37 	ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
38 	if (ret) {
39 		btrfs_abort_transaction(trans, ret);
40 		btrfs_end_transaction(trans);
41 		goto out;
42 	}
43 	ret = btrfs_end_transaction(trans);
44 out:
45 	return ret;
46 }
47 
48 static int copy_inline_to_page(struct btrfs_inode *inode,
49 			       const u64 file_offset,
50 			       char *inline_data,
51 			       const u64 size,
52 			       const u64 datal,
53 			       const u8 comp_type)
54 {
55 	const u64 block_size = btrfs_inode_sectorsize(inode);
56 	const u64 range_end = file_offset + block_size - 1;
57 	const size_t inline_size = size - btrfs_file_extent_calc_inline_size(0);
58 	char *data_start = inline_data + btrfs_file_extent_calc_inline_size(0);
59 	struct extent_changeset *data_reserved = NULL;
60 	struct page *page = NULL;
61 	struct address_space *mapping = inode->vfs_inode.i_mapping;
62 	int ret;
63 
64 	ASSERT(IS_ALIGNED(file_offset, block_size));
65 
66 	/*
67 	 * We have flushed and locked the ranges of the source and destination
68 	 * inodes, we also have locked the inodes, so we are safe to do a
69 	 * reservation here. Also we must not do the reservation while holding
70 	 * a transaction open, otherwise we would deadlock.
71 	 */
72 	ret = btrfs_delalloc_reserve_space(inode, &data_reserved, file_offset,
73 					   block_size);
74 	if (ret)
75 		goto out;
76 
77 	page = find_or_create_page(mapping, file_offset >> PAGE_SHIFT,
78 				   btrfs_alloc_write_mask(mapping));
79 	if (!page) {
80 		ret = -ENOMEM;
81 		goto out_unlock;
82 	}
83 
84 	ret = set_page_extent_mapped(page);
85 	if (ret < 0)
86 		goto out_unlock;
87 
88 	clear_extent_bit(&inode->io_tree, file_offset, range_end,
89 			 EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG,
90 			 0, 0, NULL);
91 	ret = btrfs_set_extent_delalloc(inode, file_offset, range_end, 0, NULL);
92 	if (ret)
93 		goto out_unlock;
94 
95 	/*
96 	 * After dirtying the page our caller will need to start a transaction,
97 	 * and if we are low on metadata free space, that can cause flushing of
98 	 * delalloc for all inodes in order to get metadata space released.
99 	 * However we are holding the range locked for the whole duration of
100 	 * the clone/dedupe operation, so we may deadlock if that happens and no
101 	 * other task releases enough space. So mark this inode as not being
102 	 * possible to flush to avoid such deadlock. We will clear that flag
103 	 * when we finish cloning all extents, since a transaction is started
104 	 * after finding each extent to clone.
105 	 */
106 	set_bit(BTRFS_INODE_NO_DELALLOC_FLUSH, &inode->runtime_flags);
107 
108 	if (comp_type == BTRFS_COMPRESS_NONE) {
109 		memcpy_to_page(page, 0, data_start, datal);
110 		flush_dcache_page(page);
111 	} else {
112 		ret = btrfs_decompress(comp_type, data_start, page, 0,
113 				       inline_size, datal);
114 		if (ret)
115 			goto out_unlock;
116 		flush_dcache_page(page);
117 	}
118 
119 	/*
120 	 * If our inline data is smaller then the block/page size, then the
121 	 * remaining of the block/page is equivalent to zeroes. We had something
122 	 * like the following done:
123 	 *
124 	 * $ xfs_io -f -c "pwrite -S 0xab 0 500" file
125 	 * $ sync  # (or fsync)
126 	 * $ xfs_io -c "falloc 0 4K" file
127 	 * $ xfs_io -c "pwrite -S 0xcd 4K 4K"
128 	 *
129 	 * So what's in the range [500, 4095] corresponds to zeroes.
130 	 */
131 	if (datal < block_size) {
132 		memzero_page(page, datal, block_size - datal);
133 		flush_dcache_page(page);
134 	}
135 
136 	SetPageUptodate(page);
137 	ClearPageChecked(page);
138 	set_page_dirty(page);
139 out_unlock:
140 	if (page) {
141 		unlock_page(page);
142 		put_page(page);
143 	}
144 	if (ret)
145 		btrfs_delalloc_release_space(inode, data_reserved, file_offset,
146 					     block_size, true);
147 	btrfs_delalloc_release_extents(inode, block_size);
148 out:
149 	extent_changeset_free(data_reserved);
150 
151 	return ret;
152 }
153 
154 /*
155  * Deal with cloning of inline extents. We try to copy the inline extent from
156  * the source inode to destination inode when possible. When not possible we
157  * copy the inline extent's data into the respective page of the inode.
158  */
159 static int clone_copy_inline_extent(struct inode *dst,
160 				    struct btrfs_path *path,
161 				    struct btrfs_key *new_key,
162 				    const u64 drop_start,
163 				    const u64 datal,
164 				    const u64 size,
165 				    const u8 comp_type,
166 				    char *inline_data,
167 				    struct btrfs_trans_handle **trans_out)
168 {
169 	struct btrfs_fs_info *fs_info = btrfs_sb(dst->i_sb);
170 	struct btrfs_root *root = BTRFS_I(dst)->root;
171 	const u64 aligned_end = ALIGN(new_key->offset + datal,
172 				      fs_info->sectorsize);
173 	struct btrfs_trans_handle *trans = NULL;
174 	struct btrfs_drop_extents_args drop_args = { 0 };
175 	int ret;
176 	struct btrfs_key key;
177 
178 	if (new_key->offset > 0) {
179 		ret = copy_inline_to_page(BTRFS_I(dst), new_key->offset,
180 					  inline_data, size, datal, comp_type);
181 		goto out;
182 	}
183 
184 	key.objectid = btrfs_ino(BTRFS_I(dst));
185 	key.type = BTRFS_EXTENT_DATA_KEY;
186 	key.offset = 0;
187 	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
188 	if (ret < 0) {
189 		return ret;
190 	} else if (ret > 0) {
191 		if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
192 			ret = btrfs_next_leaf(root, path);
193 			if (ret < 0)
194 				return ret;
195 			else if (ret > 0)
196 				goto copy_inline_extent;
197 		}
198 		btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
199 		if (key.objectid == btrfs_ino(BTRFS_I(dst)) &&
200 		    key.type == BTRFS_EXTENT_DATA_KEY) {
201 			/*
202 			 * There's an implicit hole at file offset 0, copy the
203 			 * inline extent's data to the page.
204 			 */
205 			ASSERT(key.offset > 0);
206 			ret = copy_inline_to_page(BTRFS_I(dst), new_key->offset,
207 						  inline_data, size, datal,
208 						  comp_type);
209 			goto out;
210 		}
211 	} else if (i_size_read(dst) <= datal) {
212 		struct btrfs_file_extent_item *ei;
213 
214 		ei = btrfs_item_ptr(path->nodes[0], path->slots[0],
215 				    struct btrfs_file_extent_item);
216 		/*
217 		 * If it's an inline extent replace it with the source inline
218 		 * extent, otherwise copy the source inline extent data into
219 		 * the respective page at the destination inode.
220 		 */
221 		if (btrfs_file_extent_type(path->nodes[0], ei) ==
222 		    BTRFS_FILE_EXTENT_INLINE)
223 			goto copy_inline_extent;
224 
225 		ret = copy_inline_to_page(BTRFS_I(dst), new_key->offset,
226 					  inline_data, size, datal, comp_type);
227 		goto out;
228 	}
229 
230 copy_inline_extent:
231 	ret = 0;
232 	/*
233 	 * We have no extent items, or we have an extent at offset 0 which may
234 	 * or may not be inlined. All these cases are dealt the same way.
235 	 */
236 	if (i_size_read(dst) > datal) {
237 		/*
238 		 * At the destination offset 0 we have either a hole, a regular
239 		 * extent or an inline extent larger then the one we want to
240 		 * clone. Deal with all these cases by copying the inline extent
241 		 * data into the respective page at the destination inode.
242 		 */
243 		ret = copy_inline_to_page(BTRFS_I(dst), new_key->offset,
244 					  inline_data, size, datal, comp_type);
245 		goto out;
246 	}
247 
248 	btrfs_release_path(path);
249 	/*
250 	 * If we end up here it means were copy the inline extent into a leaf
251 	 * of the destination inode. We know we will drop or adjust at most one
252 	 * extent item in the destination root.
253 	 *
254 	 * 1 unit - adjusting old extent (we may have to split it)
255 	 * 1 unit - add new extent
256 	 * 1 unit - inode update
257 	 */
258 	trans = btrfs_start_transaction(root, 3);
259 	if (IS_ERR(trans)) {
260 		ret = PTR_ERR(trans);
261 		trans = NULL;
262 		goto out;
263 	}
264 	drop_args.path = path;
265 	drop_args.start = drop_start;
266 	drop_args.end = aligned_end;
267 	drop_args.drop_cache = true;
268 	ret = btrfs_drop_extents(trans, root, BTRFS_I(dst), &drop_args);
269 	if (ret)
270 		goto out;
271 	ret = btrfs_insert_empty_item(trans, root, path, new_key, size);
272 	if (ret)
273 		goto out;
274 
275 	write_extent_buffer(path->nodes[0], inline_data,
276 			    btrfs_item_ptr_offset(path->nodes[0],
277 						  path->slots[0]),
278 			    size);
279 	btrfs_update_inode_bytes(BTRFS_I(dst), datal, drop_args.bytes_found);
280 	set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(dst)->runtime_flags);
281 	ret = btrfs_inode_set_file_extent_range(BTRFS_I(dst), 0, aligned_end);
282 out:
283 	if (!ret && !trans) {
284 		/*
285 		 * Release path before starting a new transaction so we don't
286 		 * hold locks that would confuse lockdep.
287 		 */
288 		btrfs_release_path(path);
289 		/*
290 		 * No transaction here means we copied the inline extent into a
291 		 * page of the destination inode.
292 		 *
293 		 * 1 unit to update inode item
294 		 */
295 		trans = btrfs_start_transaction(root, 1);
296 		if (IS_ERR(trans)) {
297 			ret = PTR_ERR(trans);
298 			trans = NULL;
299 		}
300 	}
301 	if (ret && trans) {
302 		btrfs_abort_transaction(trans, ret);
303 		btrfs_end_transaction(trans);
304 	}
305 	if (!ret)
306 		*trans_out = trans;
307 
308 	return ret;
309 }
310 
311 /**
312  * btrfs_clone() - clone a range from inode file to another
313  *
314  * @src: Inode to clone from
315  * @inode: Inode to clone to
316  * @off: Offset within source to start clone from
317  * @olen: Original length, passed by user, of range to clone
318  * @olen_aligned: Block-aligned value of olen
319  * @destoff: Offset within @inode to start clone
320  * @no_time_update: Whether to update mtime/ctime on the target inode
321  */
322 static int btrfs_clone(struct inode *src, struct inode *inode,
323 		       const u64 off, const u64 olen, const u64 olen_aligned,
324 		       const u64 destoff, int no_time_update)
325 {
326 	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
327 	struct btrfs_path *path = NULL;
328 	struct extent_buffer *leaf;
329 	struct btrfs_trans_handle *trans;
330 	char *buf = NULL;
331 	struct btrfs_key key;
332 	u32 nritems;
333 	int slot;
334 	int ret;
335 	const u64 len = olen_aligned;
336 	u64 last_dest_end = destoff;
337 
338 	ret = -ENOMEM;
339 	buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);
340 	if (!buf)
341 		return ret;
342 
343 	path = btrfs_alloc_path();
344 	if (!path) {
345 		kvfree(buf);
346 		return ret;
347 	}
348 
349 	path->reada = READA_FORWARD;
350 	/* Clone data */
351 	key.objectid = btrfs_ino(BTRFS_I(src));
352 	key.type = BTRFS_EXTENT_DATA_KEY;
353 	key.offset = off;
354 
355 	while (1) {
356 		u64 next_key_min_offset = key.offset + 1;
357 		struct btrfs_file_extent_item *extent;
358 		u64 extent_gen;
359 		int type;
360 		u32 size;
361 		struct btrfs_key new_key;
362 		u64 disko = 0, diskl = 0;
363 		u64 datao = 0, datal = 0;
364 		u8 comp;
365 		u64 drop_start;
366 
367 		/* Note the key will change type as we walk through the tree */
368 		ret = btrfs_search_slot(NULL, BTRFS_I(src)->root, &key, path,
369 				0, 0);
370 		if (ret < 0)
371 			goto out;
372 		/*
373 		 * First search, if no extent item that starts at offset off was
374 		 * found but the previous item is an extent item, it's possible
375 		 * it might overlap our target range, therefore process it.
376 		 */
377 		if (key.offset == off && ret > 0 && path->slots[0] > 0) {
378 			btrfs_item_key_to_cpu(path->nodes[0], &key,
379 					      path->slots[0] - 1);
380 			if (key.type == BTRFS_EXTENT_DATA_KEY)
381 				path->slots[0]--;
382 		}
383 
384 		nritems = btrfs_header_nritems(path->nodes[0]);
385 process_slot:
386 		if (path->slots[0] >= nritems) {
387 			ret = btrfs_next_leaf(BTRFS_I(src)->root, path);
388 			if (ret < 0)
389 				goto out;
390 			if (ret > 0)
391 				break;
392 			nritems = btrfs_header_nritems(path->nodes[0]);
393 		}
394 		leaf = path->nodes[0];
395 		slot = path->slots[0];
396 
397 		btrfs_item_key_to_cpu(leaf, &key, slot);
398 		if (key.type > BTRFS_EXTENT_DATA_KEY ||
399 		    key.objectid != btrfs_ino(BTRFS_I(src)))
400 			break;
401 
402 		ASSERT(key.type == BTRFS_EXTENT_DATA_KEY);
403 
404 		extent = btrfs_item_ptr(leaf, slot,
405 					struct btrfs_file_extent_item);
406 		extent_gen = btrfs_file_extent_generation(leaf, extent);
407 		comp = btrfs_file_extent_compression(leaf, extent);
408 		type = btrfs_file_extent_type(leaf, extent);
409 		if (type == BTRFS_FILE_EXTENT_REG ||
410 		    type == BTRFS_FILE_EXTENT_PREALLOC) {
411 			disko = btrfs_file_extent_disk_bytenr(leaf, extent);
412 			diskl = btrfs_file_extent_disk_num_bytes(leaf, extent);
413 			datao = btrfs_file_extent_offset(leaf, extent);
414 			datal = btrfs_file_extent_num_bytes(leaf, extent);
415 		} else if (type == BTRFS_FILE_EXTENT_INLINE) {
416 			/* Take upper bound, may be compressed */
417 			datal = btrfs_file_extent_ram_bytes(leaf, extent);
418 		}
419 
420 		/*
421 		 * The first search might have left us at an extent item that
422 		 * ends before our target range's start, can happen if we have
423 		 * holes and NO_HOLES feature enabled.
424 		 */
425 		if (key.offset + datal <= off) {
426 			path->slots[0]++;
427 			goto process_slot;
428 		} else if (key.offset >= off + len) {
429 			break;
430 		}
431 		next_key_min_offset = key.offset + datal;
432 		size = btrfs_item_size_nr(leaf, slot);
433 		read_extent_buffer(leaf, buf, btrfs_item_ptr_offset(leaf, slot),
434 				   size);
435 
436 		btrfs_release_path(path);
437 
438 		memcpy(&new_key, &key, sizeof(new_key));
439 		new_key.objectid = btrfs_ino(BTRFS_I(inode));
440 		if (off <= key.offset)
441 			new_key.offset = key.offset + destoff - off;
442 		else
443 			new_key.offset = destoff;
444 
445 		/*
446 		 * Deal with a hole that doesn't have an extent item that
447 		 * represents it (NO_HOLES feature enabled).
448 		 * This hole is either in the middle of the cloning range or at
449 		 * the beginning (fully overlaps it or partially overlaps it).
450 		 */
451 		if (new_key.offset != last_dest_end)
452 			drop_start = last_dest_end;
453 		else
454 			drop_start = new_key.offset;
455 
456 		if (type == BTRFS_FILE_EXTENT_REG ||
457 		    type == BTRFS_FILE_EXTENT_PREALLOC) {
458 			struct btrfs_replace_extent_info clone_info;
459 
460 			/*
461 			 *    a  | --- range to clone ---|  b
462 			 * | ------------- extent ------------- |
463 			 */
464 
465 			/* Subtract range b */
466 			if (key.offset + datal > off + len)
467 				datal = off + len - key.offset;
468 
469 			/* Subtract range a */
470 			if (off > key.offset) {
471 				datao += off - key.offset;
472 				datal -= off - key.offset;
473 			}
474 
475 			clone_info.disk_offset = disko;
476 			clone_info.disk_len = diskl;
477 			clone_info.data_offset = datao;
478 			clone_info.data_len = datal;
479 			clone_info.file_offset = new_key.offset;
480 			clone_info.extent_buf = buf;
481 			clone_info.is_new_extent = false;
482 			ret = btrfs_replace_file_extents(BTRFS_I(inode), path,
483 					drop_start, new_key.offset + datal - 1,
484 					&clone_info, &trans);
485 			if (ret)
486 				goto out;
487 		} else if (type == BTRFS_FILE_EXTENT_INLINE) {
488 			/*
489 			 * Inline extents always have to start at file offset 0
490 			 * and can never be bigger then the sector size. We can
491 			 * never clone only parts of an inline extent, since all
492 			 * reflink operations must start at a sector size aligned
493 			 * offset, and the length must be aligned too or end at
494 			 * the i_size (which implies the whole inlined data).
495 			 */
496 			ASSERT(key.offset == 0);
497 			ASSERT(datal <= fs_info->sectorsize);
498 			if (key.offset != 0 || datal > fs_info->sectorsize)
499 				return -EUCLEAN;
500 
501 			ret = clone_copy_inline_extent(inode, path, &new_key,
502 						       drop_start, datal, size,
503 						       comp, buf, &trans);
504 			if (ret)
505 				goto out;
506 		}
507 
508 		btrfs_release_path(path);
509 
510 		/*
511 		 * If this is a new extent update the last_reflink_trans of both
512 		 * inodes. This is used by fsync to make sure it does not log
513 		 * multiple checksum items with overlapping ranges. For older
514 		 * extents we don't need to do it since inode logging skips the
515 		 * checksums for older extents. Also ignore holes and inline
516 		 * extents because they don't have checksums in the csum tree.
517 		 */
518 		if (extent_gen == trans->transid && disko > 0) {
519 			BTRFS_I(src)->last_reflink_trans = trans->transid;
520 			BTRFS_I(inode)->last_reflink_trans = trans->transid;
521 		}
522 
523 		last_dest_end = ALIGN(new_key.offset + datal,
524 				      fs_info->sectorsize);
525 		ret = clone_finish_inode_update(trans, inode, last_dest_end,
526 						destoff, olen, no_time_update);
527 		if (ret)
528 			goto out;
529 		if (new_key.offset + datal >= destoff + len)
530 			break;
531 
532 		btrfs_release_path(path);
533 		key.offset = next_key_min_offset;
534 
535 		if (fatal_signal_pending(current)) {
536 			ret = -EINTR;
537 			goto out;
538 		}
539 
540 		cond_resched();
541 	}
542 	ret = 0;
543 
544 	if (last_dest_end < destoff + len) {
545 		/*
546 		 * We have an implicit hole that fully or partially overlaps our
547 		 * cloning range at its end. This means that we either have the
548 		 * NO_HOLES feature enabled or the implicit hole happened due to
549 		 * mixing buffered and direct IO writes against this file.
550 		 */
551 		btrfs_release_path(path);
552 
553 		/*
554 		 * When using NO_HOLES and we are cloning a range that covers
555 		 * only a hole (no extents) into a range beyond the current
556 		 * i_size, punching a hole in the target range will not create
557 		 * an extent map defining a hole, because the range starts at or
558 		 * beyond current i_size. If the file previously had an i_size
559 		 * greater than the new i_size set by this clone operation, we
560 		 * need to make sure the next fsync is a full fsync, so that it
561 		 * detects and logs a hole covering a range from the current
562 		 * i_size to the new i_size. If the clone range covers extents,
563 		 * besides a hole, then we know the full sync flag was already
564 		 * set by previous calls to btrfs_replace_file_extents() that
565 		 * replaced file extent items.
566 		 */
567 		if (last_dest_end >= i_size_read(inode))
568 			set_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
569 				&BTRFS_I(inode)->runtime_flags);
570 
571 		ret = btrfs_replace_file_extents(BTRFS_I(inode), path,
572 				last_dest_end, destoff + len - 1, NULL, &trans);
573 		if (ret)
574 			goto out;
575 
576 		ret = clone_finish_inode_update(trans, inode, destoff + len,
577 						destoff, olen, no_time_update);
578 	}
579 
580 out:
581 	btrfs_free_path(path);
582 	kvfree(buf);
583 	clear_bit(BTRFS_INODE_NO_DELALLOC_FLUSH, &BTRFS_I(inode)->runtime_flags);
584 
585 	return ret;
586 }
587 
588 static void btrfs_double_extent_unlock(struct inode *inode1, u64 loff1,
589 				       struct inode *inode2, u64 loff2, u64 len)
590 {
591 	unlock_extent(&BTRFS_I(inode1)->io_tree, loff1, loff1 + len - 1);
592 	unlock_extent(&BTRFS_I(inode2)->io_tree, loff2, loff2 + len - 1);
593 }
594 
595 static void btrfs_double_extent_lock(struct inode *inode1, u64 loff1,
596 				     struct inode *inode2, u64 loff2, u64 len)
597 {
598 	if (inode1 < inode2) {
599 		swap(inode1, inode2);
600 		swap(loff1, loff2);
601 	} else if (inode1 == inode2 && loff2 < loff1) {
602 		swap(loff1, loff2);
603 	}
604 	lock_extent(&BTRFS_I(inode1)->io_tree, loff1, loff1 + len - 1);
605 	lock_extent(&BTRFS_I(inode2)->io_tree, loff2, loff2 + len - 1);
606 }
607 
608 static void btrfs_double_mmap_lock(struct inode *inode1, struct inode *inode2)
609 {
610 	if (inode1 < inode2)
611 		swap(inode1, inode2);
612 	down_write(&BTRFS_I(inode1)->i_mmap_lock);
613 	down_write_nested(&BTRFS_I(inode2)->i_mmap_lock, SINGLE_DEPTH_NESTING);
614 }
615 
616 static void btrfs_double_mmap_unlock(struct inode *inode1, struct inode *inode2)
617 {
618 	up_write(&BTRFS_I(inode1)->i_mmap_lock);
619 	up_write(&BTRFS_I(inode2)->i_mmap_lock);
620 }
621 
622 static int btrfs_extent_same_range(struct inode *src, u64 loff, u64 len,
623 				   struct inode *dst, u64 dst_loff)
624 {
625 	const u64 bs = BTRFS_I(src)->root->fs_info->sb->s_blocksize;
626 	int ret;
627 
628 	/*
629 	 * Lock destination range to serialize with concurrent readpages() and
630 	 * source range to serialize with relocation.
631 	 */
632 	btrfs_double_extent_lock(src, loff, dst, dst_loff, len);
633 	ret = btrfs_clone(src, dst, loff, len, ALIGN(len, bs), dst_loff, 1);
634 	btrfs_double_extent_unlock(src, loff, dst, dst_loff, len);
635 
636 	return ret;
637 }
638 
639 static int btrfs_extent_same(struct inode *src, u64 loff, u64 olen,
640 			     struct inode *dst, u64 dst_loff)
641 {
642 	int ret;
643 	u64 i, tail_len, chunk_count;
644 	struct btrfs_root *root_dst = BTRFS_I(dst)->root;
645 
646 	spin_lock(&root_dst->root_item_lock);
647 	if (root_dst->send_in_progress) {
648 		btrfs_warn_rl(root_dst->fs_info,
649 "cannot deduplicate to root %llu while send operations are using it (%d in progress)",
650 			      root_dst->root_key.objectid,
651 			      root_dst->send_in_progress);
652 		spin_unlock(&root_dst->root_item_lock);
653 		return -EAGAIN;
654 	}
655 	root_dst->dedupe_in_progress++;
656 	spin_unlock(&root_dst->root_item_lock);
657 
658 	tail_len = olen % BTRFS_MAX_DEDUPE_LEN;
659 	chunk_count = div_u64(olen, BTRFS_MAX_DEDUPE_LEN);
660 
661 	for (i = 0; i < chunk_count; i++) {
662 		ret = btrfs_extent_same_range(src, loff, BTRFS_MAX_DEDUPE_LEN,
663 					      dst, dst_loff);
664 		if (ret)
665 			goto out;
666 
667 		loff += BTRFS_MAX_DEDUPE_LEN;
668 		dst_loff += BTRFS_MAX_DEDUPE_LEN;
669 	}
670 
671 	if (tail_len > 0)
672 		ret = btrfs_extent_same_range(src, loff, tail_len, dst, dst_loff);
673 out:
674 	spin_lock(&root_dst->root_item_lock);
675 	root_dst->dedupe_in_progress--;
676 	spin_unlock(&root_dst->root_item_lock);
677 
678 	return ret;
679 }
680 
681 static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
682 					u64 off, u64 olen, u64 destoff)
683 {
684 	struct inode *inode = file_inode(file);
685 	struct inode *src = file_inode(file_src);
686 	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
687 	int ret;
688 	int wb_ret;
689 	u64 len = olen;
690 	u64 bs = fs_info->sb->s_blocksize;
691 
692 	/*
693 	 * VFS's generic_remap_file_range_prep() protects us from cloning the
694 	 * eof block into the middle of a file, which would result in corruption
695 	 * if the file size is not blocksize aligned. So we don't need to check
696 	 * for that case here.
697 	 */
698 	if (off + len == src->i_size)
699 		len = ALIGN(src->i_size, bs) - off;
700 
701 	if (destoff > inode->i_size) {
702 		const u64 wb_start = ALIGN_DOWN(inode->i_size, bs);
703 
704 		ret = btrfs_cont_expand(BTRFS_I(inode), inode->i_size, destoff);
705 		if (ret)
706 			return ret;
707 		/*
708 		 * We may have truncated the last block if the inode's size is
709 		 * not sector size aligned, so we need to wait for writeback to
710 		 * complete before proceeding further, otherwise we can race
711 		 * with cloning and attempt to increment a reference to an
712 		 * extent that no longer exists (writeback completed right after
713 		 * we found the previous extent covering eof and before we
714 		 * attempted to increment its reference count).
715 		 */
716 		ret = btrfs_wait_ordered_range(inode, wb_start,
717 					       destoff - wb_start);
718 		if (ret)
719 			return ret;
720 	}
721 
722 	/*
723 	 * Lock destination range to serialize with concurrent readpages() and
724 	 * source range to serialize with relocation.
725 	 */
726 	btrfs_double_extent_lock(src, off, inode, destoff, len);
727 	ret = btrfs_clone(src, inode, off, olen, len, destoff, 0);
728 	btrfs_double_extent_unlock(src, off, inode, destoff, len);
729 
730 	/*
731 	 * We may have copied an inline extent into a page of the destination
732 	 * range, so wait for writeback to complete before truncating pages
733 	 * from the page cache. This is a rare case.
734 	 */
735 	wb_ret = btrfs_wait_ordered_range(inode, destoff, len);
736 	ret = ret ? ret : wb_ret;
737 	/*
738 	 * Truncate page cache pages so that future reads will see the cloned
739 	 * data immediately and not the previous data.
740 	 */
741 	truncate_inode_pages_range(&inode->i_data,
742 				round_down(destoff, PAGE_SIZE),
743 				round_up(destoff + len, PAGE_SIZE) - 1);
744 
745 	return ret;
746 }
747 
748 static int btrfs_remap_file_range_prep(struct file *file_in, loff_t pos_in,
749 				       struct file *file_out, loff_t pos_out,
750 				       loff_t *len, unsigned int remap_flags)
751 {
752 	struct inode *inode_in = file_inode(file_in);
753 	struct inode *inode_out = file_inode(file_out);
754 	u64 bs = BTRFS_I(inode_out)->root->fs_info->sb->s_blocksize;
755 	bool same_inode = inode_out == inode_in;
756 	u64 wb_len;
757 	int ret;
758 
759 	if (!(remap_flags & REMAP_FILE_DEDUP)) {
760 		struct btrfs_root *root_out = BTRFS_I(inode_out)->root;
761 
762 		if (btrfs_root_readonly(root_out))
763 			return -EROFS;
764 
765 		if (file_in->f_path.mnt != file_out->f_path.mnt ||
766 		    inode_in->i_sb != inode_out->i_sb)
767 			return -EXDEV;
768 	}
769 
770 	/* Don't make the dst file partly checksummed */
771 	if ((BTRFS_I(inode_in)->flags & BTRFS_INODE_NODATASUM) !=
772 	    (BTRFS_I(inode_out)->flags & BTRFS_INODE_NODATASUM)) {
773 		return -EINVAL;
774 	}
775 
776 	/*
777 	 * Now that the inodes are locked, we need to start writeback ourselves
778 	 * and can not rely on the writeback from the VFS's generic helper
779 	 * generic_remap_file_range_prep() because:
780 	 *
781 	 * 1) For compression we must call filemap_fdatawrite_range() range
782 	 *    twice (btrfs_fdatawrite_range() does it for us), and the generic
783 	 *    helper only calls it once;
784 	 *
785 	 * 2) filemap_fdatawrite_range(), called by the generic helper only
786 	 *    waits for the writeback to complete, i.e. for IO to be done, and
787 	 *    not for the ordered extents to complete. We need to wait for them
788 	 *    to complete so that new file extent items are in the fs tree.
789 	 */
790 	if (*len == 0 && !(remap_flags & REMAP_FILE_DEDUP))
791 		wb_len = ALIGN(inode_in->i_size, bs) - ALIGN_DOWN(pos_in, bs);
792 	else
793 		wb_len = ALIGN(*len, bs);
794 
795 	/*
796 	 * Since we don't lock ranges, wait for ongoing lockless dio writes (as
797 	 * any in progress could create its ordered extents after we wait for
798 	 * existing ordered extents below).
799 	 */
800 	inode_dio_wait(inode_in);
801 	if (!same_inode)
802 		inode_dio_wait(inode_out);
803 
804 	/*
805 	 * Workaround to make sure NOCOW buffered write reach disk as NOCOW.
806 	 *
807 	 * Btrfs' back references do not have a block level granularity, they
808 	 * work at the whole extent level.
809 	 * NOCOW buffered write without data space reserved may not be able
810 	 * to fall back to CoW due to lack of data space, thus could cause
811 	 * data loss.
812 	 *
813 	 * Here we take a shortcut by flushing the whole inode, so that all
814 	 * nocow write should reach disk as nocow before we increase the
815 	 * reference of the extent. We could do better by only flushing NOCOW
816 	 * data, but that needs extra accounting.
817 	 *
818 	 * Also we don't need to check ASYNC_EXTENT, as async extent will be
819 	 * CoWed anyway, not affecting nocow part.
820 	 */
821 	ret = filemap_flush(inode_in->i_mapping);
822 	if (ret < 0)
823 		return ret;
824 
825 	ret = btrfs_wait_ordered_range(inode_in, ALIGN_DOWN(pos_in, bs),
826 				       wb_len);
827 	if (ret < 0)
828 		return ret;
829 	ret = btrfs_wait_ordered_range(inode_out, ALIGN_DOWN(pos_out, bs),
830 				       wb_len);
831 	if (ret < 0)
832 		return ret;
833 
834 	return generic_remap_file_range_prep(file_in, pos_in, file_out, pos_out,
835 					    len, remap_flags);
836 }
837 
838 static bool file_sync_write(const struct file *file)
839 {
840 	if (file->f_flags & (__O_SYNC | O_DSYNC))
841 		return true;
842 	if (IS_SYNC(file_inode(file)))
843 		return true;
844 
845 	return false;
846 }
847 
848 loff_t btrfs_remap_file_range(struct file *src_file, loff_t off,
849 		struct file *dst_file, loff_t destoff, loff_t len,
850 		unsigned int remap_flags)
851 {
852 	struct inode *src_inode = file_inode(src_file);
853 	struct inode *dst_inode = file_inode(dst_file);
854 	bool same_inode = dst_inode == src_inode;
855 	int ret;
856 
857 	if (remap_flags & ~(REMAP_FILE_DEDUP | REMAP_FILE_ADVISORY))
858 		return -EINVAL;
859 
860 	if (same_inode) {
861 		btrfs_inode_lock(src_inode, BTRFS_ILOCK_MMAP);
862 	} else {
863 		lock_two_nondirectories(src_inode, dst_inode);
864 		btrfs_double_mmap_lock(src_inode, dst_inode);
865 	}
866 
867 	ret = btrfs_remap_file_range_prep(src_file, off, dst_file, destoff,
868 					  &len, remap_flags);
869 	if (ret < 0 || len == 0)
870 		goto out_unlock;
871 
872 	if (remap_flags & REMAP_FILE_DEDUP)
873 		ret = btrfs_extent_same(src_inode, off, len, dst_inode, destoff);
874 	else
875 		ret = btrfs_clone_files(dst_file, src_file, off, len, destoff);
876 
877 out_unlock:
878 	if (same_inode) {
879 		btrfs_inode_unlock(src_inode, BTRFS_ILOCK_MMAP);
880 	} else {
881 		btrfs_double_mmap_unlock(src_inode, dst_inode);
882 		unlock_two_nondirectories(src_inode, dst_inode);
883 	}
884 
885 	/*
886 	 * If either the source or the destination file was opened with O_SYNC,
887 	 * O_DSYNC or has the S_SYNC attribute, fsync both the destination and
888 	 * source files/ranges, so that after a successful return (0) followed
889 	 * by a power failure results in the reflinked data to be readable from
890 	 * both files/ranges.
891 	 */
892 	if (ret == 0 && len > 0 &&
893 	    (file_sync_write(src_file) || file_sync_write(dst_file))) {
894 		ret = btrfs_sync_file(src_file, off, off + len - 1, 0);
895 		if (ret == 0)
896 			ret = btrfs_sync_file(dst_file, destoff,
897 					      destoff + len - 1, 0);
898 	}
899 
900 	return ret < 0 ? ret : len;
901 }
902