2 * Copyright (C) 2012 Alexander Block. All rights reserved.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public
14 * License along with this program; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 021110-1307, USA.
19 #include <linux/bsearch.h>
21 #include <linux/file.h>
22 #include <linux/sort.h>
23 #include <linux/mount.h>
24 #include <linux/xattr.h>
25 #include <linux/posix_acl_xattr.h>
26 #include <linux/radix-tree.h>
27 #include <linux/crc32c.h>
28 #include <linux/vmalloc.h>
34 #include "btrfs_inode.h"
35 #include "transaction.h"
37 static int g_verbose
= 0;
39 #define verbose_printk(...) if (g_verbose) printk(__VA_ARGS__)
42 * A fs_path is a helper to dynamically build path names with unknown size.
43 * It reallocates the internal buffer on demand.
44 * It allows fast adding of path elements on the right side (normal path) and
45 * fast adding to the left side (reversed path). A reversed path can also be
46 * unreversed if needed.
64 #define FS_PATH_INLINE_SIZE \
65 (sizeof(struct fs_path) - offsetof(struct fs_path, inline_buf))
68 /* reused for each extent */
70 struct btrfs_root
*root
;
77 #define SEND_CTX_MAX_NAME_CACHE_SIZE 128
78 #define SEND_CTX_NAME_CACHE_CLEAN_SIZE (SEND_CTX_MAX_NAME_CACHE_SIZE * 2)
81 struct file
*send_filp
;
87 u64 cmd_send_size
[BTRFS_SEND_C_MAX
+ 1];
88 u64 flags
; /* 'flags' member of btrfs_ioctl_send_args is u64 */
92 struct btrfs_root
*send_root
;
93 struct btrfs_root
*parent_root
;
94 struct clone_root
*clone_roots
;
97 /* current state of the compare_tree call */
98 struct btrfs_path
*left_path
;
99 struct btrfs_path
*right_path
;
100 struct btrfs_key
*cmp_key
;
103 * infos of the currently processed inode. In case of deleted inodes,
104 * these are the values from the deleted inode.
109 int cur_inode_new_gen
;
110 int cur_inode_deleted
;
116 struct list_head new_refs
;
117 struct list_head deleted_refs
;
119 struct radix_tree_root name_cache
;
120 struct list_head name_cache_list
;
123 struct file
*cur_inode_filp
;
127 struct name_cache_entry
{
128 struct list_head list
;
130 * radix_tree has only 32bit entries but we need to handle 64bit inums.
131 * We use the lower 32bit of the 64bit inum to store it in the tree. If
132 * more then one inum would fall into the same entry, we use radix_list
133 * to store the additional entries. radix_list is also used to store
134 * entries where two entries have the same inum but different
137 struct list_head radix_list
;
143 int need_later_update
;
148 static void fs_path_reset(struct fs_path
*p
)
151 p
->start
= p
->buf
+ p
->buf_len
- 1;
161 static struct fs_path
*fs_path_alloc(void)
165 p
= kmalloc(sizeof(*p
), GFP_NOFS
);
170 p
->buf
= p
->inline_buf
;
171 p
->buf_len
= FS_PATH_INLINE_SIZE
;
176 static struct fs_path
*fs_path_alloc_reversed(void)
188 static void fs_path_free(struct fs_path
*p
)
192 if (p
->buf
!= p
->inline_buf
) {
201 static int fs_path_len(struct fs_path
*p
)
203 return p
->end
- p
->start
;
206 static int fs_path_ensure_buf(struct fs_path
*p
, int len
)
214 if (p
->buf_len
>= len
)
217 path_len
= p
->end
- p
->start
;
218 old_buf_len
= p
->buf_len
;
219 len
= PAGE_ALIGN(len
);
221 if (p
->buf
== p
->inline_buf
) {
222 tmp_buf
= kmalloc(len
, GFP_NOFS
);
224 tmp_buf
= vmalloc(len
);
229 memcpy(tmp_buf
, p
->buf
, p
->buf_len
);
233 if (p
->virtual_mem
) {
234 tmp_buf
= vmalloc(len
);
237 memcpy(tmp_buf
, p
->buf
, p
->buf_len
);
240 tmp_buf
= krealloc(p
->buf
, len
, GFP_NOFS
);
242 tmp_buf
= vmalloc(len
);
245 memcpy(tmp_buf
, p
->buf
, p
->buf_len
);
254 tmp_buf
= p
->buf
+ old_buf_len
- path_len
- 1;
255 p
->end
= p
->buf
+ p
->buf_len
- 1;
256 p
->start
= p
->end
- path_len
;
257 memmove(p
->start
, tmp_buf
, path_len
+ 1);
260 p
->end
= p
->start
+ path_len
;
265 static int fs_path_prepare_for_add(struct fs_path
*p
, int name_len
)
270 new_len
= p
->end
- p
->start
+ name_len
;
271 if (p
->start
!= p
->end
)
273 ret
= fs_path_ensure_buf(p
, new_len
);
278 if (p
->start
!= p
->end
)
280 p
->start
-= name_len
;
281 p
->prepared
= p
->start
;
283 if (p
->start
!= p
->end
)
285 p
->prepared
= p
->end
;
294 static int fs_path_add(struct fs_path
*p
, const char *name
, int name_len
)
298 ret
= fs_path_prepare_for_add(p
, name_len
);
301 memcpy(p
->prepared
, name
, name_len
);
308 static int fs_path_add_path(struct fs_path
*p
, struct fs_path
*p2
)
312 ret
= fs_path_prepare_for_add(p
, p2
->end
- p2
->start
);
315 memcpy(p
->prepared
, p2
->start
, p2
->end
- p2
->start
);
322 static int fs_path_add_from_extent_buffer(struct fs_path
*p
,
323 struct extent_buffer
*eb
,
324 unsigned long off
, int len
)
328 ret
= fs_path_prepare_for_add(p
, len
);
332 read_extent_buffer(eb
, p
->prepared
, off
, len
);
340 static void fs_path_remove(struct fs_path
*p
)
343 while (p
->start
!= p
->end
&& *p
->end
!= '/')
349 static int fs_path_copy(struct fs_path
*p
, struct fs_path
*from
)
353 p
->reversed
= from
->reversed
;
356 ret
= fs_path_add_path(p
, from
);
362 static void fs_path_unreverse(struct fs_path
*p
)
371 len
= p
->end
- p
->start
;
373 p
->end
= p
->start
+ len
;
374 memmove(p
->start
, tmp
, len
+ 1);
378 static struct btrfs_path
*alloc_path_for_send(void)
380 struct btrfs_path
*path
;
382 path
= btrfs_alloc_path();
385 path
->search_commit_root
= 1;
386 path
->skip_locking
= 1;
390 static int write_buf(struct file
*filp
, const void *buf
, u32 len
, loff_t
*off
)
400 ret
= vfs_write(filp
, (char *)buf
+ pos
, len
- pos
, off
);
401 /* TODO handle that correctly */
402 /*if (ret == -ERESTARTSYS) {
421 static int tlv_put(struct send_ctx
*sctx
, u16 attr
, const void *data
, int len
)
423 struct btrfs_tlv_header
*hdr
;
424 int total_len
= sizeof(*hdr
) + len
;
425 int left
= sctx
->send_max_size
- sctx
->send_size
;
427 if (unlikely(left
< total_len
))
430 hdr
= (struct btrfs_tlv_header
*) (sctx
->send_buf
+ sctx
->send_size
);
431 hdr
->tlv_type
= cpu_to_le16(attr
);
432 hdr
->tlv_len
= cpu_to_le16(len
);
433 memcpy(hdr
+ 1, data
, len
);
434 sctx
->send_size
+= total_len
;
440 static int tlv_put_u8(struct send_ctx
*sctx
, u16 attr
, u8 value
)
442 return tlv_put(sctx
, attr
, &value
, sizeof(value
));
445 static int tlv_put_u16(struct send_ctx
*sctx
, u16 attr
, u16 value
)
447 __le16 tmp
= cpu_to_le16(value
);
448 return tlv_put(sctx
, attr
, &tmp
, sizeof(tmp
));
451 static int tlv_put_u32(struct send_ctx
*sctx
, u16 attr
, u32 value
)
453 __le32 tmp
= cpu_to_le32(value
);
454 return tlv_put(sctx
, attr
, &tmp
, sizeof(tmp
));
458 static int tlv_put_u64(struct send_ctx
*sctx
, u16 attr
, u64 value
)
460 __le64 tmp
= cpu_to_le64(value
);
461 return tlv_put(sctx
, attr
, &tmp
, sizeof(tmp
));
464 static int tlv_put_string(struct send_ctx
*sctx
, u16 attr
,
465 const char *str
, int len
)
469 return tlv_put(sctx
, attr
, str
, len
);
472 static int tlv_put_uuid(struct send_ctx
*sctx
, u16 attr
,
475 return tlv_put(sctx
, attr
, uuid
, BTRFS_UUID_SIZE
);
479 static int tlv_put_timespec(struct send_ctx
*sctx
, u16 attr
,
482 struct btrfs_timespec bts
;
483 bts
.sec
= cpu_to_le64(ts
->tv_sec
);
484 bts
.nsec
= cpu_to_le32(ts
->tv_nsec
);
485 return tlv_put(sctx
, attr
, &bts
, sizeof(bts
));
489 static int tlv_put_btrfs_timespec(struct send_ctx
*sctx
, u16 attr
,
490 struct extent_buffer
*eb
,
491 struct btrfs_timespec
*ts
)
493 struct btrfs_timespec bts
;
494 read_extent_buffer(eb
, &bts
, (unsigned long)ts
, sizeof(bts
));
495 return tlv_put(sctx
, attr
, &bts
, sizeof(bts
));
499 #define TLV_PUT(sctx, attrtype, attrlen, data) \
501 ret = tlv_put(sctx, attrtype, attrlen, data); \
503 goto tlv_put_failure; \
506 #define TLV_PUT_INT(sctx, attrtype, bits, value) \
508 ret = tlv_put_u##bits(sctx, attrtype, value); \
510 goto tlv_put_failure; \
513 #define TLV_PUT_U8(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 8, data)
514 #define TLV_PUT_U16(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 16, data)
515 #define TLV_PUT_U32(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 32, data)
516 #define TLV_PUT_U64(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 64, data)
517 #define TLV_PUT_STRING(sctx, attrtype, str, len) \
519 ret = tlv_put_string(sctx, attrtype, str, len); \
521 goto tlv_put_failure; \
523 #define TLV_PUT_PATH(sctx, attrtype, p) \
525 ret = tlv_put_string(sctx, attrtype, p->start, \
526 p->end - p->start); \
528 goto tlv_put_failure; \
530 #define TLV_PUT_UUID(sctx, attrtype, uuid) \
532 ret = tlv_put_uuid(sctx, attrtype, uuid); \
534 goto tlv_put_failure; \
536 #define TLV_PUT_TIMESPEC(sctx, attrtype, ts) \
538 ret = tlv_put_timespec(sctx, attrtype, ts); \
540 goto tlv_put_failure; \
542 #define TLV_PUT_BTRFS_TIMESPEC(sctx, attrtype, eb, ts) \
544 ret = tlv_put_btrfs_timespec(sctx, attrtype, eb, ts); \
546 goto tlv_put_failure; \
549 static int send_header(struct send_ctx
*sctx
)
551 struct btrfs_stream_header hdr
;
553 strcpy(hdr
.magic
, BTRFS_SEND_STREAM_MAGIC
);
554 hdr
.version
= cpu_to_le32(BTRFS_SEND_STREAM_VERSION
);
556 return write_buf(sctx
->send_filp
, &hdr
, sizeof(hdr
),
561 * For each command/item we want to send to userspace, we call this function.
563 static int begin_cmd(struct send_ctx
*sctx
, int cmd
)
565 struct btrfs_cmd_header
*hdr
;
567 if (!sctx
->send_buf
) {
572 BUG_ON(sctx
->send_size
);
574 sctx
->send_size
+= sizeof(*hdr
);
575 hdr
= (struct btrfs_cmd_header
*)sctx
->send_buf
;
576 hdr
->cmd
= cpu_to_le16(cmd
);
581 static int send_cmd(struct send_ctx
*sctx
)
584 struct btrfs_cmd_header
*hdr
;
587 hdr
= (struct btrfs_cmd_header
*)sctx
->send_buf
;
588 hdr
->len
= cpu_to_le32(sctx
->send_size
- sizeof(*hdr
));
591 crc
= crc32c(0, (unsigned char *)sctx
->send_buf
, sctx
->send_size
);
592 hdr
->crc
= cpu_to_le32(crc
);
594 ret
= write_buf(sctx
->send_filp
, sctx
->send_buf
, sctx
->send_size
,
597 sctx
->total_send_size
+= sctx
->send_size
;
598 sctx
->cmd_send_size
[le16_to_cpu(hdr
->cmd
)] += sctx
->send_size
;
605 * Sends a move instruction to user space
607 static int send_rename(struct send_ctx
*sctx
,
608 struct fs_path
*from
, struct fs_path
*to
)
612 verbose_printk("btrfs: send_rename %s -> %s\n", from
->start
, to
->start
);
614 ret
= begin_cmd(sctx
, BTRFS_SEND_C_RENAME
);
618 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, from
);
619 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH_TO
, to
);
621 ret
= send_cmd(sctx
);
629 * Sends a link instruction to user space
631 static int send_link(struct send_ctx
*sctx
,
632 struct fs_path
*path
, struct fs_path
*lnk
)
636 verbose_printk("btrfs: send_link %s -> %s\n", path
->start
, lnk
->start
);
638 ret
= begin_cmd(sctx
, BTRFS_SEND_C_LINK
);
642 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, path
);
643 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH_LINK
, lnk
);
645 ret
= send_cmd(sctx
);
653 * Sends an unlink instruction to user space
655 static int send_unlink(struct send_ctx
*sctx
, struct fs_path
*path
)
659 verbose_printk("btrfs: send_unlink %s\n", path
->start
);
661 ret
= begin_cmd(sctx
, BTRFS_SEND_C_UNLINK
);
665 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, path
);
667 ret
= send_cmd(sctx
);
675 * Sends a rmdir instruction to user space
677 static int send_rmdir(struct send_ctx
*sctx
, struct fs_path
*path
)
681 verbose_printk("btrfs: send_rmdir %s\n", path
->start
);
683 ret
= begin_cmd(sctx
, BTRFS_SEND_C_RMDIR
);
687 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, path
);
689 ret
= send_cmd(sctx
);
697 * Helper function to retrieve some fields from an inode item.
699 static int get_inode_info(struct btrfs_root
*root
,
700 u64 ino
, u64
*size
, u64
*gen
,
701 u64
*mode
, u64
*uid
, u64
*gid
,
705 struct btrfs_inode_item
*ii
;
706 struct btrfs_key key
;
707 struct btrfs_path
*path
;
709 path
= alloc_path_for_send();
714 key
.type
= BTRFS_INODE_ITEM_KEY
;
716 ret
= btrfs_search_slot(NULL
, root
, &key
, path
, 0, 0);
724 ii
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
725 struct btrfs_inode_item
);
727 *size
= btrfs_inode_size(path
->nodes
[0], ii
);
729 *gen
= btrfs_inode_generation(path
->nodes
[0], ii
);
731 *mode
= btrfs_inode_mode(path
->nodes
[0], ii
);
733 *uid
= btrfs_inode_uid(path
->nodes
[0], ii
);
735 *gid
= btrfs_inode_gid(path
->nodes
[0], ii
);
737 *rdev
= btrfs_inode_rdev(path
->nodes
[0], ii
);
740 btrfs_free_path(path
);
744 typedef int (*iterate_inode_ref_t
)(int num
, u64 dir
, int index
,
749 * Helper function to iterate the entries in ONE btrfs_inode_ref or
750 * btrfs_inode_extref.
751 * The iterate callback may return a non zero value to stop iteration. This can
752 * be a negative value for error codes or 1 to simply stop it.
754 * path must point to the INODE_REF or INODE_EXTREF when called.
756 static int iterate_inode_ref(struct btrfs_root
*root
, struct btrfs_path
*path
,
757 struct btrfs_key
*found_key
, int resolve
,
758 iterate_inode_ref_t iterate
, void *ctx
)
760 struct extent_buffer
*eb
= path
->nodes
[0];
761 struct btrfs_item
*item
;
762 struct btrfs_inode_ref
*iref
;
763 struct btrfs_inode_extref
*extref
;
764 struct btrfs_path
*tmp_path
;
768 int slot
= path
->slots
[0];
775 unsigned long name_off
;
776 unsigned long elem_size
;
779 p
= fs_path_alloc_reversed();
783 tmp_path
= alloc_path_for_send();
790 if (found_key
->type
== BTRFS_INODE_REF_KEY
) {
791 ptr
= (unsigned long)btrfs_item_ptr(eb
, slot
,
792 struct btrfs_inode_ref
);
793 item
= btrfs_item_nr(eb
, slot
);
794 total
= btrfs_item_size(eb
, item
);
795 elem_size
= sizeof(*iref
);
797 ptr
= btrfs_item_ptr_offset(eb
, slot
);
798 total
= btrfs_item_size_nr(eb
, slot
);
799 elem_size
= sizeof(*extref
);
802 while (cur
< total
) {
805 if (found_key
->type
== BTRFS_INODE_REF_KEY
) {
806 iref
= (struct btrfs_inode_ref
*)(ptr
+ cur
);
807 name_len
= btrfs_inode_ref_name_len(eb
, iref
);
808 name_off
= (unsigned long)(iref
+ 1);
809 index
= btrfs_inode_ref_index(eb
, iref
);
810 dir
= found_key
->offset
;
812 extref
= (struct btrfs_inode_extref
*)(ptr
+ cur
);
813 name_len
= btrfs_inode_extref_name_len(eb
, extref
);
814 name_off
= (unsigned long)&extref
->name
;
815 index
= btrfs_inode_extref_index(eb
, extref
);
816 dir
= btrfs_inode_extref_parent(eb
, extref
);
820 start
= btrfs_ref_to_path(root
, tmp_path
, name_len
,
824 ret
= PTR_ERR(start
);
827 if (start
< p
->buf
) {
828 /* overflow , try again with larger buffer */
829 ret
= fs_path_ensure_buf(p
,
830 p
->buf_len
+ p
->buf
- start
);
833 start
= btrfs_ref_to_path(root
, tmp_path
,
838 ret
= PTR_ERR(start
);
841 BUG_ON(start
< p
->buf
);
845 ret
= fs_path_add_from_extent_buffer(p
, eb
, name_off
,
851 cur
+= elem_size
+ name_len
;
852 ret
= iterate(num
, dir
, index
, p
, ctx
);
859 btrfs_free_path(tmp_path
);
864 typedef int (*iterate_dir_item_t
)(int num
, struct btrfs_key
*di_key
,
865 const char *name
, int name_len
,
866 const char *data
, int data_len
,
870 * Helper function to iterate the entries in ONE btrfs_dir_item.
871 * The iterate callback may return a non zero value to stop iteration. This can
872 * be a negative value for error codes or 1 to simply stop it.
874 * path must point to the dir item when called.
876 static int iterate_dir_item(struct btrfs_root
*root
, struct btrfs_path
*path
,
877 struct btrfs_key
*found_key
,
878 iterate_dir_item_t iterate
, void *ctx
)
881 struct extent_buffer
*eb
;
882 struct btrfs_item
*item
;
883 struct btrfs_dir_item
*di
;
884 struct btrfs_key di_key
;
899 buf
= kmalloc(buf_len
, GFP_NOFS
);
906 slot
= path
->slots
[0];
907 item
= btrfs_item_nr(eb
, slot
);
908 di
= btrfs_item_ptr(eb
, slot
, struct btrfs_dir_item
);
911 total
= btrfs_item_size(eb
, item
);
914 while (cur
< total
) {
915 name_len
= btrfs_dir_name_len(eb
, di
);
916 data_len
= btrfs_dir_data_len(eb
, di
);
917 type
= btrfs_dir_type(eb
, di
);
918 btrfs_dir_item_key_to_cpu(eb
, di
, &di_key
);
920 if (name_len
+ data_len
> buf_len
) {
921 buf_len
= PAGE_ALIGN(name_len
+ data_len
);
923 buf2
= vmalloc(buf_len
);
930 buf2
= krealloc(buf
, buf_len
, GFP_NOFS
);
932 buf2
= vmalloc(buf_len
);
946 read_extent_buffer(eb
, buf
, (unsigned long)(di
+ 1),
947 name_len
+ data_len
);
949 len
= sizeof(*di
) + name_len
+ data_len
;
950 di
= (struct btrfs_dir_item
*)((char *)di
+ len
);
953 ret
= iterate(num
, &di_key
, buf
, name_len
, buf
+ name_len
,
954 data_len
, type
, ctx
);
973 static int __copy_first_ref(int num
, u64 dir
, int index
,
974 struct fs_path
*p
, void *ctx
)
977 struct fs_path
*pt
= ctx
;
979 ret
= fs_path_copy(pt
, p
);
983 /* we want the first only */
988 * Retrieve the first path of an inode. If an inode has more then one
989 * ref/hardlink, this is ignored.
991 static int get_inode_path(struct btrfs_root
*root
,
992 u64 ino
, struct fs_path
*path
)
995 struct btrfs_key key
, found_key
;
996 struct btrfs_path
*p
;
998 p
= alloc_path_for_send();
1002 fs_path_reset(path
);
1005 key
.type
= BTRFS_INODE_REF_KEY
;
1008 ret
= btrfs_search_slot_for_read(root
, &key
, p
, 1, 0);
1015 btrfs_item_key_to_cpu(p
->nodes
[0], &found_key
, p
->slots
[0]);
1016 if (found_key
.objectid
!= ino
||
1017 (found_key
.type
!= BTRFS_INODE_REF_KEY
&&
1018 found_key
.type
!= BTRFS_INODE_EXTREF_KEY
)) {
1023 ret
= iterate_inode_ref(root
, p
, &found_key
, 1,
1024 __copy_first_ref
, path
);
1034 struct backref_ctx
{
1035 struct send_ctx
*sctx
;
1037 /* number of total found references */
1041 * used for clones found in send_root. clones found behind cur_objectid
1042 * and cur_offset are not considered as allowed clones.
1047 /* may be truncated in case it's the last extent in a file */
1050 /* Just to check for bugs in backref resolving */
1054 static int __clone_root_cmp_bsearch(const void *key
, const void *elt
)
1056 u64 root
= (u64
)(uintptr_t)key
;
1057 struct clone_root
*cr
= (struct clone_root
*)elt
;
1059 if (root
< cr
->root
->objectid
)
1061 if (root
> cr
->root
->objectid
)
1066 static int __clone_root_cmp_sort(const void *e1
, const void *e2
)
1068 struct clone_root
*cr1
= (struct clone_root
*)e1
;
1069 struct clone_root
*cr2
= (struct clone_root
*)e2
;
1071 if (cr1
->root
->objectid
< cr2
->root
->objectid
)
1073 if (cr1
->root
->objectid
> cr2
->root
->objectid
)
1079 * Called for every backref that is found for the current extent.
1080 * Results are collected in sctx->clone_roots->ino/offset/found_refs
1082 static int __iterate_backrefs(u64 ino
, u64 offset
, u64 root
, void *ctx_
)
1084 struct backref_ctx
*bctx
= ctx_
;
1085 struct clone_root
*found
;
1089 /* First check if the root is in the list of accepted clone sources */
1090 found
= bsearch((void *)(uintptr_t)root
, bctx
->sctx
->clone_roots
,
1091 bctx
->sctx
->clone_roots_cnt
,
1092 sizeof(struct clone_root
),
1093 __clone_root_cmp_bsearch
);
1097 if (found
->root
== bctx
->sctx
->send_root
&&
1098 ino
== bctx
->cur_objectid
&&
1099 offset
== bctx
->cur_offset
) {
1100 bctx
->found_itself
= 1;
1104 * There are inodes that have extents that lie behind its i_size. Don't
1105 * accept clones from these extents.
1107 ret
= get_inode_info(found
->root
, ino
, &i_size
, NULL
, NULL
, NULL
, NULL
,
1112 if (offset
+ bctx
->extent_len
> i_size
)
1116 * Make sure we don't consider clones from send_root that are
1117 * behind the current inode/offset.
1119 if (found
->root
== bctx
->sctx
->send_root
) {
1121 * TODO for the moment we don't accept clones from the inode
1122 * that is currently send. We may change this when
1123 * BTRFS_IOC_CLONE_RANGE supports cloning from and to the same
1126 if (ino
>= bctx
->cur_objectid
)
1129 if (ino
> bctx
->cur_objectid
)
1131 if (offset
+ bctx
->extent_len
> bctx
->cur_offset
)
1137 found
->found_refs
++;
1138 if (ino
< found
->ino
) {
1140 found
->offset
= offset
;
1141 } else if (found
->ino
== ino
) {
1143 * same extent found more then once in the same file.
1145 if (found
->offset
> offset
+ bctx
->extent_len
)
1146 found
->offset
= offset
;
1153 * Given an inode, offset and extent item, it finds a good clone for a clone
1154 * instruction. Returns -ENOENT when none could be found. The function makes
1155 * sure that the returned clone is usable at the point where sending is at the
1156 * moment. This means, that no clones are accepted which lie behind the current
1159 * path must point to the extent item when called.
1161 static int find_extent_clone(struct send_ctx
*sctx
,
1162 struct btrfs_path
*path
,
1163 u64 ino
, u64 data_offset
,
1165 struct clone_root
**found
)
1172 u64 extent_item_pos
;
1174 struct btrfs_file_extent_item
*fi
;
1175 struct extent_buffer
*eb
= path
->nodes
[0];
1176 struct backref_ctx
*backref_ctx
= NULL
;
1177 struct clone_root
*cur_clone_root
;
1178 struct btrfs_key found_key
;
1179 struct btrfs_path
*tmp_path
;
1183 tmp_path
= alloc_path_for_send();
1187 backref_ctx
= kmalloc(sizeof(*backref_ctx
), GFP_NOFS
);
1193 if (data_offset
>= ino_size
) {
1195 * There may be extents that lie behind the file's size.
1196 * I at least had this in combination with snapshotting while
1197 * writing large files.
1203 fi
= btrfs_item_ptr(eb
, path
->slots
[0],
1204 struct btrfs_file_extent_item
);
1205 extent_type
= btrfs_file_extent_type(eb
, fi
);
1206 if (extent_type
== BTRFS_FILE_EXTENT_INLINE
) {
1210 compressed
= btrfs_file_extent_compression(eb
, fi
);
1212 num_bytes
= btrfs_file_extent_num_bytes(eb
, fi
);
1213 disk_byte
= btrfs_file_extent_disk_bytenr(eb
, fi
);
1214 if (disk_byte
== 0) {
1218 logical
= disk_byte
+ btrfs_file_extent_offset(eb
, fi
);
1220 ret
= extent_from_logical(sctx
->send_root
->fs_info
, disk_byte
, tmp_path
,
1221 &found_key
, &flags
);
1222 btrfs_release_path(tmp_path
);
1226 if (flags
& BTRFS_EXTENT_FLAG_TREE_BLOCK
) {
1232 * Setup the clone roots.
1234 for (i
= 0; i
< sctx
->clone_roots_cnt
; i
++) {
1235 cur_clone_root
= sctx
->clone_roots
+ i
;
1236 cur_clone_root
->ino
= (u64
)-1;
1237 cur_clone_root
->offset
= 0;
1238 cur_clone_root
->found_refs
= 0;
1241 backref_ctx
->sctx
= sctx
;
1242 backref_ctx
->found
= 0;
1243 backref_ctx
->cur_objectid
= ino
;
1244 backref_ctx
->cur_offset
= data_offset
;
1245 backref_ctx
->found_itself
= 0;
1246 backref_ctx
->extent_len
= num_bytes
;
1249 * The last extent of a file may be too large due to page alignment.
1250 * We need to adjust extent_len in this case so that the checks in
1251 * __iterate_backrefs work.
1253 if (data_offset
+ num_bytes
>= ino_size
)
1254 backref_ctx
->extent_len
= ino_size
- data_offset
;
1257 * Now collect all backrefs.
1259 if (compressed
== BTRFS_COMPRESS_NONE
)
1260 extent_item_pos
= logical
- found_key
.objectid
;
1262 extent_item_pos
= 0;
1264 extent_item_pos
= logical
- found_key
.objectid
;
1265 ret
= iterate_extent_inodes(sctx
->send_root
->fs_info
,
1266 found_key
.objectid
, extent_item_pos
, 1,
1267 __iterate_backrefs
, backref_ctx
);
1272 if (!backref_ctx
->found_itself
) {
1273 /* found a bug in backref code? */
1275 printk(KERN_ERR
"btrfs: ERROR did not find backref in "
1276 "send_root. inode=%llu, offset=%llu, "
1277 "disk_byte=%llu found extent=%llu\n",
1278 ino
, data_offset
, disk_byte
, found_key
.objectid
);
1282 verbose_printk(KERN_DEBUG
"btrfs: find_extent_clone: data_offset=%llu, "
1284 "num_bytes=%llu, logical=%llu\n",
1285 data_offset
, ino
, num_bytes
, logical
);
1287 if (!backref_ctx
->found
)
1288 verbose_printk("btrfs: no clones found\n");
1290 cur_clone_root
= NULL
;
1291 for (i
= 0; i
< sctx
->clone_roots_cnt
; i
++) {
1292 if (sctx
->clone_roots
[i
].found_refs
) {
1293 if (!cur_clone_root
)
1294 cur_clone_root
= sctx
->clone_roots
+ i
;
1295 else if (sctx
->clone_roots
[i
].root
== sctx
->send_root
)
1296 /* prefer clones from send_root over others */
1297 cur_clone_root
= sctx
->clone_roots
+ i
;
1302 if (cur_clone_root
) {
1303 *found
= cur_clone_root
;
1310 btrfs_free_path(tmp_path
);
1315 static int read_symlink(struct btrfs_root
*root
,
1317 struct fs_path
*dest
)
1320 struct btrfs_path
*path
;
1321 struct btrfs_key key
;
1322 struct btrfs_file_extent_item
*ei
;
1328 path
= alloc_path_for_send();
1333 key
.type
= BTRFS_EXTENT_DATA_KEY
;
1335 ret
= btrfs_search_slot(NULL
, root
, &key
, path
, 0, 0);
1340 ei
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
1341 struct btrfs_file_extent_item
);
1342 type
= btrfs_file_extent_type(path
->nodes
[0], ei
);
1343 compression
= btrfs_file_extent_compression(path
->nodes
[0], ei
);
1344 BUG_ON(type
!= BTRFS_FILE_EXTENT_INLINE
);
1345 BUG_ON(compression
);
1347 off
= btrfs_file_extent_inline_start(ei
);
1348 len
= btrfs_file_extent_inline_len(path
->nodes
[0], ei
);
1350 ret
= fs_path_add_from_extent_buffer(dest
, path
->nodes
[0], off
, len
);
1353 btrfs_free_path(path
);
1358 * Helper function to generate a file name that is unique in the root of
1359 * send_root and parent_root. This is used to generate names for orphan inodes.
1361 static int gen_unique_name(struct send_ctx
*sctx
,
1363 struct fs_path
*dest
)
1366 struct btrfs_path
*path
;
1367 struct btrfs_dir_item
*di
;
1372 path
= alloc_path_for_send();
1377 len
= snprintf(tmp
, sizeof(tmp
) - 1, "o%llu-%llu-%llu",
1379 if (len
>= sizeof(tmp
)) {
1380 /* should really not happen */
1385 di
= btrfs_lookup_dir_item(NULL
, sctx
->send_root
,
1386 path
, BTRFS_FIRST_FREE_OBJECTID
,
1387 tmp
, strlen(tmp
), 0);
1388 btrfs_release_path(path
);
1394 /* not unique, try again */
1399 if (!sctx
->parent_root
) {
1405 di
= btrfs_lookup_dir_item(NULL
, sctx
->parent_root
,
1406 path
, BTRFS_FIRST_FREE_OBJECTID
,
1407 tmp
, strlen(tmp
), 0);
1408 btrfs_release_path(path
);
1414 /* not unique, try again */
1422 ret
= fs_path_add(dest
, tmp
, strlen(tmp
));
1425 btrfs_free_path(path
);
1430 inode_state_no_change
,
1431 inode_state_will_create
,
1432 inode_state_did_create
,
1433 inode_state_will_delete
,
1434 inode_state_did_delete
,
1437 static int get_cur_inode_state(struct send_ctx
*sctx
, u64 ino
, u64 gen
)
1445 ret
= get_inode_info(sctx
->send_root
, ino
, NULL
, &left_gen
, NULL
, NULL
,
1447 if (ret
< 0 && ret
!= -ENOENT
)
1451 if (!sctx
->parent_root
) {
1452 right_ret
= -ENOENT
;
1454 ret
= get_inode_info(sctx
->parent_root
, ino
, NULL
, &right_gen
,
1455 NULL
, NULL
, NULL
, NULL
);
1456 if (ret
< 0 && ret
!= -ENOENT
)
1461 if (!left_ret
&& !right_ret
) {
1462 if (left_gen
== gen
&& right_gen
== gen
) {
1463 ret
= inode_state_no_change
;
1464 } else if (left_gen
== gen
) {
1465 if (ino
< sctx
->send_progress
)
1466 ret
= inode_state_did_create
;
1468 ret
= inode_state_will_create
;
1469 } else if (right_gen
== gen
) {
1470 if (ino
< sctx
->send_progress
)
1471 ret
= inode_state_did_delete
;
1473 ret
= inode_state_will_delete
;
1477 } else if (!left_ret
) {
1478 if (left_gen
== gen
) {
1479 if (ino
< sctx
->send_progress
)
1480 ret
= inode_state_did_create
;
1482 ret
= inode_state_will_create
;
1486 } else if (!right_ret
) {
1487 if (right_gen
== gen
) {
1488 if (ino
< sctx
->send_progress
)
1489 ret
= inode_state_did_delete
;
1491 ret
= inode_state_will_delete
;
1503 static int is_inode_existent(struct send_ctx
*sctx
, u64 ino
, u64 gen
)
1507 ret
= get_cur_inode_state(sctx
, ino
, gen
);
1511 if (ret
== inode_state_no_change
||
1512 ret
== inode_state_did_create
||
1513 ret
== inode_state_will_delete
)
1523 * Helper function to lookup a dir item in a dir.
1525 static int lookup_dir_item_inode(struct btrfs_root
*root
,
1526 u64 dir
, const char *name
, int name_len
,
1531 struct btrfs_dir_item
*di
;
1532 struct btrfs_key key
;
1533 struct btrfs_path
*path
;
1535 path
= alloc_path_for_send();
1539 di
= btrfs_lookup_dir_item(NULL
, root
, path
,
1540 dir
, name
, name_len
, 0);
1549 btrfs_dir_item_key_to_cpu(path
->nodes
[0], di
, &key
);
1550 *found_inode
= key
.objectid
;
1551 *found_type
= btrfs_dir_type(path
->nodes
[0], di
);
1554 btrfs_free_path(path
);
1559 * Looks up the first btrfs_inode_ref of a given ino. It returns the parent dir,
1560 * generation of the parent dir and the name of the dir entry.
1562 static int get_first_ref(struct btrfs_root
*root
, u64 ino
,
1563 u64
*dir
, u64
*dir_gen
, struct fs_path
*name
)
1566 struct btrfs_key key
;
1567 struct btrfs_key found_key
;
1568 struct btrfs_path
*path
;
1572 path
= alloc_path_for_send();
1577 key
.type
= BTRFS_INODE_REF_KEY
;
1580 ret
= btrfs_search_slot_for_read(root
, &key
, path
, 1, 0);
1584 btrfs_item_key_to_cpu(path
->nodes
[0], &found_key
,
1586 if (ret
|| found_key
.objectid
!= ino
||
1587 (found_key
.type
!= BTRFS_INODE_REF_KEY
&&
1588 found_key
.type
!= BTRFS_INODE_EXTREF_KEY
)) {
1593 if (key
.type
== BTRFS_INODE_REF_KEY
) {
1594 struct btrfs_inode_ref
*iref
;
1595 iref
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
1596 struct btrfs_inode_ref
);
1597 len
= btrfs_inode_ref_name_len(path
->nodes
[0], iref
);
1598 ret
= fs_path_add_from_extent_buffer(name
, path
->nodes
[0],
1599 (unsigned long)(iref
+ 1),
1601 parent_dir
= found_key
.offset
;
1603 struct btrfs_inode_extref
*extref
;
1604 extref
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
1605 struct btrfs_inode_extref
);
1606 len
= btrfs_inode_extref_name_len(path
->nodes
[0], extref
);
1607 ret
= fs_path_add_from_extent_buffer(name
, path
->nodes
[0],
1608 (unsigned long)&extref
->name
, len
);
1609 parent_dir
= btrfs_inode_extref_parent(path
->nodes
[0], extref
);
1613 btrfs_release_path(path
);
1615 ret
= get_inode_info(root
, parent_dir
, NULL
, dir_gen
, NULL
, NULL
,
1623 btrfs_free_path(path
);
1627 static int is_first_ref(struct btrfs_root
*root
,
1629 const char *name
, int name_len
)
1632 struct fs_path
*tmp_name
;
1636 tmp_name
= fs_path_alloc();
1640 ret
= get_first_ref(root
, ino
, &tmp_dir
, &tmp_dir_gen
, tmp_name
);
1644 if (dir
!= tmp_dir
|| name_len
!= fs_path_len(tmp_name
)) {
1649 ret
= !memcmp(tmp_name
->start
, name
, name_len
);
1652 fs_path_free(tmp_name
);
1657 * Used by process_recorded_refs to determine if a new ref would overwrite an
1658 * already existing ref. In case it detects an overwrite, it returns the
1659 * inode/gen in who_ino/who_gen.
1660 * When an overwrite is detected, process_recorded_refs does proper orphanizing
1661 * to make sure later references to the overwritten inode are possible.
1662 * Orphanizing is however only required for the first ref of an inode.
1663 * process_recorded_refs does an additional is_first_ref check to see if
1664 * orphanizing is really required.
1666 static int will_overwrite_ref(struct send_ctx
*sctx
, u64 dir
, u64 dir_gen
,
1667 const char *name
, int name_len
,
1668 u64
*who_ino
, u64
*who_gen
)
1671 u64 other_inode
= 0;
1674 if (!sctx
->parent_root
)
1677 ret
= is_inode_existent(sctx
, dir
, dir_gen
);
1681 ret
= lookup_dir_item_inode(sctx
->parent_root
, dir
, name
, name_len
,
1682 &other_inode
, &other_type
);
1683 if (ret
< 0 && ret
!= -ENOENT
)
1691 * Check if the overwritten ref was already processed. If yes, the ref
1692 * was already unlinked/moved, so we can safely assume that we will not
1693 * overwrite anything at this point in time.
1695 if (other_inode
> sctx
->send_progress
) {
1696 ret
= get_inode_info(sctx
->parent_root
, other_inode
, NULL
,
1697 who_gen
, NULL
, NULL
, NULL
, NULL
);
1702 *who_ino
= other_inode
;
1712 * Checks if the ref was overwritten by an already processed inode. This is
1713 * used by __get_cur_name_and_parent to find out if the ref was orphanized and
1714 * thus the orphan name needs be used.
1715 * process_recorded_refs also uses it to avoid unlinking of refs that were
1718 static int did_overwrite_ref(struct send_ctx
*sctx
,
1719 u64 dir
, u64 dir_gen
,
1720 u64 ino
, u64 ino_gen
,
1721 const char *name
, int name_len
)
1728 if (!sctx
->parent_root
)
1731 ret
= is_inode_existent(sctx
, dir
, dir_gen
);
1735 /* check if the ref was overwritten by another ref */
1736 ret
= lookup_dir_item_inode(sctx
->send_root
, dir
, name
, name_len
,
1737 &ow_inode
, &other_type
);
1738 if (ret
< 0 && ret
!= -ENOENT
)
1741 /* was never and will never be overwritten */
1746 ret
= get_inode_info(sctx
->send_root
, ow_inode
, NULL
, &gen
, NULL
, NULL
,
1751 if (ow_inode
== ino
&& gen
== ino_gen
) {
1756 /* we know that it is or will be overwritten. check this now */
1757 if (ow_inode
< sctx
->send_progress
)
1767 * Same as did_overwrite_ref, but also checks if it is the first ref of an inode
1768 * that got overwritten. This is used by process_recorded_refs to determine
1769 * if it has to use the path as returned by get_cur_path or the orphan name.
1771 static int did_overwrite_first_ref(struct send_ctx
*sctx
, u64 ino
, u64 gen
)
1774 struct fs_path
*name
= NULL
;
1778 if (!sctx
->parent_root
)
1781 name
= fs_path_alloc();
1785 ret
= get_first_ref(sctx
->parent_root
, ino
, &dir
, &dir_gen
, name
);
1789 ret
= did_overwrite_ref(sctx
, dir
, dir_gen
, ino
, gen
,
1790 name
->start
, fs_path_len(name
));
1798 * Insert a name cache entry. On 32bit kernels the radix tree index is 32bit,
1799 * so we need to do some special handling in case we have clashes. This function
1800 * takes care of this with the help of name_cache_entry::radix_list.
1801 * In case of error, nce is kfreed.
1803 static int name_cache_insert(struct send_ctx
*sctx
,
1804 struct name_cache_entry
*nce
)
1807 struct list_head
*nce_head
;
1809 nce_head
= radix_tree_lookup(&sctx
->name_cache
,
1810 (unsigned long)nce
->ino
);
1812 nce_head
= kmalloc(sizeof(*nce_head
), GFP_NOFS
);
1817 INIT_LIST_HEAD(nce_head
);
1819 ret
= radix_tree_insert(&sctx
->name_cache
, nce
->ino
, nce_head
);
1826 list_add_tail(&nce
->radix_list
, nce_head
);
1827 list_add_tail(&nce
->list
, &sctx
->name_cache_list
);
1828 sctx
->name_cache_size
++;
1833 static void name_cache_delete(struct send_ctx
*sctx
,
1834 struct name_cache_entry
*nce
)
1836 struct list_head
*nce_head
;
1838 nce_head
= radix_tree_lookup(&sctx
->name_cache
,
1839 (unsigned long)nce
->ino
);
1842 list_del(&nce
->radix_list
);
1843 list_del(&nce
->list
);
1844 sctx
->name_cache_size
--;
1846 if (list_empty(nce_head
)) {
1847 radix_tree_delete(&sctx
->name_cache
, (unsigned long)nce
->ino
);
1852 static struct name_cache_entry
*name_cache_search(struct send_ctx
*sctx
,
1855 struct list_head
*nce_head
;
1856 struct name_cache_entry
*cur
;
1858 nce_head
= radix_tree_lookup(&sctx
->name_cache
, (unsigned long)ino
);
1862 list_for_each_entry(cur
, nce_head
, radix_list
) {
1863 if (cur
->ino
== ino
&& cur
->gen
== gen
)
1870 * Removes the entry from the list and adds it back to the end. This marks the
1871 * entry as recently used so that name_cache_clean_unused does not remove it.
1873 static void name_cache_used(struct send_ctx
*sctx
, struct name_cache_entry
*nce
)
1875 list_del(&nce
->list
);
1876 list_add_tail(&nce
->list
, &sctx
->name_cache_list
);
1880 * Remove some entries from the beginning of name_cache_list.
1882 static void name_cache_clean_unused(struct send_ctx
*sctx
)
1884 struct name_cache_entry
*nce
;
1886 if (sctx
->name_cache_size
< SEND_CTX_NAME_CACHE_CLEAN_SIZE
)
1889 while (sctx
->name_cache_size
> SEND_CTX_MAX_NAME_CACHE_SIZE
) {
1890 nce
= list_entry(sctx
->name_cache_list
.next
,
1891 struct name_cache_entry
, list
);
1892 name_cache_delete(sctx
, nce
);
1897 static void name_cache_free(struct send_ctx
*sctx
)
1899 struct name_cache_entry
*nce
;
1901 while (!list_empty(&sctx
->name_cache_list
)) {
1902 nce
= list_entry(sctx
->name_cache_list
.next
,
1903 struct name_cache_entry
, list
);
1904 name_cache_delete(sctx
, nce
);
1910 * Used by get_cur_path for each ref up to the root.
1911 * Returns 0 if it succeeded.
1912 * Returns 1 if the inode is not existent or got overwritten. In that case, the
1913 * name is an orphan name. This instructs get_cur_path to stop iterating. If 1
1914 * is returned, parent_ino/parent_gen are not guaranteed to be valid.
1915 * Returns <0 in case of error.
1917 static int __get_cur_name_and_parent(struct send_ctx
*sctx
,
1921 struct fs_path
*dest
)
1925 struct btrfs_path
*path
= NULL
;
1926 struct name_cache_entry
*nce
= NULL
;
1929 * First check if we already did a call to this function with the same
1930 * ino/gen. If yes, check if the cache entry is still up-to-date. If yes
1931 * return the cached result.
1933 nce
= name_cache_search(sctx
, ino
, gen
);
1935 if (ino
< sctx
->send_progress
&& nce
->need_later_update
) {
1936 name_cache_delete(sctx
, nce
);
1940 name_cache_used(sctx
, nce
);
1941 *parent_ino
= nce
->parent_ino
;
1942 *parent_gen
= nce
->parent_gen
;
1943 ret
= fs_path_add(dest
, nce
->name
, nce
->name_len
);
1951 path
= alloc_path_for_send();
1956 * If the inode is not existent yet, add the orphan name and return 1.
1957 * This should only happen for the parent dir that we determine in
1960 ret
= is_inode_existent(sctx
, ino
, gen
);
1965 ret
= gen_unique_name(sctx
, ino
, gen
, dest
);
1973 * Depending on whether the inode was already processed or not, use
1974 * send_root or parent_root for ref lookup.
1976 if (ino
< sctx
->send_progress
)
1977 ret
= get_first_ref(sctx
->send_root
, ino
,
1978 parent_ino
, parent_gen
, dest
);
1980 ret
= get_first_ref(sctx
->parent_root
, ino
,
1981 parent_ino
, parent_gen
, dest
);
1986 * Check if the ref was overwritten by an inode's ref that was processed
1987 * earlier. If yes, treat as orphan and return 1.
1989 ret
= did_overwrite_ref(sctx
, *parent_ino
, *parent_gen
, ino
, gen
,
1990 dest
->start
, dest
->end
- dest
->start
);
1994 fs_path_reset(dest
);
1995 ret
= gen_unique_name(sctx
, ino
, gen
, dest
);
2003 * Store the result of the lookup in the name cache.
2005 nce
= kmalloc(sizeof(*nce
) + fs_path_len(dest
) + 1, GFP_NOFS
);
2013 nce
->parent_ino
= *parent_ino
;
2014 nce
->parent_gen
= *parent_gen
;
2015 nce
->name_len
= fs_path_len(dest
);
2017 strcpy(nce
->name
, dest
->start
);
2019 if (ino
< sctx
->send_progress
)
2020 nce
->need_later_update
= 0;
2022 nce
->need_later_update
= 1;
2024 nce_ret
= name_cache_insert(sctx
, nce
);
2027 name_cache_clean_unused(sctx
);
2030 btrfs_free_path(path
);
2035 * Magic happens here. This function returns the first ref to an inode as it
2036 * would look like while receiving the stream at this point in time.
2037 * We walk the path up to the root. For every inode in between, we check if it
2038 * was already processed/sent. If yes, we continue with the parent as found
2039 * in send_root. If not, we continue with the parent as found in parent_root.
2040 * If we encounter an inode that was deleted at this point in time, we use the
2041 * inodes "orphan" name instead of the real name and stop. Same with new inodes
2042 * that were not created yet and overwritten inodes/refs.
2044 * When do we have have orphan inodes:
2045 * 1. When an inode is freshly created and thus no valid refs are available yet
2046 * 2. When a directory lost all it's refs (deleted) but still has dir items
2047 * inside which were not processed yet (pending for move/delete). If anyone
2048 * tried to get the path to the dir items, it would get a path inside that
2050 * 3. When an inode is moved around or gets new links, it may overwrite the ref
2051 * of an unprocessed inode. If in that case the first ref would be
2052 * overwritten, the overwritten inode gets "orphanized". Later when we
2053 * process this overwritten inode, it is restored at a new place by moving
2056 * sctx->send_progress tells this function at which point in time receiving
2059 static int get_cur_path(struct send_ctx
*sctx
, u64 ino
, u64 gen
,
2060 struct fs_path
*dest
)
2063 struct fs_path
*name
= NULL
;
2064 u64 parent_inode
= 0;
2068 name
= fs_path_alloc();
2075 fs_path_reset(dest
);
2077 while (!stop
&& ino
!= BTRFS_FIRST_FREE_OBJECTID
) {
2078 fs_path_reset(name
);
2080 ret
= __get_cur_name_and_parent(sctx
, ino
, gen
,
2081 &parent_inode
, &parent_gen
, name
);
2087 ret
= fs_path_add_path(dest
, name
);
2098 fs_path_unreverse(dest
);
2103 * Called for regular files when sending extents data. Opens a struct file
2104 * to read from the file.
2106 static int open_cur_inode_file(struct send_ctx
*sctx
)
2109 struct btrfs_key key
;
2111 struct inode
*inode
;
2112 struct dentry
*dentry
;
2116 if (sctx
->cur_inode_filp
)
2119 key
.objectid
= sctx
->cur_ino
;
2120 key
.type
= BTRFS_INODE_ITEM_KEY
;
2123 inode
= btrfs_iget(sctx
->send_root
->fs_info
->sb
, &key
, sctx
->send_root
,
2125 if (IS_ERR(inode
)) {
2126 ret
= PTR_ERR(inode
);
2130 dentry
= d_obtain_alias(inode
);
2132 if (IS_ERR(dentry
)) {
2133 ret
= PTR_ERR(dentry
);
2137 path
.mnt
= sctx
->mnt
;
2138 path
.dentry
= dentry
;
2139 filp
= dentry_open(&path
, O_RDONLY
| O_LARGEFILE
, current_cred());
2143 ret
= PTR_ERR(filp
);
2146 sctx
->cur_inode_filp
= filp
;
2150 * no xxxput required here as every vfs op
2151 * does it by itself on failure
2157 * Closes the struct file that was created in open_cur_inode_file
2159 static int close_cur_inode_file(struct send_ctx
*sctx
)
2163 if (!sctx
->cur_inode_filp
)
2166 ret
= filp_close(sctx
->cur_inode_filp
, NULL
);
2167 sctx
->cur_inode_filp
= NULL
;
2174 * Sends a BTRFS_SEND_C_SUBVOL command/item to userspace
2176 static int send_subvol_begin(struct send_ctx
*sctx
)
2179 struct btrfs_root
*send_root
= sctx
->send_root
;
2180 struct btrfs_root
*parent_root
= sctx
->parent_root
;
2181 struct btrfs_path
*path
;
2182 struct btrfs_key key
;
2183 struct btrfs_root_ref
*ref
;
2184 struct extent_buffer
*leaf
;
2188 path
= alloc_path_for_send();
2192 name
= kmalloc(BTRFS_PATH_NAME_MAX
, GFP_NOFS
);
2194 btrfs_free_path(path
);
2198 key
.objectid
= send_root
->objectid
;
2199 key
.type
= BTRFS_ROOT_BACKREF_KEY
;
2202 ret
= btrfs_search_slot_for_read(send_root
->fs_info
->tree_root
,
2211 leaf
= path
->nodes
[0];
2212 btrfs_item_key_to_cpu(leaf
, &key
, path
->slots
[0]);
2213 if (key
.type
!= BTRFS_ROOT_BACKREF_KEY
||
2214 key
.objectid
!= send_root
->objectid
) {
2218 ref
= btrfs_item_ptr(leaf
, path
->slots
[0], struct btrfs_root_ref
);
2219 namelen
= btrfs_root_ref_name_len(leaf
, ref
);
2220 read_extent_buffer(leaf
, name
, (unsigned long)(ref
+ 1), namelen
);
2221 btrfs_release_path(path
);
2224 ret
= begin_cmd(sctx
, BTRFS_SEND_C_SNAPSHOT
);
2228 ret
= begin_cmd(sctx
, BTRFS_SEND_C_SUBVOL
);
2233 TLV_PUT_STRING(sctx
, BTRFS_SEND_A_PATH
, name
, namelen
);
2234 TLV_PUT_UUID(sctx
, BTRFS_SEND_A_UUID
,
2235 sctx
->send_root
->root_item
.uuid
);
2236 TLV_PUT_U64(sctx
, BTRFS_SEND_A_CTRANSID
,
2237 sctx
->send_root
->root_item
.ctransid
);
2239 TLV_PUT_UUID(sctx
, BTRFS_SEND_A_CLONE_UUID
,
2240 sctx
->parent_root
->root_item
.uuid
);
2241 TLV_PUT_U64(sctx
, BTRFS_SEND_A_CLONE_CTRANSID
,
2242 sctx
->parent_root
->root_item
.ctransid
);
2245 ret
= send_cmd(sctx
);
2249 btrfs_free_path(path
);
2254 static int send_truncate(struct send_ctx
*sctx
, u64 ino
, u64 gen
, u64 size
)
2259 verbose_printk("btrfs: send_truncate %llu size=%llu\n", ino
, size
);
2261 p
= fs_path_alloc();
2265 ret
= begin_cmd(sctx
, BTRFS_SEND_C_TRUNCATE
);
2269 ret
= get_cur_path(sctx
, ino
, gen
, p
);
2272 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
2273 TLV_PUT_U64(sctx
, BTRFS_SEND_A_SIZE
, size
);
2275 ret
= send_cmd(sctx
);
2283 static int send_chmod(struct send_ctx
*sctx
, u64 ino
, u64 gen
, u64 mode
)
2288 verbose_printk("btrfs: send_chmod %llu mode=%llu\n", ino
, mode
);
2290 p
= fs_path_alloc();
2294 ret
= begin_cmd(sctx
, BTRFS_SEND_C_CHMOD
);
2298 ret
= get_cur_path(sctx
, ino
, gen
, p
);
2301 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
2302 TLV_PUT_U64(sctx
, BTRFS_SEND_A_MODE
, mode
& 07777);
2304 ret
= send_cmd(sctx
);
2312 static int send_chown(struct send_ctx
*sctx
, u64 ino
, u64 gen
, u64 uid
, u64 gid
)
2317 verbose_printk("btrfs: send_chown %llu uid=%llu, gid=%llu\n", ino
, uid
, gid
);
2319 p
= fs_path_alloc();
2323 ret
= begin_cmd(sctx
, BTRFS_SEND_C_CHOWN
);
2327 ret
= get_cur_path(sctx
, ino
, gen
, p
);
2330 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
2331 TLV_PUT_U64(sctx
, BTRFS_SEND_A_UID
, uid
);
2332 TLV_PUT_U64(sctx
, BTRFS_SEND_A_GID
, gid
);
2334 ret
= send_cmd(sctx
);
2342 static int send_utimes(struct send_ctx
*sctx
, u64 ino
, u64 gen
)
2345 struct fs_path
*p
= NULL
;
2346 struct btrfs_inode_item
*ii
;
2347 struct btrfs_path
*path
= NULL
;
2348 struct extent_buffer
*eb
;
2349 struct btrfs_key key
;
2352 verbose_printk("btrfs: send_utimes %llu\n", ino
);
2354 p
= fs_path_alloc();
2358 path
= alloc_path_for_send();
2365 key
.type
= BTRFS_INODE_ITEM_KEY
;
2367 ret
= btrfs_search_slot(NULL
, sctx
->send_root
, &key
, path
, 0, 0);
2371 eb
= path
->nodes
[0];
2372 slot
= path
->slots
[0];
2373 ii
= btrfs_item_ptr(eb
, slot
, struct btrfs_inode_item
);
2375 ret
= begin_cmd(sctx
, BTRFS_SEND_C_UTIMES
);
2379 ret
= get_cur_path(sctx
, ino
, gen
, p
);
2382 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
2383 TLV_PUT_BTRFS_TIMESPEC(sctx
, BTRFS_SEND_A_ATIME
, eb
,
2384 btrfs_inode_atime(ii
));
2385 TLV_PUT_BTRFS_TIMESPEC(sctx
, BTRFS_SEND_A_MTIME
, eb
,
2386 btrfs_inode_mtime(ii
));
2387 TLV_PUT_BTRFS_TIMESPEC(sctx
, BTRFS_SEND_A_CTIME
, eb
,
2388 btrfs_inode_ctime(ii
));
2389 /* TODO Add otime support when the otime patches get into upstream */
2391 ret
= send_cmd(sctx
);
2396 btrfs_free_path(path
);
2401 * Sends a BTRFS_SEND_C_MKXXX or SYMLINK command to user space. We don't have
2402 * a valid path yet because we did not process the refs yet. So, the inode
2403 * is created as orphan.
2405 static int send_create_inode(struct send_ctx
*sctx
, u64 ino
)
2414 verbose_printk("btrfs: send_create_inode %llu\n", ino
);
2416 p
= fs_path_alloc();
2420 ret
= get_inode_info(sctx
->send_root
, ino
, NULL
, &gen
, &mode
, NULL
,
2425 if (S_ISREG(mode
)) {
2426 cmd
= BTRFS_SEND_C_MKFILE
;
2427 } else if (S_ISDIR(mode
)) {
2428 cmd
= BTRFS_SEND_C_MKDIR
;
2429 } else if (S_ISLNK(mode
)) {
2430 cmd
= BTRFS_SEND_C_SYMLINK
;
2431 } else if (S_ISCHR(mode
) || S_ISBLK(mode
)) {
2432 cmd
= BTRFS_SEND_C_MKNOD
;
2433 } else if (S_ISFIFO(mode
)) {
2434 cmd
= BTRFS_SEND_C_MKFIFO
;
2435 } else if (S_ISSOCK(mode
)) {
2436 cmd
= BTRFS_SEND_C_MKSOCK
;
2438 printk(KERN_WARNING
"btrfs: unexpected inode type %o",
2439 (int)(mode
& S_IFMT
));
2444 ret
= begin_cmd(sctx
, cmd
);
2448 ret
= gen_unique_name(sctx
, ino
, gen
, p
);
2452 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
2453 TLV_PUT_U64(sctx
, BTRFS_SEND_A_INO
, ino
);
2455 if (S_ISLNK(mode
)) {
2457 ret
= read_symlink(sctx
->send_root
, ino
, p
);
2460 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH_LINK
, p
);
2461 } else if (S_ISCHR(mode
) || S_ISBLK(mode
) ||
2462 S_ISFIFO(mode
) || S_ISSOCK(mode
)) {
2463 TLV_PUT_U64(sctx
, BTRFS_SEND_A_RDEV
, new_encode_dev(rdev
));
2464 TLV_PUT_U64(sctx
, BTRFS_SEND_A_MODE
, mode
);
2467 ret
= send_cmd(sctx
);
2479 * We need some special handling for inodes that get processed before the parent
2480 * directory got created. See process_recorded_refs for details.
2481 * This function does the check if we already created the dir out of order.
2483 static int did_create_dir(struct send_ctx
*sctx
, u64 dir
)
2486 struct btrfs_path
*path
= NULL
;
2487 struct btrfs_key key
;
2488 struct btrfs_key found_key
;
2489 struct btrfs_key di_key
;
2490 struct extent_buffer
*eb
;
2491 struct btrfs_dir_item
*di
;
2494 path
= alloc_path_for_send();
2501 key
.type
= BTRFS_DIR_INDEX_KEY
;
2504 ret
= btrfs_search_slot_for_read(sctx
->send_root
, &key
, path
,
2509 eb
= path
->nodes
[0];
2510 slot
= path
->slots
[0];
2511 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
2513 if (ret
|| found_key
.objectid
!= key
.objectid
||
2514 found_key
.type
!= key
.type
) {
2519 di
= btrfs_item_ptr(eb
, slot
, struct btrfs_dir_item
);
2520 btrfs_dir_item_key_to_cpu(eb
, di
, &di_key
);
2522 if (di_key
.objectid
< sctx
->send_progress
) {
2527 key
.offset
= found_key
.offset
+ 1;
2528 btrfs_release_path(path
);
2532 btrfs_free_path(path
);
2537 * Only creates the inode if it is:
2538 * 1. Not a directory
2539 * 2. Or a directory which was not created already due to out of order
2540 * directories. See did_create_dir and process_recorded_refs for details.
2542 static int send_create_inode_if_needed(struct send_ctx
*sctx
)
2546 if (S_ISDIR(sctx
->cur_inode_mode
)) {
2547 ret
= did_create_dir(sctx
, sctx
->cur_ino
);
2556 ret
= send_create_inode(sctx
, sctx
->cur_ino
);
2564 struct recorded_ref
{
2565 struct list_head list
;
2568 struct fs_path
*full_path
;
2576 * We need to process new refs before deleted refs, but compare_tree gives us
2577 * everything mixed. So we first record all refs and later process them.
2578 * This function is a helper to record one ref.
2580 static int record_ref(struct list_head
*head
, u64 dir
,
2581 u64 dir_gen
, struct fs_path
*path
)
2583 struct recorded_ref
*ref
;
2586 ref
= kmalloc(sizeof(*ref
), GFP_NOFS
);
2591 ref
->dir_gen
= dir_gen
;
2592 ref
->full_path
= path
;
2594 tmp
= strrchr(ref
->full_path
->start
, '/');
2596 ref
->name_len
= ref
->full_path
->end
- ref
->full_path
->start
;
2597 ref
->name
= ref
->full_path
->start
;
2598 ref
->dir_path_len
= 0;
2599 ref
->dir_path
= ref
->full_path
->start
;
2602 ref
->name_len
= ref
->full_path
->end
- tmp
;
2604 ref
->dir_path
= ref
->full_path
->start
;
2605 ref
->dir_path_len
= ref
->full_path
->end
-
2606 ref
->full_path
->start
- 1 - ref
->name_len
;
2609 list_add_tail(&ref
->list
, head
);
2613 static void __free_recorded_refs(struct list_head
*head
)
2615 struct recorded_ref
*cur
;
2617 while (!list_empty(head
)) {
2618 cur
= list_entry(head
->next
, struct recorded_ref
, list
);
2619 fs_path_free(cur
->full_path
);
2620 list_del(&cur
->list
);
2625 static void free_recorded_refs(struct send_ctx
*sctx
)
2627 __free_recorded_refs(&sctx
->new_refs
);
2628 __free_recorded_refs(&sctx
->deleted_refs
);
2632 * Renames/moves a file/dir to its orphan name. Used when the first
2633 * ref of an unprocessed inode gets overwritten and for all non empty
2636 static int orphanize_inode(struct send_ctx
*sctx
, u64 ino
, u64 gen
,
2637 struct fs_path
*path
)
2640 struct fs_path
*orphan
;
2642 orphan
= fs_path_alloc();
2646 ret
= gen_unique_name(sctx
, ino
, gen
, orphan
);
2650 ret
= send_rename(sctx
, path
, orphan
);
2653 fs_path_free(orphan
);
2658 * Returns 1 if a directory can be removed at this point in time.
2659 * We check this by iterating all dir items and checking if the inode behind
2660 * the dir item was already processed.
2662 static int can_rmdir(struct send_ctx
*sctx
, u64 dir
, u64 send_progress
)
2665 struct btrfs_root
*root
= sctx
->parent_root
;
2666 struct btrfs_path
*path
;
2667 struct btrfs_key key
;
2668 struct btrfs_key found_key
;
2669 struct btrfs_key loc
;
2670 struct btrfs_dir_item
*di
;
2673 * Don't try to rmdir the top/root subvolume dir.
2675 if (dir
== BTRFS_FIRST_FREE_OBJECTID
)
2678 path
= alloc_path_for_send();
2683 key
.type
= BTRFS_DIR_INDEX_KEY
;
2687 ret
= btrfs_search_slot_for_read(root
, &key
, path
, 1, 0);
2691 btrfs_item_key_to_cpu(path
->nodes
[0], &found_key
,
2694 if (ret
|| found_key
.objectid
!= key
.objectid
||
2695 found_key
.type
!= key
.type
) {
2699 di
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
2700 struct btrfs_dir_item
);
2701 btrfs_dir_item_key_to_cpu(path
->nodes
[0], di
, &loc
);
2703 if (loc
.objectid
> send_progress
) {
2708 btrfs_release_path(path
);
2709 key
.offset
= found_key
.offset
+ 1;
2715 btrfs_free_path(path
);
2720 * This does all the move/link/unlink/rmdir magic.
2722 static int process_recorded_refs(struct send_ctx
*sctx
)
2725 struct recorded_ref
*cur
;
2726 struct recorded_ref
*cur2
;
2727 struct ulist
*check_dirs
= NULL
;
2728 struct ulist_iterator uit
;
2729 struct ulist_node
*un
;
2730 struct fs_path
*valid_path
= NULL
;
2733 int did_overwrite
= 0;
2736 verbose_printk("btrfs: process_recorded_refs %llu\n", sctx
->cur_ino
);
2739 * This should never happen as the root dir always has the same ref
2740 * which is always '..'
2742 BUG_ON(sctx
->cur_ino
<= BTRFS_FIRST_FREE_OBJECTID
);
2744 valid_path
= fs_path_alloc();
2750 check_dirs
= ulist_alloc(GFP_NOFS
);
2757 * First, check if the first ref of the current inode was overwritten
2758 * before. If yes, we know that the current inode was already orphanized
2759 * and thus use the orphan name. If not, we can use get_cur_path to
2760 * get the path of the first ref as it would like while receiving at
2761 * this point in time.
2762 * New inodes are always orphan at the beginning, so force to use the
2763 * orphan name in this case.
2764 * The first ref is stored in valid_path and will be updated if it
2765 * gets moved around.
2767 if (!sctx
->cur_inode_new
) {
2768 ret
= did_overwrite_first_ref(sctx
, sctx
->cur_ino
,
2769 sctx
->cur_inode_gen
);
2775 if (sctx
->cur_inode_new
|| did_overwrite
) {
2776 ret
= gen_unique_name(sctx
, sctx
->cur_ino
,
2777 sctx
->cur_inode_gen
, valid_path
);
2782 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
,
2788 list_for_each_entry(cur
, &sctx
->new_refs
, list
) {
2790 * We may have refs where the parent directory does not exist
2791 * yet. This happens if the parent directories inum is higher
2792 * the the current inum. To handle this case, we create the
2793 * parent directory out of order. But we need to check if this
2794 * did already happen before due to other refs in the same dir.
2796 ret
= get_cur_inode_state(sctx
, cur
->dir
, cur
->dir_gen
);
2799 if (ret
== inode_state_will_create
) {
2802 * First check if any of the current inodes refs did
2803 * already create the dir.
2805 list_for_each_entry(cur2
, &sctx
->new_refs
, list
) {
2808 if (cur2
->dir
== cur
->dir
) {
2815 * If that did not happen, check if a previous inode
2816 * did already create the dir.
2819 ret
= did_create_dir(sctx
, cur
->dir
);
2823 ret
= send_create_inode(sctx
, cur
->dir
);
2830 * Check if this new ref would overwrite the first ref of
2831 * another unprocessed inode. If yes, orphanize the
2832 * overwritten inode. If we find an overwritten ref that is
2833 * not the first ref, simply unlink it.
2835 ret
= will_overwrite_ref(sctx
, cur
->dir
, cur
->dir_gen
,
2836 cur
->name
, cur
->name_len
,
2837 &ow_inode
, &ow_gen
);
2841 ret
= is_first_ref(sctx
->parent_root
,
2842 ow_inode
, cur
->dir
, cur
->name
,
2847 ret
= orphanize_inode(sctx
, ow_inode
, ow_gen
,
2852 ret
= send_unlink(sctx
, cur
->full_path
);
2859 * link/move the ref to the new place. If we have an orphan
2860 * inode, move it and update valid_path. If not, link or move
2861 * it depending on the inode mode.
2864 ret
= send_rename(sctx
, valid_path
, cur
->full_path
);
2868 ret
= fs_path_copy(valid_path
, cur
->full_path
);
2872 if (S_ISDIR(sctx
->cur_inode_mode
)) {
2874 * Dirs can't be linked, so move it. For moved
2875 * dirs, we always have one new and one deleted
2876 * ref. The deleted ref is ignored later.
2878 ret
= send_rename(sctx
, valid_path
,
2882 ret
= fs_path_copy(valid_path
, cur
->full_path
);
2886 ret
= send_link(sctx
, cur
->full_path
,
2892 ret
= ulist_add(check_dirs
, cur
->dir
, cur
->dir_gen
,
2898 if (S_ISDIR(sctx
->cur_inode_mode
) && sctx
->cur_inode_deleted
) {
2900 * Check if we can already rmdir the directory. If not,
2901 * orphanize it. For every dir item inside that gets deleted
2902 * later, we do this check again and rmdir it then if possible.
2903 * See the use of check_dirs for more details.
2905 ret
= can_rmdir(sctx
, sctx
->cur_ino
, sctx
->cur_ino
);
2909 ret
= send_rmdir(sctx
, valid_path
);
2912 } else if (!is_orphan
) {
2913 ret
= orphanize_inode(sctx
, sctx
->cur_ino
,
2914 sctx
->cur_inode_gen
, valid_path
);
2920 list_for_each_entry(cur
, &sctx
->deleted_refs
, list
) {
2921 ret
= ulist_add(check_dirs
, cur
->dir
, cur
->dir_gen
,
2926 } else if (S_ISDIR(sctx
->cur_inode_mode
) &&
2927 !list_empty(&sctx
->deleted_refs
)) {
2929 * We have a moved dir. Add the old parent to check_dirs
2931 cur
= list_entry(sctx
->deleted_refs
.next
, struct recorded_ref
,
2933 ret
= ulist_add(check_dirs
, cur
->dir
, cur
->dir_gen
,
2937 } else if (!S_ISDIR(sctx
->cur_inode_mode
)) {
2939 * We have a non dir inode. Go through all deleted refs and
2940 * unlink them if they were not already overwritten by other
2943 list_for_each_entry(cur
, &sctx
->deleted_refs
, list
) {
2944 ret
= did_overwrite_ref(sctx
, cur
->dir
, cur
->dir_gen
,
2945 sctx
->cur_ino
, sctx
->cur_inode_gen
,
2946 cur
->name
, cur
->name_len
);
2950 ret
= send_unlink(sctx
, cur
->full_path
);
2954 ret
= ulist_add(check_dirs
, cur
->dir
, cur
->dir_gen
,
2961 * If the inode is still orphan, unlink the orphan. This may
2962 * happen when a previous inode did overwrite the first ref
2963 * of this inode and no new refs were added for the current
2964 * inode. Unlinking does not mean that the inode is deleted in
2965 * all cases. There may still be links to this inode in other
2969 ret
= send_unlink(sctx
, valid_path
);
2976 * We did collect all parent dirs where cur_inode was once located. We
2977 * now go through all these dirs and check if they are pending for
2978 * deletion and if it's finally possible to perform the rmdir now.
2979 * We also update the inode stats of the parent dirs here.
2981 ULIST_ITER_INIT(&uit
);
2982 while ((un
= ulist_next(check_dirs
, &uit
))) {
2984 * In case we had refs into dirs that were not processed yet,
2985 * we don't need to do the utime and rmdir logic for these dirs.
2986 * The dir will be processed later.
2988 if (un
->val
> sctx
->cur_ino
)
2991 ret
= get_cur_inode_state(sctx
, un
->val
, un
->aux
);
2995 if (ret
== inode_state_did_create
||
2996 ret
== inode_state_no_change
) {
2997 /* TODO delayed utimes */
2998 ret
= send_utimes(sctx
, un
->val
, un
->aux
);
3001 } else if (ret
== inode_state_did_delete
) {
3002 ret
= can_rmdir(sctx
, un
->val
, sctx
->cur_ino
);
3006 ret
= get_cur_path(sctx
, un
->val
, un
->aux
,
3010 ret
= send_rmdir(sctx
, valid_path
);
3020 free_recorded_refs(sctx
);
3021 ulist_free(check_dirs
);
3022 fs_path_free(valid_path
);
3026 static int __record_new_ref(int num
, u64 dir
, int index
,
3027 struct fs_path
*name
,
3031 struct send_ctx
*sctx
= ctx
;
3035 p
= fs_path_alloc();
3039 ret
= get_inode_info(sctx
->send_root
, dir
, NULL
, &gen
, NULL
, NULL
,
3044 ret
= get_cur_path(sctx
, dir
, gen
, p
);
3047 ret
= fs_path_add_path(p
, name
);
3051 ret
= record_ref(&sctx
->new_refs
, dir
, gen
, p
);
3059 static int __record_deleted_ref(int num
, u64 dir
, int index
,
3060 struct fs_path
*name
,
3064 struct send_ctx
*sctx
= ctx
;
3068 p
= fs_path_alloc();
3072 ret
= get_inode_info(sctx
->parent_root
, dir
, NULL
, &gen
, NULL
, NULL
,
3077 ret
= get_cur_path(sctx
, dir
, gen
, p
);
3080 ret
= fs_path_add_path(p
, name
);
3084 ret
= record_ref(&sctx
->deleted_refs
, dir
, gen
, p
);
3092 static int record_new_ref(struct send_ctx
*sctx
)
3096 ret
= iterate_inode_ref(sctx
->send_root
, sctx
->left_path
,
3097 sctx
->cmp_key
, 0, __record_new_ref
, sctx
);
3106 static int record_deleted_ref(struct send_ctx
*sctx
)
3110 ret
= iterate_inode_ref(sctx
->parent_root
, sctx
->right_path
,
3111 sctx
->cmp_key
, 0, __record_deleted_ref
, sctx
);
3120 struct find_ref_ctx
{
3122 struct fs_path
*name
;
3126 static int __find_iref(int num
, u64 dir
, int index
,
3127 struct fs_path
*name
,
3130 struct find_ref_ctx
*ctx
= ctx_
;
3132 if (dir
== ctx
->dir
&& fs_path_len(name
) == fs_path_len(ctx
->name
) &&
3133 strncmp(name
->start
, ctx
->name
->start
, fs_path_len(name
)) == 0) {
3134 ctx
->found_idx
= num
;
3140 static int find_iref(struct btrfs_root
*root
,
3141 struct btrfs_path
*path
,
3142 struct btrfs_key
*key
,
3143 u64 dir
, struct fs_path
*name
)
3146 struct find_ref_ctx ctx
;
3152 ret
= iterate_inode_ref(root
, path
, key
, 0, __find_iref
, &ctx
);
3156 if (ctx
.found_idx
== -1)
3159 return ctx
.found_idx
;
3162 static int __record_changed_new_ref(int num
, u64 dir
, int index
,
3163 struct fs_path
*name
,
3167 struct send_ctx
*sctx
= ctx
;
3169 ret
= find_iref(sctx
->parent_root
, sctx
->right_path
,
3170 sctx
->cmp_key
, dir
, name
);
3172 ret
= __record_new_ref(num
, dir
, index
, name
, sctx
);
3179 static int __record_changed_deleted_ref(int num
, u64 dir
, int index
,
3180 struct fs_path
*name
,
3184 struct send_ctx
*sctx
= ctx
;
3186 ret
= find_iref(sctx
->send_root
, sctx
->left_path
, sctx
->cmp_key
,
3189 ret
= __record_deleted_ref(num
, dir
, index
, name
, sctx
);
3196 static int record_changed_ref(struct send_ctx
*sctx
)
3200 ret
= iterate_inode_ref(sctx
->send_root
, sctx
->left_path
,
3201 sctx
->cmp_key
, 0, __record_changed_new_ref
, sctx
);
3204 ret
= iterate_inode_ref(sctx
->parent_root
, sctx
->right_path
,
3205 sctx
->cmp_key
, 0, __record_changed_deleted_ref
, sctx
);
3215 * Record and process all refs at once. Needed when an inode changes the
3216 * generation number, which means that it was deleted and recreated.
3218 static int process_all_refs(struct send_ctx
*sctx
,
3219 enum btrfs_compare_tree_result cmd
)
3222 struct btrfs_root
*root
;
3223 struct btrfs_path
*path
;
3224 struct btrfs_key key
;
3225 struct btrfs_key found_key
;
3226 struct extent_buffer
*eb
;
3228 iterate_inode_ref_t cb
;
3230 path
= alloc_path_for_send();
3234 if (cmd
== BTRFS_COMPARE_TREE_NEW
) {
3235 root
= sctx
->send_root
;
3236 cb
= __record_new_ref
;
3237 } else if (cmd
== BTRFS_COMPARE_TREE_DELETED
) {
3238 root
= sctx
->parent_root
;
3239 cb
= __record_deleted_ref
;
3244 key
.objectid
= sctx
->cmp_key
->objectid
;
3245 key
.type
= BTRFS_INODE_REF_KEY
;
3248 ret
= btrfs_search_slot_for_read(root
, &key
, path
, 1, 0);
3254 eb
= path
->nodes
[0];
3255 slot
= path
->slots
[0];
3256 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
3258 if (found_key
.objectid
!= key
.objectid
||
3259 (found_key
.type
!= BTRFS_INODE_REF_KEY
&&
3260 found_key
.type
!= BTRFS_INODE_EXTREF_KEY
))
3263 ret
= iterate_inode_ref(root
, path
, &found_key
, 0, cb
, sctx
);
3264 btrfs_release_path(path
);
3268 key
.offset
= found_key
.offset
+ 1;
3270 btrfs_release_path(path
);
3272 ret
= process_recorded_refs(sctx
);
3275 btrfs_free_path(path
);
3279 static int send_set_xattr(struct send_ctx
*sctx
,
3280 struct fs_path
*path
,
3281 const char *name
, int name_len
,
3282 const char *data
, int data_len
)
3286 ret
= begin_cmd(sctx
, BTRFS_SEND_C_SET_XATTR
);
3290 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, path
);
3291 TLV_PUT_STRING(sctx
, BTRFS_SEND_A_XATTR_NAME
, name
, name_len
);
3292 TLV_PUT(sctx
, BTRFS_SEND_A_XATTR_DATA
, data
, data_len
);
3294 ret
= send_cmd(sctx
);
3301 static int send_remove_xattr(struct send_ctx
*sctx
,
3302 struct fs_path
*path
,
3303 const char *name
, int name_len
)
3307 ret
= begin_cmd(sctx
, BTRFS_SEND_C_REMOVE_XATTR
);
3311 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, path
);
3312 TLV_PUT_STRING(sctx
, BTRFS_SEND_A_XATTR_NAME
, name
, name_len
);
3314 ret
= send_cmd(sctx
);
3321 static int __process_new_xattr(int num
, struct btrfs_key
*di_key
,
3322 const char *name
, int name_len
,
3323 const char *data
, int data_len
,
3327 struct send_ctx
*sctx
= ctx
;
3329 posix_acl_xattr_header dummy_acl
;
3331 p
= fs_path_alloc();
3336 * This hack is needed because empty acl's are stored as zero byte
3337 * data in xattrs. Problem with that is, that receiving these zero byte
3338 * acl's will fail later. To fix this, we send a dummy acl list that
3339 * only contains the version number and no entries.
3341 if (!strncmp(name
, XATTR_NAME_POSIX_ACL_ACCESS
, name_len
) ||
3342 !strncmp(name
, XATTR_NAME_POSIX_ACL_DEFAULT
, name_len
)) {
3343 if (data_len
== 0) {
3344 dummy_acl
.a_version
=
3345 cpu_to_le32(POSIX_ACL_XATTR_VERSION
);
3346 data
= (char *)&dummy_acl
;
3347 data_len
= sizeof(dummy_acl
);
3351 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
, p
);
3355 ret
= send_set_xattr(sctx
, p
, name
, name_len
, data
, data_len
);
3362 static int __process_deleted_xattr(int num
, struct btrfs_key
*di_key
,
3363 const char *name
, int name_len
,
3364 const char *data
, int data_len
,
3368 struct send_ctx
*sctx
= ctx
;
3371 p
= fs_path_alloc();
3375 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
, p
);
3379 ret
= send_remove_xattr(sctx
, p
, name
, name_len
);
3386 static int process_new_xattr(struct send_ctx
*sctx
)
3390 ret
= iterate_dir_item(sctx
->send_root
, sctx
->left_path
,
3391 sctx
->cmp_key
, __process_new_xattr
, sctx
);
3396 static int process_deleted_xattr(struct send_ctx
*sctx
)
3400 ret
= iterate_dir_item(sctx
->parent_root
, sctx
->right_path
,
3401 sctx
->cmp_key
, __process_deleted_xattr
, sctx
);
3406 struct find_xattr_ctx
{
3414 static int __find_xattr(int num
, struct btrfs_key
*di_key
,
3415 const char *name
, int name_len
,
3416 const char *data
, int data_len
,
3417 u8 type
, void *vctx
)
3419 struct find_xattr_ctx
*ctx
= vctx
;
3421 if (name_len
== ctx
->name_len
&&
3422 strncmp(name
, ctx
->name
, name_len
) == 0) {
3423 ctx
->found_idx
= num
;
3424 ctx
->found_data_len
= data_len
;
3425 ctx
->found_data
= kmemdup(data
, data_len
, GFP_NOFS
);
3426 if (!ctx
->found_data
)
3433 static int find_xattr(struct btrfs_root
*root
,
3434 struct btrfs_path
*path
,
3435 struct btrfs_key
*key
,
3436 const char *name
, int name_len
,
3437 char **data
, int *data_len
)
3440 struct find_xattr_ctx ctx
;
3443 ctx
.name_len
= name_len
;
3445 ctx
.found_data
= NULL
;
3446 ctx
.found_data_len
= 0;
3448 ret
= iterate_dir_item(root
, path
, key
, __find_xattr
, &ctx
);
3452 if (ctx
.found_idx
== -1)
3455 *data
= ctx
.found_data
;
3456 *data_len
= ctx
.found_data_len
;
3458 kfree(ctx
.found_data
);
3460 return ctx
.found_idx
;
3464 static int __process_changed_new_xattr(int num
, struct btrfs_key
*di_key
,
3465 const char *name
, int name_len
,
3466 const char *data
, int data_len
,
3470 struct send_ctx
*sctx
= ctx
;
3471 char *found_data
= NULL
;
3472 int found_data_len
= 0;
3474 ret
= find_xattr(sctx
->parent_root
, sctx
->right_path
,
3475 sctx
->cmp_key
, name
, name_len
, &found_data
,
3477 if (ret
== -ENOENT
) {
3478 ret
= __process_new_xattr(num
, di_key
, name
, name_len
, data
,
3479 data_len
, type
, ctx
);
3480 } else if (ret
>= 0) {
3481 if (data_len
!= found_data_len
||
3482 memcmp(data
, found_data
, data_len
)) {
3483 ret
= __process_new_xattr(num
, di_key
, name
, name_len
,
3484 data
, data_len
, type
, ctx
);
3494 static int __process_changed_deleted_xattr(int num
, struct btrfs_key
*di_key
,
3495 const char *name
, int name_len
,
3496 const char *data
, int data_len
,
3500 struct send_ctx
*sctx
= ctx
;
3502 ret
= find_xattr(sctx
->send_root
, sctx
->left_path
, sctx
->cmp_key
,
3503 name
, name_len
, NULL
, NULL
);
3505 ret
= __process_deleted_xattr(num
, di_key
, name
, name_len
, data
,
3506 data_len
, type
, ctx
);
3513 static int process_changed_xattr(struct send_ctx
*sctx
)
3517 ret
= iterate_dir_item(sctx
->send_root
, sctx
->left_path
,
3518 sctx
->cmp_key
, __process_changed_new_xattr
, sctx
);
3521 ret
= iterate_dir_item(sctx
->parent_root
, sctx
->right_path
,
3522 sctx
->cmp_key
, __process_changed_deleted_xattr
, sctx
);
3528 static int process_all_new_xattrs(struct send_ctx
*sctx
)
3531 struct btrfs_root
*root
;
3532 struct btrfs_path
*path
;
3533 struct btrfs_key key
;
3534 struct btrfs_key found_key
;
3535 struct extent_buffer
*eb
;
3538 path
= alloc_path_for_send();
3542 root
= sctx
->send_root
;
3544 key
.objectid
= sctx
->cmp_key
->objectid
;
3545 key
.type
= BTRFS_XATTR_ITEM_KEY
;
3548 ret
= btrfs_search_slot_for_read(root
, &key
, path
, 1, 0);
3556 eb
= path
->nodes
[0];
3557 slot
= path
->slots
[0];
3558 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
3560 if (found_key
.objectid
!= key
.objectid
||
3561 found_key
.type
!= key
.type
) {
3566 ret
= iterate_dir_item(root
, path
, &found_key
,
3567 __process_new_xattr
, sctx
);
3571 btrfs_release_path(path
);
3572 key
.offset
= found_key
.offset
+ 1;
3576 btrfs_free_path(path
);
3581 * Read some bytes from the current inode/file and send a write command to
3584 static int send_write(struct send_ctx
*sctx
, u64 offset
, u32 len
)
3588 loff_t pos
= offset
;
3590 mm_segment_t old_fs
;
3592 p
= fs_path_alloc();
3597 * vfs normally only accepts user space buffers for security reasons.
3598 * we only read from the file and also only provide the read_buf buffer
3599 * to vfs. As this buffer does not come from a user space call, it's
3600 * ok to temporary allow kernel space buffers.
3605 verbose_printk("btrfs: send_write offset=%llu, len=%d\n", offset
, len
);
3607 ret
= open_cur_inode_file(sctx
);
3611 ret
= vfs_read(sctx
->cur_inode_filp
, sctx
->read_buf
, len
, &pos
);
3618 ret
= begin_cmd(sctx
, BTRFS_SEND_C_WRITE
);
3622 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
, p
);
3626 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
3627 TLV_PUT_U64(sctx
, BTRFS_SEND_A_FILE_OFFSET
, offset
);
3628 TLV_PUT(sctx
, BTRFS_SEND_A_DATA
, sctx
->read_buf
, num_read
);
3630 ret
= send_cmd(sctx
);
3642 * Send a clone command to user space.
3644 static int send_clone(struct send_ctx
*sctx
,
3645 u64 offset
, u32 len
,
3646 struct clone_root
*clone_root
)
3652 verbose_printk("btrfs: send_clone offset=%llu, len=%d, clone_root=%llu, "
3653 "clone_inode=%llu, clone_offset=%llu\n", offset
, len
,
3654 clone_root
->root
->objectid
, clone_root
->ino
,
3655 clone_root
->offset
);
3657 p
= fs_path_alloc();
3661 ret
= begin_cmd(sctx
, BTRFS_SEND_C_CLONE
);
3665 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
, p
);
3669 TLV_PUT_U64(sctx
, BTRFS_SEND_A_FILE_OFFSET
, offset
);
3670 TLV_PUT_U64(sctx
, BTRFS_SEND_A_CLONE_LEN
, len
);
3671 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
3673 if (clone_root
->root
== sctx
->send_root
) {
3674 ret
= get_inode_info(sctx
->send_root
, clone_root
->ino
, NULL
,
3675 &gen
, NULL
, NULL
, NULL
, NULL
);
3678 ret
= get_cur_path(sctx
, clone_root
->ino
, gen
, p
);
3680 ret
= get_inode_path(clone_root
->root
, clone_root
->ino
, p
);
3685 TLV_PUT_UUID(sctx
, BTRFS_SEND_A_CLONE_UUID
,
3686 clone_root
->root
->root_item
.uuid
);
3687 TLV_PUT_U64(sctx
, BTRFS_SEND_A_CLONE_CTRANSID
,
3688 clone_root
->root
->root_item
.ctransid
);
3689 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_CLONE_PATH
, p
);
3690 TLV_PUT_U64(sctx
, BTRFS_SEND_A_CLONE_OFFSET
,
3691 clone_root
->offset
);
3693 ret
= send_cmd(sctx
);
3702 * Send an update extent command to user space.
3704 static int send_update_extent(struct send_ctx
*sctx
,
3705 u64 offset
, u32 len
)
3710 p
= fs_path_alloc();
3714 ret
= begin_cmd(sctx
, BTRFS_SEND_C_UPDATE_EXTENT
);
3718 ret
= get_cur_path(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
, p
);
3722 TLV_PUT_PATH(sctx
, BTRFS_SEND_A_PATH
, p
);
3723 TLV_PUT_U64(sctx
, BTRFS_SEND_A_FILE_OFFSET
, offset
);
3724 TLV_PUT_U64(sctx
, BTRFS_SEND_A_SIZE
, len
);
3726 ret
= send_cmd(sctx
);
3734 static int send_write_or_clone(struct send_ctx
*sctx
,
3735 struct btrfs_path
*path
,
3736 struct btrfs_key
*key
,
3737 struct clone_root
*clone_root
)
3740 struct btrfs_file_extent_item
*ei
;
3741 u64 offset
= key
->offset
;
3747 ei
= btrfs_item_ptr(path
->nodes
[0], path
->slots
[0],
3748 struct btrfs_file_extent_item
);
3749 type
= btrfs_file_extent_type(path
->nodes
[0], ei
);
3750 if (type
== BTRFS_FILE_EXTENT_INLINE
) {
3751 len
= btrfs_file_extent_inline_len(path
->nodes
[0], ei
);
3753 * it is possible the inline item won't cover the whole page,
3754 * but there may be items after this page. Make
3755 * sure to send the whole thing
3757 len
= PAGE_CACHE_ALIGN(len
);
3759 len
= btrfs_file_extent_num_bytes(path
->nodes
[0], ei
);
3762 if (offset
+ len
> sctx
->cur_inode_size
)
3763 len
= sctx
->cur_inode_size
- offset
;
3770 ret
= send_clone(sctx
, offset
, len
, clone_root
);
3771 } else if (sctx
->flags
& BTRFS_SEND_FLAG_NO_FILE_DATA
) {
3772 ret
= send_update_extent(sctx
, offset
, len
);
3776 if (l
> BTRFS_SEND_READ_SIZE
)
3777 l
= BTRFS_SEND_READ_SIZE
;
3778 ret
= send_write(sctx
, pos
+ offset
, l
);
3791 static int is_extent_unchanged(struct send_ctx
*sctx
,
3792 struct btrfs_path
*left_path
,
3793 struct btrfs_key
*ekey
)
3796 struct btrfs_key key
;
3797 struct btrfs_path
*path
= NULL
;
3798 struct extent_buffer
*eb
;
3800 struct btrfs_key found_key
;
3801 struct btrfs_file_extent_item
*ei
;
3806 u64 left_offset_fixed
;
3814 path
= alloc_path_for_send();
3818 eb
= left_path
->nodes
[0];
3819 slot
= left_path
->slots
[0];
3820 ei
= btrfs_item_ptr(eb
, slot
, struct btrfs_file_extent_item
);
3821 left_type
= btrfs_file_extent_type(eb
, ei
);
3823 if (left_type
!= BTRFS_FILE_EXTENT_REG
) {
3827 left_disknr
= btrfs_file_extent_disk_bytenr(eb
, ei
);
3828 left_len
= btrfs_file_extent_num_bytes(eb
, ei
);
3829 left_offset
= btrfs_file_extent_offset(eb
, ei
);
3830 left_gen
= btrfs_file_extent_generation(eb
, ei
);
3833 * Following comments will refer to these graphics. L is the left
3834 * extents which we are checking at the moment. 1-8 are the right
3835 * extents that we iterate.
3838 * |-1-|-2a-|-3-|-4-|-5-|-6-|
3841 * |--1--|-2b-|...(same as above)
3843 * Alternative situation. Happens on files where extents got split.
3845 * |-----------7-----------|-6-|
3847 * Alternative situation. Happens on files which got larger.
3850 * Nothing follows after 8.
3853 key
.objectid
= ekey
->objectid
;
3854 key
.type
= BTRFS_EXTENT_DATA_KEY
;
3855 key
.offset
= ekey
->offset
;
3856 ret
= btrfs_search_slot_for_read(sctx
->parent_root
, &key
, path
, 0, 0);
3865 * Handle special case where the right side has no extents at all.
3867 eb
= path
->nodes
[0];
3868 slot
= path
->slots
[0];
3869 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
3870 if (found_key
.objectid
!= key
.objectid
||
3871 found_key
.type
!= key
.type
) {
3877 * We're now on 2a, 2b or 7.
3880 while (key
.offset
< ekey
->offset
+ left_len
) {
3881 ei
= btrfs_item_ptr(eb
, slot
, struct btrfs_file_extent_item
);
3882 right_type
= btrfs_file_extent_type(eb
, ei
);
3883 right_disknr
= btrfs_file_extent_disk_bytenr(eb
, ei
);
3884 right_len
= btrfs_file_extent_num_bytes(eb
, ei
);
3885 right_offset
= btrfs_file_extent_offset(eb
, ei
);
3886 right_gen
= btrfs_file_extent_generation(eb
, ei
);
3888 if (right_type
!= BTRFS_FILE_EXTENT_REG
) {
3894 * Are we at extent 8? If yes, we know the extent is changed.
3895 * This may only happen on the first iteration.
3897 if (found_key
.offset
+ right_len
<= ekey
->offset
) {
3902 left_offset_fixed
= left_offset
;
3903 if (key
.offset
< ekey
->offset
) {
3904 /* Fix the right offset for 2a and 7. */
3905 right_offset
+= ekey
->offset
- key
.offset
;
3907 /* Fix the left offset for all behind 2a and 2b */
3908 left_offset_fixed
+= key
.offset
- ekey
->offset
;
3912 * Check if we have the same extent.
3914 if (left_disknr
!= right_disknr
||
3915 left_offset_fixed
!= right_offset
||
3916 left_gen
!= right_gen
) {
3922 * Go to the next extent.
3924 ret
= btrfs_next_item(sctx
->parent_root
, path
);
3928 eb
= path
->nodes
[0];
3929 slot
= path
->slots
[0];
3930 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
3932 if (ret
|| found_key
.objectid
!= key
.objectid
||
3933 found_key
.type
!= key
.type
) {
3934 key
.offset
+= right_len
;
3937 if (found_key
.offset
!= key
.offset
+ right_len
) {
3945 * We're now behind the left extent (treat as unchanged) or at the end
3946 * of the right side (treat as changed).
3948 if (key
.offset
>= ekey
->offset
+ left_len
)
3955 btrfs_free_path(path
);
3959 static int process_extent(struct send_ctx
*sctx
,
3960 struct btrfs_path
*path
,
3961 struct btrfs_key
*key
)
3964 struct clone_root
*found_clone
= NULL
;
3966 if (S_ISLNK(sctx
->cur_inode_mode
))
3969 if (sctx
->parent_root
&& !sctx
->cur_inode_new
) {
3970 ret
= is_extent_unchanged(sctx
, path
, key
);
3979 ret
= find_extent_clone(sctx
, path
, key
->objectid
, key
->offset
,
3980 sctx
->cur_inode_size
, &found_clone
);
3981 if (ret
!= -ENOENT
&& ret
< 0)
3984 ret
= send_write_or_clone(sctx
, path
, key
, found_clone
);
3990 static int process_all_extents(struct send_ctx
*sctx
)
3993 struct btrfs_root
*root
;
3994 struct btrfs_path
*path
;
3995 struct btrfs_key key
;
3996 struct btrfs_key found_key
;
3997 struct extent_buffer
*eb
;
4000 root
= sctx
->send_root
;
4001 path
= alloc_path_for_send();
4005 key
.objectid
= sctx
->cmp_key
->objectid
;
4006 key
.type
= BTRFS_EXTENT_DATA_KEY
;
4009 ret
= btrfs_search_slot_for_read(root
, &key
, path
, 1, 0);
4017 eb
= path
->nodes
[0];
4018 slot
= path
->slots
[0];
4019 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
4021 if (found_key
.objectid
!= key
.objectid
||
4022 found_key
.type
!= key
.type
) {
4027 ret
= process_extent(sctx
, path
, &found_key
);
4031 btrfs_release_path(path
);
4032 key
.offset
= found_key
.offset
+ 1;
4036 btrfs_free_path(path
);
4040 static int process_recorded_refs_if_needed(struct send_ctx
*sctx
, int at_end
)
4044 if (sctx
->cur_ino
== 0)
4046 if (!at_end
&& sctx
->cur_ino
== sctx
->cmp_key
->objectid
&&
4047 sctx
->cmp_key
->type
<= BTRFS_INODE_EXTREF_KEY
)
4049 if (list_empty(&sctx
->new_refs
) && list_empty(&sctx
->deleted_refs
))
4052 ret
= process_recorded_refs(sctx
);
4057 * We have processed the refs and thus need to advance send_progress.
4058 * Now, calls to get_cur_xxx will take the updated refs of the current
4059 * inode into account.
4061 sctx
->send_progress
= sctx
->cur_ino
+ 1;
4067 static int finish_inode_if_needed(struct send_ctx
*sctx
, int at_end
)
4079 ret
= process_recorded_refs_if_needed(sctx
, at_end
);
4083 if (sctx
->cur_ino
== 0 || sctx
->cur_inode_deleted
)
4085 if (!at_end
&& sctx
->cmp_key
->objectid
== sctx
->cur_ino
)
4088 ret
= get_inode_info(sctx
->send_root
, sctx
->cur_ino
, NULL
, NULL
,
4089 &left_mode
, &left_uid
, &left_gid
, NULL
);
4093 if (!sctx
->parent_root
|| sctx
->cur_inode_new
) {
4095 if (!S_ISLNK(sctx
->cur_inode_mode
))
4098 ret
= get_inode_info(sctx
->parent_root
, sctx
->cur_ino
,
4099 NULL
, NULL
, &right_mode
, &right_uid
,
4104 if (left_uid
!= right_uid
|| left_gid
!= right_gid
)
4106 if (!S_ISLNK(sctx
->cur_inode_mode
) && left_mode
!= right_mode
)
4110 if (S_ISREG(sctx
->cur_inode_mode
)) {
4111 ret
= send_truncate(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
,
4112 sctx
->cur_inode_size
);
4118 ret
= send_chown(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
,
4119 left_uid
, left_gid
);
4124 ret
= send_chmod(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
,
4131 * Need to send that every time, no matter if it actually changed
4132 * between the two trees as we have done changes to the inode before.
4134 ret
= send_utimes(sctx
, sctx
->cur_ino
, sctx
->cur_inode_gen
);
4142 static int changed_inode(struct send_ctx
*sctx
,
4143 enum btrfs_compare_tree_result result
)
4146 struct btrfs_key
*key
= sctx
->cmp_key
;
4147 struct btrfs_inode_item
*left_ii
= NULL
;
4148 struct btrfs_inode_item
*right_ii
= NULL
;
4152 ret
= close_cur_inode_file(sctx
);
4156 sctx
->cur_ino
= key
->objectid
;
4157 sctx
->cur_inode_new_gen
= 0;
4160 * Set send_progress to current inode. This will tell all get_cur_xxx
4161 * functions that the current inode's refs are not updated yet. Later,
4162 * when process_recorded_refs is finished, it is set to cur_ino + 1.
4164 sctx
->send_progress
= sctx
->cur_ino
;
4166 if (result
== BTRFS_COMPARE_TREE_NEW
||
4167 result
== BTRFS_COMPARE_TREE_CHANGED
) {
4168 left_ii
= btrfs_item_ptr(sctx
->left_path
->nodes
[0],
4169 sctx
->left_path
->slots
[0],
4170 struct btrfs_inode_item
);
4171 left_gen
= btrfs_inode_generation(sctx
->left_path
->nodes
[0],
4174 right_ii
= btrfs_item_ptr(sctx
->right_path
->nodes
[0],
4175 sctx
->right_path
->slots
[0],
4176 struct btrfs_inode_item
);
4177 right_gen
= btrfs_inode_generation(sctx
->right_path
->nodes
[0],
4180 if (result
== BTRFS_COMPARE_TREE_CHANGED
) {
4181 right_ii
= btrfs_item_ptr(sctx
->right_path
->nodes
[0],
4182 sctx
->right_path
->slots
[0],
4183 struct btrfs_inode_item
);
4185 right_gen
= btrfs_inode_generation(sctx
->right_path
->nodes
[0],
4189 * The cur_ino = root dir case is special here. We can't treat
4190 * the inode as deleted+reused because it would generate a
4191 * stream that tries to delete/mkdir the root dir.
4193 if (left_gen
!= right_gen
&&
4194 sctx
->cur_ino
!= BTRFS_FIRST_FREE_OBJECTID
)
4195 sctx
->cur_inode_new_gen
= 1;
4198 if (result
== BTRFS_COMPARE_TREE_NEW
) {
4199 sctx
->cur_inode_gen
= left_gen
;
4200 sctx
->cur_inode_new
= 1;
4201 sctx
->cur_inode_deleted
= 0;
4202 sctx
->cur_inode_size
= btrfs_inode_size(
4203 sctx
->left_path
->nodes
[0], left_ii
);
4204 sctx
->cur_inode_mode
= btrfs_inode_mode(
4205 sctx
->left_path
->nodes
[0], left_ii
);
4206 if (sctx
->cur_ino
!= BTRFS_FIRST_FREE_OBJECTID
)
4207 ret
= send_create_inode_if_needed(sctx
);
4208 } else if (result
== BTRFS_COMPARE_TREE_DELETED
) {
4209 sctx
->cur_inode_gen
= right_gen
;
4210 sctx
->cur_inode_new
= 0;
4211 sctx
->cur_inode_deleted
= 1;
4212 sctx
->cur_inode_size
= btrfs_inode_size(
4213 sctx
->right_path
->nodes
[0], right_ii
);
4214 sctx
->cur_inode_mode
= btrfs_inode_mode(
4215 sctx
->right_path
->nodes
[0], right_ii
);
4216 } else if (result
== BTRFS_COMPARE_TREE_CHANGED
) {
4218 * We need to do some special handling in case the inode was
4219 * reported as changed with a changed generation number. This
4220 * means that the original inode was deleted and new inode
4221 * reused the same inum. So we have to treat the old inode as
4222 * deleted and the new one as new.
4224 if (sctx
->cur_inode_new_gen
) {
4226 * First, process the inode as if it was deleted.
4228 sctx
->cur_inode_gen
= right_gen
;
4229 sctx
->cur_inode_new
= 0;
4230 sctx
->cur_inode_deleted
= 1;
4231 sctx
->cur_inode_size
= btrfs_inode_size(
4232 sctx
->right_path
->nodes
[0], right_ii
);
4233 sctx
->cur_inode_mode
= btrfs_inode_mode(
4234 sctx
->right_path
->nodes
[0], right_ii
);
4235 ret
= process_all_refs(sctx
,
4236 BTRFS_COMPARE_TREE_DELETED
);
4241 * Now process the inode as if it was new.
4243 sctx
->cur_inode_gen
= left_gen
;
4244 sctx
->cur_inode_new
= 1;
4245 sctx
->cur_inode_deleted
= 0;
4246 sctx
->cur_inode_size
= btrfs_inode_size(
4247 sctx
->left_path
->nodes
[0], left_ii
);
4248 sctx
->cur_inode_mode
= btrfs_inode_mode(
4249 sctx
->left_path
->nodes
[0], left_ii
);
4250 ret
= send_create_inode_if_needed(sctx
);
4254 ret
= process_all_refs(sctx
, BTRFS_COMPARE_TREE_NEW
);
4258 * Advance send_progress now as we did not get into
4259 * process_recorded_refs_if_needed in the new_gen case.
4261 sctx
->send_progress
= sctx
->cur_ino
+ 1;
4264 * Now process all extents and xattrs of the inode as if
4265 * they were all new.
4267 ret
= process_all_extents(sctx
);
4270 ret
= process_all_new_xattrs(sctx
);
4274 sctx
->cur_inode_gen
= left_gen
;
4275 sctx
->cur_inode_new
= 0;
4276 sctx
->cur_inode_new_gen
= 0;
4277 sctx
->cur_inode_deleted
= 0;
4278 sctx
->cur_inode_size
= btrfs_inode_size(
4279 sctx
->left_path
->nodes
[0], left_ii
);
4280 sctx
->cur_inode_mode
= btrfs_inode_mode(
4281 sctx
->left_path
->nodes
[0], left_ii
);
4290 * We have to process new refs before deleted refs, but compare_trees gives us
4291 * the new and deleted refs mixed. To fix this, we record the new/deleted refs
4292 * first and later process them in process_recorded_refs.
4293 * For the cur_inode_new_gen case, we skip recording completely because
4294 * changed_inode did already initiate processing of refs. The reason for this is
4295 * that in this case, compare_tree actually compares the refs of 2 different
4296 * inodes. To fix this, process_all_refs is used in changed_inode to handle all
4297 * refs of the right tree as deleted and all refs of the left tree as new.
4299 static int changed_ref(struct send_ctx
*sctx
,
4300 enum btrfs_compare_tree_result result
)
4304 BUG_ON(sctx
->cur_ino
!= sctx
->cmp_key
->objectid
);
4306 if (!sctx
->cur_inode_new_gen
&&
4307 sctx
->cur_ino
!= BTRFS_FIRST_FREE_OBJECTID
) {
4308 if (result
== BTRFS_COMPARE_TREE_NEW
)
4309 ret
= record_new_ref(sctx
);
4310 else if (result
== BTRFS_COMPARE_TREE_DELETED
)
4311 ret
= record_deleted_ref(sctx
);
4312 else if (result
== BTRFS_COMPARE_TREE_CHANGED
)
4313 ret
= record_changed_ref(sctx
);
4320 * Process new/deleted/changed xattrs. We skip processing in the
4321 * cur_inode_new_gen case because changed_inode did already initiate processing
4322 * of xattrs. The reason is the same as in changed_ref
4324 static int changed_xattr(struct send_ctx
*sctx
,
4325 enum btrfs_compare_tree_result result
)
4329 BUG_ON(sctx
->cur_ino
!= sctx
->cmp_key
->objectid
);
4331 if (!sctx
->cur_inode_new_gen
&& !sctx
->cur_inode_deleted
) {
4332 if (result
== BTRFS_COMPARE_TREE_NEW
)
4333 ret
= process_new_xattr(sctx
);
4334 else if (result
== BTRFS_COMPARE_TREE_DELETED
)
4335 ret
= process_deleted_xattr(sctx
);
4336 else if (result
== BTRFS_COMPARE_TREE_CHANGED
)
4337 ret
= process_changed_xattr(sctx
);
4344 * Process new/deleted/changed extents. We skip processing in the
4345 * cur_inode_new_gen case because changed_inode did already initiate processing
4346 * of extents. The reason is the same as in changed_ref
4348 static int changed_extent(struct send_ctx
*sctx
,
4349 enum btrfs_compare_tree_result result
)
4353 BUG_ON(sctx
->cur_ino
!= sctx
->cmp_key
->objectid
);
4355 if (!sctx
->cur_inode_new_gen
&& !sctx
->cur_inode_deleted
) {
4356 if (result
!= BTRFS_COMPARE_TREE_DELETED
)
4357 ret
= process_extent(sctx
, sctx
->left_path
,
4365 * Updates compare related fields in sctx and simply forwards to the actual
4366 * changed_xxx functions.
4368 static int changed_cb(struct btrfs_root
*left_root
,
4369 struct btrfs_root
*right_root
,
4370 struct btrfs_path
*left_path
,
4371 struct btrfs_path
*right_path
,
4372 struct btrfs_key
*key
,
4373 enum btrfs_compare_tree_result result
,
4377 struct send_ctx
*sctx
= ctx
;
4379 sctx
->left_path
= left_path
;
4380 sctx
->right_path
= right_path
;
4381 sctx
->cmp_key
= key
;
4383 ret
= finish_inode_if_needed(sctx
, 0);
4387 /* Ignore non-FS objects */
4388 if (key
->objectid
== BTRFS_FREE_INO_OBJECTID
||
4389 key
->objectid
== BTRFS_FREE_SPACE_OBJECTID
)
4392 if (key
->type
== BTRFS_INODE_ITEM_KEY
)
4393 ret
= changed_inode(sctx
, result
);
4394 else if (key
->type
== BTRFS_INODE_REF_KEY
||
4395 key
->type
== BTRFS_INODE_EXTREF_KEY
)
4396 ret
= changed_ref(sctx
, result
);
4397 else if (key
->type
== BTRFS_XATTR_ITEM_KEY
)
4398 ret
= changed_xattr(sctx
, result
);
4399 else if (key
->type
== BTRFS_EXTENT_DATA_KEY
)
4400 ret
= changed_extent(sctx
, result
);
4406 static int full_send_tree(struct send_ctx
*sctx
)
4409 struct btrfs_trans_handle
*trans
= NULL
;
4410 struct btrfs_root
*send_root
= sctx
->send_root
;
4411 struct btrfs_key key
;
4412 struct btrfs_key found_key
;
4413 struct btrfs_path
*path
;
4414 struct extent_buffer
*eb
;
4419 path
= alloc_path_for_send();
4423 spin_lock(&send_root
->root_item_lock
);
4424 start_ctransid
= btrfs_root_ctransid(&send_root
->root_item
);
4425 spin_unlock(&send_root
->root_item_lock
);
4427 key
.objectid
= BTRFS_FIRST_FREE_OBJECTID
;
4428 key
.type
= BTRFS_INODE_ITEM_KEY
;
4433 * We need to make sure the transaction does not get committed
4434 * while we do anything on commit roots. Join a transaction to prevent
4437 trans
= btrfs_join_transaction(send_root
);
4438 if (IS_ERR(trans
)) {
4439 ret
= PTR_ERR(trans
);
4445 * Make sure the tree has not changed after re-joining. We detect this
4446 * by comparing start_ctransid and ctransid. They should always match.
4448 spin_lock(&send_root
->root_item_lock
);
4449 ctransid
= btrfs_root_ctransid(&send_root
->root_item
);
4450 spin_unlock(&send_root
->root_item_lock
);
4452 if (ctransid
!= start_ctransid
) {
4453 WARN(1, KERN_WARNING
"btrfs: the root that you're trying to "
4454 "send was modified in between. This is "
4455 "probably a bug.\n");
4460 ret
= btrfs_search_slot_for_read(send_root
, &key
, path
, 1, 0);
4468 * When someone want to commit while we iterate, end the
4469 * joined transaction and rejoin.
4471 if (btrfs_should_end_transaction(trans
, send_root
)) {
4472 ret
= btrfs_end_transaction(trans
, send_root
);
4476 btrfs_release_path(path
);
4480 eb
= path
->nodes
[0];
4481 slot
= path
->slots
[0];
4482 btrfs_item_key_to_cpu(eb
, &found_key
, slot
);
4484 ret
= changed_cb(send_root
, NULL
, path
, NULL
,
4485 &found_key
, BTRFS_COMPARE_TREE_NEW
, sctx
);
4489 key
.objectid
= found_key
.objectid
;
4490 key
.type
= found_key
.type
;
4491 key
.offset
= found_key
.offset
+ 1;
4493 ret
= btrfs_next_item(send_root
, path
);
4503 ret
= finish_inode_if_needed(sctx
, 1);
4506 btrfs_free_path(path
);
4509 ret
= btrfs_end_transaction(trans
, send_root
);
4511 btrfs_end_transaction(trans
, send_root
);
4516 static int send_subvol(struct send_ctx
*sctx
)
4520 if (!(sctx
->flags
& BTRFS_SEND_FLAG_OMIT_STREAM_HEADER
)) {
4521 ret
= send_header(sctx
);
4526 ret
= send_subvol_begin(sctx
);
4530 if (sctx
->parent_root
) {
4531 ret
= btrfs_compare_trees(sctx
->send_root
, sctx
->parent_root
,
4535 ret
= finish_inode_if_needed(sctx
, 1);
4539 ret
= full_send_tree(sctx
);
4546 ret
= close_cur_inode_file(sctx
);
4548 close_cur_inode_file(sctx
);
4550 free_recorded_refs(sctx
);
4554 long btrfs_ioctl_send(struct file
*mnt_file
, void __user
*arg_
)
4557 struct btrfs_root
*send_root
;
4558 struct btrfs_root
*clone_root
;
4559 struct btrfs_fs_info
*fs_info
;
4560 struct btrfs_ioctl_send_args
*arg
= NULL
;
4561 struct btrfs_key key
;
4562 struct send_ctx
*sctx
= NULL
;
4564 u64
*clone_sources_tmp
= NULL
;
4566 if (!capable(CAP_SYS_ADMIN
))
4569 send_root
= BTRFS_I(file_inode(mnt_file
))->root
;
4570 fs_info
= send_root
->fs_info
;
4573 * This is done when we lookup the root, it should already be complete
4574 * by the time we get here.
4576 WARN_ON(send_root
->orphan_cleanup_state
!= ORPHAN_CLEANUP_DONE
);
4579 * If we just created this root we need to make sure that the orphan
4580 * cleanup has been done and committed since we search the commit root,
4581 * so check its commit root transid with our otransid and if they match
4582 * commit the transaction to make sure everything is updated.
4584 down_read(&send_root
->fs_info
->extent_commit_sem
);
4585 if (btrfs_header_generation(send_root
->commit_root
) ==
4586 btrfs_root_otransid(&send_root
->root_item
)) {
4587 struct btrfs_trans_handle
*trans
;
4589 up_read(&send_root
->fs_info
->extent_commit_sem
);
4591 trans
= btrfs_attach_transaction_barrier(send_root
);
4592 if (IS_ERR(trans
)) {
4593 if (PTR_ERR(trans
) != -ENOENT
) {
4594 ret
= PTR_ERR(trans
);
4597 /* ENOENT means theres no transaction */
4599 ret
= btrfs_commit_transaction(trans
, send_root
);
4604 up_read(&send_root
->fs_info
->extent_commit_sem
);
4607 arg
= memdup_user(arg_
, sizeof(*arg
));
4614 if (!access_ok(VERIFY_READ
, arg
->clone_sources
,
4615 sizeof(*arg
->clone_sources
*
4616 arg
->clone_sources_count
))) {
4621 if (arg
->flags
& ~BTRFS_SEND_FLAG_MASK
) {
4626 sctx
= kzalloc(sizeof(struct send_ctx
), GFP_NOFS
);
4632 INIT_LIST_HEAD(&sctx
->new_refs
);
4633 INIT_LIST_HEAD(&sctx
->deleted_refs
);
4634 INIT_RADIX_TREE(&sctx
->name_cache
, GFP_NOFS
);
4635 INIT_LIST_HEAD(&sctx
->name_cache_list
);
4637 sctx
->flags
= arg
->flags
;
4639 sctx
->send_filp
= fget(arg
->send_fd
);
4640 if (!sctx
->send_filp
) {
4645 sctx
->mnt
= mnt_file
->f_path
.mnt
;
4647 sctx
->send_root
= send_root
;
4648 sctx
->clone_roots_cnt
= arg
->clone_sources_count
;
4650 sctx
->send_max_size
= BTRFS_SEND_BUF_SIZE
;
4651 sctx
->send_buf
= vmalloc(sctx
->send_max_size
);
4652 if (!sctx
->send_buf
) {
4657 sctx
->read_buf
= vmalloc(BTRFS_SEND_READ_SIZE
);
4658 if (!sctx
->read_buf
) {
4663 sctx
->clone_roots
= vzalloc(sizeof(struct clone_root
) *
4664 (arg
->clone_sources_count
+ 1));
4665 if (!sctx
->clone_roots
) {
4670 if (arg
->clone_sources_count
) {
4671 clone_sources_tmp
= vmalloc(arg
->clone_sources_count
*
4672 sizeof(*arg
->clone_sources
));
4673 if (!clone_sources_tmp
) {
4678 ret
= copy_from_user(clone_sources_tmp
, arg
->clone_sources
,
4679 arg
->clone_sources_count
*
4680 sizeof(*arg
->clone_sources
));
4686 for (i
= 0; i
< arg
->clone_sources_count
; i
++) {
4687 key
.objectid
= clone_sources_tmp
[i
];
4688 key
.type
= BTRFS_ROOT_ITEM_KEY
;
4689 key
.offset
= (u64
)-1;
4690 clone_root
= btrfs_read_fs_root_no_name(fs_info
, &key
);
4691 if (IS_ERR(clone_root
)) {
4692 ret
= PTR_ERR(clone_root
);
4695 sctx
->clone_roots
[i
].root
= clone_root
;
4697 vfree(clone_sources_tmp
);
4698 clone_sources_tmp
= NULL
;
4701 if (arg
->parent_root
) {
4702 key
.objectid
= arg
->parent_root
;
4703 key
.type
= BTRFS_ROOT_ITEM_KEY
;
4704 key
.offset
= (u64
)-1;
4705 sctx
->parent_root
= btrfs_read_fs_root_no_name(fs_info
, &key
);
4706 if (IS_ERR(sctx
->parent_root
)) {
4707 ret
= PTR_ERR(sctx
->parent_root
);
4713 * Clones from send_root are allowed, but only if the clone source
4714 * is behind the current send position. This is checked while searching
4715 * for possible clone sources.
4717 sctx
->clone_roots
[sctx
->clone_roots_cnt
++].root
= sctx
->send_root
;
4719 /* We do a bsearch later */
4720 sort(sctx
->clone_roots
, sctx
->clone_roots_cnt
,
4721 sizeof(*sctx
->clone_roots
), __clone_root_cmp_sort
,
4724 ret
= send_subvol(sctx
);
4728 if (!(sctx
->flags
& BTRFS_SEND_FLAG_OMIT_END_CMD
)) {
4729 ret
= begin_cmd(sctx
, BTRFS_SEND_C_END
);
4732 ret
= send_cmd(sctx
);
4739 vfree(clone_sources_tmp
);
4742 if (sctx
->send_filp
)
4743 fput(sctx
->send_filp
);
4745 vfree(sctx
->clone_roots
);
4746 vfree(sctx
->send_buf
);
4747 vfree(sctx
->read_buf
);
4749 name_cache_free(sctx
);