send.c revision a1857ebe752d77d96c89d964500a9528df6d320e
1/* 2 * Copyright (C) 2012 Alexander Block. All rights reserved. 3 * 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. 7 * 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. 12 * 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. 17 */ 18 19#include <linux/bsearch.h> 20#include <linux/fs.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> 29 30#include "send.h" 31#include "backref.h" 32#include "locking.h" 33#include "disk-io.h" 34#include "btrfs_inode.h" 35#include "transaction.h" 36 37static int g_verbose = 0; 38 39#define verbose_printk(...) if (g_verbose) printk(__VA_ARGS__) 40 41/* 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. 47 */ 48struct fs_path { 49 union { 50 struct { 51 char *start; 52 char *end; 53 char *prepared; 54 55 char *buf; 56 int buf_len; 57 int reversed:1; 58 int virtual_mem:1; 59 char inline_buf[]; 60 }; 61 char pad[PAGE_SIZE]; 62 }; 63}; 64#define FS_PATH_INLINE_SIZE \ 65 (sizeof(struct fs_path) - offsetof(struct fs_path, inline_buf)) 66 67 68/* reused for each extent */ 69struct clone_root { 70 struct btrfs_root *root; 71 u64 ino; 72 u64 offset; 73 74 u64 found_refs; 75}; 76 77#define SEND_CTX_MAX_NAME_CACHE_SIZE 128 78#define SEND_CTX_NAME_CACHE_CLEAN_SIZE (SEND_CTX_MAX_NAME_CACHE_SIZE * 2) 79 80struct send_ctx { 81 struct file *send_filp; 82 loff_t send_off; 83 char *send_buf; 84 u32 send_size; 85 u32 send_max_size; 86 u64 total_send_size; 87 u64 cmd_send_size[BTRFS_SEND_C_MAX + 1]; 88 89 struct vfsmount *mnt; 90 91 struct btrfs_root *send_root; 92 struct btrfs_root *parent_root; 93 struct clone_root *clone_roots; 94 int clone_roots_cnt; 95 96 /* current state of the compare_tree call */ 97 struct btrfs_path *left_path; 98 struct btrfs_path *right_path; 99 struct btrfs_key *cmp_key; 100 101 /* 102 * infos of the currently processed inode. In case of deleted inodes, 103 * these are the values from the deleted inode. 104 */ 105 u64 cur_ino; 106 u64 cur_inode_gen; 107 int cur_inode_new; 108 int cur_inode_new_gen; 109 int cur_inode_deleted; 110 int cur_inode_first_ref_orphan; 111 u64 cur_inode_size; 112 u64 cur_inode_mode; 113 114 u64 send_progress; 115 116 struct list_head new_refs; 117 struct list_head deleted_refs; 118 119 struct radix_tree_root name_cache; 120 struct list_head name_cache_list; 121 int name_cache_size; 122 123 struct file *cur_inode_filp; 124 char *read_buf; 125}; 126 127struct name_cache_entry { 128 struct list_head list; 129 struct list_head use_list; 130 u64 ino; 131 u64 gen; 132 u64 parent_ino; 133 u64 parent_gen; 134 int ret; 135 int need_later_update; 136 int name_len; 137 char name[]; 138}; 139 140static void fs_path_reset(struct fs_path *p) 141{ 142 if (p->reversed) { 143 p->start = p->buf + p->buf_len - 1; 144 p->end = p->start; 145 *p->start = 0; 146 } else { 147 p->start = p->buf; 148 p->end = p->start; 149 *p->start = 0; 150 } 151} 152 153static struct fs_path *fs_path_alloc(struct send_ctx *sctx) 154{ 155 struct fs_path *p; 156 157 p = kmalloc(sizeof(*p), GFP_NOFS); 158 if (!p) 159 return NULL; 160 p->reversed = 0; 161 p->virtual_mem = 0; 162 p->buf = p->inline_buf; 163 p->buf_len = FS_PATH_INLINE_SIZE; 164 fs_path_reset(p); 165 return p; 166} 167 168static struct fs_path *fs_path_alloc_reversed(struct send_ctx *sctx) 169{ 170 struct fs_path *p; 171 172 p = fs_path_alloc(sctx); 173 if (!p) 174 return NULL; 175 p->reversed = 1; 176 fs_path_reset(p); 177 return p; 178} 179 180static void fs_path_free(struct send_ctx *sctx, struct fs_path *p) 181{ 182 if (!p) 183 return; 184 if (p->buf != p->inline_buf) { 185 if (p->virtual_mem) 186 vfree(p->buf); 187 else 188 kfree(p->buf); 189 } 190 kfree(p); 191} 192 193static int fs_path_len(struct fs_path *p) 194{ 195 return p->end - p->start; 196} 197 198static int fs_path_ensure_buf(struct fs_path *p, int len) 199{ 200 char *tmp_buf; 201 int path_len; 202 int old_buf_len; 203 204 len++; 205 206 if (p->buf_len >= len) 207 return 0; 208 209 path_len = p->end - p->start; 210 old_buf_len = p->buf_len; 211 len = PAGE_ALIGN(len); 212 213 if (p->buf == p->inline_buf) { 214 tmp_buf = kmalloc(len, GFP_NOFS); 215 if (!tmp_buf) { 216 tmp_buf = vmalloc(len); 217 if (!tmp_buf) 218 return -ENOMEM; 219 p->virtual_mem = 1; 220 } 221 memcpy(tmp_buf, p->buf, p->buf_len); 222 p->buf = tmp_buf; 223 p->buf_len = len; 224 } else { 225 if (p->virtual_mem) { 226 tmp_buf = vmalloc(len); 227 if (!tmp_buf) 228 return -ENOMEM; 229 memcpy(tmp_buf, p->buf, p->buf_len); 230 vfree(p->buf); 231 } else { 232 tmp_buf = krealloc(p->buf, len, GFP_NOFS); 233 if (!tmp_buf) { 234 tmp_buf = vmalloc(len); 235 if (!tmp_buf) 236 return -ENOMEM; 237 memcpy(tmp_buf, p->buf, p->buf_len); 238 kfree(p->buf); 239 p->virtual_mem = 1; 240 } 241 } 242 p->buf = tmp_buf; 243 p->buf_len = len; 244 } 245 if (p->reversed) { 246 tmp_buf = p->buf + old_buf_len - path_len - 1; 247 p->end = p->buf + p->buf_len - 1; 248 p->start = p->end - path_len; 249 memmove(p->start, tmp_buf, path_len + 1); 250 } else { 251 p->start = p->buf; 252 p->end = p->start + path_len; 253 } 254 return 0; 255} 256 257static int fs_path_prepare_for_add(struct fs_path *p, int name_len) 258{ 259 int ret; 260 int new_len; 261 262 new_len = p->end - p->start + name_len; 263 if (p->start != p->end) 264 new_len++; 265 ret = fs_path_ensure_buf(p, new_len); 266 if (ret < 0) 267 goto out; 268 269 if (p->reversed) { 270 if (p->start != p->end) 271 *--p->start = '/'; 272 p->start -= name_len; 273 p->prepared = p->start; 274 } else { 275 if (p->start != p->end) 276 *p->end++ = '/'; 277 p->prepared = p->end; 278 p->end += name_len; 279 *p->end = 0; 280 } 281 282out: 283 return ret; 284} 285 286static int fs_path_add(struct fs_path *p, const char *name, int name_len) 287{ 288 int ret; 289 290 ret = fs_path_prepare_for_add(p, name_len); 291 if (ret < 0) 292 goto out; 293 memcpy(p->prepared, name, name_len); 294 p->prepared = NULL; 295 296out: 297 return ret; 298} 299 300static int fs_path_add_path(struct fs_path *p, struct fs_path *p2) 301{ 302 int ret; 303 304 ret = fs_path_prepare_for_add(p, p2->end - p2->start); 305 if (ret < 0) 306 goto out; 307 memcpy(p->prepared, p2->start, p2->end - p2->start); 308 p->prepared = NULL; 309 310out: 311 return ret; 312} 313 314static int fs_path_add_from_extent_buffer(struct fs_path *p, 315 struct extent_buffer *eb, 316 unsigned long off, int len) 317{ 318 int ret; 319 320 ret = fs_path_prepare_for_add(p, len); 321 if (ret < 0) 322 goto out; 323 324 read_extent_buffer(eb, p->prepared, off, len); 325 p->prepared = NULL; 326 327out: 328 return ret; 329} 330 331static void fs_path_remove(struct fs_path *p) 332{ 333 BUG_ON(p->reversed); 334 while (p->start != p->end && *p->end != '/') 335 p->end--; 336 *p->end = 0; 337} 338 339static int fs_path_copy(struct fs_path *p, struct fs_path *from) 340{ 341 int ret; 342 343 p->reversed = from->reversed; 344 fs_path_reset(p); 345 346 ret = fs_path_add_path(p, from); 347 348 return ret; 349} 350 351 352static void fs_path_unreverse(struct fs_path *p) 353{ 354 char *tmp; 355 int len; 356 357 if (!p->reversed) 358 return; 359 360 tmp = p->start; 361 len = p->end - p->start; 362 p->start = p->buf; 363 p->end = p->start + len; 364 memmove(p->start, tmp, len + 1); 365 p->reversed = 0; 366} 367 368static struct btrfs_path *alloc_path_for_send(void) 369{ 370 struct btrfs_path *path; 371 372 path = btrfs_alloc_path(); 373 if (!path) 374 return NULL; 375 path->search_commit_root = 1; 376 path->skip_locking = 1; 377 return path; 378} 379 380static int write_buf(struct send_ctx *sctx, const void *buf, u32 len) 381{ 382 int ret; 383 mm_segment_t old_fs; 384 u32 pos = 0; 385 386 old_fs = get_fs(); 387 set_fs(KERNEL_DS); 388 389 while (pos < len) { 390 ret = vfs_write(sctx->send_filp, (char *)buf + pos, len - pos, 391 &sctx->send_off); 392 /* TODO handle that correctly */ 393 /*if (ret == -ERESTARTSYS) { 394 continue; 395 }*/ 396 if (ret < 0) 397 goto out; 398 if (ret == 0) { 399 ret = -EIO; 400 goto out; 401 } 402 pos += ret; 403 } 404 405 ret = 0; 406 407out: 408 set_fs(old_fs); 409 return ret; 410} 411 412static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len) 413{ 414 struct btrfs_tlv_header *hdr; 415 int total_len = sizeof(*hdr) + len; 416 int left = sctx->send_max_size - sctx->send_size; 417 418 if (unlikely(left < total_len)) 419 return -EOVERFLOW; 420 421 hdr = (struct btrfs_tlv_header *) (sctx->send_buf + sctx->send_size); 422 hdr->tlv_type = cpu_to_le16(attr); 423 hdr->tlv_len = cpu_to_le16(len); 424 memcpy(hdr + 1, data, len); 425 sctx->send_size += total_len; 426 427 return 0; 428} 429 430#if 0 431static int tlv_put_u8(struct send_ctx *sctx, u16 attr, u8 value) 432{ 433 return tlv_put(sctx, attr, &value, sizeof(value)); 434} 435 436static int tlv_put_u16(struct send_ctx *sctx, u16 attr, u16 value) 437{ 438 __le16 tmp = cpu_to_le16(value); 439 return tlv_put(sctx, attr, &tmp, sizeof(tmp)); 440} 441 442static int tlv_put_u32(struct send_ctx *sctx, u16 attr, u32 value) 443{ 444 __le32 tmp = cpu_to_le32(value); 445 return tlv_put(sctx, attr, &tmp, sizeof(tmp)); 446} 447#endif 448 449static int tlv_put_u64(struct send_ctx *sctx, u16 attr, u64 value) 450{ 451 __le64 tmp = cpu_to_le64(value); 452 return tlv_put(sctx, attr, &tmp, sizeof(tmp)); 453} 454 455static int tlv_put_string(struct send_ctx *sctx, u16 attr, 456 const char *str, int len) 457{ 458 if (len == -1) 459 len = strlen(str); 460 return tlv_put(sctx, attr, str, len); 461} 462 463static int tlv_put_uuid(struct send_ctx *sctx, u16 attr, 464 const u8 *uuid) 465{ 466 return tlv_put(sctx, attr, uuid, BTRFS_UUID_SIZE); 467} 468 469#if 0 470static int tlv_put_timespec(struct send_ctx *sctx, u16 attr, 471 struct timespec *ts) 472{ 473 struct btrfs_timespec bts; 474 bts.sec = cpu_to_le64(ts->tv_sec); 475 bts.nsec = cpu_to_le32(ts->tv_nsec); 476 return tlv_put(sctx, attr, &bts, sizeof(bts)); 477} 478#endif 479 480static int tlv_put_btrfs_timespec(struct send_ctx *sctx, u16 attr, 481 struct extent_buffer *eb, 482 struct btrfs_timespec *ts) 483{ 484 struct btrfs_timespec bts; 485 read_extent_buffer(eb, &bts, (unsigned long)ts, sizeof(bts)); 486 return tlv_put(sctx, attr, &bts, sizeof(bts)); 487} 488 489 490#define TLV_PUT(sctx, attrtype, attrlen, data) \ 491 do { \ 492 ret = tlv_put(sctx, attrtype, attrlen, data); \ 493 if (ret < 0) \ 494 goto tlv_put_failure; \ 495 } while (0) 496 497#define TLV_PUT_INT(sctx, attrtype, bits, value) \ 498 do { \ 499 ret = tlv_put_u##bits(sctx, attrtype, value); \ 500 if (ret < 0) \ 501 goto tlv_put_failure; \ 502 } while (0) 503 504#define TLV_PUT_U8(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 8, data) 505#define TLV_PUT_U16(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 16, data) 506#define TLV_PUT_U32(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 32, data) 507#define TLV_PUT_U64(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 64, data) 508#define TLV_PUT_STRING(sctx, attrtype, str, len) \ 509 do { \ 510 ret = tlv_put_string(sctx, attrtype, str, len); \ 511 if (ret < 0) \ 512 goto tlv_put_failure; \ 513 } while (0) 514#define TLV_PUT_PATH(sctx, attrtype, p) \ 515 do { \ 516 ret = tlv_put_string(sctx, attrtype, p->start, \ 517 p->end - p->start); \ 518 if (ret < 0) \ 519 goto tlv_put_failure; \ 520 } while(0) 521#define TLV_PUT_UUID(sctx, attrtype, uuid) \ 522 do { \ 523 ret = tlv_put_uuid(sctx, attrtype, uuid); \ 524 if (ret < 0) \ 525 goto tlv_put_failure; \ 526 } while (0) 527#define TLV_PUT_TIMESPEC(sctx, attrtype, ts) \ 528 do { \ 529 ret = tlv_put_timespec(sctx, attrtype, ts); \ 530 if (ret < 0) \ 531 goto tlv_put_failure; \ 532 } while (0) 533#define TLV_PUT_BTRFS_TIMESPEC(sctx, attrtype, eb, ts) \ 534 do { \ 535 ret = tlv_put_btrfs_timespec(sctx, attrtype, eb, ts); \ 536 if (ret < 0) \ 537 goto tlv_put_failure; \ 538 } while (0) 539 540static int send_header(struct send_ctx *sctx) 541{ 542 struct btrfs_stream_header hdr; 543 544 strcpy(hdr.magic, BTRFS_SEND_STREAM_MAGIC); 545 hdr.version = cpu_to_le32(BTRFS_SEND_STREAM_VERSION); 546 547 return write_buf(sctx, &hdr, sizeof(hdr)); 548} 549 550/* 551 * For each command/item we want to send to userspace, we call this function. 552 */ 553static int begin_cmd(struct send_ctx *sctx, int cmd) 554{ 555 struct btrfs_cmd_header *hdr; 556 557 if (!sctx->send_buf) { 558 WARN_ON(1); 559 return -EINVAL; 560 } 561 562 BUG_ON(sctx->send_size); 563 564 sctx->send_size += sizeof(*hdr); 565 hdr = (struct btrfs_cmd_header *)sctx->send_buf; 566 hdr->cmd = cpu_to_le16(cmd); 567 568 return 0; 569} 570 571static int send_cmd(struct send_ctx *sctx) 572{ 573 int ret; 574 struct btrfs_cmd_header *hdr; 575 u32 crc; 576 577 hdr = (struct btrfs_cmd_header *)sctx->send_buf; 578 hdr->len = cpu_to_le32(sctx->send_size - sizeof(*hdr)); 579 hdr->crc = 0; 580 581 crc = crc32c(0, (unsigned char *)sctx->send_buf, sctx->send_size); 582 hdr->crc = cpu_to_le32(crc); 583 584 ret = write_buf(sctx, sctx->send_buf, sctx->send_size); 585 586 sctx->total_send_size += sctx->send_size; 587 sctx->cmd_send_size[le16_to_cpu(hdr->cmd)] += sctx->send_size; 588 sctx->send_size = 0; 589 590 return ret; 591} 592 593/* 594 * Sends a move instruction to user space 595 */ 596static int send_rename(struct send_ctx *sctx, 597 struct fs_path *from, struct fs_path *to) 598{ 599 int ret; 600 601verbose_printk("btrfs: send_rename %s -> %s\n", from->start, to->start); 602 603 ret = begin_cmd(sctx, BTRFS_SEND_C_RENAME); 604 if (ret < 0) 605 goto out; 606 607 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, from); 608 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_TO, to); 609 610 ret = send_cmd(sctx); 611 612tlv_put_failure: 613out: 614 return ret; 615} 616 617/* 618 * Sends a link instruction to user space 619 */ 620static int send_link(struct send_ctx *sctx, 621 struct fs_path *path, struct fs_path *lnk) 622{ 623 int ret; 624 625verbose_printk("btrfs: send_link %s -> %s\n", path->start, lnk->start); 626 627 ret = begin_cmd(sctx, BTRFS_SEND_C_LINK); 628 if (ret < 0) 629 goto out; 630 631 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 632 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_LINK, lnk); 633 634 ret = send_cmd(sctx); 635 636tlv_put_failure: 637out: 638 return ret; 639} 640 641/* 642 * Sends an unlink instruction to user space 643 */ 644static int send_unlink(struct send_ctx *sctx, struct fs_path *path) 645{ 646 int ret; 647 648verbose_printk("btrfs: send_unlink %s\n", path->start); 649 650 ret = begin_cmd(sctx, BTRFS_SEND_C_UNLINK); 651 if (ret < 0) 652 goto out; 653 654 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 655 656 ret = send_cmd(sctx); 657 658tlv_put_failure: 659out: 660 return ret; 661} 662 663/* 664 * Sends a rmdir instruction to user space 665 */ 666static int send_rmdir(struct send_ctx *sctx, struct fs_path *path) 667{ 668 int ret; 669 670verbose_printk("btrfs: send_rmdir %s\n", path->start); 671 672 ret = begin_cmd(sctx, BTRFS_SEND_C_RMDIR); 673 if (ret < 0) 674 goto out; 675 676 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 677 678 ret = send_cmd(sctx); 679 680tlv_put_failure: 681out: 682 return ret; 683} 684 685/* 686 * Helper function to retrieve some fields from an inode item. 687 */ 688static int get_inode_info(struct btrfs_root *root, 689 u64 ino, u64 *size, u64 *gen, 690 u64 *mode, u64 *uid, u64 *gid) 691{ 692 int ret; 693 struct btrfs_inode_item *ii; 694 struct btrfs_key key; 695 struct btrfs_path *path; 696 697 path = alloc_path_for_send(); 698 if (!path) 699 return -ENOMEM; 700 701 key.objectid = ino; 702 key.type = BTRFS_INODE_ITEM_KEY; 703 key.offset = 0; 704 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 705 if (ret < 0) 706 goto out; 707 if (ret) { 708 ret = -ENOENT; 709 goto out; 710 } 711 712 ii = btrfs_item_ptr(path->nodes[0], path->slots[0], 713 struct btrfs_inode_item); 714 if (size) 715 *size = btrfs_inode_size(path->nodes[0], ii); 716 if (gen) 717 *gen = btrfs_inode_generation(path->nodes[0], ii); 718 if (mode) 719 *mode = btrfs_inode_mode(path->nodes[0], ii); 720 if (uid) 721 *uid = btrfs_inode_uid(path->nodes[0], ii); 722 if (gid) 723 *gid = btrfs_inode_gid(path->nodes[0], ii); 724 725out: 726 btrfs_free_path(path); 727 return ret; 728} 729 730typedef int (*iterate_inode_ref_t)(int num, u64 dir, int index, 731 struct fs_path *p, 732 void *ctx); 733 734/* 735 * Helper function to iterate the entries in ONE btrfs_inode_ref. 736 * The iterate callback may return a non zero value to stop iteration. This can 737 * be a negative value for error codes or 1 to simply stop it. 738 * 739 * path must point to the INODE_REF when called. 740 */ 741static int iterate_inode_ref(struct send_ctx *sctx, 742 struct btrfs_root *root, struct btrfs_path *path, 743 struct btrfs_key *found_key, int resolve, 744 iterate_inode_ref_t iterate, void *ctx) 745{ 746 struct extent_buffer *eb; 747 struct btrfs_item *item; 748 struct btrfs_inode_ref *iref; 749 struct btrfs_path *tmp_path; 750 struct fs_path *p; 751 u32 cur; 752 u32 len; 753 u32 total; 754 int slot; 755 u32 name_len; 756 char *start; 757 int ret = 0; 758 int num; 759 int index; 760 761 p = fs_path_alloc_reversed(sctx); 762 if (!p) 763 return -ENOMEM; 764 765 tmp_path = alloc_path_for_send(); 766 if (!tmp_path) { 767 fs_path_free(sctx, p); 768 return -ENOMEM; 769 } 770 771 eb = path->nodes[0]; 772 slot = path->slots[0]; 773 item = btrfs_item_nr(eb, slot); 774 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); 775 cur = 0; 776 len = 0; 777 total = btrfs_item_size(eb, item); 778 779 num = 0; 780 while (cur < total) { 781 fs_path_reset(p); 782 783 name_len = btrfs_inode_ref_name_len(eb, iref); 784 index = btrfs_inode_ref_index(eb, iref); 785 if (resolve) { 786 start = btrfs_iref_to_path(root, tmp_path, iref, eb, 787 found_key->offset, p->buf, 788 p->buf_len); 789 if (IS_ERR(start)) { 790 ret = PTR_ERR(start); 791 goto out; 792 } 793 if (start < p->buf) { 794 /* overflow , try again with larger buffer */ 795 ret = fs_path_ensure_buf(p, 796 p->buf_len + p->buf - start); 797 if (ret < 0) 798 goto out; 799 start = btrfs_iref_to_path(root, tmp_path, iref, 800 eb, found_key->offset, p->buf, 801 p->buf_len); 802 if (IS_ERR(start)) { 803 ret = PTR_ERR(start); 804 goto out; 805 } 806 BUG_ON(start < p->buf); 807 } 808 p->start = start; 809 } else { 810 ret = fs_path_add_from_extent_buffer(p, eb, 811 (unsigned long)(iref + 1), name_len); 812 if (ret < 0) 813 goto out; 814 } 815 816 817 len = sizeof(*iref) + name_len; 818 iref = (struct btrfs_inode_ref *)((char *)iref + len); 819 cur += len; 820 821 ret = iterate(num, found_key->offset, index, p, ctx); 822 if (ret) 823 goto out; 824 825 num++; 826 } 827 828out: 829 btrfs_free_path(tmp_path); 830 fs_path_free(sctx, p); 831 return ret; 832} 833 834typedef int (*iterate_dir_item_t)(int num, struct btrfs_key *di_key, 835 const char *name, int name_len, 836 const char *data, int data_len, 837 u8 type, void *ctx); 838 839/* 840 * Helper function to iterate the entries in ONE btrfs_dir_item. 841 * The iterate callback may return a non zero value to stop iteration. This can 842 * be a negative value for error codes or 1 to simply stop it. 843 * 844 * path must point to the dir item when called. 845 */ 846static int iterate_dir_item(struct send_ctx *sctx, 847 struct btrfs_root *root, struct btrfs_path *path, 848 struct btrfs_key *found_key, 849 iterate_dir_item_t iterate, void *ctx) 850{ 851 int ret = 0; 852 struct extent_buffer *eb; 853 struct btrfs_item *item; 854 struct btrfs_dir_item *di; 855 struct btrfs_path *tmp_path = NULL; 856 struct btrfs_key di_key; 857 char *buf = NULL; 858 char *buf2 = NULL; 859 int buf_len; 860 int buf_virtual = 0; 861 u32 name_len; 862 u32 data_len; 863 u32 cur; 864 u32 len; 865 u32 total; 866 int slot; 867 int num; 868 u8 type; 869 870 buf_len = PAGE_SIZE; 871 buf = kmalloc(buf_len, GFP_NOFS); 872 if (!buf) { 873 ret = -ENOMEM; 874 goto out; 875 } 876 877 tmp_path = alloc_path_for_send(); 878 if (!tmp_path) { 879 ret = -ENOMEM; 880 goto out; 881 } 882 883 eb = path->nodes[0]; 884 slot = path->slots[0]; 885 item = btrfs_item_nr(eb, slot); 886 di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item); 887 cur = 0; 888 len = 0; 889 total = btrfs_item_size(eb, item); 890 891 num = 0; 892 while (cur < total) { 893 name_len = btrfs_dir_name_len(eb, di); 894 data_len = btrfs_dir_data_len(eb, di); 895 type = btrfs_dir_type(eb, di); 896 btrfs_dir_item_key_to_cpu(eb, di, &di_key); 897 898 if (name_len + data_len > buf_len) { 899 buf_len = PAGE_ALIGN(name_len + data_len); 900 if (buf_virtual) { 901 buf2 = vmalloc(buf_len); 902 if (!buf2) { 903 ret = -ENOMEM; 904 goto out; 905 } 906 vfree(buf); 907 } else { 908 buf2 = krealloc(buf, buf_len, GFP_NOFS); 909 if (!buf2) { 910 buf2 = vmalloc(buf_len); 911 if (!buf2) { 912 ret = -ENOMEM; 913 goto out; 914 } 915 kfree(buf); 916 buf_virtual = 1; 917 } 918 } 919 920 buf = buf2; 921 buf2 = NULL; 922 } 923 924 read_extent_buffer(eb, buf, (unsigned long)(di + 1), 925 name_len + data_len); 926 927 len = sizeof(*di) + name_len + data_len; 928 di = (struct btrfs_dir_item *)((char *)di + len); 929 cur += len; 930 931 ret = iterate(num, &di_key, buf, name_len, buf + name_len, 932 data_len, type, ctx); 933 if (ret < 0) 934 goto out; 935 if (ret) { 936 ret = 0; 937 goto out; 938 } 939 940 num++; 941 } 942 943out: 944 btrfs_free_path(tmp_path); 945 if (buf_virtual) 946 vfree(buf); 947 else 948 kfree(buf); 949 return ret; 950} 951 952static int __copy_first_ref(int num, u64 dir, int index, 953 struct fs_path *p, void *ctx) 954{ 955 int ret; 956 struct fs_path *pt = ctx; 957 958 ret = fs_path_copy(pt, p); 959 if (ret < 0) 960 return ret; 961 962 /* we want the first only */ 963 return 1; 964} 965 966/* 967 * Retrieve the first path of an inode. If an inode has more then one 968 * ref/hardlink, this is ignored. 969 */ 970static int get_inode_path(struct send_ctx *sctx, struct btrfs_root *root, 971 u64 ino, struct fs_path *path) 972{ 973 int ret; 974 struct btrfs_key key, found_key; 975 struct btrfs_path *p; 976 977 p = alloc_path_for_send(); 978 if (!p) 979 return -ENOMEM; 980 981 fs_path_reset(path); 982 983 key.objectid = ino; 984 key.type = BTRFS_INODE_REF_KEY; 985 key.offset = 0; 986 987 ret = btrfs_search_slot_for_read(root, &key, p, 1, 0); 988 if (ret < 0) 989 goto out; 990 if (ret) { 991 ret = 1; 992 goto out; 993 } 994 btrfs_item_key_to_cpu(p->nodes[0], &found_key, p->slots[0]); 995 if (found_key.objectid != ino || 996 found_key.type != BTRFS_INODE_REF_KEY) { 997 ret = -ENOENT; 998 goto out; 999 } 1000 1001 ret = iterate_inode_ref(sctx, root, p, &found_key, 1, 1002 __copy_first_ref, path); 1003 if (ret < 0) 1004 goto out; 1005 ret = 0; 1006 1007out: 1008 btrfs_free_path(p); 1009 return ret; 1010} 1011 1012struct backref_ctx { 1013 struct send_ctx *sctx; 1014 1015 /* number of total found references */ 1016 u64 found; 1017 1018 /* 1019 * used for clones found in send_root. clones found behind cur_objectid 1020 * and cur_offset are not considered as allowed clones. 1021 */ 1022 u64 cur_objectid; 1023 u64 cur_offset; 1024 1025 /* may be truncated in case it's the last extent in a file */ 1026 u64 extent_len; 1027 1028 /* Just to check for bugs in backref resolving */ 1029 int found_in_send_root; 1030}; 1031 1032static int __clone_root_cmp_bsearch(const void *key, const void *elt) 1033{ 1034 u64 root = (u64)key; 1035 struct clone_root *cr = (struct clone_root *)elt; 1036 1037 if (root < cr->root->objectid) 1038 return -1; 1039 if (root > cr->root->objectid) 1040 return 1; 1041 return 0; 1042} 1043 1044static int __clone_root_cmp_sort(const void *e1, const void *e2) 1045{ 1046 struct clone_root *cr1 = (struct clone_root *)e1; 1047 struct clone_root *cr2 = (struct clone_root *)e2; 1048 1049 if (cr1->root->objectid < cr2->root->objectid) 1050 return -1; 1051 if (cr1->root->objectid > cr2->root->objectid) 1052 return 1; 1053 return 0; 1054} 1055 1056/* 1057 * Called for every backref that is found for the current extent. 1058 */ 1059static int __iterate_backrefs(u64 ino, u64 offset, u64 root, void *ctx_) 1060{ 1061 struct backref_ctx *bctx = ctx_; 1062 struct clone_root *found; 1063 int ret; 1064 u64 i_size; 1065 1066 /* First check if the root is in the list of accepted clone sources */ 1067 found = bsearch((void *)root, bctx->sctx->clone_roots, 1068 bctx->sctx->clone_roots_cnt, 1069 sizeof(struct clone_root), 1070 __clone_root_cmp_bsearch); 1071 if (!found) 1072 return 0; 1073 1074 if (found->root == bctx->sctx->send_root && 1075 ino == bctx->cur_objectid && 1076 offset == bctx->cur_offset) { 1077 bctx->found_in_send_root = 1; 1078 } 1079 1080 /* 1081 * There are inodes that have extents that lie behind it's i_size. Don't 1082 * accept clones from these extents. 1083 */ 1084 ret = get_inode_info(found->root, ino, &i_size, NULL, NULL, NULL, NULL); 1085 if (ret < 0) 1086 return ret; 1087 1088 if (offset + bctx->extent_len > i_size) 1089 return 0; 1090 1091 /* 1092 * Make sure we don't consider clones from send_root that are 1093 * behind the current inode/offset. 1094 */ 1095 if (found->root == bctx->sctx->send_root) { 1096 /* 1097 * TODO for the moment we don't accept clones from the inode 1098 * that is currently send. We may change this when 1099 * BTRFS_IOC_CLONE_RANGE supports cloning from and to the same 1100 * file. 1101 */ 1102 if (ino >= bctx->cur_objectid) 1103 return 0; 1104 /*if (ino > ctx->cur_objectid) 1105 return 0; 1106 if (offset + ctx->extent_len > ctx->cur_offset) 1107 return 0;*/ 1108 1109 bctx->found++; 1110 found->found_refs++; 1111 found->ino = ino; 1112 found->offset = offset; 1113 return 0; 1114 } 1115 1116 bctx->found++; 1117 found->found_refs++; 1118 if (ino < found->ino) { 1119 found->ino = ino; 1120 found->offset = offset; 1121 } else if (found->ino == ino) { 1122 /* 1123 * same extent found more then once in the same file. 1124 */ 1125 if (found->offset > offset + bctx->extent_len) 1126 found->offset = offset; 1127 } 1128 1129 return 0; 1130} 1131 1132/* 1133 * path must point to the extent item when called. 1134 */ 1135static int find_extent_clone(struct send_ctx *sctx, 1136 struct btrfs_path *path, 1137 u64 ino, u64 data_offset, 1138 u64 ino_size, 1139 struct clone_root **found) 1140{ 1141 int ret; 1142 int extent_type; 1143 u64 logical; 1144 u64 num_bytes; 1145 u64 extent_item_pos; 1146 struct btrfs_file_extent_item *fi; 1147 struct extent_buffer *eb = path->nodes[0]; 1148 struct backref_ctx backref_ctx; 1149 struct clone_root *cur_clone_root; 1150 struct btrfs_key found_key; 1151 struct btrfs_path *tmp_path; 1152 u32 i; 1153 1154 tmp_path = alloc_path_for_send(); 1155 if (!tmp_path) 1156 return -ENOMEM; 1157 1158 if (data_offset >= ino_size) { 1159 /* 1160 * There may be extents that lie behind the file's size. 1161 * I at least had this in combination with snapshotting while 1162 * writing large files. 1163 */ 1164 ret = 0; 1165 goto out; 1166 } 1167 1168 fi = btrfs_item_ptr(eb, path->slots[0], 1169 struct btrfs_file_extent_item); 1170 extent_type = btrfs_file_extent_type(eb, fi); 1171 if (extent_type == BTRFS_FILE_EXTENT_INLINE) { 1172 ret = -ENOENT; 1173 goto out; 1174 } 1175 1176 num_bytes = btrfs_file_extent_num_bytes(eb, fi); 1177 logical = btrfs_file_extent_disk_bytenr(eb, fi); 1178 if (logical == 0) { 1179 ret = -ENOENT; 1180 goto out; 1181 } 1182 logical += btrfs_file_extent_offset(eb, fi); 1183 1184 ret = extent_from_logical(sctx->send_root->fs_info, 1185 logical, tmp_path, &found_key); 1186 btrfs_release_path(tmp_path); 1187 1188 if (ret < 0) 1189 goto out; 1190 if (ret & BTRFS_EXTENT_FLAG_TREE_BLOCK) { 1191 ret = -EIO; 1192 goto out; 1193 } 1194 1195 /* 1196 * Setup the clone roots. 1197 */ 1198 for (i = 0; i < sctx->clone_roots_cnt; i++) { 1199 cur_clone_root = sctx->clone_roots + i; 1200 cur_clone_root->ino = (u64)-1; 1201 cur_clone_root->offset = 0; 1202 cur_clone_root->found_refs = 0; 1203 } 1204 1205 backref_ctx.sctx = sctx; 1206 backref_ctx.found = 0; 1207 backref_ctx.cur_objectid = ino; 1208 backref_ctx.cur_offset = data_offset; 1209 backref_ctx.found_in_send_root = 0; 1210 backref_ctx.extent_len = num_bytes; 1211 1212 /* 1213 * The last extent of a file may be too large due to page alignment. 1214 * We need to adjust extent_len in this case so that the checks in 1215 * __iterate_backrefs work. 1216 */ 1217 if (data_offset + num_bytes >= ino_size) 1218 backref_ctx.extent_len = ino_size - data_offset; 1219 1220 /* 1221 * Now collect all backrefs. 1222 */ 1223 extent_item_pos = logical - found_key.objectid; 1224 ret = iterate_extent_inodes(sctx->send_root->fs_info, 1225 found_key.objectid, extent_item_pos, 1, 1226 __iterate_backrefs, &backref_ctx); 1227 if (ret < 0) 1228 goto out; 1229 1230 if (!backref_ctx.found_in_send_root) { 1231 /* found a bug in backref code? */ 1232 ret = -EIO; 1233 printk(KERN_ERR "btrfs: ERROR did not find backref in " 1234 "send_root. inode=%llu, offset=%llu, " 1235 "logical=%llu\n", 1236 ino, data_offset, logical); 1237 goto out; 1238 } 1239 1240verbose_printk(KERN_DEBUG "btrfs: find_extent_clone: data_offset=%llu, " 1241 "ino=%llu, " 1242 "num_bytes=%llu, logical=%llu\n", 1243 data_offset, ino, num_bytes, logical); 1244 1245 if (!backref_ctx.found) 1246 verbose_printk("btrfs: no clones found\n"); 1247 1248 cur_clone_root = NULL; 1249 for (i = 0; i < sctx->clone_roots_cnt; i++) { 1250 if (sctx->clone_roots[i].found_refs) { 1251 if (!cur_clone_root) 1252 cur_clone_root = sctx->clone_roots + i; 1253 else if (sctx->clone_roots[i].root == sctx->send_root) 1254 /* prefer clones from send_root over others */ 1255 cur_clone_root = sctx->clone_roots + i; 1256 break; 1257 } 1258 1259 } 1260 1261 if (cur_clone_root) { 1262 *found = cur_clone_root; 1263 ret = 0; 1264 } else { 1265 ret = -ENOENT; 1266 } 1267 1268out: 1269 btrfs_free_path(tmp_path); 1270 return ret; 1271} 1272 1273static int read_symlink(struct send_ctx *sctx, 1274 struct btrfs_root *root, 1275 u64 ino, 1276 struct fs_path *dest) 1277{ 1278 int ret; 1279 struct btrfs_path *path; 1280 struct btrfs_key key; 1281 struct btrfs_file_extent_item *ei; 1282 u8 type; 1283 u8 compression; 1284 unsigned long off; 1285 int len; 1286 1287 path = alloc_path_for_send(); 1288 if (!path) 1289 return -ENOMEM; 1290 1291 key.objectid = ino; 1292 key.type = BTRFS_EXTENT_DATA_KEY; 1293 key.offset = 0; 1294 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 1295 if (ret < 0) 1296 goto out; 1297 BUG_ON(ret); 1298 1299 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 1300 struct btrfs_file_extent_item); 1301 type = btrfs_file_extent_type(path->nodes[0], ei); 1302 compression = btrfs_file_extent_compression(path->nodes[0], ei); 1303 BUG_ON(type != BTRFS_FILE_EXTENT_INLINE); 1304 BUG_ON(compression); 1305 1306 off = btrfs_file_extent_inline_start(ei); 1307 len = btrfs_file_extent_inline_len(path->nodes[0], ei); 1308 1309 ret = fs_path_add_from_extent_buffer(dest, path->nodes[0], off, len); 1310 if (ret < 0) 1311 goto out; 1312 1313out: 1314 btrfs_free_path(path); 1315 return ret; 1316} 1317 1318/* 1319 * Helper function to generate a file name that is unique in the root of 1320 * send_root and parent_root. This is used to generate names for orphan inodes. 1321 */ 1322static int gen_unique_name(struct send_ctx *sctx, 1323 u64 ino, u64 gen, 1324 struct fs_path *dest) 1325{ 1326 int ret = 0; 1327 struct btrfs_path *path; 1328 struct btrfs_dir_item *di; 1329 char tmp[64]; 1330 int len; 1331 u64 idx = 0; 1332 1333 path = alloc_path_for_send(); 1334 if (!path) 1335 return -ENOMEM; 1336 1337 while (1) { 1338 len = snprintf(tmp, sizeof(tmp) - 1, "o%llu-%llu-%llu", 1339 ino, gen, idx); 1340 if (len >= sizeof(tmp)) { 1341 /* should really not happen */ 1342 ret = -EOVERFLOW; 1343 goto out; 1344 } 1345 1346 di = btrfs_lookup_dir_item(NULL, sctx->send_root, 1347 path, BTRFS_FIRST_FREE_OBJECTID, 1348 tmp, strlen(tmp), 0); 1349 btrfs_release_path(path); 1350 if (IS_ERR(di)) { 1351 ret = PTR_ERR(di); 1352 goto out; 1353 } 1354 if (di) { 1355 /* not unique, try again */ 1356 idx++; 1357 continue; 1358 } 1359 1360 if (!sctx->parent_root) { 1361 /* unique */ 1362 ret = 0; 1363 break; 1364 } 1365 1366 di = btrfs_lookup_dir_item(NULL, sctx->parent_root, 1367 path, BTRFS_FIRST_FREE_OBJECTID, 1368 tmp, strlen(tmp), 0); 1369 btrfs_release_path(path); 1370 if (IS_ERR(di)) { 1371 ret = PTR_ERR(di); 1372 goto out; 1373 } 1374 if (di) { 1375 /* not unique, try again */ 1376 idx++; 1377 continue; 1378 } 1379 /* unique */ 1380 break; 1381 } 1382 1383 ret = fs_path_add(dest, tmp, strlen(tmp)); 1384 1385out: 1386 btrfs_free_path(path); 1387 return ret; 1388} 1389 1390enum inode_state { 1391 inode_state_no_change, 1392 inode_state_will_create, 1393 inode_state_did_create, 1394 inode_state_will_delete, 1395 inode_state_did_delete, 1396}; 1397 1398static int get_cur_inode_state(struct send_ctx *sctx, u64 ino, u64 gen) 1399{ 1400 int ret; 1401 int left_ret; 1402 int right_ret; 1403 u64 left_gen; 1404 u64 right_gen; 1405 1406 ret = get_inode_info(sctx->send_root, ino, NULL, &left_gen, NULL, NULL, 1407 NULL); 1408 if (ret < 0 && ret != -ENOENT) 1409 goto out; 1410 left_ret = ret; 1411 1412 if (!sctx->parent_root) { 1413 right_ret = -ENOENT; 1414 } else { 1415 ret = get_inode_info(sctx->parent_root, ino, NULL, &right_gen, 1416 NULL, NULL, NULL); 1417 if (ret < 0 && ret != -ENOENT) 1418 goto out; 1419 right_ret = ret; 1420 } 1421 1422 if (!left_ret && !right_ret) { 1423 if (left_gen == gen && right_gen == gen) 1424 ret = inode_state_no_change; 1425 else if (left_gen == gen) { 1426 if (ino < sctx->send_progress) 1427 ret = inode_state_did_create; 1428 else 1429 ret = inode_state_will_create; 1430 } else if (right_gen == gen) { 1431 if (ino < sctx->send_progress) 1432 ret = inode_state_did_delete; 1433 else 1434 ret = inode_state_will_delete; 1435 } else { 1436 ret = -ENOENT; 1437 } 1438 } else if (!left_ret) { 1439 if (left_gen == gen) { 1440 if (ino < sctx->send_progress) 1441 ret = inode_state_did_create; 1442 else 1443 ret = inode_state_will_create; 1444 } else { 1445 ret = -ENOENT; 1446 } 1447 } else if (!right_ret) { 1448 if (right_gen == gen) { 1449 if (ino < sctx->send_progress) 1450 ret = inode_state_did_delete; 1451 else 1452 ret = inode_state_will_delete; 1453 } else { 1454 ret = -ENOENT; 1455 } 1456 } else { 1457 ret = -ENOENT; 1458 } 1459 1460out: 1461 return ret; 1462} 1463 1464static int is_inode_existent(struct send_ctx *sctx, u64 ino, u64 gen) 1465{ 1466 int ret; 1467 1468 ret = get_cur_inode_state(sctx, ino, gen); 1469 if (ret < 0) 1470 goto out; 1471 1472 if (ret == inode_state_no_change || 1473 ret == inode_state_did_create || 1474 ret == inode_state_will_delete) 1475 ret = 1; 1476 else 1477 ret = 0; 1478 1479out: 1480 return ret; 1481} 1482 1483/* 1484 * Helper function to lookup a dir item in a dir. 1485 */ 1486static int lookup_dir_item_inode(struct btrfs_root *root, 1487 u64 dir, const char *name, int name_len, 1488 u64 *found_inode, 1489 u8 *found_type) 1490{ 1491 int ret = 0; 1492 struct btrfs_dir_item *di; 1493 struct btrfs_key key; 1494 struct btrfs_path *path; 1495 1496 path = alloc_path_for_send(); 1497 if (!path) 1498 return -ENOMEM; 1499 1500 di = btrfs_lookup_dir_item(NULL, root, path, 1501 dir, name, name_len, 0); 1502 if (!di) { 1503 ret = -ENOENT; 1504 goto out; 1505 } 1506 if (IS_ERR(di)) { 1507 ret = PTR_ERR(di); 1508 goto out; 1509 } 1510 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &key); 1511 *found_inode = key.objectid; 1512 *found_type = btrfs_dir_type(path->nodes[0], di); 1513 1514out: 1515 btrfs_free_path(path); 1516 return ret; 1517} 1518 1519static int get_first_ref(struct send_ctx *sctx, 1520 struct btrfs_root *root, u64 ino, 1521 u64 *dir, u64 *dir_gen, struct fs_path *name) 1522{ 1523 int ret; 1524 struct btrfs_key key; 1525 struct btrfs_key found_key; 1526 struct btrfs_path *path; 1527 struct btrfs_inode_ref *iref; 1528 int len; 1529 1530 path = alloc_path_for_send(); 1531 if (!path) 1532 return -ENOMEM; 1533 1534 key.objectid = ino; 1535 key.type = BTRFS_INODE_REF_KEY; 1536 key.offset = 0; 1537 1538 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 1539 if (ret < 0) 1540 goto out; 1541 if (!ret) 1542 btrfs_item_key_to_cpu(path->nodes[0], &found_key, 1543 path->slots[0]); 1544 if (ret || found_key.objectid != key.objectid || 1545 found_key.type != key.type) { 1546 ret = -ENOENT; 1547 goto out; 1548 } 1549 1550 iref = btrfs_item_ptr(path->nodes[0], path->slots[0], 1551 struct btrfs_inode_ref); 1552 len = btrfs_inode_ref_name_len(path->nodes[0], iref); 1553 ret = fs_path_add_from_extent_buffer(name, path->nodes[0], 1554 (unsigned long)(iref + 1), len); 1555 if (ret < 0) 1556 goto out; 1557 btrfs_release_path(path); 1558 1559 ret = get_inode_info(root, found_key.offset, NULL, dir_gen, NULL, NULL, 1560 NULL); 1561 if (ret < 0) 1562 goto out; 1563 1564 *dir = found_key.offset; 1565 1566out: 1567 btrfs_free_path(path); 1568 return ret; 1569} 1570 1571static int is_first_ref(struct send_ctx *sctx, 1572 struct btrfs_root *root, 1573 u64 ino, u64 dir, 1574 const char *name, int name_len) 1575{ 1576 int ret; 1577 struct fs_path *tmp_name; 1578 u64 tmp_dir; 1579 u64 tmp_dir_gen; 1580 1581 tmp_name = fs_path_alloc(sctx); 1582 if (!tmp_name) 1583 return -ENOMEM; 1584 1585 ret = get_first_ref(sctx, root, ino, &tmp_dir, &tmp_dir_gen, tmp_name); 1586 if (ret < 0) 1587 goto out; 1588 1589 if (name_len != fs_path_len(tmp_name)) { 1590 ret = 0; 1591 goto out; 1592 } 1593 1594 ret = memcmp(tmp_name->start, name, name_len); 1595 if (ret) 1596 ret = 0; 1597 else 1598 ret = 1; 1599 1600out: 1601 fs_path_free(sctx, tmp_name); 1602 return ret; 1603} 1604 1605static int will_overwrite_ref(struct send_ctx *sctx, u64 dir, u64 dir_gen, 1606 const char *name, int name_len, 1607 u64 *who_ino, u64 *who_gen) 1608{ 1609 int ret = 0; 1610 u64 other_inode = 0; 1611 u8 other_type = 0; 1612 1613 if (!sctx->parent_root) 1614 goto out; 1615 1616 ret = is_inode_existent(sctx, dir, dir_gen); 1617 if (ret <= 0) 1618 goto out; 1619 1620 ret = lookup_dir_item_inode(sctx->parent_root, dir, name, name_len, 1621 &other_inode, &other_type); 1622 if (ret < 0 && ret != -ENOENT) 1623 goto out; 1624 if (ret) { 1625 ret = 0; 1626 goto out; 1627 } 1628 1629 if (other_inode > sctx->send_progress) { 1630 ret = get_inode_info(sctx->parent_root, other_inode, NULL, 1631 who_gen, NULL, NULL, NULL); 1632 if (ret < 0) 1633 goto out; 1634 1635 ret = 1; 1636 *who_ino = other_inode; 1637 } else { 1638 ret = 0; 1639 } 1640 1641out: 1642 return ret; 1643} 1644 1645static int did_overwrite_ref(struct send_ctx *sctx, 1646 u64 dir, u64 dir_gen, 1647 u64 ino, u64 ino_gen, 1648 const char *name, int name_len) 1649{ 1650 int ret = 0; 1651 u64 gen; 1652 u64 ow_inode; 1653 u8 other_type; 1654 1655 if (!sctx->parent_root) 1656 goto out; 1657 1658 ret = is_inode_existent(sctx, dir, dir_gen); 1659 if (ret <= 0) 1660 goto out; 1661 1662 /* check if the ref was overwritten by another ref */ 1663 ret = lookup_dir_item_inode(sctx->send_root, dir, name, name_len, 1664 &ow_inode, &other_type); 1665 if (ret < 0 && ret != -ENOENT) 1666 goto out; 1667 if (ret) { 1668 /* was never and will never be overwritten */ 1669 ret = 0; 1670 goto out; 1671 } 1672 1673 ret = get_inode_info(sctx->send_root, ow_inode, NULL, &gen, NULL, NULL, 1674 NULL); 1675 if (ret < 0) 1676 goto out; 1677 1678 if (ow_inode == ino && gen == ino_gen) { 1679 ret = 0; 1680 goto out; 1681 } 1682 1683 /* we know that it is or will be overwritten. check this now */ 1684 if (ow_inode < sctx->send_progress) 1685 ret = 1; 1686 else 1687 ret = 0; 1688 1689out: 1690 return ret; 1691} 1692 1693static int did_overwrite_first_ref(struct send_ctx *sctx, u64 ino, u64 gen) 1694{ 1695 int ret = 0; 1696 struct fs_path *name = NULL; 1697 u64 dir; 1698 u64 dir_gen; 1699 1700 if (!sctx->parent_root) 1701 goto out; 1702 1703 name = fs_path_alloc(sctx); 1704 if (!name) 1705 return -ENOMEM; 1706 1707 ret = get_first_ref(sctx, sctx->parent_root, ino, &dir, &dir_gen, name); 1708 if (ret < 0) 1709 goto out; 1710 1711 ret = did_overwrite_ref(sctx, dir, dir_gen, ino, gen, 1712 name->start, fs_path_len(name)); 1713 if (ret < 0) 1714 goto out; 1715 1716out: 1717 fs_path_free(sctx, name); 1718 return ret; 1719} 1720 1721static int name_cache_insert(struct send_ctx *sctx, 1722 struct name_cache_entry *nce) 1723{ 1724 int ret = 0; 1725 struct name_cache_entry **ncea; 1726 1727 ncea = radix_tree_lookup(&sctx->name_cache, nce->ino); 1728 if (ncea) { 1729 if (!ncea[0]) 1730 ncea[0] = nce; 1731 else if (!ncea[1]) 1732 ncea[1] = nce; 1733 else 1734 BUG(); 1735 } else { 1736 ncea = kmalloc(sizeof(void *) * 2, GFP_NOFS); 1737 if (!ncea) 1738 return -ENOMEM; 1739 1740 ncea[0] = nce; 1741 ncea[1] = NULL; 1742 ret = radix_tree_insert(&sctx->name_cache, nce->ino, ncea); 1743 if (ret < 0) 1744 return ret; 1745 } 1746 list_add_tail(&nce->list, &sctx->name_cache_list); 1747 sctx->name_cache_size++; 1748 1749 return ret; 1750} 1751 1752static void name_cache_delete(struct send_ctx *sctx, 1753 struct name_cache_entry *nce) 1754{ 1755 struct name_cache_entry **ncea; 1756 1757 ncea = radix_tree_lookup(&sctx->name_cache, nce->ino); 1758 BUG_ON(!ncea); 1759 1760 if (ncea[0] == nce) 1761 ncea[0] = NULL; 1762 else if (ncea[1] == nce) 1763 ncea[1] = NULL; 1764 else 1765 BUG(); 1766 1767 if (!ncea[0] && !ncea[1]) { 1768 radix_tree_delete(&sctx->name_cache, nce->ino); 1769 kfree(ncea); 1770 } 1771 1772 list_del(&nce->list); 1773 1774 sctx->name_cache_size--; 1775} 1776 1777static struct name_cache_entry *name_cache_search(struct send_ctx *sctx, 1778 u64 ino, u64 gen) 1779{ 1780 struct name_cache_entry **ncea; 1781 1782 ncea = radix_tree_lookup(&sctx->name_cache, ino); 1783 if (!ncea) 1784 return NULL; 1785 1786 if (ncea[0] && ncea[0]->gen == gen) 1787 return ncea[0]; 1788 else if (ncea[1] && ncea[1]->gen == gen) 1789 return ncea[1]; 1790 return NULL; 1791} 1792 1793static void name_cache_used(struct send_ctx *sctx, struct name_cache_entry *nce) 1794{ 1795 list_del(&nce->list); 1796 list_add_tail(&nce->list, &sctx->name_cache_list); 1797} 1798 1799static void name_cache_clean_unused(struct send_ctx *sctx) 1800{ 1801 struct name_cache_entry *nce; 1802 1803 if (sctx->name_cache_size < SEND_CTX_NAME_CACHE_CLEAN_SIZE) 1804 return; 1805 1806 while (sctx->name_cache_size > SEND_CTX_MAX_NAME_CACHE_SIZE) { 1807 nce = list_entry(sctx->name_cache_list.next, 1808 struct name_cache_entry, list); 1809 name_cache_delete(sctx, nce); 1810 kfree(nce); 1811 } 1812} 1813 1814static void name_cache_free(struct send_ctx *sctx) 1815{ 1816 struct name_cache_entry *nce; 1817 struct name_cache_entry *tmp; 1818 1819 list_for_each_entry_safe(nce, tmp, &sctx->name_cache_list, list) { 1820 name_cache_delete(sctx, nce); 1821 } 1822} 1823 1824static int __get_cur_name_and_parent(struct send_ctx *sctx, 1825 u64 ino, u64 gen, 1826 u64 *parent_ino, 1827 u64 *parent_gen, 1828 struct fs_path *dest) 1829{ 1830 int ret; 1831 int nce_ret; 1832 struct btrfs_path *path = NULL; 1833 struct name_cache_entry *nce = NULL; 1834 1835 nce = name_cache_search(sctx, ino, gen); 1836 if (nce) { 1837 if (ino < sctx->send_progress && nce->need_later_update) { 1838 name_cache_delete(sctx, nce); 1839 kfree(nce); 1840 nce = NULL; 1841 } else { 1842 name_cache_used(sctx, nce); 1843 *parent_ino = nce->parent_ino; 1844 *parent_gen = nce->parent_gen; 1845 ret = fs_path_add(dest, nce->name, nce->name_len); 1846 if (ret < 0) 1847 goto out; 1848 ret = nce->ret; 1849 goto out; 1850 } 1851 } 1852 1853 path = alloc_path_for_send(); 1854 if (!path) 1855 return -ENOMEM; 1856 1857 ret = is_inode_existent(sctx, ino, gen); 1858 if (ret < 0) 1859 goto out; 1860 1861 if (!ret) { 1862 ret = gen_unique_name(sctx, ino, gen, dest); 1863 if (ret < 0) 1864 goto out; 1865 ret = 1; 1866 goto out_cache; 1867 } 1868 1869 if (ino < sctx->send_progress) 1870 ret = get_first_ref(sctx, sctx->send_root, ino, 1871 parent_ino, parent_gen, dest); 1872 else 1873 ret = get_first_ref(sctx, sctx->parent_root, ino, 1874 parent_ino, parent_gen, dest); 1875 if (ret < 0) 1876 goto out; 1877 1878 ret = did_overwrite_ref(sctx, *parent_ino, *parent_gen, ino, gen, 1879 dest->start, dest->end - dest->start); 1880 if (ret < 0) 1881 goto out; 1882 if (ret) { 1883 fs_path_reset(dest); 1884 ret = gen_unique_name(sctx, ino, gen, dest); 1885 if (ret < 0) 1886 goto out; 1887 ret = 1; 1888 } 1889 1890out_cache: 1891 nce = kmalloc(sizeof(*nce) + fs_path_len(dest) + 1, GFP_NOFS); 1892 if (!nce) { 1893 ret = -ENOMEM; 1894 goto out; 1895 } 1896 1897 nce->ino = ino; 1898 nce->gen = gen; 1899 nce->parent_ino = *parent_ino; 1900 nce->parent_gen = *parent_gen; 1901 nce->name_len = fs_path_len(dest); 1902 nce->ret = ret; 1903 strcpy(nce->name, dest->start); 1904 memset(&nce->use_list, 0, sizeof(nce->use_list)); 1905 1906 if (ino < sctx->send_progress) 1907 nce->need_later_update = 0; 1908 else 1909 nce->need_later_update = 1; 1910 1911 nce_ret = name_cache_insert(sctx, nce); 1912 if (nce_ret < 0) 1913 ret = nce_ret; 1914 name_cache_clean_unused(sctx); 1915 1916out: 1917 btrfs_free_path(path); 1918 return ret; 1919} 1920 1921/* 1922 * Magic happens here. This function returns the first ref to an inode as it 1923 * would look like while receiving the stream at this point in time. 1924 * We walk the path up to the root. For every inode in between, we check if it 1925 * was already processed/sent. If yes, we continue with the parent as found 1926 * in send_root. If not, we continue with the parent as found in parent_root. 1927 * If we encounter an inode that was deleted at this point in time, we use the 1928 * inodes "orphan" name instead of the real name and stop. Same with new inodes 1929 * that were not created yet and overwritten inodes/refs. 1930 * 1931 * When do we have have orphan inodes: 1932 * 1. When an inode is freshly created and thus no valid refs are available yet 1933 * 2. When a directory lost all it's refs (deleted) but still has dir items 1934 * inside which were not processed yet (pending for move/delete). If anyone 1935 * tried to get the path to the dir items, it would get a path inside that 1936 * orphan directory. 1937 * 3. When an inode is moved around or gets new links, it may overwrite the ref 1938 * of an unprocessed inode. If in that case the first ref would be 1939 * overwritten, the overwritten inode gets "orphanized". Later when we 1940 * process this overwritten inode, it is restored at a new place by moving 1941 * the orphan inode. 1942 * 1943 * sctx->send_progress tells this function at which point in time receiving 1944 * would be. 1945 */ 1946static int get_cur_path(struct send_ctx *sctx, u64 ino, u64 gen, 1947 struct fs_path *dest) 1948{ 1949 int ret = 0; 1950 struct fs_path *name = NULL; 1951 u64 parent_inode = 0; 1952 u64 parent_gen = 0; 1953 int stop = 0; 1954 1955 name = fs_path_alloc(sctx); 1956 if (!name) { 1957 ret = -ENOMEM; 1958 goto out; 1959 } 1960 1961 dest->reversed = 1; 1962 fs_path_reset(dest); 1963 1964 while (!stop && ino != BTRFS_FIRST_FREE_OBJECTID) { 1965 fs_path_reset(name); 1966 1967 ret = __get_cur_name_and_parent(sctx, ino, gen, 1968 &parent_inode, &parent_gen, name); 1969 if (ret < 0) 1970 goto out; 1971 if (ret) 1972 stop = 1; 1973 1974 ret = fs_path_add_path(dest, name); 1975 if (ret < 0) 1976 goto out; 1977 1978 ino = parent_inode; 1979 gen = parent_gen; 1980 } 1981 1982out: 1983 fs_path_free(sctx, name); 1984 if (!ret) 1985 fs_path_unreverse(dest); 1986 return ret; 1987} 1988 1989/* 1990 * Called for regular files when sending extents data. Opens a struct file 1991 * to read from the file. 1992 */ 1993static int open_cur_inode_file(struct send_ctx *sctx) 1994{ 1995 int ret = 0; 1996 struct btrfs_key key; 1997 struct path path; 1998 struct inode *inode; 1999 struct dentry *dentry; 2000 struct file *filp; 2001 int new = 0; 2002 2003 if (sctx->cur_inode_filp) 2004 goto out; 2005 2006 key.objectid = sctx->cur_ino; 2007 key.type = BTRFS_INODE_ITEM_KEY; 2008 key.offset = 0; 2009 2010 inode = btrfs_iget(sctx->send_root->fs_info->sb, &key, sctx->send_root, 2011 &new); 2012 if (IS_ERR(inode)) { 2013 ret = PTR_ERR(inode); 2014 goto out; 2015 } 2016 2017 dentry = d_obtain_alias(inode); 2018 inode = NULL; 2019 if (IS_ERR(dentry)) { 2020 ret = PTR_ERR(dentry); 2021 goto out; 2022 } 2023 2024 path.mnt = sctx->mnt; 2025 path.dentry = dentry; 2026 filp = dentry_open(&path, O_RDONLY | O_LARGEFILE, current_cred()); 2027 dput(dentry); 2028 dentry = NULL; 2029 if (IS_ERR(filp)) { 2030 ret = PTR_ERR(filp); 2031 goto out; 2032 } 2033 sctx->cur_inode_filp = filp; 2034 2035out: 2036 /* 2037 * no xxxput required here as every vfs op 2038 * does it by itself on failure 2039 */ 2040 return ret; 2041} 2042 2043/* 2044 * Closes the struct file that was created in open_cur_inode_file 2045 */ 2046static int close_cur_inode_file(struct send_ctx *sctx) 2047{ 2048 int ret = 0; 2049 2050 if (!sctx->cur_inode_filp) 2051 goto out; 2052 2053 ret = filp_close(sctx->cur_inode_filp, NULL); 2054 sctx->cur_inode_filp = NULL; 2055 2056out: 2057 return ret; 2058} 2059 2060/* 2061 * Sends a BTRFS_SEND_C_SUBVOL command/item to userspace 2062 */ 2063static int send_subvol_begin(struct send_ctx *sctx) 2064{ 2065 int ret; 2066 struct btrfs_root *send_root = sctx->send_root; 2067 struct btrfs_root *parent_root = sctx->parent_root; 2068 struct btrfs_path *path; 2069 struct btrfs_key key; 2070 struct btrfs_root_ref *ref; 2071 struct extent_buffer *leaf; 2072 char *name = NULL; 2073 int namelen; 2074 2075 path = alloc_path_for_send(); 2076 if (!path) 2077 return -ENOMEM; 2078 2079 name = kmalloc(BTRFS_PATH_NAME_MAX, GFP_NOFS); 2080 if (!name) { 2081 btrfs_free_path(path); 2082 return -ENOMEM; 2083 } 2084 2085 key.objectid = send_root->objectid; 2086 key.type = BTRFS_ROOT_BACKREF_KEY; 2087 key.offset = 0; 2088 2089 ret = btrfs_search_slot_for_read(send_root->fs_info->tree_root, 2090 &key, path, 1, 0); 2091 if (ret < 0) 2092 goto out; 2093 if (ret) { 2094 ret = -ENOENT; 2095 goto out; 2096 } 2097 2098 leaf = path->nodes[0]; 2099 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); 2100 if (key.type != BTRFS_ROOT_BACKREF_KEY || 2101 key.objectid != send_root->objectid) { 2102 ret = -ENOENT; 2103 goto out; 2104 } 2105 ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref); 2106 namelen = btrfs_root_ref_name_len(leaf, ref); 2107 read_extent_buffer(leaf, name, (unsigned long)(ref + 1), namelen); 2108 btrfs_release_path(path); 2109 2110 if (ret < 0) 2111 goto out; 2112 2113 if (parent_root) { 2114 ret = begin_cmd(sctx, BTRFS_SEND_C_SNAPSHOT); 2115 if (ret < 0) 2116 goto out; 2117 } else { 2118 ret = begin_cmd(sctx, BTRFS_SEND_C_SUBVOL); 2119 if (ret < 0) 2120 goto out; 2121 } 2122 2123 TLV_PUT_STRING(sctx, BTRFS_SEND_A_PATH, name, namelen); 2124 TLV_PUT_UUID(sctx, BTRFS_SEND_A_UUID, 2125 sctx->send_root->root_item.uuid); 2126 TLV_PUT_U64(sctx, BTRFS_SEND_A_CTRANSID, 2127 sctx->send_root->root_item.ctransid); 2128 if (parent_root) { 2129 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 2130 sctx->parent_root->root_item.uuid); 2131 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID, 2132 sctx->parent_root->root_item.ctransid); 2133 } 2134 2135 ret = send_cmd(sctx); 2136 2137tlv_put_failure: 2138out: 2139 btrfs_free_path(path); 2140 kfree(name); 2141 return ret; 2142} 2143 2144static int send_truncate(struct send_ctx *sctx, u64 ino, u64 gen, u64 size) 2145{ 2146 int ret = 0; 2147 struct fs_path *p; 2148 2149verbose_printk("btrfs: send_truncate %llu size=%llu\n", ino, size); 2150 2151 p = fs_path_alloc(sctx); 2152 if (!p) 2153 return -ENOMEM; 2154 2155 ret = begin_cmd(sctx, BTRFS_SEND_C_TRUNCATE); 2156 if (ret < 0) 2157 goto out; 2158 2159 ret = get_cur_path(sctx, ino, gen, p); 2160 if (ret < 0) 2161 goto out; 2162 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2163 TLV_PUT_U64(sctx, BTRFS_SEND_A_SIZE, size); 2164 2165 ret = send_cmd(sctx); 2166 2167tlv_put_failure: 2168out: 2169 fs_path_free(sctx, p); 2170 return ret; 2171} 2172 2173static int send_chmod(struct send_ctx *sctx, u64 ino, u64 gen, u64 mode) 2174{ 2175 int ret = 0; 2176 struct fs_path *p; 2177 2178verbose_printk("btrfs: send_chmod %llu mode=%llu\n", ino, mode); 2179 2180 p = fs_path_alloc(sctx); 2181 if (!p) 2182 return -ENOMEM; 2183 2184 ret = begin_cmd(sctx, BTRFS_SEND_C_CHMOD); 2185 if (ret < 0) 2186 goto out; 2187 2188 ret = get_cur_path(sctx, ino, gen, p); 2189 if (ret < 0) 2190 goto out; 2191 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2192 TLV_PUT_U64(sctx, BTRFS_SEND_A_MODE, mode & 07777); 2193 2194 ret = send_cmd(sctx); 2195 2196tlv_put_failure: 2197out: 2198 fs_path_free(sctx, p); 2199 return ret; 2200} 2201 2202static int send_chown(struct send_ctx *sctx, u64 ino, u64 gen, u64 uid, u64 gid) 2203{ 2204 int ret = 0; 2205 struct fs_path *p; 2206 2207verbose_printk("btrfs: send_chown %llu uid=%llu, gid=%llu\n", ino, uid, gid); 2208 2209 p = fs_path_alloc(sctx); 2210 if (!p) 2211 return -ENOMEM; 2212 2213 ret = begin_cmd(sctx, BTRFS_SEND_C_CHOWN); 2214 if (ret < 0) 2215 goto out; 2216 2217 ret = get_cur_path(sctx, ino, gen, p); 2218 if (ret < 0) 2219 goto out; 2220 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2221 TLV_PUT_U64(sctx, BTRFS_SEND_A_UID, uid); 2222 TLV_PUT_U64(sctx, BTRFS_SEND_A_GID, gid); 2223 2224 ret = send_cmd(sctx); 2225 2226tlv_put_failure: 2227out: 2228 fs_path_free(sctx, p); 2229 return ret; 2230} 2231 2232static int send_utimes(struct send_ctx *sctx, u64 ino, u64 gen) 2233{ 2234 int ret = 0; 2235 struct fs_path *p = NULL; 2236 struct btrfs_inode_item *ii; 2237 struct btrfs_path *path = NULL; 2238 struct extent_buffer *eb; 2239 struct btrfs_key key; 2240 int slot; 2241 2242verbose_printk("btrfs: send_utimes %llu\n", ino); 2243 2244 p = fs_path_alloc(sctx); 2245 if (!p) 2246 return -ENOMEM; 2247 2248 path = alloc_path_for_send(); 2249 if (!path) { 2250 ret = -ENOMEM; 2251 goto out; 2252 } 2253 2254 key.objectid = ino; 2255 key.type = BTRFS_INODE_ITEM_KEY; 2256 key.offset = 0; 2257 ret = btrfs_search_slot(NULL, sctx->send_root, &key, path, 0, 0); 2258 if (ret < 0) 2259 goto out; 2260 2261 eb = path->nodes[0]; 2262 slot = path->slots[0]; 2263 ii = btrfs_item_ptr(eb, slot, struct btrfs_inode_item); 2264 2265 ret = begin_cmd(sctx, BTRFS_SEND_C_UTIMES); 2266 if (ret < 0) 2267 goto out; 2268 2269 ret = get_cur_path(sctx, ino, gen, p); 2270 if (ret < 0) 2271 goto out; 2272 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2273 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_ATIME, eb, 2274 btrfs_inode_atime(ii)); 2275 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_MTIME, eb, 2276 btrfs_inode_mtime(ii)); 2277 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_CTIME, eb, 2278 btrfs_inode_ctime(ii)); 2279 /* TODO otime? */ 2280 2281 ret = send_cmd(sctx); 2282 2283tlv_put_failure: 2284out: 2285 fs_path_free(sctx, p); 2286 btrfs_free_path(path); 2287 return ret; 2288} 2289 2290/* 2291 * Sends a BTRFS_SEND_C_MKXXX or SYMLINK command to user space. We don't have 2292 * a valid path yet because we did not process the refs yet. So, the inode 2293 * is created as orphan. 2294 */ 2295static int send_create_inode(struct send_ctx *sctx, struct btrfs_path *path, 2296 struct btrfs_key *key) 2297{ 2298 int ret = 0; 2299 struct extent_buffer *eb = path->nodes[0]; 2300 struct btrfs_inode_item *ii; 2301 struct fs_path *p; 2302 int slot = path->slots[0]; 2303 int cmd; 2304 u64 mode; 2305 2306verbose_printk("btrfs: send_create_inode %llu\n", sctx->cur_ino); 2307 2308 p = fs_path_alloc(sctx); 2309 if (!p) 2310 return -ENOMEM; 2311 2312 ii = btrfs_item_ptr(eb, slot, struct btrfs_inode_item); 2313 mode = btrfs_inode_mode(eb, ii); 2314 2315 if (S_ISREG(mode)) 2316 cmd = BTRFS_SEND_C_MKFILE; 2317 else if (S_ISDIR(mode)) 2318 cmd = BTRFS_SEND_C_MKDIR; 2319 else if (S_ISLNK(mode)) 2320 cmd = BTRFS_SEND_C_SYMLINK; 2321 else if (S_ISCHR(mode) || S_ISBLK(mode)) 2322 cmd = BTRFS_SEND_C_MKNOD; 2323 else if (S_ISFIFO(mode)) 2324 cmd = BTRFS_SEND_C_MKFIFO; 2325 else if (S_ISSOCK(mode)) 2326 cmd = BTRFS_SEND_C_MKSOCK; 2327 else { 2328 printk(KERN_WARNING "btrfs: unexpected inode type %o", 2329 (int)(mode & S_IFMT)); 2330 ret = -ENOTSUPP; 2331 goto out; 2332 } 2333 2334 ret = begin_cmd(sctx, cmd); 2335 if (ret < 0) 2336 goto out; 2337 2338 ret = gen_unique_name(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 2339 if (ret < 0) 2340 goto out; 2341 2342 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2343 TLV_PUT_U64(sctx, BTRFS_SEND_A_INO, sctx->cur_ino); 2344 2345 if (S_ISLNK(mode)) { 2346 fs_path_reset(p); 2347 ret = read_symlink(sctx, sctx->send_root, sctx->cur_ino, p); 2348 if (ret < 0) 2349 goto out; 2350 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_LINK, p); 2351 } else if (S_ISCHR(mode) || S_ISBLK(mode) || 2352 S_ISFIFO(mode) || S_ISSOCK(mode)) { 2353 TLV_PUT_U64(sctx, BTRFS_SEND_A_RDEV, btrfs_inode_rdev(eb, ii)); 2354 } 2355 2356 ret = send_cmd(sctx); 2357 if (ret < 0) 2358 goto out; 2359 2360 2361tlv_put_failure: 2362out: 2363 fs_path_free(sctx, p); 2364 return ret; 2365} 2366 2367struct recorded_ref { 2368 struct list_head list; 2369 char *dir_path; 2370 char *name; 2371 struct fs_path *full_path; 2372 u64 dir; 2373 u64 dir_gen; 2374 int dir_path_len; 2375 int name_len; 2376}; 2377 2378/* 2379 * We need to process new refs before deleted refs, but compare_tree gives us 2380 * everything mixed. So we first record all refs and later process them. 2381 * This function is a helper to record one ref. 2382 */ 2383static int record_ref(struct list_head *head, u64 dir, 2384 u64 dir_gen, struct fs_path *path) 2385{ 2386 struct recorded_ref *ref; 2387 char *tmp; 2388 2389 ref = kmalloc(sizeof(*ref), GFP_NOFS); 2390 if (!ref) 2391 return -ENOMEM; 2392 2393 ref->dir = dir; 2394 ref->dir_gen = dir_gen; 2395 ref->full_path = path; 2396 2397 tmp = strrchr(ref->full_path->start, '/'); 2398 if (!tmp) { 2399 ref->name_len = ref->full_path->end - ref->full_path->start; 2400 ref->name = ref->full_path->start; 2401 ref->dir_path_len = 0; 2402 ref->dir_path = ref->full_path->start; 2403 } else { 2404 tmp++; 2405 ref->name_len = ref->full_path->end - tmp; 2406 ref->name = tmp; 2407 ref->dir_path = ref->full_path->start; 2408 ref->dir_path_len = ref->full_path->end - 2409 ref->full_path->start - 1 - ref->name_len; 2410 } 2411 2412 list_add_tail(&ref->list, head); 2413 return 0; 2414} 2415 2416static void __free_recorded_refs(struct send_ctx *sctx, struct list_head *head) 2417{ 2418 struct recorded_ref *cur; 2419 struct recorded_ref *tmp; 2420 2421 list_for_each_entry_safe(cur, tmp, head, list) { 2422 fs_path_free(sctx, cur->full_path); 2423 kfree(cur); 2424 } 2425 INIT_LIST_HEAD(head); 2426} 2427 2428static void free_recorded_refs(struct send_ctx *sctx) 2429{ 2430 __free_recorded_refs(sctx, &sctx->new_refs); 2431 __free_recorded_refs(sctx, &sctx->deleted_refs); 2432} 2433 2434/* 2435 * Renames/moves a file/dir to it's orphan name. Used when the first 2436 * ref of an unprocessed inode gets overwritten and for all non empty 2437 * directories. 2438 */ 2439static int orphanize_inode(struct send_ctx *sctx, u64 ino, u64 gen, 2440 struct fs_path *path) 2441{ 2442 int ret; 2443 struct fs_path *orphan; 2444 2445 orphan = fs_path_alloc(sctx); 2446 if (!orphan) 2447 return -ENOMEM; 2448 2449 ret = gen_unique_name(sctx, ino, gen, orphan); 2450 if (ret < 0) 2451 goto out; 2452 2453 ret = send_rename(sctx, path, orphan); 2454 2455out: 2456 fs_path_free(sctx, orphan); 2457 return ret; 2458} 2459 2460/* 2461 * Returns 1 if a directory can be removed at this point in time. 2462 * We check this by iterating all dir items and checking if the inode behind 2463 * the dir item was already processed. 2464 */ 2465static int can_rmdir(struct send_ctx *sctx, u64 dir, u64 send_progress) 2466{ 2467 int ret = 0; 2468 struct btrfs_root *root = sctx->parent_root; 2469 struct btrfs_path *path; 2470 struct btrfs_key key; 2471 struct btrfs_key found_key; 2472 struct btrfs_key loc; 2473 struct btrfs_dir_item *di; 2474 2475 path = alloc_path_for_send(); 2476 if (!path) 2477 return -ENOMEM; 2478 2479 key.objectid = dir; 2480 key.type = BTRFS_DIR_INDEX_KEY; 2481 key.offset = 0; 2482 2483 while (1) { 2484 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 2485 if (ret < 0) 2486 goto out; 2487 if (!ret) { 2488 btrfs_item_key_to_cpu(path->nodes[0], &found_key, 2489 path->slots[0]); 2490 } 2491 if (ret || found_key.objectid != key.objectid || 2492 found_key.type != key.type) { 2493 break; 2494 } 2495 2496 di = btrfs_item_ptr(path->nodes[0], path->slots[0], 2497 struct btrfs_dir_item); 2498 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &loc); 2499 2500 if (loc.objectid > send_progress) { 2501 ret = 0; 2502 goto out; 2503 } 2504 2505 btrfs_release_path(path); 2506 key.offset = found_key.offset + 1; 2507 } 2508 2509 ret = 1; 2510 2511out: 2512 btrfs_free_path(path); 2513 return ret; 2514} 2515 2516struct finish_unordered_dir_ctx { 2517 struct send_ctx *sctx; 2518 struct fs_path *cur_path; 2519 struct fs_path *dir_path; 2520 u64 dir_ino; 2521 int need_delete; 2522 int delete_pass; 2523}; 2524 2525int __finish_unordered_dir(int num, struct btrfs_key *di_key, 2526 const char *name, int name_len, 2527 const char *data, int data_len, 2528 u8 type, void *ctx) 2529{ 2530 int ret = 0; 2531 struct finish_unordered_dir_ctx *fctx = ctx; 2532 struct send_ctx *sctx = fctx->sctx; 2533 u64 di_gen; 2534 u64 di_mode; 2535 int is_orphan = 0; 2536 2537 if (di_key->objectid >= fctx->dir_ino) 2538 goto out; 2539 2540 fs_path_reset(fctx->cur_path); 2541 2542 ret = get_inode_info(sctx->send_root, di_key->objectid, 2543 NULL, &di_gen, &di_mode, NULL, NULL); 2544 if (ret < 0) 2545 goto out; 2546 2547 ret = is_first_ref(sctx, sctx->send_root, di_key->objectid, 2548 fctx->dir_ino, name, name_len); 2549 if (ret < 0) 2550 goto out; 2551 if (ret) { 2552 is_orphan = 1; 2553 ret = gen_unique_name(sctx, di_key->objectid, di_gen, 2554 fctx->cur_path); 2555 } else { 2556 ret = get_cur_path(sctx, di_key->objectid, di_gen, 2557 fctx->cur_path); 2558 } 2559 if (ret < 0) 2560 goto out; 2561 2562 ret = fs_path_add(fctx->dir_path, name, name_len); 2563 if (ret < 0) 2564 goto out; 2565 2566 if (!fctx->delete_pass) { 2567 if (S_ISDIR(di_mode)) { 2568 ret = send_rename(sctx, fctx->cur_path, 2569 fctx->dir_path); 2570 } else { 2571 ret = send_link(sctx, fctx->dir_path, 2572 fctx->cur_path); 2573 if (is_orphan) 2574 fctx->need_delete = 1; 2575 } 2576 } else if (!S_ISDIR(di_mode)) { 2577 ret = send_unlink(sctx, fctx->cur_path); 2578 } else { 2579 ret = 0; 2580 } 2581 2582 fs_path_remove(fctx->dir_path); 2583 2584out: 2585 return ret; 2586} 2587 2588/* 2589 * Go through all dir items and see if we find refs which could not be created 2590 * in the past because the dir did not exist at that time. 2591 */ 2592static int finish_outoforder_dir(struct send_ctx *sctx, u64 dir, u64 dir_gen) 2593{ 2594 int ret = 0; 2595 struct btrfs_path *path = NULL; 2596 struct btrfs_key key; 2597 struct btrfs_key found_key; 2598 struct extent_buffer *eb; 2599 struct finish_unordered_dir_ctx fctx; 2600 int slot; 2601 2602 path = alloc_path_for_send(); 2603 if (!path) { 2604 ret = -ENOMEM; 2605 goto out; 2606 } 2607 2608 memset(&fctx, 0, sizeof(fctx)); 2609 fctx.sctx = sctx; 2610 fctx.cur_path = fs_path_alloc(sctx); 2611 fctx.dir_path = fs_path_alloc(sctx); 2612 if (!fctx.cur_path || !fctx.dir_path) { 2613 ret = -ENOMEM; 2614 goto out; 2615 } 2616 fctx.dir_ino = dir; 2617 2618 ret = get_cur_path(sctx, dir, dir_gen, fctx.dir_path); 2619 if (ret < 0) 2620 goto out; 2621 2622 /* 2623 * We do two passes. The first links in the new refs and the second 2624 * deletes orphans if required. Deletion of orphans is not required for 2625 * directory inodes, as we always have only one ref and use rename 2626 * instead of link for those. 2627 */ 2628 2629again: 2630 key.objectid = dir; 2631 key.type = BTRFS_DIR_ITEM_KEY; 2632 key.offset = 0; 2633 while (1) { 2634 ret = btrfs_search_slot_for_read(sctx->send_root, &key, path, 2635 1, 0); 2636 if (ret < 0) 2637 goto out; 2638 eb = path->nodes[0]; 2639 slot = path->slots[0]; 2640 btrfs_item_key_to_cpu(eb, &found_key, slot); 2641 2642 if (found_key.objectid != key.objectid || 2643 found_key.type != key.type) { 2644 btrfs_release_path(path); 2645 break; 2646 } 2647 2648 ret = iterate_dir_item(sctx, sctx->send_root, path, 2649 &found_key, __finish_unordered_dir, 2650 &fctx); 2651 if (ret < 0) 2652 goto out; 2653 2654 key.offset = found_key.offset + 1; 2655 btrfs_release_path(path); 2656 } 2657 2658 if (!fctx.delete_pass && fctx.need_delete) { 2659 fctx.delete_pass = 1; 2660 goto again; 2661 } 2662 2663out: 2664 btrfs_free_path(path); 2665 fs_path_free(sctx, fctx.cur_path); 2666 fs_path_free(sctx, fctx.dir_path); 2667 return ret; 2668} 2669 2670/* 2671 * This does all the move/link/unlink/rmdir magic. 2672 */ 2673static int process_recorded_refs(struct send_ctx *sctx) 2674{ 2675 int ret = 0; 2676 struct recorded_ref *cur; 2677 struct ulist *check_dirs = NULL; 2678 struct ulist_iterator uit; 2679 struct ulist_node *un; 2680 struct fs_path *valid_path = NULL; 2681 u64 ow_inode = 0; 2682 u64 ow_gen; 2683 int did_overwrite = 0; 2684 int is_orphan = 0; 2685 2686verbose_printk("btrfs: process_recorded_refs %llu\n", sctx->cur_ino); 2687 2688 valid_path = fs_path_alloc(sctx); 2689 if (!valid_path) { 2690 ret = -ENOMEM; 2691 goto out; 2692 } 2693 2694 check_dirs = ulist_alloc(GFP_NOFS); 2695 if (!check_dirs) { 2696 ret = -ENOMEM; 2697 goto out; 2698 } 2699 2700 /* 2701 * First, check if the first ref of the current inode was overwritten 2702 * before. If yes, we know that the current inode was already orphanized 2703 * and thus use the orphan name. If not, we can use get_cur_path to 2704 * get the path of the first ref as it would like while receiving at 2705 * this point in time. 2706 * New inodes are always orphan at the beginning, so force to use the 2707 * orphan name in this case. 2708 * The first ref is stored in valid_path and will be updated if it 2709 * gets moved around. 2710 */ 2711 if (!sctx->cur_inode_new) { 2712 ret = did_overwrite_first_ref(sctx, sctx->cur_ino, 2713 sctx->cur_inode_gen); 2714 if (ret < 0) 2715 goto out; 2716 if (ret) 2717 did_overwrite = 1; 2718 } 2719 if (sctx->cur_inode_new || did_overwrite) { 2720 ret = gen_unique_name(sctx, sctx->cur_ino, 2721 sctx->cur_inode_gen, valid_path); 2722 if (ret < 0) 2723 goto out; 2724 is_orphan = 1; 2725 } else { 2726 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, 2727 valid_path); 2728 if (ret < 0) 2729 goto out; 2730 } 2731 2732 list_for_each_entry(cur, &sctx->new_refs, list) { 2733 /* 2734 * Check if this new ref would overwrite the first ref of 2735 * another unprocessed inode. If yes, orphanize the 2736 * overwritten inode. If we find an overwritten ref that is 2737 * not the first ref, simply unlink it. 2738 */ 2739 ret = will_overwrite_ref(sctx, cur->dir, cur->dir_gen, 2740 cur->name, cur->name_len, 2741 &ow_inode, &ow_gen); 2742 if (ret < 0) 2743 goto out; 2744 if (ret) { 2745 ret = is_first_ref(sctx, sctx->parent_root, 2746 ow_inode, cur->dir, cur->name, 2747 cur->name_len); 2748 if (ret < 0) 2749 goto out; 2750 if (ret) { 2751 ret = orphanize_inode(sctx, ow_inode, ow_gen, 2752 cur->full_path); 2753 if (ret < 0) 2754 goto out; 2755 } else { 2756 ret = send_unlink(sctx, cur->full_path); 2757 if (ret < 0) 2758 goto out; 2759 } 2760 } 2761 2762 /* 2763 * link/move the ref to the new place. If we have an orphan 2764 * inode, move it and update valid_path. If not, link or move 2765 * it depending on the inode mode. 2766 */ 2767 if (is_orphan && !sctx->cur_inode_first_ref_orphan) { 2768 ret = send_rename(sctx, valid_path, cur->full_path); 2769 if (ret < 0) 2770 goto out; 2771 is_orphan = 0; 2772 ret = fs_path_copy(valid_path, cur->full_path); 2773 if (ret < 0) 2774 goto out; 2775 } else { 2776 if (S_ISDIR(sctx->cur_inode_mode)) { 2777 /* 2778 * Dirs can't be linked, so move it. For moved 2779 * dirs, we always have one new and one deleted 2780 * ref. The deleted ref is ignored later. 2781 */ 2782 ret = send_rename(sctx, valid_path, 2783 cur->full_path); 2784 if (ret < 0) 2785 goto out; 2786 ret = fs_path_copy(valid_path, cur->full_path); 2787 if (ret < 0) 2788 goto out; 2789 } else { 2790 ret = send_link(sctx, cur->full_path, 2791 valid_path); 2792 if (ret < 0) 2793 goto out; 2794 } 2795 } 2796 ret = ulist_add(check_dirs, cur->dir, cur->dir_gen, 2797 GFP_NOFS); 2798 if (ret < 0) 2799 goto out; 2800 } 2801 2802 if (S_ISDIR(sctx->cur_inode_mode) && sctx->cur_inode_deleted) { 2803 /* 2804 * Check if we can already rmdir the directory. If not, 2805 * orphanize it. For every dir item inside that gets deleted 2806 * later, we do this check again and rmdir it then if possible. 2807 * See the use of check_dirs for more details. 2808 */ 2809 ret = can_rmdir(sctx, sctx->cur_ino, sctx->cur_ino); 2810 if (ret < 0) 2811 goto out; 2812 if (ret) { 2813 ret = send_rmdir(sctx, valid_path); 2814 if (ret < 0) 2815 goto out; 2816 } else if (!is_orphan) { 2817 ret = orphanize_inode(sctx, sctx->cur_ino, 2818 sctx->cur_inode_gen, valid_path); 2819 if (ret < 0) 2820 goto out; 2821 is_orphan = 1; 2822 } 2823 2824 list_for_each_entry(cur, &sctx->deleted_refs, list) { 2825 ret = ulist_add(check_dirs, cur->dir, cur->dir_gen, 2826 GFP_NOFS); 2827 if (ret < 0) 2828 goto out; 2829 } 2830 } else if (!S_ISDIR(sctx->cur_inode_mode)) { 2831 /* 2832 * We have a non dir inode. Go through all deleted refs and 2833 * unlink them if they were not already overwritten by other 2834 * inodes. 2835 */ 2836 list_for_each_entry(cur, &sctx->deleted_refs, list) { 2837 ret = did_overwrite_ref(sctx, cur->dir, cur->dir_gen, 2838 sctx->cur_ino, sctx->cur_inode_gen, 2839 cur->name, cur->name_len); 2840 if (ret < 0) 2841 goto out; 2842 if (!ret) { 2843 /* 2844 * In case the inode was moved to a directory 2845 * that was not created yet (see 2846 * __record_new_ref), we can not unlink the ref 2847 * as it will be needed later when the parent 2848 * directory is created, so that we can move in 2849 * the inode to the new dir. 2850 */ 2851 if (!is_orphan && 2852 sctx->cur_inode_first_ref_orphan) { 2853 ret = orphanize_inode(sctx, 2854 sctx->cur_ino, 2855 sctx->cur_inode_gen, 2856 cur->full_path); 2857 if (ret < 0) 2858 goto out; 2859 ret = gen_unique_name(sctx, 2860 sctx->cur_ino, 2861 sctx->cur_inode_gen, 2862 valid_path); 2863 if (ret < 0) 2864 goto out; 2865 is_orphan = 1; 2866 2867 } else { 2868 ret = send_unlink(sctx, cur->full_path); 2869 if (ret < 0) 2870 goto out; 2871 } 2872 } 2873 ret = ulist_add(check_dirs, cur->dir, cur->dir_gen, 2874 GFP_NOFS); 2875 if (ret < 0) 2876 goto out; 2877 } 2878 2879 /* 2880 * If the inode is still orphan, unlink the orphan. This may 2881 * happen when a previous inode did overwrite the first ref 2882 * of this inode and no new refs were added for the current 2883 * inode. 2884 * We can however not delete the orphan in case the inode relies 2885 * in a directory that was not created yet (see 2886 * __record_new_ref) 2887 */ 2888 if (is_orphan && !sctx->cur_inode_first_ref_orphan) { 2889 ret = send_unlink(sctx, valid_path); 2890 if (ret < 0) 2891 goto out; 2892 } 2893 } 2894 2895 /* 2896 * We did collect all parent dirs where cur_inode was once located. We 2897 * now go through all these dirs and check if they are pending for 2898 * deletion and if it's finally possible to perform the rmdir now. 2899 * We also update the inode stats of the parent dirs here. 2900 */ 2901 ULIST_ITER_INIT(&uit); 2902 while ((un = ulist_next(check_dirs, &uit))) { 2903 if (un->val > sctx->cur_ino) 2904 continue; 2905 2906 ret = get_cur_inode_state(sctx, un->val, un->aux); 2907 if (ret < 0) 2908 goto out; 2909 2910 if (ret == inode_state_did_create || 2911 ret == inode_state_no_change) { 2912 /* TODO delayed utimes */ 2913 ret = send_utimes(sctx, un->val, un->aux); 2914 if (ret < 0) 2915 goto out; 2916 } else if (ret == inode_state_did_delete) { 2917 ret = can_rmdir(sctx, un->val, sctx->cur_ino); 2918 if (ret < 0) 2919 goto out; 2920 if (ret) { 2921 ret = get_cur_path(sctx, un->val, un->aux, 2922 valid_path); 2923 if (ret < 0) 2924 goto out; 2925 ret = send_rmdir(sctx, valid_path); 2926 if (ret < 0) 2927 goto out; 2928 } 2929 } 2930 } 2931 2932 /* 2933 * Current inode is now at it's new position, so we must increase 2934 * send_progress 2935 */ 2936 sctx->send_progress = sctx->cur_ino + 1; 2937 2938 /* 2939 * We may have a directory here that has pending refs which could not 2940 * be created before (because the dir did not exist before, see 2941 * __record_new_ref). finish_outoforder_dir will link/move the pending 2942 * refs. 2943 */ 2944 if (S_ISDIR(sctx->cur_inode_mode) && sctx->cur_inode_new) { 2945 ret = finish_outoforder_dir(sctx, sctx->cur_ino, 2946 sctx->cur_inode_gen); 2947 if (ret < 0) 2948 goto out; 2949 } 2950 2951 ret = 0; 2952 2953out: 2954 free_recorded_refs(sctx); 2955 ulist_free(check_dirs); 2956 fs_path_free(sctx, valid_path); 2957 return ret; 2958} 2959 2960static int __record_new_ref(int num, u64 dir, int index, 2961 struct fs_path *name, 2962 void *ctx) 2963{ 2964 int ret = 0; 2965 struct send_ctx *sctx = ctx; 2966 struct fs_path *p; 2967 u64 gen; 2968 2969 p = fs_path_alloc(sctx); 2970 if (!p) 2971 return -ENOMEM; 2972 2973 ret = get_inode_info(sctx->send_root, dir, NULL, &gen, NULL, NULL, 2974 NULL); 2975 if (ret < 0) 2976 goto out; 2977 2978 /* 2979 * The parent may be non-existent at this point in time. This happens 2980 * if the ino of the parent dir is higher then the current ino. In this 2981 * case, we can not process this ref until the parent dir is finally 2982 * created. If we reach the parent dir later, process_recorded_refs 2983 * will go through all dir items and process the refs that could not be 2984 * processed before. In case this is the first ref, we set 2985 * cur_inode_first_ref_orphan to 1 to inform process_recorded_refs to 2986 * keep an orphan of the inode so that it later can be used for 2987 * link/move 2988 */ 2989 ret = is_inode_existent(sctx, dir, gen); 2990 if (ret < 0) 2991 goto out; 2992 if (!ret) { 2993 ret = is_first_ref(sctx, sctx->send_root, sctx->cur_ino, dir, 2994 name->start, fs_path_len(name)); 2995 if (ret < 0) 2996 goto out; 2997 if (ret) 2998 sctx->cur_inode_first_ref_orphan = 1; 2999 ret = 0; 3000 goto out; 3001 } 3002 3003 ret = get_cur_path(sctx, dir, gen, p); 3004 if (ret < 0) 3005 goto out; 3006 ret = fs_path_add_path(p, name); 3007 if (ret < 0) 3008 goto out; 3009 3010 ret = record_ref(&sctx->new_refs, dir, gen, p); 3011 3012out: 3013 if (ret) 3014 fs_path_free(sctx, p); 3015 return ret; 3016} 3017 3018static int __record_deleted_ref(int num, u64 dir, int index, 3019 struct fs_path *name, 3020 void *ctx) 3021{ 3022 int ret = 0; 3023 struct send_ctx *sctx = ctx; 3024 struct fs_path *p; 3025 u64 gen; 3026 3027 p = fs_path_alloc(sctx); 3028 if (!p) 3029 return -ENOMEM; 3030 3031 ret = get_inode_info(sctx->parent_root, dir, NULL, &gen, NULL, NULL, 3032 NULL); 3033 if (ret < 0) 3034 goto out; 3035 3036 ret = get_cur_path(sctx, dir, gen, p); 3037 if (ret < 0) 3038 goto out; 3039 ret = fs_path_add_path(p, name); 3040 if (ret < 0) 3041 goto out; 3042 3043 ret = record_ref(&sctx->deleted_refs, dir, gen, p); 3044 3045out: 3046 if (ret) 3047 fs_path_free(sctx, p); 3048 return ret; 3049} 3050 3051static int record_new_ref(struct send_ctx *sctx) 3052{ 3053 int ret; 3054 3055 ret = iterate_inode_ref(sctx, sctx->send_root, sctx->left_path, 3056 sctx->cmp_key, 0, __record_new_ref, sctx); 3057 if (ret < 0) 3058 goto out; 3059 ret = 0; 3060 3061out: 3062 return ret; 3063} 3064 3065static int record_deleted_ref(struct send_ctx *sctx) 3066{ 3067 int ret; 3068 3069 ret = iterate_inode_ref(sctx, sctx->parent_root, sctx->right_path, 3070 sctx->cmp_key, 0, __record_deleted_ref, sctx); 3071 if (ret < 0) 3072 goto out; 3073 ret = 0; 3074 3075out: 3076 return ret; 3077} 3078 3079struct find_ref_ctx { 3080 u64 dir; 3081 struct fs_path *name; 3082 int found_idx; 3083}; 3084 3085static int __find_iref(int num, u64 dir, int index, 3086 struct fs_path *name, 3087 void *ctx_) 3088{ 3089 struct find_ref_ctx *ctx = ctx_; 3090 3091 if (dir == ctx->dir && fs_path_len(name) == fs_path_len(ctx->name) && 3092 strncmp(name->start, ctx->name->start, fs_path_len(name)) == 0) { 3093 ctx->found_idx = num; 3094 return 1; 3095 } 3096 return 0; 3097} 3098 3099static int find_iref(struct send_ctx *sctx, 3100 struct btrfs_root *root, 3101 struct btrfs_path *path, 3102 struct btrfs_key *key, 3103 u64 dir, struct fs_path *name) 3104{ 3105 int ret; 3106 struct find_ref_ctx ctx; 3107 3108 ctx.dir = dir; 3109 ctx.name = name; 3110 ctx.found_idx = -1; 3111 3112 ret = iterate_inode_ref(sctx, root, path, key, 0, __find_iref, &ctx); 3113 if (ret < 0) 3114 return ret; 3115 3116 if (ctx.found_idx == -1) 3117 return -ENOENT; 3118 3119 return ctx.found_idx; 3120} 3121 3122static int __record_changed_new_ref(int num, u64 dir, int index, 3123 struct fs_path *name, 3124 void *ctx) 3125{ 3126 int ret; 3127 struct send_ctx *sctx = ctx; 3128 3129 ret = find_iref(sctx, sctx->parent_root, sctx->right_path, 3130 sctx->cmp_key, dir, name); 3131 if (ret == -ENOENT) 3132 ret = __record_new_ref(num, dir, index, name, sctx); 3133 else if (ret > 0) 3134 ret = 0; 3135 3136 return ret; 3137} 3138 3139static int __record_changed_deleted_ref(int num, u64 dir, int index, 3140 struct fs_path *name, 3141 void *ctx) 3142{ 3143 int ret; 3144 struct send_ctx *sctx = ctx; 3145 3146 ret = find_iref(sctx, sctx->send_root, sctx->left_path, sctx->cmp_key, 3147 dir, name); 3148 if (ret == -ENOENT) 3149 ret = __record_deleted_ref(num, dir, index, name, sctx); 3150 else if (ret > 0) 3151 ret = 0; 3152 3153 return ret; 3154} 3155 3156static int record_changed_ref(struct send_ctx *sctx) 3157{ 3158 int ret = 0; 3159 3160 ret = iterate_inode_ref(sctx, sctx->send_root, sctx->left_path, 3161 sctx->cmp_key, 0, __record_changed_new_ref, sctx); 3162 if (ret < 0) 3163 goto out; 3164 ret = iterate_inode_ref(sctx, sctx->parent_root, sctx->right_path, 3165 sctx->cmp_key, 0, __record_changed_deleted_ref, sctx); 3166 if (ret < 0) 3167 goto out; 3168 ret = 0; 3169 3170out: 3171 return ret; 3172} 3173 3174/* 3175 * Record and process all refs at once. Needed when an inode changes the 3176 * generation number, which means that it was deleted and recreated. 3177 */ 3178static int process_all_refs(struct send_ctx *sctx, 3179 enum btrfs_compare_tree_result cmd) 3180{ 3181 int ret; 3182 struct btrfs_root *root; 3183 struct btrfs_path *path; 3184 struct btrfs_key key; 3185 struct btrfs_key found_key; 3186 struct extent_buffer *eb; 3187 int slot; 3188 iterate_inode_ref_t cb; 3189 3190 path = alloc_path_for_send(); 3191 if (!path) 3192 return -ENOMEM; 3193 3194 if (cmd == BTRFS_COMPARE_TREE_NEW) { 3195 root = sctx->send_root; 3196 cb = __record_new_ref; 3197 } else if (cmd == BTRFS_COMPARE_TREE_DELETED) { 3198 root = sctx->parent_root; 3199 cb = __record_deleted_ref; 3200 } else { 3201 BUG(); 3202 } 3203 3204 key.objectid = sctx->cmp_key->objectid; 3205 key.type = BTRFS_INODE_REF_KEY; 3206 key.offset = 0; 3207 while (1) { 3208 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 3209 if (ret < 0) { 3210 btrfs_release_path(path); 3211 goto out; 3212 } 3213 if (ret) { 3214 btrfs_release_path(path); 3215 break; 3216 } 3217 3218 eb = path->nodes[0]; 3219 slot = path->slots[0]; 3220 btrfs_item_key_to_cpu(eb, &found_key, slot); 3221 3222 if (found_key.objectid != key.objectid || 3223 found_key.type != key.type) { 3224 btrfs_release_path(path); 3225 break; 3226 } 3227 3228 ret = iterate_inode_ref(sctx, sctx->parent_root, path, 3229 &found_key, 0, cb, sctx); 3230 btrfs_release_path(path); 3231 if (ret < 0) 3232 goto out; 3233 3234 key.offset = found_key.offset + 1; 3235 } 3236 3237 ret = process_recorded_refs(sctx); 3238 3239out: 3240 btrfs_free_path(path); 3241 return ret; 3242} 3243 3244static int send_set_xattr(struct send_ctx *sctx, 3245 struct fs_path *path, 3246 const char *name, int name_len, 3247 const char *data, int data_len) 3248{ 3249 int ret = 0; 3250 3251 ret = begin_cmd(sctx, BTRFS_SEND_C_SET_XATTR); 3252 if (ret < 0) 3253 goto out; 3254 3255 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 3256 TLV_PUT_STRING(sctx, BTRFS_SEND_A_XATTR_NAME, name, name_len); 3257 TLV_PUT(sctx, BTRFS_SEND_A_XATTR_DATA, data, data_len); 3258 3259 ret = send_cmd(sctx); 3260 3261tlv_put_failure: 3262out: 3263 return ret; 3264} 3265 3266static int send_remove_xattr(struct send_ctx *sctx, 3267 struct fs_path *path, 3268 const char *name, int name_len) 3269{ 3270 int ret = 0; 3271 3272 ret = begin_cmd(sctx, BTRFS_SEND_C_REMOVE_XATTR); 3273 if (ret < 0) 3274 goto out; 3275 3276 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 3277 TLV_PUT_STRING(sctx, BTRFS_SEND_A_XATTR_NAME, name, name_len); 3278 3279 ret = send_cmd(sctx); 3280 3281tlv_put_failure: 3282out: 3283 return ret; 3284} 3285 3286static int __process_new_xattr(int num, struct btrfs_key *di_key, 3287 const char *name, int name_len, 3288 const char *data, int data_len, 3289 u8 type, void *ctx) 3290{ 3291 int ret; 3292 struct send_ctx *sctx = ctx; 3293 struct fs_path *p; 3294 posix_acl_xattr_header dummy_acl; 3295 3296 p = fs_path_alloc(sctx); 3297 if (!p) 3298 return -ENOMEM; 3299 3300 /* 3301 * This hack is needed because empty acl's are stored as zero byte 3302 * data in xattrs. Problem with that is, that receiving these zero byte 3303 * acl's will fail later. To fix this, we send a dummy acl list that 3304 * only contains the version number and no entries. 3305 */ 3306 if (!strncmp(name, XATTR_NAME_POSIX_ACL_ACCESS, name_len) || 3307 !strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, name_len)) { 3308 if (data_len == 0) { 3309 dummy_acl.a_version = 3310 cpu_to_le32(POSIX_ACL_XATTR_VERSION); 3311 data = (char *)&dummy_acl; 3312 data_len = sizeof(dummy_acl); 3313 } 3314 } 3315 3316 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 3317 if (ret < 0) 3318 goto out; 3319 3320 ret = send_set_xattr(sctx, p, name, name_len, data, data_len); 3321 3322out: 3323 fs_path_free(sctx, p); 3324 return ret; 3325} 3326 3327static int __process_deleted_xattr(int num, struct btrfs_key *di_key, 3328 const char *name, int name_len, 3329 const char *data, int data_len, 3330 u8 type, void *ctx) 3331{ 3332 int ret; 3333 struct send_ctx *sctx = ctx; 3334 struct fs_path *p; 3335 3336 p = fs_path_alloc(sctx); 3337 if (!p) 3338 return -ENOMEM; 3339 3340 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 3341 if (ret < 0) 3342 goto out; 3343 3344 ret = send_remove_xattr(sctx, p, name, name_len); 3345 3346out: 3347 fs_path_free(sctx, p); 3348 return ret; 3349} 3350 3351static int process_new_xattr(struct send_ctx *sctx) 3352{ 3353 int ret = 0; 3354 3355 ret = iterate_dir_item(sctx, sctx->send_root, sctx->left_path, 3356 sctx->cmp_key, __process_new_xattr, sctx); 3357 3358 return ret; 3359} 3360 3361static int process_deleted_xattr(struct send_ctx *sctx) 3362{ 3363 int ret; 3364 3365 ret = iterate_dir_item(sctx, sctx->parent_root, sctx->right_path, 3366 sctx->cmp_key, __process_deleted_xattr, sctx); 3367 3368 return ret; 3369} 3370 3371struct find_xattr_ctx { 3372 const char *name; 3373 int name_len; 3374 int found_idx; 3375 char *found_data; 3376 int found_data_len; 3377}; 3378 3379static int __find_xattr(int num, struct btrfs_key *di_key, 3380 const char *name, int name_len, 3381 const char *data, int data_len, 3382 u8 type, void *vctx) 3383{ 3384 struct find_xattr_ctx *ctx = vctx; 3385 3386 if (name_len == ctx->name_len && 3387 strncmp(name, ctx->name, name_len) == 0) { 3388 ctx->found_idx = num; 3389 ctx->found_data_len = data_len; 3390 ctx->found_data = kmalloc(data_len, GFP_NOFS); 3391 if (!ctx->found_data) 3392 return -ENOMEM; 3393 memcpy(ctx->found_data, data, data_len); 3394 return 1; 3395 } 3396 return 0; 3397} 3398 3399static int find_xattr(struct send_ctx *sctx, 3400 struct btrfs_root *root, 3401 struct btrfs_path *path, 3402 struct btrfs_key *key, 3403 const char *name, int name_len, 3404 char **data, int *data_len) 3405{ 3406 int ret; 3407 struct find_xattr_ctx ctx; 3408 3409 ctx.name = name; 3410 ctx.name_len = name_len; 3411 ctx.found_idx = -1; 3412 ctx.found_data = NULL; 3413 ctx.found_data_len = 0; 3414 3415 ret = iterate_dir_item(sctx, root, path, key, __find_xattr, &ctx); 3416 if (ret < 0) 3417 return ret; 3418 3419 if (ctx.found_idx == -1) 3420 return -ENOENT; 3421 if (data) { 3422 *data = ctx.found_data; 3423 *data_len = ctx.found_data_len; 3424 } else { 3425 kfree(ctx.found_data); 3426 } 3427 return ctx.found_idx; 3428} 3429 3430 3431static int __process_changed_new_xattr(int num, struct btrfs_key *di_key, 3432 const char *name, int name_len, 3433 const char *data, int data_len, 3434 u8 type, void *ctx) 3435{ 3436 int ret; 3437 struct send_ctx *sctx = ctx; 3438 char *found_data = NULL; 3439 int found_data_len = 0; 3440 struct fs_path *p = NULL; 3441 3442 ret = find_xattr(sctx, sctx->parent_root, sctx->right_path, 3443 sctx->cmp_key, name, name_len, &found_data, 3444 &found_data_len); 3445 if (ret == -ENOENT) { 3446 ret = __process_new_xattr(num, di_key, name, name_len, data, 3447 data_len, type, ctx); 3448 } else if (ret >= 0) { 3449 if (data_len != found_data_len || 3450 memcmp(data, found_data, data_len)) { 3451 ret = __process_new_xattr(num, di_key, name, name_len, 3452 data, data_len, type, ctx); 3453 } else { 3454 ret = 0; 3455 } 3456 } 3457 3458 kfree(found_data); 3459 fs_path_free(sctx, p); 3460 return ret; 3461} 3462 3463static int __process_changed_deleted_xattr(int num, struct btrfs_key *di_key, 3464 const char *name, int name_len, 3465 const char *data, int data_len, 3466 u8 type, void *ctx) 3467{ 3468 int ret; 3469 struct send_ctx *sctx = ctx; 3470 3471 ret = find_xattr(sctx, sctx->send_root, sctx->left_path, sctx->cmp_key, 3472 name, name_len, NULL, NULL); 3473 if (ret == -ENOENT) 3474 ret = __process_deleted_xattr(num, di_key, name, name_len, data, 3475 data_len, type, ctx); 3476 else if (ret >= 0) 3477 ret = 0; 3478 3479 return ret; 3480} 3481 3482static int process_changed_xattr(struct send_ctx *sctx) 3483{ 3484 int ret = 0; 3485 3486 ret = iterate_dir_item(sctx, sctx->send_root, sctx->left_path, 3487 sctx->cmp_key, __process_changed_new_xattr, sctx); 3488 if (ret < 0) 3489 goto out; 3490 ret = iterate_dir_item(sctx, sctx->parent_root, sctx->right_path, 3491 sctx->cmp_key, __process_changed_deleted_xattr, sctx); 3492 3493out: 3494 return ret; 3495} 3496 3497static int process_all_new_xattrs(struct send_ctx *sctx) 3498{ 3499 int ret; 3500 struct btrfs_root *root; 3501 struct btrfs_path *path; 3502 struct btrfs_key key; 3503 struct btrfs_key found_key; 3504 struct extent_buffer *eb; 3505 int slot; 3506 3507 path = alloc_path_for_send(); 3508 if (!path) 3509 return -ENOMEM; 3510 3511 root = sctx->send_root; 3512 3513 key.objectid = sctx->cmp_key->objectid; 3514 key.type = BTRFS_XATTR_ITEM_KEY; 3515 key.offset = 0; 3516 while (1) { 3517 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 3518 if (ret < 0) 3519 goto out; 3520 if (ret) { 3521 ret = 0; 3522 goto out; 3523 } 3524 3525 eb = path->nodes[0]; 3526 slot = path->slots[0]; 3527 btrfs_item_key_to_cpu(eb, &found_key, slot); 3528 3529 if (found_key.objectid != key.objectid || 3530 found_key.type != key.type) { 3531 ret = 0; 3532 goto out; 3533 } 3534 3535 ret = iterate_dir_item(sctx, root, path, &found_key, 3536 __process_new_xattr, sctx); 3537 if (ret < 0) 3538 goto out; 3539 3540 btrfs_release_path(path); 3541 key.offset = found_key.offset + 1; 3542 } 3543 3544out: 3545 btrfs_free_path(path); 3546 return ret; 3547} 3548 3549/* 3550 * Read some bytes from the current inode/file and send a write command to 3551 * user space. 3552 */ 3553static int send_write(struct send_ctx *sctx, u64 offset, u32 len) 3554{ 3555 int ret = 0; 3556 struct fs_path *p; 3557 loff_t pos = offset; 3558 int readed = 0; 3559 mm_segment_t old_fs; 3560 3561 p = fs_path_alloc(sctx); 3562 if (!p) 3563 return -ENOMEM; 3564 3565 /* 3566 * vfs normally only accepts user space buffers for security reasons. 3567 * we only read from the file and also only provide the read_buf buffer 3568 * to vfs. As this buffer does not come from a user space call, it's 3569 * ok to temporary allow kernel space buffers. 3570 */ 3571 old_fs = get_fs(); 3572 set_fs(KERNEL_DS); 3573 3574verbose_printk("btrfs: send_write offset=%llu, len=%d\n", offset, len); 3575 3576 ret = open_cur_inode_file(sctx); 3577 if (ret < 0) 3578 goto out; 3579 3580 ret = vfs_read(sctx->cur_inode_filp, sctx->read_buf, len, &pos); 3581 if (ret < 0) 3582 goto out; 3583 readed = ret; 3584 if (!readed) 3585 goto out; 3586 3587 ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE); 3588 if (ret < 0) 3589 goto out; 3590 3591 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 3592 if (ret < 0) 3593 goto out; 3594 3595 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 3596 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 3597 TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, readed); 3598 3599 ret = send_cmd(sctx); 3600 3601tlv_put_failure: 3602out: 3603 fs_path_free(sctx, p); 3604 set_fs(old_fs); 3605 if (ret < 0) 3606 return ret; 3607 return readed; 3608} 3609 3610/* 3611 * Send a clone command to user space. 3612 */ 3613static int send_clone(struct send_ctx *sctx, 3614 u64 offset, u32 len, 3615 struct clone_root *clone_root) 3616{ 3617 int ret = 0; 3618 struct btrfs_root *clone_root2 = clone_root->root; 3619 struct fs_path *p; 3620 u64 gen; 3621 3622verbose_printk("btrfs: send_clone offset=%llu, len=%d, clone_root=%llu, " 3623 "clone_inode=%llu, clone_offset=%llu\n", offset, len, 3624 clone_root->root->objectid, clone_root->ino, 3625 clone_root->offset); 3626 3627 p = fs_path_alloc(sctx); 3628 if (!p) 3629 return -ENOMEM; 3630 3631 ret = begin_cmd(sctx, BTRFS_SEND_C_CLONE); 3632 if (ret < 0) 3633 goto out; 3634 3635 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 3636 if (ret < 0) 3637 goto out; 3638 3639 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 3640 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_LEN, len); 3641 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 3642 3643 if (clone_root2 == sctx->send_root) { 3644 ret = get_inode_info(sctx->send_root, clone_root->ino, NULL, 3645 &gen, NULL, NULL, NULL); 3646 if (ret < 0) 3647 goto out; 3648 ret = get_cur_path(sctx, clone_root->ino, gen, p); 3649 } else { 3650 ret = get_inode_path(sctx, clone_root2, clone_root->ino, p); 3651 } 3652 if (ret < 0) 3653 goto out; 3654 3655 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 3656 clone_root2->root_item.uuid); 3657 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID, 3658 clone_root2->root_item.ctransid); 3659 TLV_PUT_PATH(sctx, BTRFS_SEND_A_CLONE_PATH, p); 3660 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_OFFSET, 3661 clone_root->offset); 3662 3663 ret = send_cmd(sctx); 3664 3665tlv_put_failure: 3666out: 3667 fs_path_free(sctx, p); 3668 return ret; 3669} 3670 3671static int send_write_or_clone(struct send_ctx *sctx, 3672 struct btrfs_path *path, 3673 struct btrfs_key *key, 3674 struct clone_root *clone_root) 3675{ 3676 int ret = 0; 3677 struct btrfs_file_extent_item *ei; 3678 u64 offset = key->offset; 3679 u64 pos = 0; 3680 u64 len; 3681 u32 l; 3682 u8 type; 3683 3684 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 3685 struct btrfs_file_extent_item); 3686 type = btrfs_file_extent_type(path->nodes[0], ei); 3687 if (type == BTRFS_FILE_EXTENT_INLINE) 3688 len = btrfs_file_extent_inline_len(path->nodes[0], ei); 3689 else 3690 len = btrfs_file_extent_num_bytes(path->nodes[0], ei); 3691 3692 if (offset + len > sctx->cur_inode_size) 3693 len = sctx->cur_inode_size - offset; 3694 if (len == 0) { 3695 ret = 0; 3696 goto out; 3697 } 3698 3699 if (!clone_root) { 3700 while (pos < len) { 3701 l = len - pos; 3702 if (l > BTRFS_SEND_READ_SIZE) 3703 l = BTRFS_SEND_READ_SIZE; 3704 ret = send_write(sctx, pos + offset, l); 3705 if (ret < 0) 3706 goto out; 3707 if (!ret) 3708 break; 3709 pos += ret; 3710 } 3711 ret = 0; 3712 } else { 3713 ret = send_clone(sctx, offset, len, clone_root); 3714 } 3715 3716out: 3717 return ret; 3718} 3719 3720static int is_extent_unchanged(struct send_ctx *sctx, 3721 struct btrfs_path *left_path, 3722 struct btrfs_key *ekey) 3723{ 3724 int ret = 0; 3725 struct btrfs_key key; 3726 struct btrfs_path *path = NULL; 3727 struct extent_buffer *eb; 3728 int slot; 3729 struct btrfs_key found_key; 3730 struct btrfs_file_extent_item *ei; 3731 u64 left_disknr; 3732 u64 right_disknr; 3733 u64 left_offset; 3734 u64 right_offset; 3735 u64 left_offset_fixed; 3736 u64 left_len; 3737 u64 right_len; 3738 u8 left_type; 3739 u8 right_type; 3740 3741 path = alloc_path_for_send(); 3742 if (!path) 3743 return -ENOMEM; 3744 3745 eb = left_path->nodes[0]; 3746 slot = left_path->slots[0]; 3747 3748 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 3749 left_type = btrfs_file_extent_type(eb, ei); 3750 left_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 3751 left_len = btrfs_file_extent_num_bytes(eb, ei); 3752 left_offset = btrfs_file_extent_offset(eb, ei); 3753 3754 if (left_type != BTRFS_FILE_EXTENT_REG) { 3755 ret = 0; 3756 goto out; 3757 } 3758 3759 /* 3760 * Following comments will refer to these graphics. L is the left 3761 * extents which we are checking at the moment. 1-8 are the right 3762 * extents that we iterate. 3763 * 3764 * |-----L-----| 3765 * |-1-|-2a-|-3-|-4-|-5-|-6-| 3766 * 3767 * |-----L-----| 3768 * |--1--|-2b-|...(same as above) 3769 * 3770 * Alternative situation. Happens on files where extents got split. 3771 * |-----L-----| 3772 * |-----------7-----------|-6-| 3773 * 3774 * Alternative situation. Happens on files which got larger. 3775 * |-----L-----| 3776 * |-8-| 3777 * Nothing follows after 8. 3778 */ 3779 3780 key.objectid = ekey->objectid; 3781 key.type = BTRFS_EXTENT_DATA_KEY; 3782 key.offset = ekey->offset; 3783 ret = btrfs_search_slot_for_read(sctx->parent_root, &key, path, 0, 0); 3784 if (ret < 0) 3785 goto out; 3786 if (ret) { 3787 ret = 0; 3788 goto out; 3789 } 3790 3791 /* 3792 * Handle special case where the right side has no extents at all. 3793 */ 3794 eb = path->nodes[0]; 3795 slot = path->slots[0]; 3796 btrfs_item_key_to_cpu(eb, &found_key, slot); 3797 if (found_key.objectid != key.objectid || 3798 found_key.type != key.type) { 3799 ret = 0; 3800 goto out; 3801 } 3802 3803 /* 3804 * We're now on 2a, 2b or 7. 3805 */ 3806 key = found_key; 3807 while (key.offset < ekey->offset + left_len) { 3808 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 3809 right_type = btrfs_file_extent_type(eb, ei); 3810 right_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 3811 right_len = btrfs_file_extent_num_bytes(eb, ei); 3812 right_offset = btrfs_file_extent_offset(eb, ei); 3813 3814 if (right_type != BTRFS_FILE_EXTENT_REG) { 3815 ret = 0; 3816 goto out; 3817 } 3818 3819 /* 3820 * Are we at extent 8? If yes, we know the extent is changed. 3821 * This may only happen on the first iteration. 3822 */ 3823 if (found_key.offset + right_len < ekey->offset) { 3824 ret = 0; 3825 goto out; 3826 } 3827 3828 left_offset_fixed = left_offset; 3829 if (key.offset < ekey->offset) { 3830 /* Fix the right offset for 2a and 7. */ 3831 right_offset += ekey->offset - key.offset; 3832 } else { 3833 /* Fix the left offset for all behind 2a and 2b */ 3834 left_offset_fixed += key.offset - ekey->offset; 3835 } 3836 3837 /* 3838 * Check if we have the same extent. 3839 */ 3840 if (left_disknr + left_offset_fixed != 3841 right_disknr + right_offset) { 3842 ret = 0; 3843 goto out; 3844 } 3845 3846 /* 3847 * Go to the next extent. 3848 */ 3849 ret = btrfs_next_item(sctx->parent_root, path); 3850 if (ret < 0) 3851 goto out; 3852 if (!ret) { 3853 eb = path->nodes[0]; 3854 slot = path->slots[0]; 3855 btrfs_item_key_to_cpu(eb, &found_key, slot); 3856 } 3857 if (ret || found_key.objectid != key.objectid || 3858 found_key.type != key.type) { 3859 key.offset += right_len; 3860 break; 3861 } else { 3862 if (found_key.offset != key.offset + right_len) { 3863 /* Should really not happen */ 3864 ret = -EIO; 3865 goto out; 3866 } 3867 } 3868 key = found_key; 3869 } 3870 3871 /* 3872 * We're now behind the left extent (treat as unchanged) or at the end 3873 * of the right side (treat as changed). 3874 */ 3875 if (key.offset >= ekey->offset + left_len) 3876 ret = 1; 3877 else 3878 ret = 0; 3879 3880 3881out: 3882 btrfs_free_path(path); 3883 return ret; 3884} 3885 3886static int process_extent(struct send_ctx *sctx, 3887 struct btrfs_path *path, 3888 struct btrfs_key *key) 3889{ 3890 int ret = 0; 3891 struct clone_root *found_clone = NULL; 3892 3893 if (S_ISLNK(sctx->cur_inode_mode)) 3894 return 0; 3895 3896 if (sctx->parent_root && !sctx->cur_inode_new) { 3897 ret = is_extent_unchanged(sctx, path, key); 3898 if (ret < 0) 3899 goto out; 3900 if (ret) { 3901 ret = 0; 3902 goto out; 3903 } 3904 } 3905 3906 ret = find_extent_clone(sctx, path, key->objectid, key->offset, 3907 sctx->cur_inode_size, &found_clone); 3908 if (ret != -ENOENT && ret < 0) 3909 goto out; 3910 3911 ret = send_write_or_clone(sctx, path, key, found_clone); 3912 3913out: 3914 return ret; 3915} 3916 3917static int process_all_extents(struct send_ctx *sctx) 3918{ 3919 int ret; 3920 struct btrfs_root *root; 3921 struct btrfs_path *path; 3922 struct btrfs_key key; 3923 struct btrfs_key found_key; 3924 struct extent_buffer *eb; 3925 int slot; 3926 3927 root = sctx->send_root; 3928 path = alloc_path_for_send(); 3929 if (!path) 3930 return -ENOMEM; 3931 3932 key.objectid = sctx->cmp_key->objectid; 3933 key.type = BTRFS_EXTENT_DATA_KEY; 3934 key.offset = 0; 3935 while (1) { 3936 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 3937 if (ret < 0) 3938 goto out; 3939 if (ret) { 3940 ret = 0; 3941 goto out; 3942 } 3943 3944 eb = path->nodes[0]; 3945 slot = path->slots[0]; 3946 btrfs_item_key_to_cpu(eb, &found_key, slot); 3947 3948 if (found_key.objectid != key.objectid || 3949 found_key.type != key.type) { 3950 ret = 0; 3951 goto out; 3952 } 3953 3954 ret = process_extent(sctx, path, &found_key); 3955 if (ret < 0) 3956 goto out; 3957 3958 btrfs_release_path(path); 3959 key.offset = found_key.offset + 1; 3960 } 3961 3962out: 3963 btrfs_free_path(path); 3964 return ret; 3965} 3966 3967static int process_recorded_refs_if_needed(struct send_ctx *sctx, int at_end) 3968{ 3969 int ret = 0; 3970 3971 if (sctx->cur_ino == 0) 3972 goto out; 3973 if (!at_end && sctx->cur_ino == sctx->cmp_key->objectid && 3974 sctx->cmp_key->type <= BTRFS_INODE_REF_KEY) 3975 goto out; 3976 if (list_empty(&sctx->new_refs) && list_empty(&sctx->deleted_refs)) 3977 goto out; 3978 3979 ret = process_recorded_refs(sctx); 3980 3981out: 3982 return ret; 3983} 3984 3985static int finish_inode_if_needed(struct send_ctx *sctx, int at_end) 3986{ 3987 int ret = 0; 3988 u64 left_mode; 3989 u64 left_uid; 3990 u64 left_gid; 3991 u64 right_mode; 3992 u64 right_uid; 3993 u64 right_gid; 3994 int need_chmod = 0; 3995 int need_chown = 0; 3996 3997 ret = process_recorded_refs_if_needed(sctx, at_end); 3998 if (ret < 0) 3999 goto out; 4000 4001 if (sctx->cur_ino == 0 || sctx->cur_inode_deleted) 4002 goto out; 4003 if (!at_end && sctx->cmp_key->objectid == sctx->cur_ino) 4004 goto out; 4005 4006 ret = get_inode_info(sctx->send_root, sctx->cur_ino, NULL, NULL, 4007 &left_mode, &left_uid, &left_gid); 4008 if (ret < 0) 4009 goto out; 4010 4011 if (!S_ISLNK(sctx->cur_inode_mode)) { 4012 if (!sctx->parent_root || sctx->cur_inode_new) { 4013 need_chmod = 1; 4014 need_chown = 1; 4015 } else { 4016 ret = get_inode_info(sctx->parent_root, sctx->cur_ino, 4017 NULL, NULL, &right_mode, &right_uid, 4018 &right_gid); 4019 if (ret < 0) 4020 goto out; 4021 4022 if (left_uid != right_uid || left_gid != right_gid) 4023 need_chown = 1; 4024 if (left_mode != right_mode) 4025 need_chmod = 1; 4026 } 4027 } 4028 4029 if (S_ISREG(sctx->cur_inode_mode)) { 4030 ret = send_truncate(sctx, sctx->cur_ino, sctx->cur_inode_gen, 4031 sctx->cur_inode_size); 4032 if (ret < 0) 4033 goto out; 4034 } 4035 4036 if (need_chown) { 4037 ret = send_chown(sctx, sctx->cur_ino, sctx->cur_inode_gen, 4038 left_uid, left_gid); 4039 if (ret < 0) 4040 goto out; 4041 } 4042 if (need_chmod) { 4043 ret = send_chmod(sctx, sctx->cur_ino, sctx->cur_inode_gen, 4044 left_mode); 4045 if (ret < 0) 4046 goto out; 4047 } 4048 4049 /* 4050 * Need to send that every time, no matter if it actually changed 4051 * between the two trees as we have done changes to the inode before. 4052 */ 4053 ret = send_utimes(sctx, sctx->cur_ino, sctx->cur_inode_gen); 4054 if (ret < 0) 4055 goto out; 4056 4057out: 4058 return ret; 4059} 4060 4061static int changed_inode(struct send_ctx *sctx, 4062 enum btrfs_compare_tree_result result) 4063{ 4064 int ret = 0; 4065 struct btrfs_key *key = sctx->cmp_key; 4066 struct btrfs_inode_item *left_ii = NULL; 4067 struct btrfs_inode_item *right_ii = NULL; 4068 u64 left_gen = 0; 4069 u64 right_gen = 0; 4070 4071 ret = close_cur_inode_file(sctx); 4072 if (ret < 0) 4073 goto out; 4074 4075 sctx->cur_ino = key->objectid; 4076 sctx->cur_inode_new_gen = 0; 4077 sctx->cur_inode_first_ref_orphan = 0; 4078 sctx->send_progress = sctx->cur_ino; 4079 4080 if (result == BTRFS_COMPARE_TREE_NEW || 4081 result == BTRFS_COMPARE_TREE_CHANGED) { 4082 left_ii = btrfs_item_ptr(sctx->left_path->nodes[0], 4083 sctx->left_path->slots[0], 4084 struct btrfs_inode_item); 4085 left_gen = btrfs_inode_generation(sctx->left_path->nodes[0], 4086 left_ii); 4087 } else { 4088 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 4089 sctx->right_path->slots[0], 4090 struct btrfs_inode_item); 4091 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 4092 right_ii); 4093 } 4094 if (result == BTRFS_COMPARE_TREE_CHANGED) { 4095 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 4096 sctx->right_path->slots[0], 4097 struct btrfs_inode_item); 4098 4099 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 4100 right_ii); 4101 if (left_gen != right_gen) 4102 sctx->cur_inode_new_gen = 1; 4103 } 4104 4105 if (result == BTRFS_COMPARE_TREE_NEW) { 4106 sctx->cur_inode_gen = left_gen; 4107 sctx->cur_inode_new = 1; 4108 sctx->cur_inode_deleted = 0; 4109 sctx->cur_inode_size = btrfs_inode_size( 4110 sctx->left_path->nodes[0], left_ii); 4111 sctx->cur_inode_mode = btrfs_inode_mode( 4112 sctx->left_path->nodes[0], left_ii); 4113 if (sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) 4114 ret = send_create_inode(sctx, sctx->left_path, 4115 sctx->cmp_key); 4116 } else if (result == BTRFS_COMPARE_TREE_DELETED) { 4117 sctx->cur_inode_gen = right_gen; 4118 sctx->cur_inode_new = 0; 4119 sctx->cur_inode_deleted = 1; 4120 sctx->cur_inode_size = btrfs_inode_size( 4121 sctx->right_path->nodes[0], right_ii); 4122 sctx->cur_inode_mode = btrfs_inode_mode( 4123 sctx->right_path->nodes[0], right_ii); 4124 } else if (result == BTRFS_COMPARE_TREE_CHANGED) { 4125 if (sctx->cur_inode_new_gen) { 4126 sctx->cur_inode_gen = right_gen; 4127 sctx->cur_inode_new = 0; 4128 sctx->cur_inode_deleted = 1; 4129 sctx->cur_inode_size = btrfs_inode_size( 4130 sctx->right_path->nodes[0], right_ii); 4131 sctx->cur_inode_mode = btrfs_inode_mode( 4132 sctx->right_path->nodes[0], right_ii); 4133 ret = process_all_refs(sctx, 4134 BTRFS_COMPARE_TREE_DELETED); 4135 if (ret < 0) 4136 goto out; 4137 4138 sctx->cur_inode_gen = left_gen; 4139 sctx->cur_inode_new = 1; 4140 sctx->cur_inode_deleted = 0; 4141 sctx->cur_inode_size = btrfs_inode_size( 4142 sctx->left_path->nodes[0], left_ii); 4143 sctx->cur_inode_mode = btrfs_inode_mode( 4144 sctx->left_path->nodes[0], left_ii); 4145 ret = send_create_inode(sctx, sctx->left_path, 4146 sctx->cmp_key); 4147 if (ret < 0) 4148 goto out; 4149 4150 ret = process_all_refs(sctx, BTRFS_COMPARE_TREE_NEW); 4151 if (ret < 0) 4152 goto out; 4153 ret = process_all_extents(sctx); 4154 if (ret < 0) 4155 goto out; 4156 ret = process_all_new_xattrs(sctx); 4157 if (ret < 0) 4158 goto out; 4159 } else { 4160 sctx->cur_inode_gen = left_gen; 4161 sctx->cur_inode_new = 0; 4162 sctx->cur_inode_new_gen = 0; 4163 sctx->cur_inode_deleted = 0; 4164 sctx->cur_inode_size = btrfs_inode_size( 4165 sctx->left_path->nodes[0], left_ii); 4166 sctx->cur_inode_mode = btrfs_inode_mode( 4167 sctx->left_path->nodes[0], left_ii); 4168 } 4169 } 4170 4171out: 4172 return ret; 4173} 4174 4175static int changed_ref(struct send_ctx *sctx, 4176 enum btrfs_compare_tree_result result) 4177{ 4178 int ret = 0; 4179 4180 BUG_ON(sctx->cur_ino != sctx->cmp_key->objectid); 4181 4182 if (!sctx->cur_inode_new_gen && 4183 sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) { 4184 if (result == BTRFS_COMPARE_TREE_NEW) 4185 ret = record_new_ref(sctx); 4186 else if (result == BTRFS_COMPARE_TREE_DELETED) 4187 ret = record_deleted_ref(sctx); 4188 else if (result == BTRFS_COMPARE_TREE_CHANGED) 4189 ret = record_changed_ref(sctx); 4190 } 4191 4192 return ret; 4193} 4194 4195static int changed_xattr(struct send_ctx *sctx, 4196 enum btrfs_compare_tree_result result) 4197{ 4198 int ret = 0; 4199 4200 BUG_ON(sctx->cur_ino != sctx->cmp_key->objectid); 4201 4202 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 4203 if (result == BTRFS_COMPARE_TREE_NEW) 4204 ret = process_new_xattr(sctx); 4205 else if (result == BTRFS_COMPARE_TREE_DELETED) 4206 ret = process_deleted_xattr(sctx); 4207 else if (result == BTRFS_COMPARE_TREE_CHANGED) 4208 ret = process_changed_xattr(sctx); 4209 } 4210 4211 return ret; 4212} 4213 4214static int changed_extent(struct send_ctx *sctx, 4215 enum btrfs_compare_tree_result result) 4216{ 4217 int ret = 0; 4218 4219 BUG_ON(sctx->cur_ino != sctx->cmp_key->objectid); 4220 4221 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 4222 if (result != BTRFS_COMPARE_TREE_DELETED) 4223 ret = process_extent(sctx, sctx->left_path, 4224 sctx->cmp_key); 4225 } 4226 4227 return ret; 4228} 4229 4230 4231static int changed_cb(struct btrfs_root *left_root, 4232 struct btrfs_root *right_root, 4233 struct btrfs_path *left_path, 4234 struct btrfs_path *right_path, 4235 struct btrfs_key *key, 4236 enum btrfs_compare_tree_result result, 4237 void *ctx) 4238{ 4239 int ret = 0; 4240 struct send_ctx *sctx = ctx; 4241 4242 sctx->left_path = left_path; 4243 sctx->right_path = right_path; 4244 sctx->cmp_key = key; 4245 4246 ret = finish_inode_if_needed(sctx, 0); 4247 if (ret < 0) 4248 goto out; 4249 4250 if (key->type == BTRFS_INODE_ITEM_KEY) 4251 ret = changed_inode(sctx, result); 4252 else if (key->type == BTRFS_INODE_REF_KEY) 4253 ret = changed_ref(sctx, result); 4254 else if (key->type == BTRFS_XATTR_ITEM_KEY) 4255 ret = changed_xattr(sctx, result); 4256 else if (key->type == BTRFS_EXTENT_DATA_KEY) 4257 ret = changed_extent(sctx, result); 4258 4259out: 4260 return ret; 4261} 4262 4263static int full_send_tree(struct send_ctx *sctx) 4264{ 4265 int ret; 4266 struct btrfs_trans_handle *trans = NULL; 4267 struct btrfs_root *send_root = sctx->send_root; 4268 struct btrfs_key key; 4269 struct btrfs_key found_key; 4270 struct btrfs_path *path; 4271 struct extent_buffer *eb; 4272 int slot; 4273 u64 start_ctransid; 4274 u64 ctransid; 4275 4276 path = alloc_path_for_send(); 4277 if (!path) 4278 return -ENOMEM; 4279 4280 spin_lock(&send_root->root_times_lock); 4281 start_ctransid = btrfs_root_ctransid(&send_root->root_item); 4282 spin_unlock(&send_root->root_times_lock); 4283 4284 key.objectid = BTRFS_FIRST_FREE_OBJECTID; 4285 key.type = BTRFS_INODE_ITEM_KEY; 4286 key.offset = 0; 4287 4288join_trans: 4289 /* 4290 * We need to make sure the transaction does not get committed 4291 * while we do anything on commit roots. Join a transaction to prevent 4292 * this. 4293 */ 4294 trans = btrfs_join_transaction(send_root); 4295 if (IS_ERR(trans)) { 4296 ret = PTR_ERR(trans); 4297 trans = NULL; 4298 goto out; 4299 } 4300 4301 /* 4302 * Make sure the tree has not changed 4303 */ 4304 spin_lock(&send_root->root_times_lock); 4305 ctransid = btrfs_root_ctransid(&send_root->root_item); 4306 spin_unlock(&send_root->root_times_lock); 4307 4308 if (ctransid != start_ctransid) { 4309 WARN(1, KERN_WARNING "btrfs: the root that you're trying to " 4310 "send was modified in between. This is " 4311 "probably a bug.\n"); 4312 ret = -EIO; 4313 goto out; 4314 } 4315 4316 ret = btrfs_search_slot_for_read(send_root, &key, path, 1, 0); 4317 if (ret < 0) 4318 goto out; 4319 if (ret) 4320 goto out_finish; 4321 4322 while (1) { 4323 /* 4324 * When someone want to commit while we iterate, end the 4325 * joined transaction and rejoin. 4326 */ 4327 if (btrfs_should_end_transaction(trans, send_root)) { 4328 ret = btrfs_end_transaction(trans, send_root); 4329 trans = NULL; 4330 if (ret < 0) 4331 goto out; 4332 btrfs_release_path(path); 4333 goto join_trans; 4334 } 4335 4336 eb = path->nodes[0]; 4337 slot = path->slots[0]; 4338 btrfs_item_key_to_cpu(eb, &found_key, slot); 4339 4340 ret = changed_cb(send_root, NULL, path, NULL, 4341 &found_key, BTRFS_COMPARE_TREE_NEW, sctx); 4342 if (ret < 0) 4343 goto out; 4344 4345 key.objectid = found_key.objectid; 4346 key.type = found_key.type; 4347 key.offset = found_key.offset + 1; 4348 4349 ret = btrfs_next_item(send_root, path); 4350 if (ret < 0) 4351 goto out; 4352 if (ret) { 4353 ret = 0; 4354 break; 4355 } 4356 } 4357 4358out_finish: 4359 ret = finish_inode_if_needed(sctx, 1); 4360 4361out: 4362 btrfs_free_path(path); 4363 if (trans) { 4364 if (!ret) 4365 ret = btrfs_end_transaction(trans, send_root); 4366 else 4367 btrfs_end_transaction(trans, send_root); 4368 } 4369 return ret; 4370} 4371 4372static int send_subvol(struct send_ctx *sctx) 4373{ 4374 int ret; 4375 4376 ret = send_header(sctx); 4377 if (ret < 0) 4378 goto out; 4379 4380 ret = send_subvol_begin(sctx); 4381 if (ret < 0) 4382 goto out; 4383 4384 if (sctx->parent_root) { 4385 ret = btrfs_compare_trees(sctx->send_root, sctx->parent_root, 4386 changed_cb, sctx); 4387 if (ret < 0) 4388 goto out; 4389 ret = finish_inode_if_needed(sctx, 1); 4390 if (ret < 0) 4391 goto out; 4392 } else { 4393 ret = full_send_tree(sctx); 4394 if (ret < 0) 4395 goto out; 4396 } 4397 4398out: 4399 if (!ret) 4400 ret = close_cur_inode_file(sctx); 4401 else 4402 close_cur_inode_file(sctx); 4403 4404 free_recorded_refs(sctx); 4405 return ret; 4406} 4407 4408long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_) 4409{ 4410 int ret = 0; 4411 struct btrfs_root *send_root; 4412 struct btrfs_root *clone_root; 4413 struct btrfs_fs_info *fs_info; 4414 struct btrfs_ioctl_send_args *arg = NULL; 4415 struct btrfs_key key; 4416 struct file *filp = NULL; 4417 struct send_ctx *sctx = NULL; 4418 u32 i; 4419 u64 *clone_sources_tmp = NULL; 4420 4421 if (!capable(CAP_SYS_ADMIN)) 4422 return -EPERM; 4423 4424 send_root = BTRFS_I(fdentry(mnt_file)->d_inode)->root; 4425 fs_info = send_root->fs_info; 4426 4427 arg = memdup_user(arg_, sizeof(*arg)); 4428 if (IS_ERR(arg)) { 4429 ret = PTR_ERR(arg); 4430 arg = NULL; 4431 goto out; 4432 } 4433 4434 if (!access_ok(VERIFY_READ, arg->clone_sources, 4435 sizeof(*arg->clone_sources * 4436 arg->clone_sources_count))) { 4437 ret = -EFAULT; 4438 goto out; 4439 } 4440 4441 sctx = kzalloc(sizeof(struct send_ctx), GFP_NOFS); 4442 if (!sctx) { 4443 ret = -ENOMEM; 4444 goto out; 4445 } 4446 4447 INIT_LIST_HEAD(&sctx->new_refs); 4448 INIT_LIST_HEAD(&sctx->deleted_refs); 4449 INIT_RADIX_TREE(&sctx->name_cache, GFP_NOFS); 4450 INIT_LIST_HEAD(&sctx->name_cache_list); 4451 4452 sctx->send_filp = fget(arg->send_fd); 4453 if (IS_ERR(sctx->send_filp)) { 4454 ret = PTR_ERR(sctx->send_filp); 4455 goto out; 4456 } 4457 4458 sctx->mnt = mnt_file->f_path.mnt; 4459 4460 sctx->send_root = send_root; 4461 sctx->clone_roots_cnt = arg->clone_sources_count; 4462 4463 sctx->send_max_size = BTRFS_SEND_BUF_SIZE; 4464 sctx->send_buf = vmalloc(sctx->send_max_size); 4465 if (!sctx->send_buf) { 4466 ret = -ENOMEM; 4467 goto out; 4468 } 4469 4470 sctx->read_buf = vmalloc(BTRFS_SEND_READ_SIZE); 4471 if (!sctx->read_buf) { 4472 ret = -ENOMEM; 4473 goto out; 4474 } 4475 4476 sctx->clone_roots = vzalloc(sizeof(struct clone_root) * 4477 (arg->clone_sources_count + 1)); 4478 if (!sctx->clone_roots) { 4479 ret = -ENOMEM; 4480 goto out; 4481 } 4482 4483 if (arg->clone_sources_count) { 4484 clone_sources_tmp = vmalloc(arg->clone_sources_count * 4485 sizeof(*arg->clone_sources)); 4486 if (!clone_sources_tmp) { 4487 ret = -ENOMEM; 4488 goto out; 4489 } 4490 4491 ret = copy_from_user(clone_sources_tmp, arg->clone_sources, 4492 arg->clone_sources_count * 4493 sizeof(*arg->clone_sources)); 4494 if (ret) { 4495 ret = -EFAULT; 4496 goto out; 4497 } 4498 4499 for (i = 0; i < arg->clone_sources_count; i++) { 4500 key.objectid = clone_sources_tmp[i]; 4501 key.type = BTRFS_ROOT_ITEM_KEY; 4502 key.offset = (u64)-1; 4503 clone_root = btrfs_read_fs_root_no_name(fs_info, &key); 4504 if (!clone_root) { 4505 ret = -EINVAL; 4506 goto out; 4507 } 4508 if (IS_ERR(clone_root)) { 4509 ret = PTR_ERR(clone_root); 4510 goto out; 4511 } 4512 sctx->clone_roots[i].root = clone_root; 4513 } 4514 vfree(clone_sources_tmp); 4515 clone_sources_tmp = NULL; 4516 } 4517 4518 if (arg->parent_root) { 4519 key.objectid = arg->parent_root; 4520 key.type = BTRFS_ROOT_ITEM_KEY; 4521 key.offset = (u64)-1; 4522 sctx->parent_root = btrfs_read_fs_root_no_name(fs_info, &key); 4523 if (!sctx->parent_root) { 4524 ret = -EINVAL; 4525 goto out; 4526 } 4527 } 4528 4529 /* 4530 * Clones from send_root are allowed, but only if the clone source 4531 * is behind the current send position. This is checked while searching 4532 * for possible clone sources. 4533 */ 4534 sctx->clone_roots[sctx->clone_roots_cnt++].root = sctx->send_root; 4535 4536 /* We do a bsearch later */ 4537 sort(sctx->clone_roots, sctx->clone_roots_cnt, 4538 sizeof(*sctx->clone_roots), __clone_root_cmp_sort, 4539 NULL); 4540 4541 ret = send_subvol(sctx); 4542 if (ret < 0) 4543 goto out; 4544 4545 ret = begin_cmd(sctx, BTRFS_SEND_C_END); 4546 if (ret < 0) 4547 goto out; 4548 ret = send_cmd(sctx); 4549 if (ret < 0) 4550 goto out; 4551 4552out: 4553 if (filp) 4554 fput(filp); 4555 kfree(arg); 4556 vfree(clone_sources_tmp); 4557 4558 if (sctx) { 4559 if (sctx->send_filp) 4560 fput(sctx->send_filp); 4561 4562 vfree(sctx->clone_roots); 4563 vfree(sctx->send_buf); 4564 vfree(sctx->read_buf); 4565 4566 name_cache_free(sctx); 4567 4568 kfree(sctx); 4569 } 4570 4571 return ret; 4572} 4573