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/vmalloc.h> 28 #include <linux/string.h> 29 30 #include "send.h" 31 #include "backref.h" 32 #include "hash.h" 33 #include "locking.h" 34 #include "disk-io.h" 35 #include "btrfs_inode.h" 36 #include "transaction.h" 37 #include "compression.h" 38 39 /* 40 * A fs_path is a helper to dynamically build path names with unknown size. 41 * It reallocates the internal buffer on demand. 42 * It allows fast adding of path elements on the right side (normal path) and 43 * fast adding to the left side (reversed path). A reversed path can also be 44 * unreversed if needed. 45 */ 46 struct fs_path { 47 union { 48 struct { 49 char *start; 50 char *end; 51 52 char *buf; 53 unsigned short buf_len:15; 54 unsigned short reversed:1; 55 char inline_buf[]; 56 }; 57 /* 58 * Average path length does not exceed 200 bytes, we'll have 59 * better packing in the slab and higher chance to satisfy 60 * a allocation later during send. 61 */ 62 char pad[256]; 63 }; 64 }; 65 #define FS_PATH_INLINE_SIZE \ 66 (sizeof(struct fs_path) - offsetof(struct fs_path, inline_buf)) 67 68 69 /* reused for each extent */ 70 struct clone_root { 71 struct btrfs_root *root; 72 u64 ino; 73 u64 offset; 74 75 u64 found_refs; 76 }; 77 78 #define SEND_CTX_MAX_NAME_CACHE_SIZE 128 79 #define SEND_CTX_NAME_CACHE_CLEAN_SIZE (SEND_CTX_MAX_NAME_CACHE_SIZE * 2) 80 81 struct send_ctx { 82 struct file *send_filp; 83 loff_t send_off; 84 char *send_buf; 85 u32 send_size; 86 u32 send_max_size; 87 u64 total_send_size; 88 u64 cmd_send_size[BTRFS_SEND_C_MAX + 1]; 89 u64 flags; /* 'flags' member of btrfs_ioctl_send_args is u64 */ 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 u64 cur_inode_size; 111 u64 cur_inode_mode; 112 u64 cur_inode_rdev; 113 u64 cur_inode_last_extent; 114 115 u64 send_progress; 116 117 struct list_head new_refs; 118 struct list_head deleted_refs; 119 120 struct radix_tree_root name_cache; 121 struct list_head name_cache_list; 122 int name_cache_size; 123 124 struct file_ra_state ra; 125 126 char *read_buf; 127 128 /* 129 * We process inodes by their increasing order, so if before an 130 * incremental send we reverse the parent/child relationship of 131 * directories such that a directory with a lower inode number was 132 * the parent of a directory with a higher inode number, and the one 133 * becoming the new parent got renamed too, we can't rename/move the 134 * directory with lower inode number when we finish processing it - we 135 * must process the directory with higher inode number first, then 136 * rename/move it and then rename/move the directory with lower inode 137 * number. Example follows. 138 * 139 * Tree state when the first send was performed: 140 * 141 * . 142 * |-- a (ino 257) 143 * |-- b (ino 258) 144 * | 145 * | 146 * |-- c (ino 259) 147 * | |-- d (ino 260) 148 * | 149 * |-- c2 (ino 261) 150 * 151 * Tree state when the second (incremental) send is performed: 152 * 153 * . 154 * |-- a (ino 257) 155 * |-- b (ino 258) 156 * |-- c2 (ino 261) 157 * |-- d2 (ino 260) 158 * |-- cc (ino 259) 159 * 160 * The sequence of steps that lead to the second state was: 161 * 162 * mv /a/b/c/d /a/b/c2/d2 163 * mv /a/b/c /a/b/c2/d2/cc 164 * 165 * "c" has lower inode number, but we can't move it (2nd mv operation) 166 * before we move "d", which has higher inode number. 167 * 168 * So we just memorize which move/rename operations must be performed 169 * later when their respective parent is processed and moved/renamed. 170 */ 171 172 /* Indexed by parent directory inode number. */ 173 struct rb_root pending_dir_moves; 174 175 /* 176 * Reverse index, indexed by the inode number of a directory that 177 * is waiting for the move/rename of its immediate parent before its 178 * own move/rename can be performed. 179 */ 180 struct rb_root waiting_dir_moves; 181 182 /* 183 * A directory that is going to be rm'ed might have a child directory 184 * which is in the pending directory moves index above. In this case, 185 * the directory can only be removed after the move/rename of its child 186 * is performed. Example: 187 * 188 * Parent snapshot: 189 * 190 * . (ino 256) 191 * |-- a/ (ino 257) 192 * |-- b/ (ino 258) 193 * |-- c/ (ino 259) 194 * | |-- x/ (ino 260) 195 * | 196 * |-- y/ (ino 261) 197 * 198 * Send snapshot: 199 * 200 * . (ino 256) 201 * |-- a/ (ino 257) 202 * |-- b/ (ino 258) 203 * |-- YY/ (ino 261) 204 * |-- x/ (ino 260) 205 * 206 * Sequence of steps that lead to the send snapshot: 207 * rm -f /a/b/c/foo.txt 208 * mv /a/b/y /a/b/YY 209 * mv /a/b/c/x /a/b/YY 210 * rmdir /a/b/c 211 * 212 * When the child is processed, its move/rename is delayed until its 213 * parent is processed (as explained above), but all other operations 214 * like update utimes, chown, chgrp, etc, are performed and the paths 215 * that it uses for those operations must use the orphanized name of 216 * its parent (the directory we're going to rm later), so we need to 217 * memorize that name. 218 * 219 * Indexed by the inode number of the directory to be deleted. 220 */ 221 struct rb_root orphan_dirs; 222 }; 223 224 struct pending_dir_move { 225 struct rb_node node; 226 struct list_head list; 227 u64 parent_ino; 228 u64 ino; 229 u64 gen; 230 struct list_head update_refs; 231 }; 232 233 struct waiting_dir_move { 234 struct rb_node node; 235 u64 ino; 236 /* 237 * There might be some directory that could not be removed because it 238 * was waiting for this directory inode to be moved first. Therefore 239 * after this directory is moved, we can try to rmdir the ino rmdir_ino. 240 */ 241 u64 rmdir_ino; 242 bool orphanized; 243 }; 244 245 struct orphan_dir_info { 246 struct rb_node node; 247 u64 ino; 248 u64 gen; 249 }; 250 251 struct name_cache_entry { 252 struct list_head list; 253 /* 254 * radix_tree has only 32bit entries but we need to handle 64bit inums. 255 * We use the lower 32bit of the 64bit inum to store it in the tree. If 256 * more then one inum would fall into the same entry, we use radix_list 257 * to store the additional entries. radix_list is also used to store 258 * entries where two entries have the same inum but different 259 * generations. 260 */ 261 struct list_head radix_list; 262 u64 ino; 263 u64 gen; 264 u64 parent_ino; 265 u64 parent_gen; 266 int ret; 267 int need_later_update; 268 int name_len; 269 char name[]; 270 }; 271 272 static void inconsistent_snapshot_error(struct send_ctx *sctx, 273 enum btrfs_compare_tree_result result, 274 const char *what) 275 { 276 const char *result_string; 277 278 switch (result) { 279 case BTRFS_COMPARE_TREE_NEW: 280 result_string = "new"; 281 break; 282 case BTRFS_COMPARE_TREE_DELETED: 283 result_string = "deleted"; 284 break; 285 case BTRFS_COMPARE_TREE_CHANGED: 286 result_string = "updated"; 287 break; 288 case BTRFS_COMPARE_TREE_SAME: 289 ASSERT(0); 290 result_string = "unchanged"; 291 break; 292 default: 293 ASSERT(0); 294 result_string = "unexpected"; 295 } 296 297 btrfs_err(sctx->send_root->fs_info, 298 "Send: inconsistent snapshot, found %s %s for inode %llu without updated inode item, send root is %llu, parent root is %llu", 299 result_string, what, sctx->cmp_key->objectid, 300 sctx->send_root->root_key.objectid, 301 (sctx->parent_root ? 302 sctx->parent_root->root_key.objectid : 0)); 303 } 304 305 static int is_waiting_for_move(struct send_ctx *sctx, u64 ino); 306 307 static struct waiting_dir_move * 308 get_waiting_dir_move(struct send_ctx *sctx, u64 ino); 309 310 static int is_waiting_for_rm(struct send_ctx *sctx, u64 dir_ino); 311 312 static int need_send_hole(struct send_ctx *sctx) 313 { 314 return (sctx->parent_root && !sctx->cur_inode_new && 315 !sctx->cur_inode_new_gen && !sctx->cur_inode_deleted && 316 S_ISREG(sctx->cur_inode_mode)); 317 } 318 319 static void fs_path_reset(struct fs_path *p) 320 { 321 if (p->reversed) { 322 p->start = p->buf + p->buf_len - 1; 323 p->end = p->start; 324 *p->start = 0; 325 } else { 326 p->start = p->buf; 327 p->end = p->start; 328 *p->start = 0; 329 } 330 } 331 332 static struct fs_path *fs_path_alloc(void) 333 { 334 struct fs_path *p; 335 336 p = kmalloc(sizeof(*p), GFP_KERNEL); 337 if (!p) 338 return NULL; 339 p->reversed = 0; 340 p->buf = p->inline_buf; 341 p->buf_len = FS_PATH_INLINE_SIZE; 342 fs_path_reset(p); 343 return p; 344 } 345 346 static struct fs_path *fs_path_alloc_reversed(void) 347 { 348 struct fs_path *p; 349 350 p = fs_path_alloc(); 351 if (!p) 352 return NULL; 353 p->reversed = 1; 354 fs_path_reset(p); 355 return p; 356 } 357 358 static void fs_path_free(struct fs_path *p) 359 { 360 if (!p) 361 return; 362 if (p->buf != p->inline_buf) 363 kfree(p->buf); 364 kfree(p); 365 } 366 367 static int fs_path_len(struct fs_path *p) 368 { 369 return p->end - p->start; 370 } 371 372 static int fs_path_ensure_buf(struct fs_path *p, int len) 373 { 374 char *tmp_buf; 375 int path_len; 376 int old_buf_len; 377 378 len++; 379 380 if (p->buf_len >= len) 381 return 0; 382 383 if (len > PATH_MAX) { 384 WARN_ON(1); 385 return -ENOMEM; 386 } 387 388 path_len = p->end - p->start; 389 old_buf_len = p->buf_len; 390 391 /* 392 * First time the inline_buf does not suffice 393 */ 394 if (p->buf == p->inline_buf) { 395 tmp_buf = kmalloc(len, GFP_KERNEL); 396 if (tmp_buf) 397 memcpy(tmp_buf, p->buf, old_buf_len); 398 } else { 399 tmp_buf = krealloc(p->buf, len, GFP_KERNEL); 400 } 401 if (!tmp_buf) 402 return -ENOMEM; 403 p->buf = tmp_buf; 404 /* 405 * The real size of the buffer is bigger, this will let the fast path 406 * happen most of the time 407 */ 408 p->buf_len = ksize(p->buf); 409 410 if (p->reversed) { 411 tmp_buf = p->buf + old_buf_len - path_len - 1; 412 p->end = p->buf + p->buf_len - 1; 413 p->start = p->end - path_len; 414 memmove(p->start, tmp_buf, path_len + 1); 415 } else { 416 p->start = p->buf; 417 p->end = p->start + path_len; 418 } 419 return 0; 420 } 421 422 static int fs_path_prepare_for_add(struct fs_path *p, int name_len, 423 char **prepared) 424 { 425 int ret; 426 int new_len; 427 428 new_len = p->end - p->start + name_len; 429 if (p->start != p->end) 430 new_len++; 431 ret = fs_path_ensure_buf(p, new_len); 432 if (ret < 0) 433 goto out; 434 435 if (p->reversed) { 436 if (p->start != p->end) 437 *--p->start = '/'; 438 p->start -= name_len; 439 *prepared = p->start; 440 } else { 441 if (p->start != p->end) 442 *p->end++ = '/'; 443 *prepared = p->end; 444 p->end += name_len; 445 *p->end = 0; 446 } 447 448 out: 449 return ret; 450 } 451 452 static int fs_path_add(struct fs_path *p, const char *name, int name_len) 453 { 454 int ret; 455 char *prepared; 456 457 ret = fs_path_prepare_for_add(p, name_len, &prepared); 458 if (ret < 0) 459 goto out; 460 memcpy(prepared, name, name_len); 461 462 out: 463 return ret; 464 } 465 466 static int fs_path_add_path(struct fs_path *p, struct fs_path *p2) 467 { 468 int ret; 469 char *prepared; 470 471 ret = fs_path_prepare_for_add(p, p2->end - p2->start, &prepared); 472 if (ret < 0) 473 goto out; 474 memcpy(prepared, p2->start, p2->end - p2->start); 475 476 out: 477 return ret; 478 } 479 480 static int fs_path_add_from_extent_buffer(struct fs_path *p, 481 struct extent_buffer *eb, 482 unsigned long off, int len) 483 { 484 int ret; 485 char *prepared; 486 487 ret = fs_path_prepare_for_add(p, len, &prepared); 488 if (ret < 0) 489 goto out; 490 491 read_extent_buffer(eb, prepared, off, len); 492 493 out: 494 return ret; 495 } 496 497 static int fs_path_copy(struct fs_path *p, struct fs_path *from) 498 { 499 int ret; 500 501 p->reversed = from->reversed; 502 fs_path_reset(p); 503 504 ret = fs_path_add_path(p, from); 505 506 return ret; 507 } 508 509 510 static void fs_path_unreverse(struct fs_path *p) 511 { 512 char *tmp; 513 int len; 514 515 if (!p->reversed) 516 return; 517 518 tmp = p->start; 519 len = p->end - p->start; 520 p->start = p->buf; 521 p->end = p->start + len; 522 memmove(p->start, tmp, len + 1); 523 p->reversed = 0; 524 } 525 526 static struct btrfs_path *alloc_path_for_send(void) 527 { 528 struct btrfs_path *path; 529 530 path = btrfs_alloc_path(); 531 if (!path) 532 return NULL; 533 path->search_commit_root = 1; 534 path->skip_locking = 1; 535 path->need_commit_sem = 1; 536 return path; 537 } 538 539 static int write_buf(struct file *filp, const void *buf, u32 len, loff_t *off) 540 { 541 int ret; 542 mm_segment_t old_fs; 543 u32 pos = 0; 544 545 old_fs = get_fs(); 546 set_fs(KERNEL_DS); 547 548 while (pos < len) { 549 ret = vfs_write(filp, (__force const char __user *)buf + pos, 550 len - pos, off); 551 /* TODO handle that correctly */ 552 /*if (ret == -ERESTARTSYS) { 553 continue; 554 }*/ 555 if (ret < 0) 556 goto out; 557 if (ret == 0) { 558 ret = -EIO; 559 goto out; 560 } 561 pos += ret; 562 } 563 564 ret = 0; 565 566 out: 567 set_fs(old_fs); 568 return ret; 569 } 570 571 static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len) 572 { 573 struct btrfs_tlv_header *hdr; 574 int total_len = sizeof(*hdr) + len; 575 int left = sctx->send_max_size - sctx->send_size; 576 577 if (unlikely(left < total_len)) 578 return -EOVERFLOW; 579 580 hdr = (struct btrfs_tlv_header *) (sctx->send_buf + sctx->send_size); 581 hdr->tlv_type = cpu_to_le16(attr); 582 hdr->tlv_len = cpu_to_le16(len); 583 memcpy(hdr + 1, data, len); 584 sctx->send_size += total_len; 585 586 return 0; 587 } 588 589 #define TLV_PUT_DEFINE_INT(bits) \ 590 static int tlv_put_u##bits(struct send_ctx *sctx, \ 591 u##bits attr, u##bits value) \ 592 { \ 593 __le##bits __tmp = cpu_to_le##bits(value); \ 594 return tlv_put(sctx, attr, &__tmp, sizeof(__tmp)); \ 595 } 596 597 TLV_PUT_DEFINE_INT(64) 598 599 static int tlv_put_string(struct send_ctx *sctx, u16 attr, 600 const char *str, int len) 601 { 602 if (len == -1) 603 len = strlen(str); 604 return tlv_put(sctx, attr, str, len); 605 } 606 607 static int tlv_put_uuid(struct send_ctx *sctx, u16 attr, 608 const u8 *uuid) 609 { 610 return tlv_put(sctx, attr, uuid, BTRFS_UUID_SIZE); 611 } 612 613 static int tlv_put_btrfs_timespec(struct send_ctx *sctx, u16 attr, 614 struct extent_buffer *eb, 615 struct btrfs_timespec *ts) 616 { 617 struct btrfs_timespec bts; 618 read_extent_buffer(eb, &bts, (unsigned long)ts, sizeof(bts)); 619 return tlv_put(sctx, attr, &bts, sizeof(bts)); 620 } 621 622 623 #define TLV_PUT(sctx, attrtype, attrlen, data) \ 624 do { \ 625 ret = tlv_put(sctx, attrtype, attrlen, data); \ 626 if (ret < 0) \ 627 goto tlv_put_failure; \ 628 } while (0) 629 630 #define TLV_PUT_INT(sctx, attrtype, bits, value) \ 631 do { \ 632 ret = tlv_put_u##bits(sctx, attrtype, value); \ 633 if (ret < 0) \ 634 goto tlv_put_failure; \ 635 } while (0) 636 637 #define TLV_PUT_U8(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 8, data) 638 #define TLV_PUT_U16(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 16, data) 639 #define TLV_PUT_U32(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 32, data) 640 #define TLV_PUT_U64(sctx, attrtype, data) TLV_PUT_INT(sctx, attrtype, 64, data) 641 #define TLV_PUT_STRING(sctx, attrtype, str, len) \ 642 do { \ 643 ret = tlv_put_string(sctx, attrtype, str, len); \ 644 if (ret < 0) \ 645 goto tlv_put_failure; \ 646 } while (0) 647 #define TLV_PUT_PATH(sctx, attrtype, p) \ 648 do { \ 649 ret = tlv_put_string(sctx, attrtype, p->start, \ 650 p->end - p->start); \ 651 if (ret < 0) \ 652 goto tlv_put_failure; \ 653 } while(0) 654 #define TLV_PUT_UUID(sctx, attrtype, uuid) \ 655 do { \ 656 ret = tlv_put_uuid(sctx, attrtype, uuid); \ 657 if (ret < 0) \ 658 goto tlv_put_failure; \ 659 } while (0) 660 #define TLV_PUT_BTRFS_TIMESPEC(sctx, attrtype, eb, ts) \ 661 do { \ 662 ret = tlv_put_btrfs_timespec(sctx, attrtype, eb, ts); \ 663 if (ret < 0) \ 664 goto tlv_put_failure; \ 665 } while (0) 666 667 static int send_header(struct send_ctx *sctx) 668 { 669 struct btrfs_stream_header hdr; 670 671 strcpy(hdr.magic, BTRFS_SEND_STREAM_MAGIC); 672 hdr.version = cpu_to_le32(BTRFS_SEND_STREAM_VERSION); 673 674 return write_buf(sctx->send_filp, &hdr, sizeof(hdr), 675 &sctx->send_off); 676 } 677 678 /* 679 * For each command/item we want to send to userspace, we call this function. 680 */ 681 static int begin_cmd(struct send_ctx *sctx, int cmd) 682 { 683 struct btrfs_cmd_header *hdr; 684 685 if (WARN_ON(!sctx->send_buf)) 686 return -EINVAL; 687 688 BUG_ON(sctx->send_size); 689 690 sctx->send_size += sizeof(*hdr); 691 hdr = (struct btrfs_cmd_header *)sctx->send_buf; 692 hdr->cmd = cpu_to_le16(cmd); 693 694 return 0; 695 } 696 697 static int send_cmd(struct send_ctx *sctx) 698 { 699 int ret; 700 struct btrfs_cmd_header *hdr; 701 u32 crc; 702 703 hdr = (struct btrfs_cmd_header *)sctx->send_buf; 704 hdr->len = cpu_to_le32(sctx->send_size - sizeof(*hdr)); 705 hdr->crc = 0; 706 707 crc = btrfs_crc32c(0, (unsigned char *)sctx->send_buf, sctx->send_size); 708 hdr->crc = cpu_to_le32(crc); 709 710 ret = write_buf(sctx->send_filp, sctx->send_buf, sctx->send_size, 711 &sctx->send_off); 712 713 sctx->total_send_size += sctx->send_size; 714 sctx->cmd_send_size[le16_to_cpu(hdr->cmd)] += sctx->send_size; 715 sctx->send_size = 0; 716 717 return ret; 718 } 719 720 /* 721 * Sends a move instruction to user space 722 */ 723 static int send_rename(struct send_ctx *sctx, 724 struct fs_path *from, struct fs_path *to) 725 { 726 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 727 int ret; 728 729 btrfs_debug(fs_info, "send_rename %s -> %s", from->start, to->start); 730 731 ret = begin_cmd(sctx, BTRFS_SEND_C_RENAME); 732 if (ret < 0) 733 goto out; 734 735 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, from); 736 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_TO, to); 737 738 ret = send_cmd(sctx); 739 740 tlv_put_failure: 741 out: 742 return ret; 743 } 744 745 /* 746 * Sends a link instruction to user space 747 */ 748 static int send_link(struct send_ctx *sctx, 749 struct fs_path *path, struct fs_path *lnk) 750 { 751 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 752 int ret; 753 754 btrfs_debug(fs_info, "send_link %s -> %s", path->start, lnk->start); 755 756 ret = begin_cmd(sctx, BTRFS_SEND_C_LINK); 757 if (ret < 0) 758 goto out; 759 760 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 761 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_LINK, lnk); 762 763 ret = send_cmd(sctx); 764 765 tlv_put_failure: 766 out: 767 return ret; 768 } 769 770 /* 771 * Sends an unlink instruction to user space 772 */ 773 static int send_unlink(struct send_ctx *sctx, struct fs_path *path) 774 { 775 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 776 int ret; 777 778 btrfs_debug(fs_info, "send_unlink %s", path->start); 779 780 ret = begin_cmd(sctx, BTRFS_SEND_C_UNLINK); 781 if (ret < 0) 782 goto out; 783 784 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 785 786 ret = send_cmd(sctx); 787 788 tlv_put_failure: 789 out: 790 return ret; 791 } 792 793 /* 794 * Sends a rmdir instruction to user space 795 */ 796 static int send_rmdir(struct send_ctx *sctx, struct fs_path *path) 797 { 798 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 799 int ret; 800 801 btrfs_debug(fs_info, "send_rmdir %s", path->start); 802 803 ret = begin_cmd(sctx, BTRFS_SEND_C_RMDIR); 804 if (ret < 0) 805 goto out; 806 807 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 808 809 ret = send_cmd(sctx); 810 811 tlv_put_failure: 812 out: 813 return ret; 814 } 815 816 /* 817 * Helper function to retrieve some fields from an inode item. 818 */ 819 static int __get_inode_info(struct btrfs_root *root, struct btrfs_path *path, 820 u64 ino, u64 *size, u64 *gen, u64 *mode, u64 *uid, 821 u64 *gid, u64 *rdev) 822 { 823 int ret; 824 struct btrfs_inode_item *ii; 825 struct btrfs_key key; 826 827 key.objectid = ino; 828 key.type = BTRFS_INODE_ITEM_KEY; 829 key.offset = 0; 830 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 831 if (ret) { 832 if (ret > 0) 833 ret = -ENOENT; 834 return ret; 835 } 836 837 ii = btrfs_item_ptr(path->nodes[0], path->slots[0], 838 struct btrfs_inode_item); 839 if (size) 840 *size = btrfs_inode_size(path->nodes[0], ii); 841 if (gen) 842 *gen = btrfs_inode_generation(path->nodes[0], ii); 843 if (mode) 844 *mode = btrfs_inode_mode(path->nodes[0], ii); 845 if (uid) 846 *uid = btrfs_inode_uid(path->nodes[0], ii); 847 if (gid) 848 *gid = btrfs_inode_gid(path->nodes[0], ii); 849 if (rdev) 850 *rdev = btrfs_inode_rdev(path->nodes[0], ii); 851 852 return ret; 853 } 854 855 static int get_inode_info(struct btrfs_root *root, 856 u64 ino, u64 *size, u64 *gen, 857 u64 *mode, u64 *uid, u64 *gid, 858 u64 *rdev) 859 { 860 struct btrfs_path *path; 861 int ret; 862 863 path = alloc_path_for_send(); 864 if (!path) 865 return -ENOMEM; 866 ret = __get_inode_info(root, path, ino, size, gen, mode, uid, gid, 867 rdev); 868 btrfs_free_path(path); 869 return ret; 870 } 871 872 typedef int (*iterate_inode_ref_t)(int num, u64 dir, int index, 873 struct fs_path *p, 874 void *ctx); 875 876 /* 877 * Helper function to iterate the entries in ONE btrfs_inode_ref or 878 * btrfs_inode_extref. 879 * The iterate callback may return a non zero value to stop iteration. This can 880 * be a negative value for error codes or 1 to simply stop it. 881 * 882 * path must point to the INODE_REF or INODE_EXTREF when called. 883 */ 884 static int iterate_inode_ref(struct btrfs_root *root, struct btrfs_path *path, 885 struct btrfs_key *found_key, int resolve, 886 iterate_inode_ref_t iterate, void *ctx) 887 { 888 struct extent_buffer *eb = path->nodes[0]; 889 struct btrfs_item *item; 890 struct btrfs_inode_ref *iref; 891 struct btrfs_inode_extref *extref; 892 struct btrfs_path *tmp_path; 893 struct fs_path *p; 894 u32 cur = 0; 895 u32 total; 896 int slot = path->slots[0]; 897 u32 name_len; 898 char *start; 899 int ret = 0; 900 int num = 0; 901 int index; 902 u64 dir; 903 unsigned long name_off; 904 unsigned long elem_size; 905 unsigned long ptr; 906 907 p = fs_path_alloc_reversed(); 908 if (!p) 909 return -ENOMEM; 910 911 tmp_path = alloc_path_for_send(); 912 if (!tmp_path) { 913 fs_path_free(p); 914 return -ENOMEM; 915 } 916 917 918 if (found_key->type == BTRFS_INODE_REF_KEY) { 919 ptr = (unsigned long)btrfs_item_ptr(eb, slot, 920 struct btrfs_inode_ref); 921 item = btrfs_item_nr(slot); 922 total = btrfs_item_size(eb, item); 923 elem_size = sizeof(*iref); 924 } else { 925 ptr = btrfs_item_ptr_offset(eb, slot); 926 total = btrfs_item_size_nr(eb, slot); 927 elem_size = sizeof(*extref); 928 } 929 930 while (cur < total) { 931 fs_path_reset(p); 932 933 if (found_key->type == BTRFS_INODE_REF_KEY) { 934 iref = (struct btrfs_inode_ref *)(ptr + cur); 935 name_len = btrfs_inode_ref_name_len(eb, iref); 936 name_off = (unsigned long)(iref + 1); 937 index = btrfs_inode_ref_index(eb, iref); 938 dir = found_key->offset; 939 } else { 940 extref = (struct btrfs_inode_extref *)(ptr + cur); 941 name_len = btrfs_inode_extref_name_len(eb, extref); 942 name_off = (unsigned long)&extref->name; 943 index = btrfs_inode_extref_index(eb, extref); 944 dir = btrfs_inode_extref_parent(eb, extref); 945 } 946 947 if (resolve) { 948 start = btrfs_ref_to_path(root, tmp_path, name_len, 949 name_off, eb, dir, 950 p->buf, p->buf_len); 951 if (IS_ERR(start)) { 952 ret = PTR_ERR(start); 953 goto out; 954 } 955 if (start < p->buf) { 956 /* overflow , try again with larger buffer */ 957 ret = fs_path_ensure_buf(p, 958 p->buf_len + p->buf - start); 959 if (ret < 0) 960 goto out; 961 start = btrfs_ref_to_path(root, tmp_path, 962 name_len, name_off, 963 eb, dir, 964 p->buf, p->buf_len); 965 if (IS_ERR(start)) { 966 ret = PTR_ERR(start); 967 goto out; 968 } 969 BUG_ON(start < p->buf); 970 } 971 p->start = start; 972 } else { 973 ret = fs_path_add_from_extent_buffer(p, eb, name_off, 974 name_len); 975 if (ret < 0) 976 goto out; 977 } 978 979 cur += elem_size + name_len; 980 ret = iterate(num, dir, index, p, ctx); 981 if (ret) 982 goto out; 983 num++; 984 } 985 986 out: 987 btrfs_free_path(tmp_path); 988 fs_path_free(p); 989 return ret; 990 } 991 992 typedef int (*iterate_dir_item_t)(int num, struct btrfs_key *di_key, 993 const char *name, int name_len, 994 const char *data, int data_len, 995 u8 type, void *ctx); 996 997 /* 998 * Helper function to iterate the entries in ONE btrfs_dir_item. 999 * The iterate callback may return a non zero value to stop iteration. This can 1000 * be a negative value for error codes or 1 to simply stop it. 1001 * 1002 * path must point to the dir item when called. 1003 */ 1004 static int iterate_dir_item(struct btrfs_root *root, struct btrfs_path *path, 1005 struct btrfs_key *found_key, 1006 iterate_dir_item_t iterate, void *ctx) 1007 { 1008 int ret = 0; 1009 struct extent_buffer *eb; 1010 struct btrfs_item *item; 1011 struct btrfs_dir_item *di; 1012 struct btrfs_key di_key; 1013 char *buf = NULL; 1014 int buf_len; 1015 u32 name_len; 1016 u32 data_len; 1017 u32 cur; 1018 u32 len; 1019 u32 total; 1020 int slot; 1021 int num; 1022 u8 type; 1023 1024 /* 1025 * Start with a small buffer (1 page). If later we end up needing more 1026 * space, which can happen for xattrs on a fs with a leaf size greater 1027 * then the page size, attempt to increase the buffer. Typically xattr 1028 * values are small. 1029 */ 1030 buf_len = PATH_MAX; 1031 buf = kmalloc(buf_len, GFP_KERNEL); 1032 if (!buf) { 1033 ret = -ENOMEM; 1034 goto out; 1035 } 1036 1037 eb = path->nodes[0]; 1038 slot = path->slots[0]; 1039 item = btrfs_item_nr(slot); 1040 di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item); 1041 cur = 0; 1042 len = 0; 1043 total = btrfs_item_size(eb, item); 1044 1045 num = 0; 1046 while (cur < total) { 1047 name_len = btrfs_dir_name_len(eb, di); 1048 data_len = btrfs_dir_data_len(eb, di); 1049 type = btrfs_dir_type(eb, di); 1050 btrfs_dir_item_key_to_cpu(eb, di, &di_key); 1051 1052 if (type == BTRFS_FT_XATTR) { 1053 if (name_len > XATTR_NAME_MAX) { 1054 ret = -ENAMETOOLONG; 1055 goto out; 1056 } 1057 if (name_len + data_len > 1058 BTRFS_MAX_XATTR_SIZE(root->fs_info)) { 1059 ret = -E2BIG; 1060 goto out; 1061 } 1062 } else { 1063 /* 1064 * Path too long 1065 */ 1066 if (name_len + data_len > PATH_MAX) { 1067 ret = -ENAMETOOLONG; 1068 goto out; 1069 } 1070 } 1071 1072 ret = btrfs_is_name_len_valid(eb, path->slots[0], 1073 (unsigned long)(di + 1), name_len + data_len); 1074 if (!ret) { 1075 ret = -EIO; 1076 goto out; 1077 } 1078 if (name_len + data_len > buf_len) { 1079 buf_len = name_len + data_len; 1080 if (is_vmalloc_addr(buf)) { 1081 vfree(buf); 1082 buf = NULL; 1083 } else { 1084 char *tmp = krealloc(buf, buf_len, 1085 GFP_KERNEL | __GFP_NOWARN); 1086 1087 if (!tmp) 1088 kfree(buf); 1089 buf = tmp; 1090 } 1091 if (!buf) { 1092 buf = kvmalloc(buf_len, GFP_KERNEL); 1093 if (!buf) { 1094 ret = -ENOMEM; 1095 goto out; 1096 } 1097 } 1098 } 1099 1100 read_extent_buffer(eb, buf, (unsigned long)(di + 1), 1101 name_len + data_len); 1102 1103 len = sizeof(*di) + name_len + data_len; 1104 di = (struct btrfs_dir_item *)((char *)di + len); 1105 cur += len; 1106 1107 ret = iterate(num, &di_key, buf, name_len, buf + name_len, 1108 data_len, type, ctx); 1109 if (ret < 0) 1110 goto out; 1111 if (ret) { 1112 ret = 0; 1113 goto out; 1114 } 1115 1116 num++; 1117 } 1118 1119 out: 1120 kvfree(buf); 1121 return ret; 1122 } 1123 1124 static int __copy_first_ref(int num, u64 dir, int index, 1125 struct fs_path *p, void *ctx) 1126 { 1127 int ret; 1128 struct fs_path *pt = ctx; 1129 1130 ret = fs_path_copy(pt, p); 1131 if (ret < 0) 1132 return ret; 1133 1134 /* we want the first only */ 1135 return 1; 1136 } 1137 1138 /* 1139 * Retrieve the first path of an inode. If an inode has more then one 1140 * ref/hardlink, this is ignored. 1141 */ 1142 static int get_inode_path(struct btrfs_root *root, 1143 u64 ino, struct fs_path *path) 1144 { 1145 int ret; 1146 struct btrfs_key key, found_key; 1147 struct btrfs_path *p; 1148 1149 p = alloc_path_for_send(); 1150 if (!p) 1151 return -ENOMEM; 1152 1153 fs_path_reset(path); 1154 1155 key.objectid = ino; 1156 key.type = BTRFS_INODE_REF_KEY; 1157 key.offset = 0; 1158 1159 ret = btrfs_search_slot_for_read(root, &key, p, 1, 0); 1160 if (ret < 0) 1161 goto out; 1162 if (ret) { 1163 ret = 1; 1164 goto out; 1165 } 1166 btrfs_item_key_to_cpu(p->nodes[0], &found_key, p->slots[0]); 1167 if (found_key.objectid != ino || 1168 (found_key.type != BTRFS_INODE_REF_KEY && 1169 found_key.type != BTRFS_INODE_EXTREF_KEY)) { 1170 ret = -ENOENT; 1171 goto out; 1172 } 1173 1174 ret = iterate_inode_ref(root, p, &found_key, 1, 1175 __copy_first_ref, path); 1176 if (ret < 0) 1177 goto out; 1178 ret = 0; 1179 1180 out: 1181 btrfs_free_path(p); 1182 return ret; 1183 } 1184 1185 struct backref_ctx { 1186 struct send_ctx *sctx; 1187 1188 struct btrfs_path *path; 1189 /* number of total found references */ 1190 u64 found; 1191 1192 /* 1193 * used for clones found in send_root. clones found behind cur_objectid 1194 * and cur_offset are not considered as allowed clones. 1195 */ 1196 u64 cur_objectid; 1197 u64 cur_offset; 1198 1199 /* may be truncated in case it's the last extent in a file */ 1200 u64 extent_len; 1201 1202 /* data offset in the file extent item */ 1203 u64 data_offset; 1204 1205 /* Just to check for bugs in backref resolving */ 1206 int found_itself; 1207 }; 1208 1209 static int __clone_root_cmp_bsearch(const void *key, const void *elt) 1210 { 1211 u64 root = (u64)(uintptr_t)key; 1212 struct clone_root *cr = (struct clone_root *)elt; 1213 1214 if (root < cr->root->objectid) 1215 return -1; 1216 if (root > cr->root->objectid) 1217 return 1; 1218 return 0; 1219 } 1220 1221 static int __clone_root_cmp_sort(const void *e1, const void *e2) 1222 { 1223 struct clone_root *cr1 = (struct clone_root *)e1; 1224 struct clone_root *cr2 = (struct clone_root *)e2; 1225 1226 if (cr1->root->objectid < cr2->root->objectid) 1227 return -1; 1228 if (cr1->root->objectid > cr2->root->objectid) 1229 return 1; 1230 return 0; 1231 } 1232 1233 /* 1234 * Called for every backref that is found for the current extent. 1235 * Results are collected in sctx->clone_roots->ino/offset/found_refs 1236 */ 1237 static int __iterate_backrefs(u64 ino, u64 offset, u64 root, void *ctx_) 1238 { 1239 struct backref_ctx *bctx = ctx_; 1240 struct clone_root *found; 1241 int ret; 1242 u64 i_size; 1243 1244 /* First check if the root is in the list of accepted clone sources */ 1245 found = bsearch((void *)(uintptr_t)root, bctx->sctx->clone_roots, 1246 bctx->sctx->clone_roots_cnt, 1247 sizeof(struct clone_root), 1248 __clone_root_cmp_bsearch); 1249 if (!found) 1250 return 0; 1251 1252 if (found->root == bctx->sctx->send_root && 1253 ino == bctx->cur_objectid && 1254 offset == bctx->cur_offset) { 1255 bctx->found_itself = 1; 1256 } 1257 1258 /* 1259 * There are inodes that have extents that lie behind its i_size. Don't 1260 * accept clones from these extents. 1261 */ 1262 ret = __get_inode_info(found->root, bctx->path, ino, &i_size, NULL, NULL, 1263 NULL, NULL, NULL); 1264 btrfs_release_path(bctx->path); 1265 if (ret < 0) 1266 return ret; 1267 1268 if (offset + bctx->data_offset + bctx->extent_len > i_size) 1269 return 0; 1270 1271 /* 1272 * Make sure we don't consider clones from send_root that are 1273 * behind the current inode/offset. 1274 */ 1275 if (found->root == bctx->sctx->send_root) { 1276 /* 1277 * TODO for the moment we don't accept clones from the inode 1278 * that is currently send. We may change this when 1279 * BTRFS_IOC_CLONE_RANGE supports cloning from and to the same 1280 * file. 1281 */ 1282 if (ino >= bctx->cur_objectid) 1283 return 0; 1284 #if 0 1285 if (ino > bctx->cur_objectid) 1286 return 0; 1287 if (offset + bctx->extent_len > bctx->cur_offset) 1288 return 0; 1289 #endif 1290 } 1291 1292 bctx->found++; 1293 found->found_refs++; 1294 if (ino < found->ino) { 1295 found->ino = ino; 1296 found->offset = offset; 1297 } else if (found->ino == ino) { 1298 /* 1299 * same extent found more then once in the same file. 1300 */ 1301 if (found->offset > offset + bctx->extent_len) 1302 found->offset = offset; 1303 } 1304 1305 return 0; 1306 } 1307 1308 /* 1309 * Given an inode, offset and extent item, it finds a good clone for a clone 1310 * instruction. Returns -ENOENT when none could be found. The function makes 1311 * sure that the returned clone is usable at the point where sending is at the 1312 * moment. This means, that no clones are accepted which lie behind the current 1313 * inode+offset. 1314 * 1315 * path must point to the extent item when called. 1316 */ 1317 static int find_extent_clone(struct send_ctx *sctx, 1318 struct btrfs_path *path, 1319 u64 ino, u64 data_offset, 1320 u64 ino_size, 1321 struct clone_root **found) 1322 { 1323 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 1324 int ret; 1325 int extent_type; 1326 u64 logical; 1327 u64 disk_byte; 1328 u64 num_bytes; 1329 u64 extent_item_pos; 1330 u64 flags = 0; 1331 struct btrfs_file_extent_item *fi; 1332 struct extent_buffer *eb = path->nodes[0]; 1333 struct backref_ctx *backref_ctx = NULL; 1334 struct clone_root *cur_clone_root; 1335 struct btrfs_key found_key; 1336 struct btrfs_path *tmp_path; 1337 int compressed; 1338 u32 i; 1339 1340 tmp_path = alloc_path_for_send(); 1341 if (!tmp_path) 1342 return -ENOMEM; 1343 1344 /* We only use this path under the commit sem */ 1345 tmp_path->need_commit_sem = 0; 1346 1347 backref_ctx = kmalloc(sizeof(*backref_ctx), GFP_KERNEL); 1348 if (!backref_ctx) { 1349 ret = -ENOMEM; 1350 goto out; 1351 } 1352 1353 backref_ctx->path = tmp_path; 1354 1355 if (data_offset >= ino_size) { 1356 /* 1357 * There may be extents that lie behind the file's size. 1358 * I at least had this in combination with snapshotting while 1359 * writing large files. 1360 */ 1361 ret = 0; 1362 goto out; 1363 } 1364 1365 fi = btrfs_item_ptr(eb, path->slots[0], 1366 struct btrfs_file_extent_item); 1367 extent_type = btrfs_file_extent_type(eb, fi); 1368 if (extent_type == BTRFS_FILE_EXTENT_INLINE) { 1369 ret = -ENOENT; 1370 goto out; 1371 } 1372 compressed = btrfs_file_extent_compression(eb, fi); 1373 1374 num_bytes = btrfs_file_extent_num_bytes(eb, fi); 1375 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); 1376 if (disk_byte == 0) { 1377 ret = -ENOENT; 1378 goto out; 1379 } 1380 logical = disk_byte + btrfs_file_extent_offset(eb, fi); 1381 1382 down_read(&fs_info->commit_root_sem); 1383 ret = extent_from_logical(fs_info, disk_byte, tmp_path, 1384 &found_key, &flags); 1385 up_read(&fs_info->commit_root_sem); 1386 btrfs_release_path(tmp_path); 1387 1388 if (ret < 0) 1389 goto out; 1390 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { 1391 ret = -EIO; 1392 goto out; 1393 } 1394 1395 /* 1396 * Setup the clone roots. 1397 */ 1398 for (i = 0; i < sctx->clone_roots_cnt; i++) { 1399 cur_clone_root = sctx->clone_roots + i; 1400 cur_clone_root->ino = (u64)-1; 1401 cur_clone_root->offset = 0; 1402 cur_clone_root->found_refs = 0; 1403 } 1404 1405 backref_ctx->sctx = sctx; 1406 backref_ctx->found = 0; 1407 backref_ctx->cur_objectid = ino; 1408 backref_ctx->cur_offset = data_offset; 1409 backref_ctx->found_itself = 0; 1410 backref_ctx->extent_len = num_bytes; 1411 /* 1412 * For non-compressed extents iterate_extent_inodes() gives us extent 1413 * offsets that already take into account the data offset, but not for 1414 * compressed extents, since the offset is logical and not relative to 1415 * the physical extent locations. We must take this into account to 1416 * avoid sending clone offsets that go beyond the source file's size, 1417 * which would result in the clone ioctl failing with -EINVAL on the 1418 * receiving end. 1419 */ 1420 if (compressed == BTRFS_COMPRESS_NONE) 1421 backref_ctx->data_offset = 0; 1422 else 1423 backref_ctx->data_offset = btrfs_file_extent_offset(eb, fi); 1424 1425 /* 1426 * The last extent of a file may be too large due to page alignment. 1427 * We need to adjust extent_len in this case so that the checks in 1428 * __iterate_backrefs work. 1429 */ 1430 if (data_offset + num_bytes >= ino_size) 1431 backref_ctx->extent_len = ino_size - data_offset; 1432 1433 /* 1434 * Now collect all backrefs. 1435 */ 1436 if (compressed == BTRFS_COMPRESS_NONE) 1437 extent_item_pos = logical - found_key.objectid; 1438 else 1439 extent_item_pos = 0; 1440 ret = iterate_extent_inodes(fs_info, found_key.objectid, 1441 extent_item_pos, 1, __iterate_backrefs, 1442 backref_ctx); 1443 1444 if (ret < 0) 1445 goto out; 1446 1447 if (!backref_ctx->found_itself) { 1448 /* found a bug in backref code? */ 1449 ret = -EIO; 1450 btrfs_err(fs_info, 1451 "did not find backref in send_root. inode=%llu, offset=%llu, disk_byte=%llu found extent=%llu", 1452 ino, data_offset, disk_byte, found_key.objectid); 1453 goto out; 1454 } 1455 1456 btrfs_debug(fs_info, 1457 "find_extent_clone: data_offset=%llu, ino=%llu, num_bytes=%llu, logical=%llu", 1458 data_offset, ino, num_bytes, logical); 1459 1460 if (!backref_ctx->found) 1461 btrfs_debug(fs_info, "no clones found"); 1462 1463 cur_clone_root = NULL; 1464 for (i = 0; i < sctx->clone_roots_cnt; i++) { 1465 if (sctx->clone_roots[i].found_refs) { 1466 if (!cur_clone_root) 1467 cur_clone_root = sctx->clone_roots + i; 1468 else if (sctx->clone_roots[i].root == sctx->send_root) 1469 /* prefer clones from send_root over others */ 1470 cur_clone_root = sctx->clone_roots + i; 1471 } 1472 1473 } 1474 1475 if (cur_clone_root) { 1476 *found = cur_clone_root; 1477 ret = 0; 1478 } else { 1479 ret = -ENOENT; 1480 } 1481 1482 out: 1483 btrfs_free_path(tmp_path); 1484 kfree(backref_ctx); 1485 return ret; 1486 } 1487 1488 static int read_symlink(struct btrfs_root *root, 1489 u64 ino, 1490 struct fs_path *dest) 1491 { 1492 int ret; 1493 struct btrfs_path *path; 1494 struct btrfs_key key; 1495 struct btrfs_file_extent_item *ei; 1496 u8 type; 1497 u8 compression; 1498 unsigned long off; 1499 int len; 1500 1501 path = alloc_path_for_send(); 1502 if (!path) 1503 return -ENOMEM; 1504 1505 key.objectid = ino; 1506 key.type = BTRFS_EXTENT_DATA_KEY; 1507 key.offset = 0; 1508 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 1509 if (ret < 0) 1510 goto out; 1511 if (ret) { 1512 /* 1513 * An empty symlink inode. Can happen in rare error paths when 1514 * creating a symlink (transaction committed before the inode 1515 * eviction handler removed the symlink inode items and a crash 1516 * happened in between or the subvol was snapshoted in between). 1517 * Print an informative message to dmesg/syslog so that the user 1518 * can delete the symlink. 1519 */ 1520 btrfs_err(root->fs_info, 1521 "Found empty symlink inode %llu at root %llu", 1522 ino, root->root_key.objectid); 1523 ret = -EIO; 1524 goto out; 1525 } 1526 1527 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 1528 struct btrfs_file_extent_item); 1529 type = btrfs_file_extent_type(path->nodes[0], ei); 1530 compression = btrfs_file_extent_compression(path->nodes[0], ei); 1531 BUG_ON(type != BTRFS_FILE_EXTENT_INLINE); 1532 BUG_ON(compression); 1533 1534 off = btrfs_file_extent_inline_start(ei); 1535 len = btrfs_file_extent_inline_len(path->nodes[0], path->slots[0], ei); 1536 1537 ret = fs_path_add_from_extent_buffer(dest, path->nodes[0], off, len); 1538 1539 out: 1540 btrfs_free_path(path); 1541 return ret; 1542 } 1543 1544 /* 1545 * Helper function to generate a file name that is unique in the root of 1546 * send_root and parent_root. This is used to generate names for orphan inodes. 1547 */ 1548 static int gen_unique_name(struct send_ctx *sctx, 1549 u64 ino, u64 gen, 1550 struct fs_path *dest) 1551 { 1552 int ret = 0; 1553 struct btrfs_path *path; 1554 struct btrfs_dir_item *di; 1555 char tmp[64]; 1556 int len; 1557 u64 idx = 0; 1558 1559 path = alloc_path_for_send(); 1560 if (!path) 1561 return -ENOMEM; 1562 1563 while (1) { 1564 len = snprintf(tmp, sizeof(tmp), "o%llu-%llu-%llu", 1565 ino, gen, idx); 1566 ASSERT(len < sizeof(tmp)); 1567 1568 di = btrfs_lookup_dir_item(NULL, sctx->send_root, 1569 path, BTRFS_FIRST_FREE_OBJECTID, 1570 tmp, strlen(tmp), 0); 1571 btrfs_release_path(path); 1572 if (IS_ERR(di)) { 1573 ret = PTR_ERR(di); 1574 goto out; 1575 } 1576 if (di) { 1577 /* not unique, try again */ 1578 idx++; 1579 continue; 1580 } 1581 1582 if (!sctx->parent_root) { 1583 /* unique */ 1584 ret = 0; 1585 break; 1586 } 1587 1588 di = btrfs_lookup_dir_item(NULL, sctx->parent_root, 1589 path, BTRFS_FIRST_FREE_OBJECTID, 1590 tmp, strlen(tmp), 0); 1591 btrfs_release_path(path); 1592 if (IS_ERR(di)) { 1593 ret = PTR_ERR(di); 1594 goto out; 1595 } 1596 if (di) { 1597 /* not unique, try again */ 1598 idx++; 1599 continue; 1600 } 1601 /* unique */ 1602 break; 1603 } 1604 1605 ret = fs_path_add(dest, tmp, strlen(tmp)); 1606 1607 out: 1608 btrfs_free_path(path); 1609 return ret; 1610 } 1611 1612 enum inode_state { 1613 inode_state_no_change, 1614 inode_state_will_create, 1615 inode_state_did_create, 1616 inode_state_will_delete, 1617 inode_state_did_delete, 1618 }; 1619 1620 static int get_cur_inode_state(struct send_ctx *sctx, u64 ino, u64 gen) 1621 { 1622 int ret; 1623 int left_ret; 1624 int right_ret; 1625 u64 left_gen; 1626 u64 right_gen; 1627 1628 ret = get_inode_info(sctx->send_root, ino, NULL, &left_gen, NULL, NULL, 1629 NULL, NULL); 1630 if (ret < 0 && ret != -ENOENT) 1631 goto out; 1632 left_ret = ret; 1633 1634 if (!sctx->parent_root) { 1635 right_ret = -ENOENT; 1636 } else { 1637 ret = get_inode_info(sctx->parent_root, ino, NULL, &right_gen, 1638 NULL, NULL, NULL, NULL); 1639 if (ret < 0 && ret != -ENOENT) 1640 goto out; 1641 right_ret = ret; 1642 } 1643 1644 if (!left_ret && !right_ret) { 1645 if (left_gen == gen && right_gen == gen) { 1646 ret = inode_state_no_change; 1647 } else if (left_gen == gen) { 1648 if (ino < sctx->send_progress) 1649 ret = inode_state_did_create; 1650 else 1651 ret = inode_state_will_create; 1652 } else if (right_gen == gen) { 1653 if (ino < sctx->send_progress) 1654 ret = inode_state_did_delete; 1655 else 1656 ret = inode_state_will_delete; 1657 } else { 1658 ret = -ENOENT; 1659 } 1660 } else if (!left_ret) { 1661 if (left_gen == gen) { 1662 if (ino < sctx->send_progress) 1663 ret = inode_state_did_create; 1664 else 1665 ret = inode_state_will_create; 1666 } else { 1667 ret = -ENOENT; 1668 } 1669 } else if (!right_ret) { 1670 if (right_gen == gen) { 1671 if (ino < sctx->send_progress) 1672 ret = inode_state_did_delete; 1673 else 1674 ret = inode_state_will_delete; 1675 } else { 1676 ret = -ENOENT; 1677 } 1678 } else { 1679 ret = -ENOENT; 1680 } 1681 1682 out: 1683 return ret; 1684 } 1685 1686 static int is_inode_existent(struct send_ctx *sctx, u64 ino, u64 gen) 1687 { 1688 int ret; 1689 1690 if (ino == BTRFS_FIRST_FREE_OBJECTID) 1691 return 1; 1692 1693 ret = get_cur_inode_state(sctx, ino, gen); 1694 if (ret < 0) 1695 goto out; 1696 1697 if (ret == inode_state_no_change || 1698 ret == inode_state_did_create || 1699 ret == inode_state_will_delete) 1700 ret = 1; 1701 else 1702 ret = 0; 1703 1704 out: 1705 return ret; 1706 } 1707 1708 /* 1709 * Helper function to lookup a dir item in a dir. 1710 */ 1711 static int lookup_dir_item_inode(struct btrfs_root *root, 1712 u64 dir, const char *name, int name_len, 1713 u64 *found_inode, 1714 u8 *found_type) 1715 { 1716 int ret = 0; 1717 struct btrfs_dir_item *di; 1718 struct btrfs_key key; 1719 struct btrfs_path *path; 1720 1721 path = alloc_path_for_send(); 1722 if (!path) 1723 return -ENOMEM; 1724 1725 di = btrfs_lookup_dir_item(NULL, root, path, 1726 dir, name, name_len, 0); 1727 if (!di) { 1728 ret = -ENOENT; 1729 goto out; 1730 } 1731 if (IS_ERR(di)) { 1732 ret = PTR_ERR(di); 1733 goto out; 1734 } 1735 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &key); 1736 if (key.type == BTRFS_ROOT_ITEM_KEY) { 1737 ret = -ENOENT; 1738 goto out; 1739 } 1740 *found_inode = key.objectid; 1741 *found_type = btrfs_dir_type(path->nodes[0], di); 1742 1743 out: 1744 btrfs_free_path(path); 1745 return ret; 1746 } 1747 1748 /* 1749 * Looks up the first btrfs_inode_ref of a given ino. It returns the parent dir, 1750 * generation of the parent dir and the name of the dir entry. 1751 */ 1752 static int get_first_ref(struct btrfs_root *root, u64 ino, 1753 u64 *dir, u64 *dir_gen, struct fs_path *name) 1754 { 1755 int ret; 1756 struct btrfs_key key; 1757 struct btrfs_key found_key; 1758 struct btrfs_path *path; 1759 int len; 1760 u64 parent_dir; 1761 1762 path = alloc_path_for_send(); 1763 if (!path) 1764 return -ENOMEM; 1765 1766 key.objectid = ino; 1767 key.type = BTRFS_INODE_REF_KEY; 1768 key.offset = 0; 1769 1770 ret = btrfs_search_slot_for_read(root, &key, path, 1, 0); 1771 if (ret < 0) 1772 goto out; 1773 if (!ret) 1774 btrfs_item_key_to_cpu(path->nodes[0], &found_key, 1775 path->slots[0]); 1776 if (ret || found_key.objectid != ino || 1777 (found_key.type != BTRFS_INODE_REF_KEY && 1778 found_key.type != BTRFS_INODE_EXTREF_KEY)) { 1779 ret = -ENOENT; 1780 goto out; 1781 } 1782 1783 if (found_key.type == BTRFS_INODE_REF_KEY) { 1784 struct btrfs_inode_ref *iref; 1785 iref = btrfs_item_ptr(path->nodes[0], path->slots[0], 1786 struct btrfs_inode_ref); 1787 len = btrfs_inode_ref_name_len(path->nodes[0], iref); 1788 ret = fs_path_add_from_extent_buffer(name, path->nodes[0], 1789 (unsigned long)(iref + 1), 1790 len); 1791 parent_dir = found_key.offset; 1792 } else { 1793 struct btrfs_inode_extref *extref; 1794 extref = btrfs_item_ptr(path->nodes[0], path->slots[0], 1795 struct btrfs_inode_extref); 1796 len = btrfs_inode_extref_name_len(path->nodes[0], extref); 1797 ret = fs_path_add_from_extent_buffer(name, path->nodes[0], 1798 (unsigned long)&extref->name, len); 1799 parent_dir = btrfs_inode_extref_parent(path->nodes[0], extref); 1800 } 1801 if (ret < 0) 1802 goto out; 1803 btrfs_release_path(path); 1804 1805 if (dir_gen) { 1806 ret = get_inode_info(root, parent_dir, NULL, dir_gen, NULL, 1807 NULL, NULL, NULL); 1808 if (ret < 0) 1809 goto out; 1810 } 1811 1812 *dir = parent_dir; 1813 1814 out: 1815 btrfs_free_path(path); 1816 return ret; 1817 } 1818 1819 static int is_first_ref(struct btrfs_root *root, 1820 u64 ino, u64 dir, 1821 const char *name, int name_len) 1822 { 1823 int ret; 1824 struct fs_path *tmp_name; 1825 u64 tmp_dir; 1826 1827 tmp_name = fs_path_alloc(); 1828 if (!tmp_name) 1829 return -ENOMEM; 1830 1831 ret = get_first_ref(root, ino, &tmp_dir, NULL, tmp_name); 1832 if (ret < 0) 1833 goto out; 1834 1835 if (dir != tmp_dir || name_len != fs_path_len(tmp_name)) { 1836 ret = 0; 1837 goto out; 1838 } 1839 1840 ret = !memcmp(tmp_name->start, name, name_len); 1841 1842 out: 1843 fs_path_free(tmp_name); 1844 return ret; 1845 } 1846 1847 /* 1848 * Used by process_recorded_refs to determine if a new ref would overwrite an 1849 * already existing ref. In case it detects an overwrite, it returns the 1850 * inode/gen in who_ino/who_gen. 1851 * When an overwrite is detected, process_recorded_refs does proper orphanizing 1852 * to make sure later references to the overwritten inode are possible. 1853 * Orphanizing is however only required for the first ref of an inode. 1854 * process_recorded_refs does an additional is_first_ref check to see if 1855 * orphanizing is really required. 1856 */ 1857 static int will_overwrite_ref(struct send_ctx *sctx, u64 dir, u64 dir_gen, 1858 const char *name, int name_len, 1859 u64 *who_ino, u64 *who_gen) 1860 { 1861 int ret = 0; 1862 u64 gen; 1863 u64 other_inode = 0; 1864 u8 other_type = 0; 1865 1866 if (!sctx->parent_root) 1867 goto out; 1868 1869 ret = is_inode_existent(sctx, dir, dir_gen); 1870 if (ret <= 0) 1871 goto out; 1872 1873 /* 1874 * If we have a parent root we need to verify that the parent dir was 1875 * not deleted and then re-created, if it was then we have no overwrite 1876 * and we can just unlink this entry. 1877 */ 1878 if (sctx->parent_root && dir != BTRFS_FIRST_FREE_OBJECTID) { 1879 ret = get_inode_info(sctx->parent_root, dir, NULL, &gen, NULL, 1880 NULL, NULL, NULL); 1881 if (ret < 0 && ret != -ENOENT) 1882 goto out; 1883 if (ret) { 1884 ret = 0; 1885 goto out; 1886 } 1887 if (gen != dir_gen) 1888 goto out; 1889 } 1890 1891 ret = lookup_dir_item_inode(sctx->parent_root, dir, name, name_len, 1892 &other_inode, &other_type); 1893 if (ret < 0 && ret != -ENOENT) 1894 goto out; 1895 if (ret) { 1896 ret = 0; 1897 goto out; 1898 } 1899 1900 /* 1901 * Check if the overwritten ref was already processed. If yes, the ref 1902 * was already unlinked/moved, so we can safely assume that we will not 1903 * overwrite anything at this point in time. 1904 */ 1905 if (other_inode > sctx->send_progress || 1906 is_waiting_for_move(sctx, other_inode)) { 1907 ret = get_inode_info(sctx->parent_root, other_inode, NULL, 1908 who_gen, NULL, NULL, NULL, NULL); 1909 if (ret < 0) 1910 goto out; 1911 1912 ret = 1; 1913 *who_ino = other_inode; 1914 } else { 1915 ret = 0; 1916 } 1917 1918 out: 1919 return ret; 1920 } 1921 1922 /* 1923 * Checks if the ref was overwritten by an already processed inode. This is 1924 * used by __get_cur_name_and_parent to find out if the ref was orphanized and 1925 * thus the orphan name needs be used. 1926 * process_recorded_refs also uses it to avoid unlinking of refs that were 1927 * overwritten. 1928 */ 1929 static int did_overwrite_ref(struct send_ctx *sctx, 1930 u64 dir, u64 dir_gen, 1931 u64 ino, u64 ino_gen, 1932 const char *name, int name_len) 1933 { 1934 int ret = 0; 1935 u64 gen; 1936 u64 ow_inode; 1937 u8 other_type; 1938 1939 if (!sctx->parent_root) 1940 goto out; 1941 1942 ret = is_inode_existent(sctx, dir, dir_gen); 1943 if (ret <= 0) 1944 goto out; 1945 1946 if (dir != BTRFS_FIRST_FREE_OBJECTID) { 1947 ret = get_inode_info(sctx->send_root, dir, NULL, &gen, NULL, 1948 NULL, NULL, NULL); 1949 if (ret < 0 && ret != -ENOENT) 1950 goto out; 1951 if (ret) { 1952 ret = 0; 1953 goto out; 1954 } 1955 if (gen != dir_gen) 1956 goto out; 1957 } 1958 1959 /* check if the ref was overwritten by another ref */ 1960 ret = lookup_dir_item_inode(sctx->send_root, dir, name, name_len, 1961 &ow_inode, &other_type); 1962 if (ret < 0 && ret != -ENOENT) 1963 goto out; 1964 if (ret) { 1965 /* was never and will never be overwritten */ 1966 ret = 0; 1967 goto out; 1968 } 1969 1970 ret = get_inode_info(sctx->send_root, ow_inode, NULL, &gen, NULL, NULL, 1971 NULL, NULL); 1972 if (ret < 0) 1973 goto out; 1974 1975 if (ow_inode == ino && gen == ino_gen) { 1976 ret = 0; 1977 goto out; 1978 } 1979 1980 /* 1981 * We know that it is or will be overwritten. Check this now. 1982 * The current inode being processed might have been the one that caused 1983 * inode 'ino' to be orphanized, therefore check if ow_inode matches 1984 * the current inode being processed. 1985 */ 1986 if ((ow_inode < sctx->send_progress) || 1987 (ino != sctx->cur_ino && ow_inode == sctx->cur_ino && 1988 gen == sctx->cur_inode_gen)) 1989 ret = 1; 1990 else 1991 ret = 0; 1992 1993 out: 1994 return ret; 1995 } 1996 1997 /* 1998 * Same as did_overwrite_ref, but also checks if it is the first ref of an inode 1999 * that got overwritten. This is used by process_recorded_refs to determine 2000 * if it has to use the path as returned by get_cur_path or the orphan name. 2001 */ 2002 static int did_overwrite_first_ref(struct send_ctx *sctx, u64 ino, u64 gen) 2003 { 2004 int ret = 0; 2005 struct fs_path *name = NULL; 2006 u64 dir; 2007 u64 dir_gen; 2008 2009 if (!sctx->parent_root) 2010 goto out; 2011 2012 name = fs_path_alloc(); 2013 if (!name) 2014 return -ENOMEM; 2015 2016 ret = get_first_ref(sctx->parent_root, ino, &dir, &dir_gen, name); 2017 if (ret < 0) 2018 goto out; 2019 2020 ret = did_overwrite_ref(sctx, dir, dir_gen, ino, gen, 2021 name->start, fs_path_len(name)); 2022 2023 out: 2024 fs_path_free(name); 2025 return ret; 2026 } 2027 2028 /* 2029 * Insert a name cache entry. On 32bit kernels the radix tree index is 32bit, 2030 * so we need to do some special handling in case we have clashes. This function 2031 * takes care of this with the help of name_cache_entry::radix_list. 2032 * In case of error, nce is kfreed. 2033 */ 2034 static int name_cache_insert(struct send_ctx *sctx, 2035 struct name_cache_entry *nce) 2036 { 2037 int ret = 0; 2038 struct list_head *nce_head; 2039 2040 nce_head = radix_tree_lookup(&sctx->name_cache, 2041 (unsigned long)nce->ino); 2042 if (!nce_head) { 2043 nce_head = kmalloc(sizeof(*nce_head), GFP_KERNEL); 2044 if (!nce_head) { 2045 kfree(nce); 2046 return -ENOMEM; 2047 } 2048 INIT_LIST_HEAD(nce_head); 2049 2050 ret = radix_tree_insert(&sctx->name_cache, nce->ino, nce_head); 2051 if (ret < 0) { 2052 kfree(nce_head); 2053 kfree(nce); 2054 return ret; 2055 } 2056 } 2057 list_add_tail(&nce->radix_list, nce_head); 2058 list_add_tail(&nce->list, &sctx->name_cache_list); 2059 sctx->name_cache_size++; 2060 2061 return ret; 2062 } 2063 2064 static void name_cache_delete(struct send_ctx *sctx, 2065 struct name_cache_entry *nce) 2066 { 2067 struct list_head *nce_head; 2068 2069 nce_head = radix_tree_lookup(&sctx->name_cache, 2070 (unsigned long)nce->ino); 2071 if (!nce_head) { 2072 btrfs_err(sctx->send_root->fs_info, 2073 "name_cache_delete lookup failed ino %llu cache size %d, leaking memory", 2074 nce->ino, sctx->name_cache_size); 2075 } 2076 2077 list_del(&nce->radix_list); 2078 list_del(&nce->list); 2079 sctx->name_cache_size--; 2080 2081 /* 2082 * We may not get to the final release of nce_head if the lookup fails 2083 */ 2084 if (nce_head && list_empty(nce_head)) { 2085 radix_tree_delete(&sctx->name_cache, (unsigned long)nce->ino); 2086 kfree(nce_head); 2087 } 2088 } 2089 2090 static struct name_cache_entry *name_cache_search(struct send_ctx *sctx, 2091 u64 ino, u64 gen) 2092 { 2093 struct list_head *nce_head; 2094 struct name_cache_entry *cur; 2095 2096 nce_head = radix_tree_lookup(&sctx->name_cache, (unsigned long)ino); 2097 if (!nce_head) 2098 return NULL; 2099 2100 list_for_each_entry(cur, nce_head, radix_list) { 2101 if (cur->ino == ino && cur->gen == gen) 2102 return cur; 2103 } 2104 return NULL; 2105 } 2106 2107 /* 2108 * Removes the entry from the list and adds it back to the end. This marks the 2109 * entry as recently used so that name_cache_clean_unused does not remove it. 2110 */ 2111 static void name_cache_used(struct send_ctx *sctx, struct name_cache_entry *nce) 2112 { 2113 list_del(&nce->list); 2114 list_add_tail(&nce->list, &sctx->name_cache_list); 2115 } 2116 2117 /* 2118 * Remove some entries from the beginning of name_cache_list. 2119 */ 2120 static void name_cache_clean_unused(struct send_ctx *sctx) 2121 { 2122 struct name_cache_entry *nce; 2123 2124 if (sctx->name_cache_size < SEND_CTX_NAME_CACHE_CLEAN_SIZE) 2125 return; 2126 2127 while (sctx->name_cache_size > SEND_CTX_MAX_NAME_CACHE_SIZE) { 2128 nce = list_entry(sctx->name_cache_list.next, 2129 struct name_cache_entry, list); 2130 name_cache_delete(sctx, nce); 2131 kfree(nce); 2132 } 2133 } 2134 2135 static void name_cache_free(struct send_ctx *sctx) 2136 { 2137 struct name_cache_entry *nce; 2138 2139 while (!list_empty(&sctx->name_cache_list)) { 2140 nce = list_entry(sctx->name_cache_list.next, 2141 struct name_cache_entry, list); 2142 name_cache_delete(sctx, nce); 2143 kfree(nce); 2144 } 2145 } 2146 2147 /* 2148 * Used by get_cur_path for each ref up to the root. 2149 * Returns 0 if it succeeded. 2150 * Returns 1 if the inode is not existent or got overwritten. In that case, the 2151 * name is an orphan name. This instructs get_cur_path to stop iterating. If 1 2152 * is returned, parent_ino/parent_gen are not guaranteed to be valid. 2153 * Returns <0 in case of error. 2154 */ 2155 static int __get_cur_name_and_parent(struct send_ctx *sctx, 2156 u64 ino, u64 gen, 2157 u64 *parent_ino, 2158 u64 *parent_gen, 2159 struct fs_path *dest) 2160 { 2161 int ret; 2162 int nce_ret; 2163 struct name_cache_entry *nce = NULL; 2164 2165 /* 2166 * First check if we already did a call to this function with the same 2167 * ino/gen. If yes, check if the cache entry is still up-to-date. If yes 2168 * return the cached result. 2169 */ 2170 nce = name_cache_search(sctx, ino, gen); 2171 if (nce) { 2172 if (ino < sctx->send_progress && nce->need_later_update) { 2173 name_cache_delete(sctx, nce); 2174 kfree(nce); 2175 nce = NULL; 2176 } else { 2177 name_cache_used(sctx, nce); 2178 *parent_ino = nce->parent_ino; 2179 *parent_gen = nce->parent_gen; 2180 ret = fs_path_add(dest, nce->name, nce->name_len); 2181 if (ret < 0) 2182 goto out; 2183 ret = nce->ret; 2184 goto out; 2185 } 2186 } 2187 2188 /* 2189 * If the inode is not existent yet, add the orphan name and return 1. 2190 * This should only happen for the parent dir that we determine in 2191 * __record_new_ref 2192 */ 2193 ret = is_inode_existent(sctx, ino, gen); 2194 if (ret < 0) 2195 goto out; 2196 2197 if (!ret) { 2198 ret = gen_unique_name(sctx, ino, gen, dest); 2199 if (ret < 0) 2200 goto out; 2201 ret = 1; 2202 goto out_cache; 2203 } 2204 2205 /* 2206 * Depending on whether the inode was already processed or not, use 2207 * send_root or parent_root for ref lookup. 2208 */ 2209 if (ino < sctx->send_progress) 2210 ret = get_first_ref(sctx->send_root, ino, 2211 parent_ino, parent_gen, dest); 2212 else 2213 ret = get_first_ref(sctx->parent_root, ino, 2214 parent_ino, parent_gen, dest); 2215 if (ret < 0) 2216 goto out; 2217 2218 /* 2219 * Check if the ref was overwritten by an inode's ref that was processed 2220 * earlier. If yes, treat as orphan and return 1. 2221 */ 2222 ret = did_overwrite_ref(sctx, *parent_ino, *parent_gen, ino, gen, 2223 dest->start, dest->end - dest->start); 2224 if (ret < 0) 2225 goto out; 2226 if (ret) { 2227 fs_path_reset(dest); 2228 ret = gen_unique_name(sctx, ino, gen, dest); 2229 if (ret < 0) 2230 goto out; 2231 ret = 1; 2232 } 2233 2234 out_cache: 2235 /* 2236 * Store the result of the lookup in the name cache. 2237 */ 2238 nce = kmalloc(sizeof(*nce) + fs_path_len(dest) + 1, GFP_KERNEL); 2239 if (!nce) { 2240 ret = -ENOMEM; 2241 goto out; 2242 } 2243 2244 nce->ino = ino; 2245 nce->gen = gen; 2246 nce->parent_ino = *parent_ino; 2247 nce->parent_gen = *parent_gen; 2248 nce->name_len = fs_path_len(dest); 2249 nce->ret = ret; 2250 strcpy(nce->name, dest->start); 2251 2252 if (ino < sctx->send_progress) 2253 nce->need_later_update = 0; 2254 else 2255 nce->need_later_update = 1; 2256 2257 nce_ret = name_cache_insert(sctx, nce); 2258 if (nce_ret < 0) 2259 ret = nce_ret; 2260 name_cache_clean_unused(sctx); 2261 2262 out: 2263 return ret; 2264 } 2265 2266 /* 2267 * Magic happens here. This function returns the first ref to an inode as it 2268 * would look like while receiving the stream at this point in time. 2269 * We walk the path up to the root. For every inode in between, we check if it 2270 * was already processed/sent. If yes, we continue with the parent as found 2271 * in send_root. If not, we continue with the parent as found in parent_root. 2272 * If we encounter an inode that was deleted at this point in time, we use the 2273 * inodes "orphan" name instead of the real name and stop. Same with new inodes 2274 * that were not created yet and overwritten inodes/refs. 2275 * 2276 * When do we have have orphan inodes: 2277 * 1. When an inode is freshly created and thus no valid refs are available yet 2278 * 2. When a directory lost all it's refs (deleted) but still has dir items 2279 * inside which were not processed yet (pending for move/delete). If anyone 2280 * tried to get the path to the dir items, it would get a path inside that 2281 * orphan directory. 2282 * 3. When an inode is moved around or gets new links, it may overwrite the ref 2283 * of an unprocessed inode. If in that case the first ref would be 2284 * overwritten, the overwritten inode gets "orphanized". Later when we 2285 * process this overwritten inode, it is restored at a new place by moving 2286 * the orphan inode. 2287 * 2288 * sctx->send_progress tells this function at which point in time receiving 2289 * would be. 2290 */ 2291 static int get_cur_path(struct send_ctx *sctx, u64 ino, u64 gen, 2292 struct fs_path *dest) 2293 { 2294 int ret = 0; 2295 struct fs_path *name = NULL; 2296 u64 parent_inode = 0; 2297 u64 parent_gen = 0; 2298 int stop = 0; 2299 2300 name = fs_path_alloc(); 2301 if (!name) { 2302 ret = -ENOMEM; 2303 goto out; 2304 } 2305 2306 dest->reversed = 1; 2307 fs_path_reset(dest); 2308 2309 while (!stop && ino != BTRFS_FIRST_FREE_OBJECTID) { 2310 struct waiting_dir_move *wdm; 2311 2312 fs_path_reset(name); 2313 2314 if (is_waiting_for_rm(sctx, ino)) { 2315 ret = gen_unique_name(sctx, ino, gen, name); 2316 if (ret < 0) 2317 goto out; 2318 ret = fs_path_add_path(dest, name); 2319 break; 2320 } 2321 2322 wdm = get_waiting_dir_move(sctx, ino); 2323 if (wdm && wdm->orphanized) { 2324 ret = gen_unique_name(sctx, ino, gen, name); 2325 stop = 1; 2326 } else if (wdm) { 2327 ret = get_first_ref(sctx->parent_root, ino, 2328 &parent_inode, &parent_gen, name); 2329 } else { 2330 ret = __get_cur_name_and_parent(sctx, ino, gen, 2331 &parent_inode, 2332 &parent_gen, name); 2333 if (ret) 2334 stop = 1; 2335 } 2336 2337 if (ret < 0) 2338 goto out; 2339 2340 ret = fs_path_add_path(dest, name); 2341 if (ret < 0) 2342 goto out; 2343 2344 ino = parent_inode; 2345 gen = parent_gen; 2346 } 2347 2348 out: 2349 fs_path_free(name); 2350 if (!ret) 2351 fs_path_unreverse(dest); 2352 return ret; 2353 } 2354 2355 /* 2356 * Sends a BTRFS_SEND_C_SUBVOL command/item to userspace 2357 */ 2358 static int send_subvol_begin(struct send_ctx *sctx) 2359 { 2360 int ret; 2361 struct btrfs_root *send_root = sctx->send_root; 2362 struct btrfs_root *parent_root = sctx->parent_root; 2363 struct btrfs_path *path; 2364 struct btrfs_key key; 2365 struct btrfs_root_ref *ref; 2366 struct extent_buffer *leaf; 2367 char *name = NULL; 2368 int namelen; 2369 2370 path = btrfs_alloc_path(); 2371 if (!path) 2372 return -ENOMEM; 2373 2374 name = kmalloc(BTRFS_PATH_NAME_MAX, GFP_KERNEL); 2375 if (!name) { 2376 btrfs_free_path(path); 2377 return -ENOMEM; 2378 } 2379 2380 key.objectid = send_root->objectid; 2381 key.type = BTRFS_ROOT_BACKREF_KEY; 2382 key.offset = 0; 2383 2384 ret = btrfs_search_slot_for_read(send_root->fs_info->tree_root, 2385 &key, path, 1, 0); 2386 if (ret < 0) 2387 goto out; 2388 if (ret) { 2389 ret = -ENOENT; 2390 goto out; 2391 } 2392 2393 leaf = path->nodes[0]; 2394 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); 2395 if (key.type != BTRFS_ROOT_BACKREF_KEY || 2396 key.objectid != send_root->objectid) { 2397 ret = -ENOENT; 2398 goto out; 2399 } 2400 ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref); 2401 namelen = btrfs_root_ref_name_len(leaf, ref); 2402 read_extent_buffer(leaf, name, (unsigned long)(ref + 1), namelen); 2403 btrfs_release_path(path); 2404 2405 if (parent_root) { 2406 ret = begin_cmd(sctx, BTRFS_SEND_C_SNAPSHOT); 2407 if (ret < 0) 2408 goto out; 2409 } else { 2410 ret = begin_cmd(sctx, BTRFS_SEND_C_SUBVOL); 2411 if (ret < 0) 2412 goto out; 2413 } 2414 2415 TLV_PUT_STRING(sctx, BTRFS_SEND_A_PATH, name, namelen); 2416 2417 if (!btrfs_is_empty_uuid(sctx->send_root->root_item.received_uuid)) 2418 TLV_PUT_UUID(sctx, BTRFS_SEND_A_UUID, 2419 sctx->send_root->root_item.received_uuid); 2420 else 2421 TLV_PUT_UUID(sctx, BTRFS_SEND_A_UUID, 2422 sctx->send_root->root_item.uuid); 2423 2424 TLV_PUT_U64(sctx, BTRFS_SEND_A_CTRANSID, 2425 le64_to_cpu(sctx->send_root->root_item.ctransid)); 2426 if (parent_root) { 2427 if (!btrfs_is_empty_uuid(parent_root->root_item.received_uuid)) 2428 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 2429 parent_root->root_item.received_uuid); 2430 else 2431 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 2432 parent_root->root_item.uuid); 2433 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID, 2434 le64_to_cpu(sctx->parent_root->root_item.ctransid)); 2435 } 2436 2437 ret = send_cmd(sctx); 2438 2439 tlv_put_failure: 2440 out: 2441 btrfs_free_path(path); 2442 kfree(name); 2443 return ret; 2444 } 2445 2446 static int send_truncate(struct send_ctx *sctx, u64 ino, u64 gen, u64 size) 2447 { 2448 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 2449 int ret = 0; 2450 struct fs_path *p; 2451 2452 btrfs_debug(fs_info, "send_truncate %llu size=%llu", ino, size); 2453 2454 p = fs_path_alloc(); 2455 if (!p) 2456 return -ENOMEM; 2457 2458 ret = begin_cmd(sctx, BTRFS_SEND_C_TRUNCATE); 2459 if (ret < 0) 2460 goto out; 2461 2462 ret = get_cur_path(sctx, ino, gen, p); 2463 if (ret < 0) 2464 goto out; 2465 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2466 TLV_PUT_U64(sctx, BTRFS_SEND_A_SIZE, size); 2467 2468 ret = send_cmd(sctx); 2469 2470 tlv_put_failure: 2471 out: 2472 fs_path_free(p); 2473 return ret; 2474 } 2475 2476 static int send_chmod(struct send_ctx *sctx, u64 ino, u64 gen, u64 mode) 2477 { 2478 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 2479 int ret = 0; 2480 struct fs_path *p; 2481 2482 btrfs_debug(fs_info, "send_chmod %llu mode=%llu", ino, mode); 2483 2484 p = fs_path_alloc(); 2485 if (!p) 2486 return -ENOMEM; 2487 2488 ret = begin_cmd(sctx, BTRFS_SEND_C_CHMOD); 2489 if (ret < 0) 2490 goto out; 2491 2492 ret = get_cur_path(sctx, ino, gen, p); 2493 if (ret < 0) 2494 goto out; 2495 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2496 TLV_PUT_U64(sctx, BTRFS_SEND_A_MODE, mode & 07777); 2497 2498 ret = send_cmd(sctx); 2499 2500 tlv_put_failure: 2501 out: 2502 fs_path_free(p); 2503 return ret; 2504 } 2505 2506 static int send_chown(struct send_ctx *sctx, u64 ino, u64 gen, u64 uid, u64 gid) 2507 { 2508 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 2509 int ret = 0; 2510 struct fs_path *p; 2511 2512 btrfs_debug(fs_info, "send_chown %llu uid=%llu, gid=%llu", 2513 ino, uid, gid); 2514 2515 p = fs_path_alloc(); 2516 if (!p) 2517 return -ENOMEM; 2518 2519 ret = begin_cmd(sctx, BTRFS_SEND_C_CHOWN); 2520 if (ret < 0) 2521 goto out; 2522 2523 ret = get_cur_path(sctx, ino, gen, p); 2524 if (ret < 0) 2525 goto out; 2526 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2527 TLV_PUT_U64(sctx, BTRFS_SEND_A_UID, uid); 2528 TLV_PUT_U64(sctx, BTRFS_SEND_A_GID, gid); 2529 2530 ret = send_cmd(sctx); 2531 2532 tlv_put_failure: 2533 out: 2534 fs_path_free(p); 2535 return ret; 2536 } 2537 2538 static int send_utimes(struct send_ctx *sctx, u64 ino, u64 gen) 2539 { 2540 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 2541 int ret = 0; 2542 struct fs_path *p = NULL; 2543 struct btrfs_inode_item *ii; 2544 struct btrfs_path *path = NULL; 2545 struct extent_buffer *eb; 2546 struct btrfs_key key; 2547 int slot; 2548 2549 btrfs_debug(fs_info, "send_utimes %llu", ino); 2550 2551 p = fs_path_alloc(); 2552 if (!p) 2553 return -ENOMEM; 2554 2555 path = alloc_path_for_send(); 2556 if (!path) { 2557 ret = -ENOMEM; 2558 goto out; 2559 } 2560 2561 key.objectid = ino; 2562 key.type = BTRFS_INODE_ITEM_KEY; 2563 key.offset = 0; 2564 ret = btrfs_search_slot(NULL, sctx->send_root, &key, path, 0, 0); 2565 if (ret > 0) 2566 ret = -ENOENT; 2567 if (ret < 0) 2568 goto out; 2569 2570 eb = path->nodes[0]; 2571 slot = path->slots[0]; 2572 ii = btrfs_item_ptr(eb, slot, struct btrfs_inode_item); 2573 2574 ret = begin_cmd(sctx, BTRFS_SEND_C_UTIMES); 2575 if (ret < 0) 2576 goto out; 2577 2578 ret = get_cur_path(sctx, ino, gen, p); 2579 if (ret < 0) 2580 goto out; 2581 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2582 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_ATIME, eb, &ii->atime); 2583 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_MTIME, eb, &ii->mtime); 2584 TLV_PUT_BTRFS_TIMESPEC(sctx, BTRFS_SEND_A_CTIME, eb, &ii->ctime); 2585 /* TODO Add otime support when the otime patches get into upstream */ 2586 2587 ret = send_cmd(sctx); 2588 2589 tlv_put_failure: 2590 out: 2591 fs_path_free(p); 2592 btrfs_free_path(path); 2593 return ret; 2594 } 2595 2596 /* 2597 * Sends a BTRFS_SEND_C_MKXXX or SYMLINK command to user space. We don't have 2598 * a valid path yet because we did not process the refs yet. So, the inode 2599 * is created as orphan. 2600 */ 2601 static int send_create_inode(struct send_ctx *sctx, u64 ino) 2602 { 2603 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 2604 int ret = 0; 2605 struct fs_path *p; 2606 int cmd; 2607 u64 gen; 2608 u64 mode; 2609 u64 rdev; 2610 2611 btrfs_debug(fs_info, "send_create_inode %llu", ino); 2612 2613 p = fs_path_alloc(); 2614 if (!p) 2615 return -ENOMEM; 2616 2617 if (ino != sctx->cur_ino) { 2618 ret = get_inode_info(sctx->send_root, ino, NULL, &gen, &mode, 2619 NULL, NULL, &rdev); 2620 if (ret < 0) 2621 goto out; 2622 } else { 2623 gen = sctx->cur_inode_gen; 2624 mode = sctx->cur_inode_mode; 2625 rdev = sctx->cur_inode_rdev; 2626 } 2627 2628 if (S_ISREG(mode)) { 2629 cmd = BTRFS_SEND_C_MKFILE; 2630 } else if (S_ISDIR(mode)) { 2631 cmd = BTRFS_SEND_C_MKDIR; 2632 } else if (S_ISLNK(mode)) { 2633 cmd = BTRFS_SEND_C_SYMLINK; 2634 } else if (S_ISCHR(mode) || S_ISBLK(mode)) { 2635 cmd = BTRFS_SEND_C_MKNOD; 2636 } else if (S_ISFIFO(mode)) { 2637 cmd = BTRFS_SEND_C_MKFIFO; 2638 } else if (S_ISSOCK(mode)) { 2639 cmd = BTRFS_SEND_C_MKSOCK; 2640 } else { 2641 btrfs_warn(sctx->send_root->fs_info, "unexpected inode type %o", 2642 (int)(mode & S_IFMT)); 2643 ret = -ENOTSUPP; 2644 goto out; 2645 } 2646 2647 ret = begin_cmd(sctx, cmd); 2648 if (ret < 0) 2649 goto out; 2650 2651 ret = gen_unique_name(sctx, ino, gen, p); 2652 if (ret < 0) 2653 goto out; 2654 2655 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 2656 TLV_PUT_U64(sctx, BTRFS_SEND_A_INO, ino); 2657 2658 if (S_ISLNK(mode)) { 2659 fs_path_reset(p); 2660 ret = read_symlink(sctx->send_root, ino, p); 2661 if (ret < 0) 2662 goto out; 2663 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH_LINK, p); 2664 } else if (S_ISCHR(mode) || S_ISBLK(mode) || 2665 S_ISFIFO(mode) || S_ISSOCK(mode)) { 2666 TLV_PUT_U64(sctx, BTRFS_SEND_A_RDEV, new_encode_dev(rdev)); 2667 TLV_PUT_U64(sctx, BTRFS_SEND_A_MODE, mode); 2668 } 2669 2670 ret = send_cmd(sctx); 2671 if (ret < 0) 2672 goto out; 2673 2674 2675 tlv_put_failure: 2676 out: 2677 fs_path_free(p); 2678 return ret; 2679 } 2680 2681 /* 2682 * We need some special handling for inodes that get processed before the parent 2683 * directory got created. See process_recorded_refs for details. 2684 * This function does the check if we already created the dir out of order. 2685 */ 2686 static int did_create_dir(struct send_ctx *sctx, u64 dir) 2687 { 2688 int ret = 0; 2689 struct btrfs_path *path = NULL; 2690 struct btrfs_key key; 2691 struct btrfs_key found_key; 2692 struct btrfs_key di_key; 2693 struct extent_buffer *eb; 2694 struct btrfs_dir_item *di; 2695 int slot; 2696 2697 path = alloc_path_for_send(); 2698 if (!path) { 2699 ret = -ENOMEM; 2700 goto out; 2701 } 2702 2703 key.objectid = dir; 2704 key.type = BTRFS_DIR_INDEX_KEY; 2705 key.offset = 0; 2706 ret = btrfs_search_slot(NULL, sctx->send_root, &key, path, 0, 0); 2707 if (ret < 0) 2708 goto out; 2709 2710 while (1) { 2711 eb = path->nodes[0]; 2712 slot = path->slots[0]; 2713 if (slot >= btrfs_header_nritems(eb)) { 2714 ret = btrfs_next_leaf(sctx->send_root, path); 2715 if (ret < 0) { 2716 goto out; 2717 } else if (ret > 0) { 2718 ret = 0; 2719 break; 2720 } 2721 continue; 2722 } 2723 2724 btrfs_item_key_to_cpu(eb, &found_key, slot); 2725 if (found_key.objectid != key.objectid || 2726 found_key.type != key.type) { 2727 ret = 0; 2728 goto out; 2729 } 2730 2731 di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item); 2732 btrfs_dir_item_key_to_cpu(eb, di, &di_key); 2733 2734 if (di_key.type != BTRFS_ROOT_ITEM_KEY && 2735 di_key.objectid < sctx->send_progress) { 2736 ret = 1; 2737 goto out; 2738 } 2739 2740 path->slots[0]++; 2741 } 2742 2743 out: 2744 btrfs_free_path(path); 2745 return ret; 2746 } 2747 2748 /* 2749 * Only creates the inode if it is: 2750 * 1. Not a directory 2751 * 2. Or a directory which was not created already due to out of order 2752 * directories. See did_create_dir and process_recorded_refs for details. 2753 */ 2754 static int send_create_inode_if_needed(struct send_ctx *sctx) 2755 { 2756 int ret; 2757 2758 if (S_ISDIR(sctx->cur_inode_mode)) { 2759 ret = did_create_dir(sctx, sctx->cur_ino); 2760 if (ret < 0) 2761 goto out; 2762 if (ret) { 2763 ret = 0; 2764 goto out; 2765 } 2766 } 2767 2768 ret = send_create_inode(sctx, sctx->cur_ino); 2769 if (ret < 0) 2770 goto out; 2771 2772 out: 2773 return ret; 2774 } 2775 2776 struct recorded_ref { 2777 struct list_head list; 2778 char *name; 2779 struct fs_path *full_path; 2780 u64 dir; 2781 u64 dir_gen; 2782 int name_len; 2783 }; 2784 2785 static void set_ref_path(struct recorded_ref *ref, struct fs_path *path) 2786 { 2787 ref->full_path = path; 2788 ref->name = (char *)kbasename(ref->full_path->start); 2789 ref->name_len = ref->full_path->end - ref->name; 2790 } 2791 2792 /* 2793 * We need to process new refs before deleted refs, but compare_tree gives us 2794 * everything mixed. So we first record all refs and later process them. 2795 * This function is a helper to record one ref. 2796 */ 2797 static int __record_ref(struct list_head *head, u64 dir, 2798 u64 dir_gen, struct fs_path *path) 2799 { 2800 struct recorded_ref *ref; 2801 2802 ref = kmalloc(sizeof(*ref), GFP_KERNEL); 2803 if (!ref) 2804 return -ENOMEM; 2805 2806 ref->dir = dir; 2807 ref->dir_gen = dir_gen; 2808 set_ref_path(ref, path); 2809 list_add_tail(&ref->list, head); 2810 return 0; 2811 } 2812 2813 static int dup_ref(struct recorded_ref *ref, struct list_head *list) 2814 { 2815 struct recorded_ref *new; 2816 2817 new = kmalloc(sizeof(*ref), GFP_KERNEL); 2818 if (!new) 2819 return -ENOMEM; 2820 2821 new->dir = ref->dir; 2822 new->dir_gen = ref->dir_gen; 2823 new->full_path = NULL; 2824 INIT_LIST_HEAD(&new->list); 2825 list_add_tail(&new->list, list); 2826 return 0; 2827 } 2828 2829 static void __free_recorded_refs(struct list_head *head) 2830 { 2831 struct recorded_ref *cur; 2832 2833 while (!list_empty(head)) { 2834 cur = list_entry(head->next, struct recorded_ref, list); 2835 fs_path_free(cur->full_path); 2836 list_del(&cur->list); 2837 kfree(cur); 2838 } 2839 } 2840 2841 static void free_recorded_refs(struct send_ctx *sctx) 2842 { 2843 __free_recorded_refs(&sctx->new_refs); 2844 __free_recorded_refs(&sctx->deleted_refs); 2845 } 2846 2847 /* 2848 * Renames/moves a file/dir to its orphan name. Used when the first 2849 * ref of an unprocessed inode gets overwritten and for all non empty 2850 * directories. 2851 */ 2852 static int orphanize_inode(struct send_ctx *sctx, u64 ino, u64 gen, 2853 struct fs_path *path) 2854 { 2855 int ret; 2856 struct fs_path *orphan; 2857 2858 orphan = fs_path_alloc(); 2859 if (!orphan) 2860 return -ENOMEM; 2861 2862 ret = gen_unique_name(sctx, ino, gen, orphan); 2863 if (ret < 0) 2864 goto out; 2865 2866 ret = send_rename(sctx, path, orphan); 2867 2868 out: 2869 fs_path_free(orphan); 2870 return ret; 2871 } 2872 2873 static struct orphan_dir_info * 2874 add_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino) 2875 { 2876 struct rb_node **p = &sctx->orphan_dirs.rb_node; 2877 struct rb_node *parent = NULL; 2878 struct orphan_dir_info *entry, *odi; 2879 2880 odi = kmalloc(sizeof(*odi), GFP_KERNEL); 2881 if (!odi) 2882 return ERR_PTR(-ENOMEM); 2883 odi->ino = dir_ino; 2884 odi->gen = 0; 2885 2886 while (*p) { 2887 parent = *p; 2888 entry = rb_entry(parent, struct orphan_dir_info, node); 2889 if (dir_ino < entry->ino) { 2890 p = &(*p)->rb_left; 2891 } else if (dir_ino > entry->ino) { 2892 p = &(*p)->rb_right; 2893 } else { 2894 kfree(odi); 2895 return entry; 2896 } 2897 } 2898 2899 rb_link_node(&odi->node, parent, p); 2900 rb_insert_color(&odi->node, &sctx->orphan_dirs); 2901 return odi; 2902 } 2903 2904 static struct orphan_dir_info * 2905 get_orphan_dir_info(struct send_ctx *sctx, u64 dir_ino) 2906 { 2907 struct rb_node *n = sctx->orphan_dirs.rb_node; 2908 struct orphan_dir_info *entry; 2909 2910 while (n) { 2911 entry = rb_entry(n, struct orphan_dir_info, node); 2912 if (dir_ino < entry->ino) 2913 n = n->rb_left; 2914 else if (dir_ino > entry->ino) 2915 n = n->rb_right; 2916 else 2917 return entry; 2918 } 2919 return NULL; 2920 } 2921 2922 static int is_waiting_for_rm(struct send_ctx *sctx, u64 dir_ino) 2923 { 2924 struct orphan_dir_info *odi = get_orphan_dir_info(sctx, dir_ino); 2925 2926 return odi != NULL; 2927 } 2928 2929 static void free_orphan_dir_info(struct send_ctx *sctx, 2930 struct orphan_dir_info *odi) 2931 { 2932 if (!odi) 2933 return; 2934 rb_erase(&odi->node, &sctx->orphan_dirs); 2935 kfree(odi); 2936 } 2937 2938 /* 2939 * Returns 1 if a directory can be removed at this point in time. 2940 * We check this by iterating all dir items and checking if the inode behind 2941 * the dir item was already processed. 2942 */ 2943 static int can_rmdir(struct send_ctx *sctx, u64 dir, u64 dir_gen, 2944 u64 send_progress) 2945 { 2946 int ret = 0; 2947 struct btrfs_root *root = sctx->parent_root; 2948 struct btrfs_path *path; 2949 struct btrfs_key key; 2950 struct btrfs_key found_key; 2951 struct btrfs_key loc; 2952 struct btrfs_dir_item *di; 2953 2954 /* 2955 * Don't try to rmdir the top/root subvolume dir. 2956 */ 2957 if (dir == BTRFS_FIRST_FREE_OBJECTID) 2958 return 0; 2959 2960 path = alloc_path_for_send(); 2961 if (!path) 2962 return -ENOMEM; 2963 2964 key.objectid = dir; 2965 key.type = BTRFS_DIR_INDEX_KEY; 2966 key.offset = 0; 2967 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 2968 if (ret < 0) 2969 goto out; 2970 2971 while (1) { 2972 struct waiting_dir_move *dm; 2973 2974 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) { 2975 ret = btrfs_next_leaf(root, path); 2976 if (ret < 0) 2977 goto out; 2978 else if (ret > 0) 2979 break; 2980 continue; 2981 } 2982 btrfs_item_key_to_cpu(path->nodes[0], &found_key, 2983 path->slots[0]); 2984 if (found_key.objectid != key.objectid || 2985 found_key.type != key.type) 2986 break; 2987 2988 di = btrfs_item_ptr(path->nodes[0], path->slots[0], 2989 struct btrfs_dir_item); 2990 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &loc); 2991 2992 dm = get_waiting_dir_move(sctx, loc.objectid); 2993 if (dm) { 2994 struct orphan_dir_info *odi; 2995 2996 odi = add_orphan_dir_info(sctx, dir); 2997 if (IS_ERR(odi)) { 2998 ret = PTR_ERR(odi); 2999 goto out; 3000 } 3001 odi->gen = dir_gen; 3002 dm->rmdir_ino = dir; 3003 ret = 0; 3004 goto out; 3005 } 3006 3007 if (loc.objectid > send_progress) { 3008 struct orphan_dir_info *odi; 3009 3010 odi = get_orphan_dir_info(sctx, dir); 3011 free_orphan_dir_info(sctx, odi); 3012 ret = 0; 3013 goto out; 3014 } 3015 3016 path->slots[0]++; 3017 } 3018 3019 ret = 1; 3020 3021 out: 3022 btrfs_free_path(path); 3023 return ret; 3024 } 3025 3026 static int is_waiting_for_move(struct send_ctx *sctx, u64 ino) 3027 { 3028 struct waiting_dir_move *entry = get_waiting_dir_move(sctx, ino); 3029 3030 return entry != NULL; 3031 } 3032 3033 static int add_waiting_dir_move(struct send_ctx *sctx, u64 ino, bool orphanized) 3034 { 3035 struct rb_node **p = &sctx->waiting_dir_moves.rb_node; 3036 struct rb_node *parent = NULL; 3037 struct waiting_dir_move *entry, *dm; 3038 3039 dm = kmalloc(sizeof(*dm), GFP_KERNEL); 3040 if (!dm) 3041 return -ENOMEM; 3042 dm->ino = ino; 3043 dm->rmdir_ino = 0; 3044 dm->orphanized = orphanized; 3045 3046 while (*p) { 3047 parent = *p; 3048 entry = rb_entry(parent, struct waiting_dir_move, node); 3049 if (ino < entry->ino) { 3050 p = &(*p)->rb_left; 3051 } else if (ino > entry->ino) { 3052 p = &(*p)->rb_right; 3053 } else { 3054 kfree(dm); 3055 return -EEXIST; 3056 } 3057 } 3058 3059 rb_link_node(&dm->node, parent, p); 3060 rb_insert_color(&dm->node, &sctx->waiting_dir_moves); 3061 return 0; 3062 } 3063 3064 static struct waiting_dir_move * 3065 get_waiting_dir_move(struct send_ctx *sctx, u64 ino) 3066 { 3067 struct rb_node *n = sctx->waiting_dir_moves.rb_node; 3068 struct waiting_dir_move *entry; 3069 3070 while (n) { 3071 entry = rb_entry(n, struct waiting_dir_move, node); 3072 if (ino < entry->ino) 3073 n = n->rb_left; 3074 else if (ino > entry->ino) 3075 n = n->rb_right; 3076 else 3077 return entry; 3078 } 3079 return NULL; 3080 } 3081 3082 static void free_waiting_dir_move(struct send_ctx *sctx, 3083 struct waiting_dir_move *dm) 3084 { 3085 if (!dm) 3086 return; 3087 rb_erase(&dm->node, &sctx->waiting_dir_moves); 3088 kfree(dm); 3089 } 3090 3091 static int add_pending_dir_move(struct send_ctx *sctx, 3092 u64 ino, 3093 u64 ino_gen, 3094 u64 parent_ino, 3095 struct list_head *new_refs, 3096 struct list_head *deleted_refs, 3097 const bool is_orphan) 3098 { 3099 struct rb_node **p = &sctx->pending_dir_moves.rb_node; 3100 struct rb_node *parent = NULL; 3101 struct pending_dir_move *entry = NULL, *pm; 3102 struct recorded_ref *cur; 3103 int exists = 0; 3104 int ret; 3105 3106 pm = kmalloc(sizeof(*pm), GFP_KERNEL); 3107 if (!pm) 3108 return -ENOMEM; 3109 pm->parent_ino = parent_ino; 3110 pm->ino = ino; 3111 pm->gen = ino_gen; 3112 INIT_LIST_HEAD(&pm->list); 3113 INIT_LIST_HEAD(&pm->update_refs); 3114 RB_CLEAR_NODE(&pm->node); 3115 3116 while (*p) { 3117 parent = *p; 3118 entry = rb_entry(parent, struct pending_dir_move, node); 3119 if (parent_ino < entry->parent_ino) { 3120 p = &(*p)->rb_left; 3121 } else if (parent_ino > entry->parent_ino) { 3122 p = &(*p)->rb_right; 3123 } else { 3124 exists = 1; 3125 break; 3126 } 3127 } 3128 3129 list_for_each_entry(cur, deleted_refs, list) { 3130 ret = dup_ref(cur, &pm->update_refs); 3131 if (ret < 0) 3132 goto out; 3133 } 3134 list_for_each_entry(cur, new_refs, list) { 3135 ret = dup_ref(cur, &pm->update_refs); 3136 if (ret < 0) 3137 goto out; 3138 } 3139 3140 ret = add_waiting_dir_move(sctx, pm->ino, is_orphan); 3141 if (ret) 3142 goto out; 3143 3144 if (exists) { 3145 list_add_tail(&pm->list, &entry->list); 3146 } else { 3147 rb_link_node(&pm->node, parent, p); 3148 rb_insert_color(&pm->node, &sctx->pending_dir_moves); 3149 } 3150 ret = 0; 3151 out: 3152 if (ret) { 3153 __free_recorded_refs(&pm->update_refs); 3154 kfree(pm); 3155 } 3156 return ret; 3157 } 3158 3159 static struct pending_dir_move *get_pending_dir_moves(struct send_ctx *sctx, 3160 u64 parent_ino) 3161 { 3162 struct rb_node *n = sctx->pending_dir_moves.rb_node; 3163 struct pending_dir_move *entry; 3164 3165 while (n) { 3166 entry = rb_entry(n, struct pending_dir_move, node); 3167 if (parent_ino < entry->parent_ino) 3168 n = n->rb_left; 3169 else if (parent_ino > entry->parent_ino) 3170 n = n->rb_right; 3171 else 3172 return entry; 3173 } 3174 return NULL; 3175 } 3176 3177 static int path_loop(struct send_ctx *sctx, struct fs_path *name, 3178 u64 ino, u64 gen, u64 *ancestor_ino) 3179 { 3180 int ret = 0; 3181 u64 parent_inode = 0; 3182 u64 parent_gen = 0; 3183 u64 start_ino = ino; 3184 3185 *ancestor_ino = 0; 3186 while (ino != BTRFS_FIRST_FREE_OBJECTID) { 3187 fs_path_reset(name); 3188 3189 if (is_waiting_for_rm(sctx, ino)) 3190 break; 3191 if (is_waiting_for_move(sctx, ino)) { 3192 if (*ancestor_ino == 0) 3193 *ancestor_ino = ino; 3194 ret = get_first_ref(sctx->parent_root, ino, 3195 &parent_inode, &parent_gen, name); 3196 } else { 3197 ret = __get_cur_name_and_parent(sctx, ino, gen, 3198 &parent_inode, 3199 &parent_gen, name); 3200 if (ret > 0) { 3201 ret = 0; 3202 break; 3203 } 3204 } 3205 if (ret < 0) 3206 break; 3207 if (parent_inode == start_ino) { 3208 ret = 1; 3209 if (*ancestor_ino == 0) 3210 *ancestor_ino = ino; 3211 break; 3212 } 3213 ino = parent_inode; 3214 gen = parent_gen; 3215 } 3216 return ret; 3217 } 3218 3219 static int apply_dir_move(struct send_ctx *sctx, struct pending_dir_move *pm) 3220 { 3221 struct fs_path *from_path = NULL; 3222 struct fs_path *to_path = NULL; 3223 struct fs_path *name = NULL; 3224 u64 orig_progress = sctx->send_progress; 3225 struct recorded_ref *cur; 3226 u64 parent_ino, parent_gen; 3227 struct waiting_dir_move *dm = NULL; 3228 u64 rmdir_ino = 0; 3229 u64 ancestor; 3230 bool is_orphan; 3231 int ret; 3232 3233 name = fs_path_alloc(); 3234 from_path = fs_path_alloc(); 3235 if (!name || !from_path) { 3236 ret = -ENOMEM; 3237 goto out; 3238 } 3239 3240 dm = get_waiting_dir_move(sctx, pm->ino); 3241 ASSERT(dm); 3242 rmdir_ino = dm->rmdir_ino; 3243 is_orphan = dm->orphanized; 3244 free_waiting_dir_move(sctx, dm); 3245 3246 if (is_orphan) { 3247 ret = gen_unique_name(sctx, pm->ino, 3248 pm->gen, from_path); 3249 } else { 3250 ret = get_first_ref(sctx->parent_root, pm->ino, 3251 &parent_ino, &parent_gen, name); 3252 if (ret < 0) 3253 goto out; 3254 ret = get_cur_path(sctx, parent_ino, parent_gen, 3255 from_path); 3256 if (ret < 0) 3257 goto out; 3258 ret = fs_path_add_path(from_path, name); 3259 } 3260 if (ret < 0) 3261 goto out; 3262 3263 sctx->send_progress = sctx->cur_ino + 1; 3264 ret = path_loop(sctx, name, pm->ino, pm->gen, &ancestor); 3265 if (ret < 0) 3266 goto out; 3267 if (ret) { 3268 LIST_HEAD(deleted_refs); 3269 ASSERT(ancestor > BTRFS_FIRST_FREE_OBJECTID); 3270 ret = add_pending_dir_move(sctx, pm->ino, pm->gen, ancestor, 3271 &pm->update_refs, &deleted_refs, 3272 is_orphan); 3273 if (ret < 0) 3274 goto out; 3275 if (rmdir_ino) { 3276 dm = get_waiting_dir_move(sctx, pm->ino); 3277 ASSERT(dm); 3278 dm->rmdir_ino = rmdir_ino; 3279 } 3280 goto out; 3281 } 3282 fs_path_reset(name); 3283 to_path = name; 3284 name = NULL; 3285 ret = get_cur_path(sctx, pm->ino, pm->gen, to_path); 3286 if (ret < 0) 3287 goto out; 3288 3289 ret = send_rename(sctx, from_path, to_path); 3290 if (ret < 0) 3291 goto out; 3292 3293 if (rmdir_ino) { 3294 struct orphan_dir_info *odi; 3295 3296 odi = get_orphan_dir_info(sctx, rmdir_ino); 3297 if (!odi) { 3298 /* already deleted */ 3299 goto finish; 3300 } 3301 ret = can_rmdir(sctx, rmdir_ino, odi->gen, sctx->cur_ino); 3302 if (ret < 0) 3303 goto out; 3304 if (!ret) 3305 goto finish; 3306 3307 name = fs_path_alloc(); 3308 if (!name) { 3309 ret = -ENOMEM; 3310 goto out; 3311 } 3312 ret = get_cur_path(sctx, rmdir_ino, odi->gen, name); 3313 if (ret < 0) 3314 goto out; 3315 ret = send_rmdir(sctx, name); 3316 if (ret < 0) 3317 goto out; 3318 free_orphan_dir_info(sctx, odi); 3319 } 3320 3321 finish: 3322 ret = send_utimes(sctx, pm->ino, pm->gen); 3323 if (ret < 0) 3324 goto out; 3325 3326 /* 3327 * After rename/move, need to update the utimes of both new parent(s) 3328 * and old parent(s). 3329 */ 3330 list_for_each_entry(cur, &pm->update_refs, list) { 3331 /* 3332 * The parent inode might have been deleted in the send snapshot 3333 */ 3334 ret = get_inode_info(sctx->send_root, cur->dir, NULL, 3335 NULL, NULL, NULL, NULL, NULL); 3336 if (ret == -ENOENT) { 3337 ret = 0; 3338 continue; 3339 } 3340 if (ret < 0) 3341 goto out; 3342 3343 ret = send_utimes(sctx, cur->dir, cur->dir_gen); 3344 if (ret < 0) 3345 goto out; 3346 } 3347 3348 out: 3349 fs_path_free(name); 3350 fs_path_free(from_path); 3351 fs_path_free(to_path); 3352 sctx->send_progress = orig_progress; 3353 3354 return ret; 3355 } 3356 3357 static void free_pending_move(struct send_ctx *sctx, struct pending_dir_move *m) 3358 { 3359 if (!list_empty(&m->list)) 3360 list_del(&m->list); 3361 if (!RB_EMPTY_NODE(&m->node)) 3362 rb_erase(&m->node, &sctx->pending_dir_moves); 3363 __free_recorded_refs(&m->update_refs); 3364 kfree(m); 3365 } 3366 3367 static void tail_append_pending_moves(struct pending_dir_move *moves, 3368 struct list_head *stack) 3369 { 3370 if (list_empty(&moves->list)) { 3371 list_add_tail(&moves->list, stack); 3372 } else { 3373 LIST_HEAD(list); 3374 list_splice_init(&moves->list, &list); 3375 list_add_tail(&moves->list, stack); 3376 list_splice_tail(&list, stack); 3377 } 3378 } 3379 3380 static int apply_children_dir_moves(struct send_ctx *sctx) 3381 { 3382 struct pending_dir_move *pm; 3383 struct list_head stack; 3384 u64 parent_ino = sctx->cur_ino; 3385 int ret = 0; 3386 3387 pm = get_pending_dir_moves(sctx, parent_ino); 3388 if (!pm) 3389 return 0; 3390 3391 INIT_LIST_HEAD(&stack); 3392 tail_append_pending_moves(pm, &stack); 3393 3394 while (!list_empty(&stack)) { 3395 pm = list_first_entry(&stack, struct pending_dir_move, list); 3396 parent_ino = pm->ino; 3397 ret = apply_dir_move(sctx, pm); 3398 free_pending_move(sctx, pm); 3399 if (ret) 3400 goto out; 3401 pm = get_pending_dir_moves(sctx, parent_ino); 3402 if (pm) 3403 tail_append_pending_moves(pm, &stack); 3404 } 3405 return 0; 3406 3407 out: 3408 while (!list_empty(&stack)) { 3409 pm = list_first_entry(&stack, struct pending_dir_move, list); 3410 free_pending_move(sctx, pm); 3411 } 3412 return ret; 3413 } 3414 3415 /* 3416 * We might need to delay a directory rename even when no ancestor directory 3417 * (in the send root) with a higher inode number than ours (sctx->cur_ino) was 3418 * renamed. This happens when we rename a directory to the old name (the name 3419 * in the parent root) of some other unrelated directory that got its rename 3420 * delayed due to some ancestor with higher number that got renamed. 3421 * 3422 * Example: 3423 * 3424 * Parent snapshot: 3425 * . (ino 256) 3426 * |---- a/ (ino 257) 3427 * | |---- file (ino 260) 3428 * | 3429 * |---- b/ (ino 258) 3430 * |---- c/ (ino 259) 3431 * 3432 * Send snapshot: 3433 * . (ino 256) 3434 * |---- a/ (ino 258) 3435 * |---- x/ (ino 259) 3436 * |---- y/ (ino 257) 3437 * |----- file (ino 260) 3438 * 3439 * Here we can not rename 258 from 'b' to 'a' without the rename of inode 257 3440 * from 'a' to 'x/y' happening first, which in turn depends on the rename of 3441 * inode 259 from 'c' to 'x'. So the order of rename commands the send stream 3442 * must issue is: 3443 * 3444 * 1 - rename 259 from 'c' to 'x' 3445 * 2 - rename 257 from 'a' to 'x/y' 3446 * 3 - rename 258 from 'b' to 'a' 3447 * 3448 * Returns 1 if the rename of sctx->cur_ino needs to be delayed, 0 if it can 3449 * be done right away and < 0 on error. 3450 */ 3451 static int wait_for_dest_dir_move(struct send_ctx *sctx, 3452 struct recorded_ref *parent_ref, 3453 const bool is_orphan) 3454 { 3455 struct btrfs_fs_info *fs_info = sctx->parent_root->fs_info; 3456 struct btrfs_path *path; 3457 struct btrfs_key key; 3458 struct btrfs_key di_key; 3459 struct btrfs_dir_item *di; 3460 u64 left_gen; 3461 u64 right_gen; 3462 int ret = 0; 3463 struct waiting_dir_move *wdm; 3464 3465 if (RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) 3466 return 0; 3467 3468 path = alloc_path_for_send(); 3469 if (!path) 3470 return -ENOMEM; 3471 3472 key.objectid = parent_ref->dir; 3473 key.type = BTRFS_DIR_ITEM_KEY; 3474 key.offset = btrfs_name_hash(parent_ref->name, parent_ref->name_len); 3475 3476 ret = btrfs_search_slot(NULL, sctx->parent_root, &key, path, 0, 0); 3477 if (ret < 0) { 3478 goto out; 3479 } else if (ret > 0) { 3480 ret = 0; 3481 goto out; 3482 } 3483 3484 di = btrfs_match_dir_item_name(fs_info, path, parent_ref->name, 3485 parent_ref->name_len); 3486 if (!di) { 3487 ret = 0; 3488 goto out; 3489 } 3490 /* 3491 * di_key.objectid has the number of the inode that has a dentry in the 3492 * parent directory with the same name that sctx->cur_ino is being 3493 * renamed to. We need to check if that inode is in the send root as 3494 * well and if it is currently marked as an inode with a pending rename, 3495 * if it is, we need to delay the rename of sctx->cur_ino as well, so 3496 * that it happens after that other inode is renamed. 3497 */ 3498 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &di_key); 3499 if (di_key.type != BTRFS_INODE_ITEM_KEY) { 3500 ret = 0; 3501 goto out; 3502 } 3503 3504 ret = get_inode_info(sctx->parent_root, di_key.objectid, NULL, 3505 &left_gen, NULL, NULL, NULL, NULL); 3506 if (ret < 0) 3507 goto out; 3508 ret = get_inode_info(sctx->send_root, di_key.objectid, NULL, 3509 &right_gen, NULL, NULL, NULL, NULL); 3510 if (ret < 0) { 3511 if (ret == -ENOENT) 3512 ret = 0; 3513 goto out; 3514 } 3515 3516 /* Different inode, no need to delay the rename of sctx->cur_ino */ 3517 if (right_gen != left_gen) { 3518 ret = 0; 3519 goto out; 3520 } 3521 3522 wdm = get_waiting_dir_move(sctx, di_key.objectid); 3523 if (wdm && !wdm->orphanized) { 3524 ret = add_pending_dir_move(sctx, 3525 sctx->cur_ino, 3526 sctx->cur_inode_gen, 3527 di_key.objectid, 3528 &sctx->new_refs, 3529 &sctx->deleted_refs, 3530 is_orphan); 3531 if (!ret) 3532 ret = 1; 3533 } 3534 out: 3535 btrfs_free_path(path); 3536 return ret; 3537 } 3538 3539 /* 3540 * Check if ino ino1 is an ancestor of inode ino2 in the given root. 3541 * Return 1 if true, 0 if false and < 0 on error. 3542 */ 3543 static int is_ancestor(struct btrfs_root *root, 3544 const u64 ino1, 3545 const u64 ino1_gen, 3546 const u64 ino2, 3547 struct fs_path *fs_path) 3548 { 3549 u64 ino = ino2; 3550 bool free_path = false; 3551 int ret = 0; 3552 3553 if (!fs_path) { 3554 fs_path = fs_path_alloc(); 3555 if (!fs_path) 3556 return -ENOMEM; 3557 free_path = true; 3558 } 3559 3560 while (ino > BTRFS_FIRST_FREE_OBJECTID) { 3561 u64 parent; 3562 u64 parent_gen; 3563 3564 fs_path_reset(fs_path); 3565 ret = get_first_ref(root, ino, &parent, &parent_gen, fs_path); 3566 if (ret < 0) { 3567 if (ret == -ENOENT && ino == ino2) 3568 ret = 0; 3569 goto out; 3570 } 3571 if (parent == ino1) { 3572 ret = parent_gen == ino1_gen ? 1 : 0; 3573 goto out; 3574 } 3575 ino = parent; 3576 } 3577 out: 3578 if (free_path) 3579 fs_path_free(fs_path); 3580 return ret; 3581 } 3582 3583 static int wait_for_parent_move(struct send_ctx *sctx, 3584 struct recorded_ref *parent_ref, 3585 const bool is_orphan) 3586 { 3587 int ret = 0; 3588 u64 ino = parent_ref->dir; 3589 u64 ino_gen = parent_ref->dir_gen; 3590 u64 parent_ino_before, parent_ino_after; 3591 struct fs_path *path_before = NULL; 3592 struct fs_path *path_after = NULL; 3593 int len1, len2; 3594 3595 path_after = fs_path_alloc(); 3596 path_before = fs_path_alloc(); 3597 if (!path_after || !path_before) { 3598 ret = -ENOMEM; 3599 goto out; 3600 } 3601 3602 /* 3603 * Our current directory inode may not yet be renamed/moved because some 3604 * ancestor (immediate or not) has to be renamed/moved first. So find if 3605 * such ancestor exists and make sure our own rename/move happens after 3606 * that ancestor is processed to avoid path build infinite loops (done 3607 * at get_cur_path()). 3608 */ 3609 while (ino > BTRFS_FIRST_FREE_OBJECTID) { 3610 u64 parent_ino_after_gen; 3611 3612 if (is_waiting_for_move(sctx, ino)) { 3613 /* 3614 * If the current inode is an ancestor of ino in the 3615 * parent root, we need to delay the rename of the 3616 * current inode, otherwise don't delayed the rename 3617 * because we can end up with a circular dependency 3618 * of renames, resulting in some directories never 3619 * getting the respective rename operations issued in 3620 * the send stream or getting into infinite path build 3621 * loops. 3622 */ 3623 ret = is_ancestor(sctx->parent_root, 3624 sctx->cur_ino, sctx->cur_inode_gen, 3625 ino, path_before); 3626 if (ret) 3627 break; 3628 } 3629 3630 fs_path_reset(path_before); 3631 fs_path_reset(path_after); 3632 3633 ret = get_first_ref(sctx->send_root, ino, &parent_ino_after, 3634 &parent_ino_after_gen, path_after); 3635 if (ret < 0) 3636 goto out; 3637 ret = get_first_ref(sctx->parent_root, ino, &parent_ino_before, 3638 NULL, path_before); 3639 if (ret < 0 && ret != -ENOENT) { 3640 goto out; 3641 } else if (ret == -ENOENT) { 3642 ret = 0; 3643 break; 3644 } 3645 3646 len1 = fs_path_len(path_before); 3647 len2 = fs_path_len(path_after); 3648 if (ino > sctx->cur_ino && 3649 (parent_ino_before != parent_ino_after || len1 != len2 || 3650 memcmp(path_before->start, path_after->start, len1))) { 3651 u64 parent_ino_gen; 3652 3653 ret = get_inode_info(sctx->parent_root, ino, NULL, 3654 &parent_ino_gen, NULL, NULL, NULL, 3655 NULL); 3656 if (ret < 0) 3657 goto out; 3658 if (ino_gen == parent_ino_gen) { 3659 ret = 1; 3660 break; 3661 } 3662 } 3663 ino = parent_ino_after; 3664 ino_gen = parent_ino_after_gen; 3665 } 3666 3667 out: 3668 fs_path_free(path_before); 3669 fs_path_free(path_after); 3670 3671 if (ret == 1) { 3672 ret = add_pending_dir_move(sctx, 3673 sctx->cur_ino, 3674 sctx->cur_inode_gen, 3675 ino, 3676 &sctx->new_refs, 3677 &sctx->deleted_refs, 3678 is_orphan); 3679 if (!ret) 3680 ret = 1; 3681 } 3682 3683 return ret; 3684 } 3685 3686 /* 3687 * This does all the move/link/unlink/rmdir magic. 3688 */ 3689 static int process_recorded_refs(struct send_ctx *sctx, int *pending_move) 3690 { 3691 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 3692 int ret = 0; 3693 struct recorded_ref *cur; 3694 struct recorded_ref *cur2; 3695 struct list_head check_dirs; 3696 struct fs_path *valid_path = NULL; 3697 u64 ow_inode = 0; 3698 u64 ow_gen; 3699 int did_overwrite = 0; 3700 int is_orphan = 0; 3701 u64 last_dir_ino_rm = 0; 3702 bool can_rename = true; 3703 bool orphanized_ancestor = false; 3704 3705 btrfs_debug(fs_info, "process_recorded_refs %llu", sctx->cur_ino); 3706 3707 /* 3708 * This should never happen as the root dir always has the same ref 3709 * which is always '..' 3710 */ 3711 BUG_ON(sctx->cur_ino <= BTRFS_FIRST_FREE_OBJECTID); 3712 INIT_LIST_HEAD(&check_dirs); 3713 3714 valid_path = fs_path_alloc(); 3715 if (!valid_path) { 3716 ret = -ENOMEM; 3717 goto out; 3718 } 3719 3720 /* 3721 * First, check if the first ref of the current inode was overwritten 3722 * before. If yes, we know that the current inode was already orphanized 3723 * and thus use the orphan name. If not, we can use get_cur_path to 3724 * get the path of the first ref as it would like while receiving at 3725 * this point in time. 3726 * New inodes are always orphan at the beginning, so force to use the 3727 * orphan name in this case. 3728 * The first ref is stored in valid_path and will be updated if it 3729 * gets moved around. 3730 */ 3731 if (!sctx->cur_inode_new) { 3732 ret = did_overwrite_first_ref(sctx, sctx->cur_ino, 3733 sctx->cur_inode_gen); 3734 if (ret < 0) 3735 goto out; 3736 if (ret) 3737 did_overwrite = 1; 3738 } 3739 if (sctx->cur_inode_new || did_overwrite) { 3740 ret = gen_unique_name(sctx, sctx->cur_ino, 3741 sctx->cur_inode_gen, valid_path); 3742 if (ret < 0) 3743 goto out; 3744 is_orphan = 1; 3745 } else { 3746 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, 3747 valid_path); 3748 if (ret < 0) 3749 goto out; 3750 } 3751 3752 list_for_each_entry(cur, &sctx->new_refs, list) { 3753 /* 3754 * We may have refs where the parent directory does not exist 3755 * yet. This happens if the parent directories inum is higher 3756 * the the current inum. To handle this case, we create the 3757 * parent directory out of order. But we need to check if this 3758 * did already happen before due to other refs in the same dir. 3759 */ 3760 ret = get_cur_inode_state(sctx, cur->dir, cur->dir_gen); 3761 if (ret < 0) 3762 goto out; 3763 if (ret == inode_state_will_create) { 3764 ret = 0; 3765 /* 3766 * First check if any of the current inodes refs did 3767 * already create the dir. 3768 */ 3769 list_for_each_entry(cur2, &sctx->new_refs, list) { 3770 if (cur == cur2) 3771 break; 3772 if (cur2->dir == cur->dir) { 3773 ret = 1; 3774 break; 3775 } 3776 } 3777 3778 /* 3779 * If that did not happen, check if a previous inode 3780 * did already create the dir. 3781 */ 3782 if (!ret) 3783 ret = did_create_dir(sctx, cur->dir); 3784 if (ret < 0) 3785 goto out; 3786 if (!ret) { 3787 ret = send_create_inode(sctx, cur->dir); 3788 if (ret < 0) 3789 goto out; 3790 } 3791 } 3792 3793 /* 3794 * Check if this new ref would overwrite the first ref of 3795 * another unprocessed inode. If yes, orphanize the 3796 * overwritten inode. If we find an overwritten ref that is 3797 * not the first ref, simply unlink it. 3798 */ 3799 ret = will_overwrite_ref(sctx, cur->dir, cur->dir_gen, 3800 cur->name, cur->name_len, 3801 &ow_inode, &ow_gen); 3802 if (ret < 0) 3803 goto out; 3804 if (ret) { 3805 ret = is_first_ref(sctx->parent_root, 3806 ow_inode, cur->dir, cur->name, 3807 cur->name_len); 3808 if (ret < 0) 3809 goto out; 3810 if (ret) { 3811 struct name_cache_entry *nce; 3812 struct waiting_dir_move *wdm; 3813 3814 ret = orphanize_inode(sctx, ow_inode, ow_gen, 3815 cur->full_path); 3816 if (ret < 0) 3817 goto out; 3818 3819 /* 3820 * If ow_inode has its rename operation delayed 3821 * make sure that its orphanized name is used in 3822 * the source path when performing its rename 3823 * operation. 3824 */ 3825 if (is_waiting_for_move(sctx, ow_inode)) { 3826 wdm = get_waiting_dir_move(sctx, 3827 ow_inode); 3828 ASSERT(wdm); 3829 wdm->orphanized = true; 3830 } 3831 3832 /* 3833 * Make sure we clear our orphanized inode's 3834 * name from the name cache. This is because the 3835 * inode ow_inode might be an ancestor of some 3836 * other inode that will be orphanized as well 3837 * later and has an inode number greater than 3838 * sctx->send_progress. We need to prevent 3839 * future name lookups from using the old name 3840 * and get instead the orphan name. 3841 */ 3842 nce = name_cache_search(sctx, ow_inode, ow_gen); 3843 if (nce) { 3844 name_cache_delete(sctx, nce); 3845 kfree(nce); 3846 } 3847 3848 /* 3849 * ow_inode might currently be an ancestor of 3850 * cur_ino, therefore compute valid_path (the 3851 * current path of cur_ino) again because it 3852 * might contain the pre-orphanization name of 3853 * ow_inode, which is no longer valid. 3854 */ 3855 ret = is_ancestor(sctx->parent_root, 3856 ow_inode, ow_gen, 3857 sctx->cur_ino, NULL); 3858 if (ret > 0) { 3859 orphanized_ancestor = true; 3860 fs_path_reset(valid_path); 3861 ret = get_cur_path(sctx, sctx->cur_ino, 3862 sctx->cur_inode_gen, 3863 valid_path); 3864 } 3865 if (ret < 0) 3866 goto out; 3867 } else { 3868 ret = send_unlink(sctx, cur->full_path); 3869 if (ret < 0) 3870 goto out; 3871 } 3872 } 3873 3874 if (S_ISDIR(sctx->cur_inode_mode) && sctx->parent_root) { 3875 ret = wait_for_dest_dir_move(sctx, cur, is_orphan); 3876 if (ret < 0) 3877 goto out; 3878 if (ret == 1) { 3879 can_rename = false; 3880 *pending_move = 1; 3881 } 3882 } 3883 3884 if (S_ISDIR(sctx->cur_inode_mode) && sctx->parent_root && 3885 can_rename) { 3886 ret = wait_for_parent_move(sctx, cur, is_orphan); 3887 if (ret < 0) 3888 goto out; 3889 if (ret == 1) { 3890 can_rename = false; 3891 *pending_move = 1; 3892 } 3893 } 3894 3895 /* 3896 * link/move the ref to the new place. If we have an orphan 3897 * inode, move it and update valid_path. If not, link or move 3898 * it depending on the inode mode. 3899 */ 3900 if (is_orphan && can_rename) { 3901 ret = send_rename(sctx, valid_path, cur->full_path); 3902 if (ret < 0) 3903 goto out; 3904 is_orphan = 0; 3905 ret = fs_path_copy(valid_path, cur->full_path); 3906 if (ret < 0) 3907 goto out; 3908 } else if (can_rename) { 3909 if (S_ISDIR(sctx->cur_inode_mode)) { 3910 /* 3911 * Dirs can't be linked, so move it. For moved 3912 * dirs, we always have one new and one deleted 3913 * ref. The deleted ref is ignored later. 3914 */ 3915 ret = send_rename(sctx, valid_path, 3916 cur->full_path); 3917 if (!ret) 3918 ret = fs_path_copy(valid_path, 3919 cur->full_path); 3920 if (ret < 0) 3921 goto out; 3922 } else { 3923 ret = send_link(sctx, cur->full_path, 3924 valid_path); 3925 if (ret < 0) 3926 goto out; 3927 } 3928 } 3929 ret = dup_ref(cur, &check_dirs); 3930 if (ret < 0) 3931 goto out; 3932 } 3933 3934 if (S_ISDIR(sctx->cur_inode_mode) && sctx->cur_inode_deleted) { 3935 /* 3936 * Check if we can already rmdir the directory. If not, 3937 * orphanize it. For every dir item inside that gets deleted 3938 * later, we do this check again and rmdir it then if possible. 3939 * See the use of check_dirs for more details. 3940 */ 3941 ret = can_rmdir(sctx, sctx->cur_ino, sctx->cur_inode_gen, 3942 sctx->cur_ino); 3943 if (ret < 0) 3944 goto out; 3945 if (ret) { 3946 ret = send_rmdir(sctx, valid_path); 3947 if (ret < 0) 3948 goto out; 3949 } else if (!is_orphan) { 3950 ret = orphanize_inode(sctx, sctx->cur_ino, 3951 sctx->cur_inode_gen, valid_path); 3952 if (ret < 0) 3953 goto out; 3954 is_orphan = 1; 3955 } 3956 3957 list_for_each_entry(cur, &sctx->deleted_refs, list) { 3958 ret = dup_ref(cur, &check_dirs); 3959 if (ret < 0) 3960 goto out; 3961 } 3962 } else if (S_ISDIR(sctx->cur_inode_mode) && 3963 !list_empty(&sctx->deleted_refs)) { 3964 /* 3965 * We have a moved dir. Add the old parent to check_dirs 3966 */ 3967 cur = list_entry(sctx->deleted_refs.next, struct recorded_ref, 3968 list); 3969 ret = dup_ref(cur, &check_dirs); 3970 if (ret < 0) 3971 goto out; 3972 } else if (!S_ISDIR(sctx->cur_inode_mode)) { 3973 /* 3974 * We have a non dir inode. Go through all deleted refs and 3975 * unlink them if they were not already overwritten by other 3976 * inodes. 3977 */ 3978 list_for_each_entry(cur, &sctx->deleted_refs, list) { 3979 ret = did_overwrite_ref(sctx, cur->dir, cur->dir_gen, 3980 sctx->cur_ino, sctx->cur_inode_gen, 3981 cur->name, cur->name_len); 3982 if (ret < 0) 3983 goto out; 3984 if (!ret) { 3985 /* 3986 * If we orphanized any ancestor before, we need 3987 * to recompute the full path for deleted names, 3988 * since any such path was computed before we 3989 * processed any references and orphanized any 3990 * ancestor inode. 3991 */ 3992 if (orphanized_ancestor) { 3993 struct fs_path *new_path; 3994 3995 /* 3996 * Our reference's name member points to 3997 * its full_path member string, so we 3998 * use here a new path. 3999 */ 4000 new_path = fs_path_alloc(); 4001 if (!new_path) { 4002 ret = -ENOMEM; 4003 goto out; 4004 } 4005 ret = get_cur_path(sctx, cur->dir, 4006 cur->dir_gen, 4007 new_path); 4008 if (ret < 0) { 4009 fs_path_free(new_path); 4010 goto out; 4011 } 4012 ret = fs_path_add(new_path, 4013 cur->name, 4014 cur->name_len); 4015 if (ret < 0) { 4016 fs_path_free(new_path); 4017 goto out; 4018 } 4019 fs_path_free(cur->full_path); 4020 set_ref_path(cur, new_path); 4021 } 4022 ret = send_unlink(sctx, cur->full_path); 4023 if (ret < 0) 4024 goto out; 4025 } 4026 ret = dup_ref(cur, &check_dirs); 4027 if (ret < 0) 4028 goto out; 4029 } 4030 /* 4031 * If the inode is still orphan, unlink the orphan. This may 4032 * happen when a previous inode did overwrite the first ref 4033 * of this inode and no new refs were added for the current 4034 * inode. Unlinking does not mean that the inode is deleted in 4035 * all cases. There may still be links to this inode in other 4036 * places. 4037 */ 4038 if (is_orphan) { 4039 ret = send_unlink(sctx, valid_path); 4040 if (ret < 0) 4041 goto out; 4042 } 4043 } 4044 4045 /* 4046 * We did collect all parent dirs where cur_inode was once located. We 4047 * now go through all these dirs and check if they are pending for 4048 * deletion and if it's finally possible to perform the rmdir now. 4049 * We also update the inode stats of the parent dirs here. 4050 */ 4051 list_for_each_entry(cur, &check_dirs, list) { 4052 /* 4053 * In case we had refs into dirs that were not processed yet, 4054 * we don't need to do the utime and rmdir logic for these dirs. 4055 * The dir will be processed later. 4056 */ 4057 if (cur->dir > sctx->cur_ino) 4058 continue; 4059 4060 ret = get_cur_inode_state(sctx, cur->dir, cur->dir_gen); 4061 if (ret < 0) 4062 goto out; 4063 4064 if (ret == inode_state_did_create || 4065 ret == inode_state_no_change) { 4066 /* TODO delayed utimes */ 4067 ret = send_utimes(sctx, cur->dir, cur->dir_gen); 4068 if (ret < 0) 4069 goto out; 4070 } else if (ret == inode_state_did_delete && 4071 cur->dir != last_dir_ino_rm) { 4072 ret = can_rmdir(sctx, cur->dir, cur->dir_gen, 4073 sctx->cur_ino); 4074 if (ret < 0) 4075 goto out; 4076 if (ret) { 4077 ret = get_cur_path(sctx, cur->dir, 4078 cur->dir_gen, valid_path); 4079 if (ret < 0) 4080 goto out; 4081 ret = send_rmdir(sctx, valid_path); 4082 if (ret < 0) 4083 goto out; 4084 last_dir_ino_rm = cur->dir; 4085 } 4086 } 4087 } 4088 4089 ret = 0; 4090 4091 out: 4092 __free_recorded_refs(&check_dirs); 4093 free_recorded_refs(sctx); 4094 fs_path_free(valid_path); 4095 return ret; 4096 } 4097 4098 static int record_ref(struct btrfs_root *root, int num, u64 dir, int index, 4099 struct fs_path *name, void *ctx, struct list_head *refs) 4100 { 4101 int ret = 0; 4102 struct send_ctx *sctx = ctx; 4103 struct fs_path *p; 4104 u64 gen; 4105 4106 p = fs_path_alloc(); 4107 if (!p) 4108 return -ENOMEM; 4109 4110 ret = get_inode_info(root, dir, NULL, &gen, NULL, NULL, 4111 NULL, NULL); 4112 if (ret < 0) 4113 goto out; 4114 4115 ret = get_cur_path(sctx, dir, gen, p); 4116 if (ret < 0) 4117 goto out; 4118 ret = fs_path_add_path(p, name); 4119 if (ret < 0) 4120 goto out; 4121 4122 ret = __record_ref(refs, dir, gen, p); 4123 4124 out: 4125 if (ret) 4126 fs_path_free(p); 4127 return ret; 4128 } 4129 4130 static int __record_new_ref(int num, u64 dir, int index, 4131 struct fs_path *name, 4132 void *ctx) 4133 { 4134 struct send_ctx *sctx = ctx; 4135 return record_ref(sctx->send_root, num, dir, index, name, 4136 ctx, &sctx->new_refs); 4137 } 4138 4139 4140 static int __record_deleted_ref(int num, u64 dir, int index, 4141 struct fs_path *name, 4142 void *ctx) 4143 { 4144 struct send_ctx *sctx = ctx; 4145 return record_ref(sctx->parent_root, num, dir, index, name, 4146 ctx, &sctx->deleted_refs); 4147 } 4148 4149 static int record_new_ref(struct send_ctx *sctx) 4150 { 4151 int ret; 4152 4153 ret = iterate_inode_ref(sctx->send_root, sctx->left_path, 4154 sctx->cmp_key, 0, __record_new_ref, sctx); 4155 if (ret < 0) 4156 goto out; 4157 ret = 0; 4158 4159 out: 4160 return ret; 4161 } 4162 4163 static int record_deleted_ref(struct send_ctx *sctx) 4164 { 4165 int ret; 4166 4167 ret = iterate_inode_ref(sctx->parent_root, sctx->right_path, 4168 sctx->cmp_key, 0, __record_deleted_ref, sctx); 4169 if (ret < 0) 4170 goto out; 4171 ret = 0; 4172 4173 out: 4174 return ret; 4175 } 4176 4177 struct find_ref_ctx { 4178 u64 dir; 4179 u64 dir_gen; 4180 struct btrfs_root *root; 4181 struct fs_path *name; 4182 int found_idx; 4183 }; 4184 4185 static int __find_iref(int num, u64 dir, int index, 4186 struct fs_path *name, 4187 void *ctx_) 4188 { 4189 struct find_ref_ctx *ctx = ctx_; 4190 u64 dir_gen; 4191 int ret; 4192 4193 if (dir == ctx->dir && fs_path_len(name) == fs_path_len(ctx->name) && 4194 strncmp(name->start, ctx->name->start, fs_path_len(name)) == 0) { 4195 /* 4196 * To avoid doing extra lookups we'll only do this if everything 4197 * else matches. 4198 */ 4199 ret = get_inode_info(ctx->root, dir, NULL, &dir_gen, NULL, 4200 NULL, NULL, NULL); 4201 if (ret) 4202 return ret; 4203 if (dir_gen != ctx->dir_gen) 4204 return 0; 4205 ctx->found_idx = num; 4206 return 1; 4207 } 4208 return 0; 4209 } 4210 4211 static int find_iref(struct btrfs_root *root, 4212 struct btrfs_path *path, 4213 struct btrfs_key *key, 4214 u64 dir, u64 dir_gen, struct fs_path *name) 4215 { 4216 int ret; 4217 struct find_ref_ctx ctx; 4218 4219 ctx.dir = dir; 4220 ctx.name = name; 4221 ctx.dir_gen = dir_gen; 4222 ctx.found_idx = -1; 4223 ctx.root = root; 4224 4225 ret = iterate_inode_ref(root, path, key, 0, __find_iref, &ctx); 4226 if (ret < 0) 4227 return ret; 4228 4229 if (ctx.found_idx == -1) 4230 return -ENOENT; 4231 4232 return ctx.found_idx; 4233 } 4234 4235 static int __record_changed_new_ref(int num, u64 dir, int index, 4236 struct fs_path *name, 4237 void *ctx) 4238 { 4239 u64 dir_gen; 4240 int ret; 4241 struct send_ctx *sctx = ctx; 4242 4243 ret = get_inode_info(sctx->send_root, dir, NULL, &dir_gen, NULL, 4244 NULL, NULL, NULL); 4245 if (ret) 4246 return ret; 4247 4248 ret = find_iref(sctx->parent_root, sctx->right_path, 4249 sctx->cmp_key, dir, dir_gen, name); 4250 if (ret == -ENOENT) 4251 ret = __record_new_ref(num, dir, index, name, sctx); 4252 else if (ret > 0) 4253 ret = 0; 4254 4255 return ret; 4256 } 4257 4258 static int __record_changed_deleted_ref(int num, u64 dir, int index, 4259 struct fs_path *name, 4260 void *ctx) 4261 { 4262 u64 dir_gen; 4263 int ret; 4264 struct send_ctx *sctx = ctx; 4265 4266 ret = get_inode_info(sctx->parent_root, dir, NULL, &dir_gen, NULL, 4267 NULL, NULL, NULL); 4268 if (ret) 4269 return ret; 4270 4271 ret = find_iref(sctx->send_root, sctx->left_path, sctx->cmp_key, 4272 dir, dir_gen, name); 4273 if (ret == -ENOENT) 4274 ret = __record_deleted_ref(num, dir, index, name, sctx); 4275 else if (ret > 0) 4276 ret = 0; 4277 4278 return ret; 4279 } 4280 4281 static int record_changed_ref(struct send_ctx *sctx) 4282 { 4283 int ret = 0; 4284 4285 ret = iterate_inode_ref(sctx->send_root, sctx->left_path, 4286 sctx->cmp_key, 0, __record_changed_new_ref, sctx); 4287 if (ret < 0) 4288 goto out; 4289 ret = iterate_inode_ref(sctx->parent_root, sctx->right_path, 4290 sctx->cmp_key, 0, __record_changed_deleted_ref, sctx); 4291 if (ret < 0) 4292 goto out; 4293 ret = 0; 4294 4295 out: 4296 return ret; 4297 } 4298 4299 /* 4300 * Record and process all refs at once. Needed when an inode changes the 4301 * generation number, which means that it was deleted and recreated. 4302 */ 4303 static int process_all_refs(struct send_ctx *sctx, 4304 enum btrfs_compare_tree_result cmd) 4305 { 4306 int ret; 4307 struct btrfs_root *root; 4308 struct btrfs_path *path; 4309 struct btrfs_key key; 4310 struct btrfs_key found_key; 4311 struct extent_buffer *eb; 4312 int slot; 4313 iterate_inode_ref_t cb; 4314 int pending_move = 0; 4315 4316 path = alloc_path_for_send(); 4317 if (!path) 4318 return -ENOMEM; 4319 4320 if (cmd == BTRFS_COMPARE_TREE_NEW) { 4321 root = sctx->send_root; 4322 cb = __record_new_ref; 4323 } else if (cmd == BTRFS_COMPARE_TREE_DELETED) { 4324 root = sctx->parent_root; 4325 cb = __record_deleted_ref; 4326 } else { 4327 btrfs_err(sctx->send_root->fs_info, 4328 "Wrong command %d in process_all_refs", cmd); 4329 ret = -EINVAL; 4330 goto out; 4331 } 4332 4333 key.objectid = sctx->cmp_key->objectid; 4334 key.type = BTRFS_INODE_REF_KEY; 4335 key.offset = 0; 4336 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 4337 if (ret < 0) 4338 goto out; 4339 4340 while (1) { 4341 eb = path->nodes[0]; 4342 slot = path->slots[0]; 4343 if (slot >= btrfs_header_nritems(eb)) { 4344 ret = btrfs_next_leaf(root, path); 4345 if (ret < 0) 4346 goto out; 4347 else if (ret > 0) 4348 break; 4349 continue; 4350 } 4351 4352 btrfs_item_key_to_cpu(eb, &found_key, slot); 4353 4354 if (found_key.objectid != key.objectid || 4355 (found_key.type != BTRFS_INODE_REF_KEY && 4356 found_key.type != BTRFS_INODE_EXTREF_KEY)) 4357 break; 4358 4359 ret = iterate_inode_ref(root, path, &found_key, 0, cb, sctx); 4360 if (ret < 0) 4361 goto out; 4362 4363 path->slots[0]++; 4364 } 4365 btrfs_release_path(path); 4366 4367 /* 4368 * We don't actually care about pending_move as we are simply 4369 * re-creating this inode and will be rename'ing it into place once we 4370 * rename the parent directory. 4371 */ 4372 ret = process_recorded_refs(sctx, &pending_move); 4373 out: 4374 btrfs_free_path(path); 4375 return ret; 4376 } 4377 4378 static int send_set_xattr(struct send_ctx *sctx, 4379 struct fs_path *path, 4380 const char *name, int name_len, 4381 const char *data, int data_len) 4382 { 4383 int ret = 0; 4384 4385 ret = begin_cmd(sctx, BTRFS_SEND_C_SET_XATTR); 4386 if (ret < 0) 4387 goto out; 4388 4389 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 4390 TLV_PUT_STRING(sctx, BTRFS_SEND_A_XATTR_NAME, name, name_len); 4391 TLV_PUT(sctx, BTRFS_SEND_A_XATTR_DATA, data, data_len); 4392 4393 ret = send_cmd(sctx); 4394 4395 tlv_put_failure: 4396 out: 4397 return ret; 4398 } 4399 4400 static int send_remove_xattr(struct send_ctx *sctx, 4401 struct fs_path *path, 4402 const char *name, int name_len) 4403 { 4404 int ret = 0; 4405 4406 ret = begin_cmd(sctx, BTRFS_SEND_C_REMOVE_XATTR); 4407 if (ret < 0) 4408 goto out; 4409 4410 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 4411 TLV_PUT_STRING(sctx, BTRFS_SEND_A_XATTR_NAME, name, name_len); 4412 4413 ret = send_cmd(sctx); 4414 4415 tlv_put_failure: 4416 out: 4417 return ret; 4418 } 4419 4420 static int __process_new_xattr(int num, struct btrfs_key *di_key, 4421 const char *name, int name_len, 4422 const char *data, int data_len, 4423 u8 type, void *ctx) 4424 { 4425 int ret; 4426 struct send_ctx *sctx = ctx; 4427 struct fs_path *p; 4428 struct posix_acl_xattr_header dummy_acl; 4429 4430 p = fs_path_alloc(); 4431 if (!p) 4432 return -ENOMEM; 4433 4434 /* 4435 * This hack is needed because empty acls are stored as zero byte 4436 * data in xattrs. Problem with that is, that receiving these zero byte 4437 * acls will fail later. To fix this, we send a dummy acl list that 4438 * only contains the version number and no entries. 4439 */ 4440 if (!strncmp(name, XATTR_NAME_POSIX_ACL_ACCESS, name_len) || 4441 !strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, name_len)) { 4442 if (data_len == 0) { 4443 dummy_acl.a_version = 4444 cpu_to_le32(POSIX_ACL_XATTR_VERSION); 4445 data = (char *)&dummy_acl; 4446 data_len = sizeof(dummy_acl); 4447 } 4448 } 4449 4450 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4451 if (ret < 0) 4452 goto out; 4453 4454 ret = send_set_xattr(sctx, p, name, name_len, data, data_len); 4455 4456 out: 4457 fs_path_free(p); 4458 return ret; 4459 } 4460 4461 static int __process_deleted_xattr(int num, struct btrfs_key *di_key, 4462 const char *name, int name_len, 4463 const char *data, int data_len, 4464 u8 type, void *ctx) 4465 { 4466 int ret; 4467 struct send_ctx *sctx = ctx; 4468 struct fs_path *p; 4469 4470 p = fs_path_alloc(); 4471 if (!p) 4472 return -ENOMEM; 4473 4474 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4475 if (ret < 0) 4476 goto out; 4477 4478 ret = send_remove_xattr(sctx, p, name, name_len); 4479 4480 out: 4481 fs_path_free(p); 4482 return ret; 4483 } 4484 4485 static int process_new_xattr(struct send_ctx *sctx) 4486 { 4487 int ret = 0; 4488 4489 ret = iterate_dir_item(sctx->send_root, sctx->left_path, 4490 sctx->cmp_key, __process_new_xattr, sctx); 4491 4492 return ret; 4493 } 4494 4495 static int process_deleted_xattr(struct send_ctx *sctx) 4496 { 4497 return iterate_dir_item(sctx->parent_root, sctx->right_path, 4498 sctx->cmp_key, __process_deleted_xattr, sctx); 4499 } 4500 4501 struct find_xattr_ctx { 4502 const char *name; 4503 int name_len; 4504 int found_idx; 4505 char *found_data; 4506 int found_data_len; 4507 }; 4508 4509 static int __find_xattr(int num, struct btrfs_key *di_key, 4510 const char *name, int name_len, 4511 const char *data, int data_len, 4512 u8 type, void *vctx) 4513 { 4514 struct find_xattr_ctx *ctx = vctx; 4515 4516 if (name_len == ctx->name_len && 4517 strncmp(name, ctx->name, name_len) == 0) { 4518 ctx->found_idx = num; 4519 ctx->found_data_len = data_len; 4520 ctx->found_data = kmemdup(data, data_len, GFP_KERNEL); 4521 if (!ctx->found_data) 4522 return -ENOMEM; 4523 return 1; 4524 } 4525 return 0; 4526 } 4527 4528 static int find_xattr(struct btrfs_root *root, 4529 struct btrfs_path *path, 4530 struct btrfs_key *key, 4531 const char *name, int name_len, 4532 char **data, int *data_len) 4533 { 4534 int ret; 4535 struct find_xattr_ctx ctx; 4536 4537 ctx.name = name; 4538 ctx.name_len = name_len; 4539 ctx.found_idx = -1; 4540 ctx.found_data = NULL; 4541 ctx.found_data_len = 0; 4542 4543 ret = iterate_dir_item(root, path, key, __find_xattr, &ctx); 4544 if (ret < 0) 4545 return ret; 4546 4547 if (ctx.found_idx == -1) 4548 return -ENOENT; 4549 if (data) { 4550 *data = ctx.found_data; 4551 *data_len = ctx.found_data_len; 4552 } else { 4553 kfree(ctx.found_data); 4554 } 4555 return ctx.found_idx; 4556 } 4557 4558 4559 static int __process_changed_new_xattr(int num, struct btrfs_key *di_key, 4560 const char *name, int name_len, 4561 const char *data, int data_len, 4562 u8 type, void *ctx) 4563 { 4564 int ret; 4565 struct send_ctx *sctx = ctx; 4566 char *found_data = NULL; 4567 int found_data_len = 0; 4568 4569 ret = find_xattr(sctx->parent_root, sctx->right_path, 4570 sctx->cmp_key, name, name_len, &found_data, 4571 &found_data_len); 4572 if (ret == -ENOENT) { 4573 ret = __process_new_xattr(num, di_key, name, name_len, data, 4574 data_len, type, ctx); 4575 } else if (ret >= 0) { 4576 if (data_len != found_data_len || 4577 memcmp(data, found_data, data_len)) { 4578 ret = __process_new_xattr(num, di_key, name, name_len, 4579 data, data_len, type, ctx); 4580 } else { 4581 ret = 0; 4582 } 4583 } 4584 4585 kfree(found_data); 4586 return ret; 4587 } 4588 4589 static int __process_changed_deleted_xattr(int num, struct btrfs_key *di_key, 4590 const char *name, int name_len, 4591 const char *data, int data_len, 4592 u8 type, void *ctx) 4593 { 4594 int ret; 4595 struct send_ctx *sctx = ctx; 4596 4597 ret = find_xattr(sctx->send_root, sctx->left_path, sctx->cmp_key, 4598 name, name_len, NULL, NULL); 4599 if (ret == -ENOENT) 4600 ret = __process_deleted_xattr(num, di_key, name, name_len, data, 4601 data_len, type, ctx); 4602 else if (ret >= 0) 4603 ret = 0; 4604 4605 return ret; 4606 } 4607 4608 static int process_changed_xattr(struct send_ctx *sctx) 4609 { 4610 int ret = 0; 4611 4612 ret = iterate_dir_item(sctx->send_root, sctx->left_path, 4613 sctx->cmp_key, __process_changed_new_xattr, sctx); 4614 if (ret < 0) 4615 goto out; 4616 ret = iterate_dir_item(sctx->parent_root, sctx->right_path, 4617 sctx->cmp_key, __process_changed_deleted_xattr, sctx); 4618 4619 out: 4620 return ret; 4621 } 4622 4623 static int process_all_new_xattrs(struct send_ctx *sctx) 4624 { 4625 int ret; 4626 struct btrfs_root *root; 4627 struct btrfs_path *path; 4628 struct btrfs_key key; 4629 struct btrfs_key found_key; 4630 struct extent_buffer *eb; 4631 int slot; 4632 4633 path = alloc_path_for_send(); 4634 if (!path) 4635 return -ENOMEM; 4636 4637 root = sctx->send_root; 4638 4639 key.objectid = sctx->cmp_key->objectid; 4640 key.type = BTRFS_XATTR_ITEM_KEY; 4641 key.offset = 0; 4642 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 4643 if (ret < 0) 4644 goto out; 4645 4646 while (1) { 4647 eb = path->nodes[0]; 4648 slot = path->slots[0]; 4649 if (slot >= btrfs_header_nritems(eb)) { 4650 ret = btrfs_next_leaf(root, path); 4651 if (ret < 0) { 4652 goto out; 4653 } else if (ret > 0) { 4654 ret = 0; 4655 break; 4656 } 4657 continue; 4658 } 4659 4660 btrfs_item_key_to_cpu(eb, &found_key, slot); 4661 if (found_key.objectid != key.objectid || 4662 found_key.type != key.type) { 4663 ret = 0; 4664 goto out; 4665 } 4666 4667 ret = iterate_dir_item(root, path, &found_key, 4668 __process_new_xattr, sctx); 4669 if (ret < 0) 4670 goto out; 4671 4672 path->slots[0]++; 4673 } 4674 4675 out: 4676 btrfs_free_path(path); 4677 return ret; 4678 } 4679 4680 static ssize_t fill_read_buf(struct send_ctx *sctx, u64 offset, u32 len) 4681 { 4682 struct btrfs_root *root = sctx->send_root; 4683 struct btrfs_fs_info *fs_info = root->fs_info; 4684 struct inode *inode; 4685 struct page *page; 4686 char *addr; 4687 struct btrfs_key key; 4688 pgoff_t index = offset >> PAGE_SHIFT; 4689 pgoff_t last_index; 4690 unsigned pg_offset = offset & ~PAGE_MASK; 4691 ssize_t ret = 0; 4692 4693 key.objectid = sctx->cur_ino; 4694 key.type = BTRFS_INODE_ITEM_KEY; 4695 key.offset = 0; 4696 4697 inode = btrfs_iget(fs_info->sb, &key, root, NULL); 4698 if (IS_ERR(inode)) 4699 return PTR_ERR(inode); 4700 4701 if (offset + len > i_size_read(inode)) { 4702 if (offset > i_size_read(inode)) 4703 len = 0; 4704 else 4705 len = offset - i_size_read(inode); 4706 } 4707 if (len == 0) 4708 goto out; 4709 4710 last_index = (offset + len - 1) >> PAGE_SHIFT; 4711 4712 /* initial readahead */ 4713 memset(&sctx->ra, 0, sizeof(struct file_ra_state)); 4714 file_ra_state_init(&sctx->ra, inode->i_mapping); 4715 btrfs_force_ra(inode->i_mapping, &sctx->ra, NULL, index, 4716 last_index - index + 1); 4717 4718 while (index <= last_index) { 4719 unsigned cur_len = min_t(unsigned, len, 4720 PAGE_SIZE - pg_offset); 4721 page = find_or_create_page(inode->i_mapping, index, GFP_KERNEL); 4722 if (!page) { 4723 ret = -ENOMEM; 4724 break; 4725 } 4726 4727 if (!PageUptodate(page)) { 4728 btrfs_readpage(NULL, page); 4729 lock_page(page); 4730 if (!PageUptodate(page)) { 4731 unlock_page(page); 4732 put_page(page); 4733 ret = -EIO; 4734 break; 4735 } 4736 } 4737 4738 addr = kmap(page); 4739 memcpy(sctx->read_buf + ret, addr + pg_offset, cur_len); 4740 kunmap(page); 4741 unlock_page(page); 4742 put_page(page); 4743 index++; 4744 pg_offset = 0; 4745 len -= cur_len; 4746 ret += cur_len; 4747 } 4748 out: 4749 iput(inode); 4750 return ret; 4751 } 4752 4753 /* 4754 * Read some bytes from the current inode/file and send a write command to 4755 * user space. 4756 */ 4757 static int send_write(struct send_ctx *sctx, u64 offset, u32 len) 4758 { 4759 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 4760 int ret = 0; 4761 struct fs_path *p; 4762 ssize_t num_read = 0; 4763 4764 p = fs_path_alloc(); 4765 if (!p) 4766 return -ENOMEM; 4767 4768 btrfs_debug(fs_info, "send_write offset=%llu, len=%d", offset, len); 4769 4770 num_read = fill_read_buf(sctx, offset, len); 4771 if (num_read <= 0) { 4772 if (num_read < 0) 4773 ret = num_read; 4774 goto out; 4775 } 4776 4777 ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE); 4778 if (ret < 0) 4779 goto out; 4780 4781 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4782 if (ret < 0) 4783 goto out; 4784 4785 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4786 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4787 TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, num_read); 4788 4789 ret = send_cmd(sctx); 4790 4791 tlv_put_failure: 4792 out: 4793 fs_path_free(p); 4794 if (ret < 0) 4795 return ret; 4796 return num_read; 4797 } 4798 4799 /* 4800 * Send a clone command to user space. 4801 */ 4802 static int send_clone(struct send_ctx *sctx, 4803 u64 offset, u32 len, 4804 struct clone_root *clone_root) 4805 { 4806 int ret = 0; 4807 struct fs_path *p; 4808 u64 gen; 4809 4810 btrfs_debug(sctx->send_root->fs_info, 4811 "send_clone offset=%llu, len=%d, clone_root=%llu, clone_inode=%llu, clone_offset=%llu", 4812 offset, len, clone_root->root->objectid, clone_root->ino, 4813 clone_root->offset); 4814 4815 p = fs_path_alloc(); 4816 if (!p) 4817 return -ENOMEM; 4818 4819 ret = begin_cmd(sctx, BTRFS_SEND_C_CLONE); 4820 if (ret < 0) 4821 goto out; 4822 4823 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4824 if (ret < 0) 4825 goto out; 4826 4827 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4828 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_LEN, len); 4829 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4830 4831 if (clone_root->root == sctx->send_root) { 4832 ret = get_inode_info(sctx->send_root, clone_root->ino, NULL, 4833 &gen, NULL, NULL, NULL, NULL); 4834 if (ret < 0) 4835 goto out; 4836 ret = get_cur_path(sctx, clone_root->ino, gen, p); 4837 } else { 4838 ret = get_inode_path(clone_root->root, clone_root->ino, p); 4839 } 4840 if (ret < 0) 4841 goto out; 4842 4843 /* 4844 * If the parent we're using has a received_uuid set then use that as 4845 * our clone source as that is what we will look for when doing a 4846 * receive. 4847 * 4848 * This covers the case that we create a snapshot off of a received 4849 * subvolume and then use that as the parent and try to receive on a 4850 * different host. 4851 */ 4852 if (!btrfs_is_empty_uuid(clone_root->root->root_item.received_uuid)) 4853 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 4854 clone_root->root->root_item.received_uuid); 4855 else 4856 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 4857 clone_root->root->root_item.uuid); 4858 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID, 4859 le64_to_cpu(clone_root->root->root_item.ctransid)); 4860 TLV_PUT_PATH(sctx, BTRFS_SEND_A_CLONE_PATH, p); 4861 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_OFFSET, 4862 clone_root->offset); 4863 4864 ret = send_cmd(sctx); 4865 4866 tlv_put_failure: 4867 out: 4868 fs_path_free(p); 4869 return ret; 4870 } 4871 4872 /* 4873 * Send an update extent command to user space. 4874 */ 4875 static int send_update_extent(struct send_ctx *sctx, 4876 u64 offset, u32 len) 4877 { 4878 int ret = 0; 4879 struct fs_path *p; 4880 4881 p = fs_path_alloc(); 4882 if (!p) 4883 return -ENOMEM; 4884 4885 ret = begin_cmd(sctx, BTRFS_SEND_C_UPDATE_EXTENT); 4886 if (ret < 0) 4887 goto out; 4888 4889 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4890 if (ret < 0) 4891 goto out; 4892 4893 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4894 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4895 TLV_PUT_U64(sctx, BTRFS_SEND_A_SIZE, len); 4896 4897 ret = send_cmd(sctx); 4898 4899 tlv_put_failure: 4900 out: 4901 fs_path_free(p); 4902 return ret; 4903 } 4904 4905 static int send_hole(struct send_ctx *sctx, u64 end) 4906 { 4907 struct fs_path *p = NULL; 4908 u64 offset = sctx->cur_inode_last_extent; 4909 u64 len; 4910 int ret = 0; 4911 4912 p = fs_path_alloc(); 4913 if (!p) 4914 return -ENOMEM; 4915 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4916 if (ret < 0) 4917 goto tlv_put_failure; 4918 memset(sctx->read_buf, 0, BTRFS_SEND_READ_SIZE); 4919 while (offset < end) { 4920 len = min_t(u64, end - offset, BTRFS_SEND_READ_SIZE); 4921 4922 ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE); 4923 if (ret < 0) 4924 break; 4925 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4926 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4927 TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, len); 4928 ret = send_cmd(sctx); 4929 if (ret < 0) 4930 break; 4931 offset += len; 4932 } 4933 tlv_put_failure: 4934 fs_path_free(p); 4935 return ret; 4936 } 4937 4938 static int send_extent_data(struct send_ctx *sctx, 4939 const u64 offset, 4940 const u64 len) 4941 { 4942 u64 sent = 0; 4943 4944 if (sctx->flags & BTRFS_SEND_FLAG_NO_FILE_DATA) 4945 return send_update_extent(sctx, offset, len); 4946 4947 while (sent < len) { 4948 u64 size = len - sent; 4949 int ret; 4950 4951 if (size > BTRFS_SEND_READ_SIZE) 4952 size = BTRFS_SEND_READ_SIZE; 4953 ret = send_write(sctx, offset + sent, size); 4954 if (ret < 0) 4955 return ret; 4956 if (!ret) 4957 break; 4958 sent += ret; 4959 } 4960 return 0; 4961 } 4962 4963 static int clone_range(struct send_ctx *sctx, 4964 struct clone_root *clone_root, 4965 const u64 disk_byte, 4966 u64 data_offset, 4967 u64 offset, 4968 u64 len) 4969 { 4970 struct btrfs_path *path; 4971 struct btrfs_key key; 4972 int ret; 4973 4974 path = alloc_path_for_send(); 4975 if (!path) 4976 return -ENOMEM; 4977 4978 /* 4979 * We can't send a clone operation for the entire range if we find 4980 * extent items in the respective range in the source file that 4981 * refer to different extents or if we find holes. 4982 * So check for that and do a mix of clone and regular write/copy 4983 * operations if needed. 4984 * 4985 * Example: 4986 * 4987 * mkfs.btrfs -f /dev/sda 4988 * mount /dev/sda /mnt 4989 * xfs_io -f -c "pwrite -S 0xaa 0K 100K" /mnt/foo 4990 * cp --reflink=always /mnt/foo /mnt/bar 4991 * xfs_io -c "pwrite -S 0xbb 50K 50K" /mnt/foo 4992 * btrfs subvolume snapshot -r /mnt /mnt/snap 4993 * 4994 * If when we send the snapshot and we are processing file bar (which 4995 * has a higher inode number than foo) we blindly send a clone operation 4996 * for the [0, 100K[ range from foo to bar, the receiver ends up getting 4997 * a file bar that matches the content of file foo - iow, doesn't match 4998 * the content from bar in the original filesystem. 4999 */ 5000 key.objectid = clone_root->ino; 5001 key.type = BTRFS_EXTENT_DATA_KEY; 5002 key.offset = clone_root->offset; 5003 ret = btrfs_search_slot(NULL, clone_root->root, &key, path, 0, 0); 5004 if (ret < 0) 5005 goto out; 5006 if (ret > 0 && path->slots[0] > 0) { 5007 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1); 5008 if (key.objectid == clone_root->ino && 5009 key.type == BTRFS_EXTENT_DATA_KEY) 5010 path->slots[0]--; 5011 } 5012 5013 while (true) { 5014 struct extent_buffer *leaf = path->nodes[0]; 5015 int slot = path->slots[0]; 5016 struct btrfs_file_extent_item *ei; 5017 u8 type; 5018 u64 ext_len; 5019 u64 clone_len; 5020 5021 if (slot >= btrfs_header_nritems(leaf)) { 5022 ret = btrfs_next_leaf(clone_root->root, path); 5023 if (ret < 0) 5024 goto out; 5025 else if (ret > 0) 5026 break; 5027 continue; 5028 } 5029 5030 btrfs_item_key_to_cpu(leaf, &key, slot); 5031 5032 /* 5033 * We might have an implicit trailing hole (NO_HOLES feature 5034 * enabled). We deal with it after leaving this loop. 5035 */ 5036 if (key.objectid != clone_root->ino || 5037 key.type != BTRFS_EXTENT_DATA_KEY) 5038 break; 5039 5040 ei = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); 5041 type = btrfs_file_extent_type(leaf, ei); 5042 if (type == BTRFS_FILE_EXTENT_INLINE) { 5043 ext_len = btrfs_file_extent_inline_len(leaf, slot, ei); 5044 ext_len = PAGE_ALIGN(ext_len); 5045 } else { 5046 ext_len = btrfs_file_extent_num_bytes(leaf, ei); 5047 } 5048 5049 if (key.offset + ext_len <= clone_root->offset) 5050 goto next; 5051 5052 if (key.offset > clone_root->offset) { 5053 /* Implicit hole, NO_HOLES feature enabled. */ 5054 u64 hole_len = key.offset - clone_root->offset; 5055 5056 if (hole_len > len) 5057 hole_len = len; 5058 ret = send_extent_data(sctx, offset, hole_len); 5059 if (ret < 0) 5060 goto out; 5061 5062 len -= hole_len; 5063 if (len == 0) 5064 break; 5065 offset += hole_len; 5066 clone_root->offset += hole_len; 5067 data_offset += hole_len; 5068 } 5069 5070 if (key.offset >= clone_root->offset + len) 5071 break; 5072 5073 clone_len = min_t(u64, ext_len, len); 5074 5075 if (btrfs_file_extent_disk_bytenr(leaf, ei) == disk_byte && 5076 btrfs_file_extent_offset(leaf, ei) == data_offset) 5077 ret = send_clone(sctx, offset, clone_len, clone_root); 5078 else 5079 ret = send_extent_data(sctx, offset, clone_len); 5080 5081 if (ret < 0) 5082 goto out; 5083 5084 len -= clone_len; 5085 if (len == 0) 5086 break; 5087 offset += clone_len; 5088 clone_root->offset += clone_len; 5089 data_offset += clone_len; 5090 next: 5091 path->slots[0]++; 5092 } 5093 5094 if (len > 0) 5095 ret = send_extent_data(sctx, offset, len); 5096 else 5097 ret = 0; 5098 out: 5099 btrfs_free_path(path); 5100 return ret; 5101 } 5102 5103 static int send_write_or_clone(struct send_ctx *sctx, 5104 struct btrfs_path *path, 5105 struct btrfs_key *key, 5106 struct clone_root *clone_root) 5107 { 5108 int ret = 0; 5109 struct btrfs_file_extent_item *ei; 5110 u64 offset = key->offset; 5111 u64 len; 5112 u8 type; 5113 u64 bs = sctx->send_root->fs_info->sb->s_blocksize; 5114 5115 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 5116 struct btrfs_file_extent_item); 5117 type = btrfs_file_extent_type(path->nodes[0], ei); 5118 if (type == BTRFS_FILE_EXTENT_INLINE) { 5119 len = btrfs_file_extent_inline_len(path->nodes[0], 5120 path->slots[0], ei); 5121 /* 5122 * it is possible the inline item won't cover the whole page, 5123 * but there may be items after this page. Make 5124 * sure to send the whole thing 5125 */ 5126 len = PAGE_ALIGN(len); 5127 } else { 5128 len = btrfs_file_extent_num_bytes(path->nodes[0], ei); 5129 } 5130 5131 if (offset + len > sctx->cur_inode_size) 5132 len = sctx->cur_inode_size - offset; 5133 if (len == 0) { 5134 ret = 0; 5135 goto out; 5136 } 5137 5138 if (clone_root && IS_ALIGNED(offset + len, bs)) { 5139 u64 disk_byte; 5140 u64 data_offset; 5141 5142 disk_byte = btrfs_file_extent_disk_bytenr(path->nodes[0], ei); 5143 data_offset = btrfs_file_extent_offset(path->nodes[0], ei); 5144 ret = clone_range(sctx, clone_root, disk_byte, data_offset, 5145 offset, len); 5146 } else { 5147 ret = send_extent_data(sctx, offset, len); 5148 } 5149 out: 5150 return ret; 5151 } 5152 5153 static int is_extent_unchanged(struct send_ctx *sctx, 5154 struct btrfs_path *left_path, 5155 struct btrfs_key *ekey) 5156 { 5157 int ret = 0; 5158 struct btrfs_key key; 5159 struct btrfs_path *path = NULL; 5160 struct extent_buffer *eb; 5161 int slot; 5162 struct btrfs_key found_key; 5163 struct btrfs_file_extent_item *ei; 5164 u64 left_disknr; 5165 u64 right_disknr; 5166 u64 left_offset; 5167 u64 right_offset; 5168 u64 left_offset_fixed; 5169 u64 left_len; 5170 u64 right_len; 5171 u64 left_gen; 5172 u64 right_gen; 5173 u8 left_type; 5174 u8 right_type; 5175 5176 path = alloc_path_for_send(); 5177 if (!path) 5178 return -ENOMEM; 5179 5180 eb = left_path->nodes[0]; 5181 slot = left_path->slots[0]; 5182 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 5183 left_type = btrfs_file_extent_type(eb, ei); 5184 5185 if (left_type != BTRFS_FILE_EXTENT_REG) { 5186 ret = 0; 5187 goto out; 5188 } 5189 left_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 5190 left_len = btrfs_file_extent_num_bytes(eb, ei); 5191 left_offset = btrfs_file_extent_offset(eb, ei); 5192 left_gen = btrfs_file_extent_generation(eb, ei); 5193 5194 /* 5195 * Following comments will refer to these graphics. L is the left 5196 * extents which we are checking at the moment. 1-8 are the right 5197 * extents that we iterate. 5198 * 5199 * |-----L-----| 5200 * |-1-|-2a-|-3-|-4-|-5-|-6-| 5201 * 5202 * |-----L-----| 5203 * |--1--|-2b-|...(same as above) 5204 * 5205 * Alternative situation. Happens on files where extents got split. 5206 * |-----L-----| 5207 * |-----------7-----------|-6-| 5208 * 5209 * Alternative situation. Happens on files which got larger. 5210 * |-----L-----| 5211 * |-8-| 5212 * Nothing follows after 8. 5213 */ 5214 5215 key.objectid = ekey->objectid; 5216 key.type = BTRFS_EXTENT_DATA_KEY; 5217 key.offset = ekey->offset; 5218 ret = btrfs_search_slot_for_read(sctx->parent_root, &key, path, 0, 0); 5219 if (ret < 0) 5220 goto out; 5221 if (ret) { 5222 ret = 0; 5223 goto out; 5224 } 5225 5226 /* 5227 * Handle special case where the right side has no extents at all. 5228 */ 5229 eb = path->nodes[0]; 5230 slot = path->slots[0]; 5231 btrfs_item_key_to_cpu(eb, &found_key, slot); 5232 if (found_key.objectid != key.objectid || 5233 found_key.type != key.type) { 5234 /* If we're a hole then just pretend nothing changed */ 5235 ret = (left_disknr) ? 0 : 1; 5236 goto out; 5237 } 5238 5239 /* 5240 * We're now on 2a, 2b or 7. 5241 */ 5242 key = found_key; 5243 while (key.offset < ekey->offset + left_len) { 5244 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 5245 right_type = btrfs_file_extent_type(eb, ei); 5246 if (right_type != BTRFS_FILE_EXTENT_REG && 5247 right_type != BTRFS_FILE_EXTENT_INLINE) { 5248 ret = 0; 5249 goto out; 5250 } 5251 5252 right_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 5253 if (right_type == BTRFS_FILE_EXTENT_INLINE) { 5254 right_len = btrfs_file_extent_inline_len(eb, slot, ei); 5255 right_len = PAGE_ALIGN(right_len); 5256 } else { 5257 right_len = btrfs_file_extent_num_bytes(eb, ei); 5258 } 5259 right_offset = btrfs_file_extent_offset(eb, ei); 5260 right_gen = btrfs_file_extent_generation(eb, ei); 5261 5262 /* 5263 * Are we at extent 8? If yes, we know the extent is changed. 5264 * This may only happen on the first iteration. 5265 */ 5266 if (found_key.offset + right_len <= ekey->offset) { 5267 /* If we're a hole just pretend nothing changed */ 5268 ret = (left_disknr) ? 0 : 1; 5269 goto out; 5270 } 5271 5272 /* 5273 * We just wanted to see if when we have an inline extent, what 5274 * follows it is a regular extent (wanted to check the above 5275 * condition for inline extents too). This should normally not 5276 * happen but it's possible for example when we have an inline 5277 * compressed extent representing data with a size matching 5278 * the page size (currently the same as sector size). 5279 */ 5280 if (right_type == BTRFS_FILE_EXTENT_INLINE) { 5281 ret = 0; 5282 goto out; 5283 } 5284 5285 left_offset_fixed = left_offset; 5286 if (key.offset < ekey->offset) { 5287 /* Fix the right offset for 2a and 7. */ 5288 right_offset += ekey->offset - key.offset; 5289 } else { 5290 /* Fix the left offset for all behind 2a and 2b */ 5291 left_offset_fixed += key.offset - ekey->offset; 5292 } 5293 5294 /* 5295 * Check if we have the same extent. 5296 */ 5297 if (left_disknr != right_disknr || 5298 left_offset_fixed != right_offset || 5299 left_gen != right_gen) { 5300 ret = 0; 5301 goto out; 5302 } 5303 5304 /* 5305 * Go to the next extent. 5306 */ 5307 ret = btrfs_next_item(sctx->parent_root, path); 5308 if (ret < 0) 5309 goto out; 5310 if (!ret) { 5311 eb = path->nodes[0]; 5312 slot = path->slots[0]; 5313 btrfs_item_key_to_cpu(eb, &found_key, slot); 5314 } 5315 if (ret || found_key.objectid != key.objectid || 5316 found_key.type != key.type) { 5317 key.offset += right_len; 5318 break; 5319 } 5320 if (found_key.offset != key.offset + right_len) { 5321 ret = 0; 5322 goto out; 5323 } 5324 key = found_key; 5325 } 5326 5327 /* 5328 * We're now behind the left extent (treat as unchanged) or at the end 5329 * of the right side (treat as changed). 5330 */ 5331 if (key.offset >= ekey->offset + left_len) 5332 ret = 1; 5333 else 5334 ret = 0; 5335 5336 5337 out: 5338 btrfs_free_path(path); 5339 return ret; 5340 } 5341 5342 static int get_last_extent(struct send_ctx *sctx, u64 offset) 5343 { 5344 struct btrfs_path *path; 5345 struct btrfs_root *root = sctx->send_root; 5346 struct btrfs_file_extent_item *fi; 5347 struct btrfs_key key; 5348 u64 extent_end; 5349 u8 type; 5350 int ret; 5351 5352 path = alloc_path_for_send(); 5353 if (!path) 5354 return -ENOMEM; 5355 5356 sctx->cur_inode_last_extent = 0; 5357 5358 key.objectid = sctx->cur_ino; 5359 key.type = BTRFS_EXTENT_DATA_KEY; 5360 key.offset = offset; 5361 ret = btrfs_search_slot_for_read(root, &key, path, 0, 1); 5362 if (ret < 0) 5363 goto out; 5364 ret = 0; 5365 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]); 5366 if (key.objectid != sctx->cur_ino || key.type != BTRFS_EXTENT_DATA_KEY) 5367 goto out; 5368 5369 fi = btrfs_item_ptr(path->nodes[0], path->slots[0], 5370 struct btrfs_file_extent_item); 5371 type = btrfs_file_extent_type(path->nodes[0], fi); 5372 if (type == BTRFS_FILE_EXTENT_INLINE) { 5373 u64 size = btrfs_file_extent_inline_len(path->nodes[0], 5374 path->slots[0], fi); 5375 extent_end = ALIGN(key.offset + size, 5376 sctx->send_root->fs_info->sectorsize); 5377 } else { 5378 extent_end = key.offset + 5379 btrfs_file_extent_num_bytes(path->nodes[0], fi); 5380 } 5381 sctx->cur_inode_last_extent = extent_end; 5382 out: 5383 btrfs_free_path(path); 5384 return ret; 5385 } 5386 5387 static int range_is_hole_in_parent(struct send_ctx *sctx, 5388 const u64 start, 5389 const u64 end) 5390 { 5391 struct btrfs_path *path; 5392 struct btrfs_key key; 5393 struct btrfs_root *root = sctx->parent_root; 5394 u64 search_start = start; 5395 int ret; 5396 5397 path = alloc_path_for_send(); 5398 if (!path) 5399 return -ENOMEM; 5400 5401 key.objectid = sctx->cur_ino; 5402 key.type = BTRFS_EXTENT_DATA_KEY; 5403 key.offset = search_start; 5404 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 5405 if (ret < 0) 5406 goto out; 5407 if (ret > 0 && path->slots[0] > 0) 5408 path->slots[0]--; 5409 5410 while (search_start < end) { 5411 struct extent_buffer *leaf = path->nodes[0]; 5412 int slot = path->slots[0]; 5413 struct btrfs_file_extent_item *fi; 5414 u64 extent_end; 5415 5416 if (slot >= btrfs_header_nritems(leaf)) { 5417 ret = btrfs_next_leaf(root, path); 5418 if (ret < 0) 5419 goto out; 5420 else if (ret > 0) 5421 break; 5422 continue; 5423 } 5424 5425 btrfs_item_key_to_cpu(leaf, &key, slot); 5426 if (key.objectid < sctx->cur_ino || 5427 key.type < BTRFS_EXTENT_DATA_KEY) 5428 goto next; 5429 if (key.objectid > sctx->cur_ino || 5430 key.type > BTRFS_EXTENT_DATA_KEY || 5431 key.offset >= end) 5432 break; 5433 5434 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); 5435 if (btrfs_file_extent_type(leaf, fi) == 5436 BTRFS_FILE_EXTENT_INLINE) { 5437 u64 size = btrfs_file_extent_inline_len(leaf, slot, fi); 5438 5439 extent_end = ALIGN(key.offset + size, 5440 root->fs_info->sectorsize); 5441 } else { 5442 extent_end = key.offset + 5443 btrfs_file_extent_num_bytes(leaf, fi); 5444 } 5445 if (extent_end <= start) 5446 goto next; 5447 if (btrfs_file_extent_disk_bytenr(leaf, fi) == 0) { 5448 search_start = extent_end; 5449 goto next; 5450 } 5451 ret = 0; 5452 goto out; 5453 next: 5454 path->slots[0]++; 5455 } 5456 ret = 1; 5457 out: 5458 btrfs_free_path(path); 5459 return ret; 5460 } 5461 5462 static int maybe_send_hole(struct send_ctx *sctx, struct btrfs_path *path, 5463 struct btrfs_key *key) 5464 { 5465 struct btrfs_file_extent_item *fi; 5466 u64 extent_end; 5467 u8 type; 5468 int ret = 0; 5469 5470 if (sctx->cur_ino != key->objectid || !need_send_hole(sctx)) 5471 return 0; 5472 5473 if (sctx->cur_inode_last_extent == (u64)-1) { 5474 ret = get_last_extent(sctx, key->offset - 1); 5475 if (ret) 5476 return ret; 5477 } 5478 5479 fi = btrfs_item_ptr(path->nodes[0], path->slots[0], 5480 struct btrfs_file_extent_item); 5481 type = btrfs_file_extent_type(path->nodes[0], fi); 5482 if (type == BTRFS_FILE_EXTENT_INLINE) { 5483 u64 size = btrfs_file_extent_inline_len(path->nodes[0], 5484 path->slots[0], fi); 5485 extent_end = ALIGN(key->offset + size, 5486 sctx->send_root->fs_info->sectorsize); 5487 } else { 5488 extent_end = key->offset + 5489 btrfs_file_extent_num_bytes(path->nodes[0], fi); 5490 } 5491 5492 if (path->slots[0] == 0 && 5493 sctx->cur_inode_last_extent < key->offset) { 5494 /* 5495 * We might have skipped entire leafs that contained only 5496 * file extent items for our current inode. These leafs have 5497 * a generation number smaller (older) than the one in the 5498 * current leaf and the leaf our last extent came from, and 5499 * are located between these 2 leafs. 5500 */ 5501 ret = get_last_extent(sctx, key->offset - 1); 5502 if (ret) 5503 return ret; 5504 } 5505 5506 if (sctx->cur_inode_last_extent < key->offset) { 5507 ret = range_is_hole_in_parent(sctx, 5508 sctx->cur_inode_last_extent, 5509 key->offset); 5510 if (ret < 0) 5511 return ret; 5512 else if (ret == 0) 5513 ret = send_hole(sctx, key->offset); 5514 else 5515 ret = 0; 5516 } 5517 sctx->cur_inode_last_extent = extent_end; 5518 return ret; 5519 } 5520 5521 static int process_extent(struct send_ctx *sctx, 5522 struct btrfs_path *path, 5523 struct btrfs_key *key) 5524 { 5525 struct clone_root *found_clone = NULL; 5526 int ret = 0; 5527 5528 if (S_ISLNK(sctx->cur_inode_mode)) 5529 return 0; 5530 5531 if (sctx->parent_root && !sctx->cur_inode_new) { 5532 ret = is_extent_unchanged(sctx, path, key); 5533 if (ret < 0) 5534 goto out; 5535 if (ret) { 5536 ret = 0; 5537 goto out_hole; 5538 } 5539 } else { 5540 struct btrfs_file_extent_item *ei; 5541 u8 type; 5542 5543 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 5544 struct btrfs_file_extent_item); 5545 type = btrfs_file_extent_type(path->nodes[0], ei); 5546 if (type == BTRFS_FILE_EXTENT_PREALLOC || 5547 type == BTRFS_FILE_EXTENT_REG) { 5548 /* 5549 * The send spec does not have a prealloc command yet, 5550 * so just leave a hole for prealloc'ed extents until 5551 * we have enough commands queued up to justify rev'ing 5552 * the send spec. 5553 */ 5554 if (type == BTRFS_FILE_EXTENT_PREALLOC) { 5555 ret = 0; 5556 goto out; 5557 } 5558 5559 /* Have a hole, just skip it. */ 5560 if (btrfs_file_extent_disk_bytenr(path->nodes[0], ei) == 0) { 5561 ret = 0; 5562 goto out; 5563 } 5564 } 5565 } 5566 5567 ret = find_extent_clone(sctx, path, key->objectid, key->offset, 5568 sctx->cur_inode_size, &found_clone); 5569 if (ret != -ENOENT && ret < 0) 5570 goto out; 5571 5572 ret = send_write_or_clone(sctx, path, key, found_clone); 5573 if (ret) 5574 goto out; 5575 out_hole: 5576 ret = maybe_send_hole(sctx, path, key); 5577 out: 5578 return ret; 5579 } 5580 5581 static int process_all_extents(struct send_ctx *sctx) 5582 { 5583 int ret; 5584 struct btrfs_root *root; 5585 struct btrfs_path *path; 5586 struct btrfs_key key; 5587 struct btrfs_key found_key; 5588 struct extent_buffer *eb; 5589 int slot; 5590 5591 root = sctx->send_root; 5592 path = alloc_path_for_send(); 5593 if (!path) 5594 return -ENOMEM; 5595 5596 key.objectid = sctx->cmp_key->objectid; 5597 key.type = BTRFS_EXTENT_DATA_KEY; 5598 key.offset = 0; 5599 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 5600 if (ret < 0) 5601 goto out; 5602 5603 while (1) { 5604 eb = path->nodes[0]; 5605 slot = path->slots[0]; 5606 5607 if (slot >= btrfs_header_nritems(eb)) { 5608 ret = btrfs_next_leaf(root, path); 5609 if (ret < 0) { 5610 goto out; 5611 } else if (ret > 0) { 5612 ret = 0; 5613 break; 5614 } 5615 continue; 5616 } 5617 5618 btrfs_item_key_to_cpu(eb, &found_key, slot); 5619 5620 if (found_key.objectid != key.objectid || 5621 found_key.type != key.type) { 5622 ret = 0; 5623 goto out; 5624 } 5625 5626 ret = process_extent(sctx, path, &found_key); 5627 if (ret < 0) 5628 goto out; 5629 5630 path->slots[0]++; 5631 } 5632 5633 out: 5634 btrfs_free_path(path); 5635 return ret; 5636 } 5637 5638 static int process_recorded_refs_if_needed(struct send_ctx *sctx, int at_end, 5639 int *pending_move, 5640 int *refs_processed) 5641 { 5642 int ret = 0; 5643 5644 if (sctx->cur_ino == 0) 5645 goto out; 5646 if (!at_end && sctx->cur_ino == sctx->cmp_key->objectid && 5647 sctx->cmp_key->type <= BTRFS_INODE_EXTREF_KEY) 5648 goto out; 5649 if (list_empty(&sctx->new_refs) && list_empty(&sctx->deleted_refs)) 5650 goto out; 5651 5652 ret = process_recorded_refs(sctx, pending_move); 5653 if (ret < 0) 5654 goto out; 5655 5656 *refs_processed = 1; 5657 out: 5658 return ret; 5659 } 5660 5661 static int finish_inode_if_needed(struct send_ctx *sctx, int at_end) 5662 { 5663 int ret = 0; 5664 u64 left_mode; 5665 u64 left_uid; 5666 u64 left_gid; 5667 u64 right_mode; 5668 u64 right_uid; 5669 u64 right_gid; 5670 int need_chmod = 0; 5671 int need_chown = 0; 5672 int pending_move = 0; 5673 int refs_processed = 0; 5674 5675 ret = process_recorded_refs_if_needed(sctx, at_end, &pending_move, 5676 &refs_processed); 5677 if (ret < 0) 5678 goto out; 5679 5680 /* 5681 * We have processed the refs and thus need to advance send_progress. 5682 * Now, calls to get_cur_xxx will take the updated refs of the current 5683 * inode into account. 5684 * 5685 * On the other hand, if our current inode is a directory and couldn't 5686 * be moved/renamed because its parent was renamed/moved too and it has 5687 * a higher inode number, we can only move/rename our current inode 5688 * after we moved/renamed its parent. Therefore in this case operate on 5689 * the old path (pre move/rename) of our current inode, and the 5690 * move/rename will be performed later. 5691 */ 5692 if (refs_processed && !pending_move) 5693 sctx->send_progress = sctx->cur_ino + 1; 5694 5695 if (sctx->cur_ino == 0 || sctx->cur_inode_deleted) 5696 goto out; 5697 if (!at_end && sctx->cmp_key->objectid == sctx->cur_ino) 5698 goto out; 5699 5700 ret = get_inode_info(sctx->send_root, sctx->cur_ino, NULL, NULL, 5701 &left_mode, &left_uid, &left_gid, NULL); 5702 if (ret < 0) 5703 goto out; 5704 5705 if (!sctx->parent_root || sctx->cur_inode_new) { 5706 need_chown = 1; 5707 if (!S_ISLNK(sctx->cur_inode_mode)) 5708 need_chmod = 1; 5709 } else { 5710 ret = get_inode_info(sctx->parent_root, sctx->cur_ino, 5711 NULL, NULL, &right_mode, &right_uid, 5712 &right_gid, NULL); 5713 if (ret < 0) 5714 goto out; 5715 5716 if (left_uid != right_uid || left_gid != right_gid) 5717 need_chown = 1; 5718 if (!S_ISLNK(sctx->cur_inode_mode) && left_mode != right_mode) 5719 need_chmod = 1; 5720 } 5721 5722 if (S_ISREG(sctx->cur_inode_mode)) { 5723 if (need_send_hole(sctx)) { 5724 if (sctx->cur_inode_last_extent == (u64)-1 || 5725 sctx->cur_inode_last_extent < 5726 sctx->cur_inode_size) { 5727 ret = get_last_extent(sctx, (u64)-1); 5728 if (ret) 5729 goto out; 5730 } 5731 if (sctx->cur_inode_last_extent < 5732 sctx->cur_inode_size) { 5733 ret = send_hole(sctx, sctx->cur_inode_size); 5734 if (ret) 5735 goto out; 5736 } 5737 } 5738 ret = send_truncate(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5739 sctx->cur_inode_size); 5740 if (ret < 0) 5741 goto out; 5742 } 5743 5744 if (need_chown) { 5745 ret = send_chown(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5746 left_uid, left_gid); 5747 if (ret < 0) 5748 goto out; 5749 } 5750 if (need_chmod) { 5751 ret = send_chmod(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5752 left_mode); 5753 if (ret < 0) 5754 goto out; 5755 } 5756 5757 /* 5758 * If other directory inodes depended on our current directory 5759 * inode's move/rename, now do their move/rename operations. 5760 */ 5761 if (!is_waiting_for_move(sctx, sctx->cur_ino)) { 5762 ret = apply_children_dir_moves(sctx); 5763 if (ret) 5764 goto out; 5765 /* 5766 * Need to send that every time, no matter if it actually 5767 * changed between the two trees as we have done changes to 5768 * the inode before. If our inode is a directory and it's 5769 * waiting to be moved/renamed, we will send its utimes when 5770 * it's moved/renamed, therefore we don't need to do it here. 5771 */ 5772 sctx->send_progress = sctx->cur_ino + 1; 5773 ret = send_utimes(sctx, sctx->cur_ino, sctx->cur_inode_gen); 5774 if (ret < 0) 5775 goto out; 5776 } 5777 5778 out: 5779 return ret; 5780 } 5781 5782 static int changed_inode(struct send_ctx *sctx, 5783 enum btrfs_compare_tree_result result) 5784 { 5785 int ret = 0; 5786 struct btrfs_key *key = sctx->cmp_key; 5787 struct btrfs_inode_item *left_ii = NULL; 5788 struct btrfs_inode_item *right_ii = NULL; 5789 u64 left_gen = 0; 5790 u64 right_gen = 0; 5791 5792 sctx->cur_ino = key->objectid; 5793 sctx->cur_inode_new_gen = 0; 5794 sctx->cur_inode_last_extent = (u64)-1; 5795 5796 /* 5797 * Set send_progress to current inode. This will tell all get_cur_xxx 5798 * functions that the current inode's refs are not updated yet. Later, 5799 * when process_recorded_refs is finished, it is set to cur_ino + 1. 5800 */ 5801 sctx->send_progress = sctx->cur_ino; 5802 5803 if (result == BTRFS_COMPARE_TREE_NEW || 5804 result == BTRFS_COMPARE_TREE_CHANGED) { 5805 left_ii = btrfs_item_ptr(sctx->left_path->nodes[0], 5806 sctx->left_path->slots[0], 5807 struct btrfs_inode_item); 5808 left_gen = btrfs_inode_generation(sctx->left_path->nodes[0], 5809 left_ii); 5810 } else { 5811 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 5812 sctx->right_path->slots[0], 5813 struct btrfs_inode_item); 5814 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 5815 right_ii); 5816 } 5817 if (result == BTRFS_COMPARE_TREE_CHANGED) { 5818 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 5819 sctx->right_path->slots[0], 5820 struct btrfs_inode_item); 5821 5822 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 5823 right_ii); 5824 5825 /* 5826 * The cur_ino = root dir case is special here. We can't treat 5827 * the inode as deleted+reused because it would generate a 5828 * stream that tries to delete/mkdir the root dir. 5829 */ 5830 if (left_gen != right_gen && 5831 sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) 5832 sctx->cur_inode_new_gen = 1; 5833 } 5834 5835 if (result == BTRFS_COMPARE_TREE_NEW) { 5836 sctx->cur_inode_gen = left_gen; 5837 sctx->cur_inode_new = 1; 5838 sctx->cur_inode_deleted = 0; 5839 sctx->cur_inode_size = btrfs_inode_size( 5840 sctx->left_path->nodes[0], left_ii); 5841 sctx->cur_inode_mode = btrfs_inode_mode( 5842 sctx->left_path->nodes[0], left_ii); 5843 sctx->cur_inode_rdev = btrfs_inode_rdev( 5844 sctx->left_path->nodes[0], left_ii); 5845 if (sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) 5846 ret = send_create_inode_if_needed(sctx); 5847 } else if (result == BTRFS_COMPARE_TREE_DELETED) { 5848 sctx->cur_inode_gen = right_gen; 5849 sctx->cur_inode_new = 0; 5850 sctx->cur_inode_deleted = 1; 5851 sctx->cur_inode_size = btrfs_inode_size( 5852 sctx->right_path->nodes[0], right_ii); 5853 sctx->cur_inode_mode = btrfs_inode_mode( 5854 sctx->right_path->nodes[0], right_ii); 5855 } else if (result == BTRFS_COMPARE_TREE_CHANGED) { 5856 /* 5857 * We need to do some special handling in case the inode was 5858 * reported as changed with a changed generation number. This 5859 * means that the original inode was deleted and new inode 5860 * reused the same inum. So we have to treat the old inode as 5861 * deleted and the new one as new. 5862 */ 5863 if (sctx->cur_inode_new_gen) { 5864 /* 5865 * First, process the inode as if it was deleted. 5866 */ 5867 sctx->cur_inode_gen = right_gen; 5868 sctx->cur_inode_new = 0; 5869 sctx->cur_inode_deleted = 1; 5870 sctx->cur_inode_size = btrfs_inode_size( 5871 sctx->right_path->nodes[0], right_ii); 5872 sctx->cur_inode_mode = btrfs_inode_mode( 5873 sctx->right_path->nodes[0], right_ii); 5874 ret = process_all_refs(sctx, 5875 BTRFS_COMPARE_TREE_DELETED); 5876 if (ret < 0) 5877 goto out; 5878 5879 /* 5880 * Now process the inode as if it was new. 5881 */ 5882 sctx->cur_inode_gen = left_gen; 5883 sctx->cur_inode_new = 1; 5884 sctx->cur_inode_deleted = 0; 5885 sctx->cur_inode_size = btrfs_inode_size( 5886 sctx->left_path->nodes[0], left_ii); 5887 sctx->cur_inode_mode = btrfs_inode_mode( 5888 sctx->left_path->nodes[0], left_ii); 5889 sctx->cur_inode_rdev = btrfs_inode_rdev( 5890 sctx->left_path->nodes[0], left_ii); 5891 ret = send_create_inode_if_needed(sctx); 5892 if (ret < 0) 5893 goto out; 5894 5895 ret = process_all_refs(sctx, BTRFS_COMPARE_TREE_NEW); 5896 if (ret < 0) 5897 goto out; 5898 /* 5899 * Advance send_progress now as we did not get into 5900 * process_recorded_refs_if_needed in the new_gen case. 5901 */ 5902 sctx->send_progress = sctx->cur_ino + 1; 5903 5904 /* 5905 * Now process all extents and xattrs of the inode as if 5906 * they were all new. 5907 */ 5908 ret = process_all_extents(sctx); 5909 if (ret < 0) 5910 goto out; 5911 ret = process_all_new_xattrs(sctx); 5912 if (ret < 0) 5913 goto out; 5914 } else { 5915 sctx->cur_inode_gen = left_gen; 5916 sctx->cur_inode_new = 0; 5917 sctx->cur_inode_new_gen = 0; 5918 sctx->cur_inode_deleted = 0; 5919 sctx->cur_inode_size = btrfs_inode_size( 5920 sctx->left_path->nodes[0], left_ii); 5921 sctx->cur_inode_mode = btrfs_inode_mode( 5922 sctx->left_path->nodes[0], left_ii); 5923 } 5924 } 5925 5926 out: 5927 return ret; 5928 } 5929 5930 /* 5931 * We have to process new refs before deleted refs, but compare_trees gives us 5932 * the new and deleted refs mixed. To fix this, we record the new/deleted refs 5933 * first and later process them in process_recorded_refs. 5934 * For the cur_inode_new_gen case, we skip recording completely because 5935 * changed_inode did already initiate processing of refs. The reason for this is 5936 * that in this case, compare_tree actually compares the refs of 2 different 5937 * inodes. To fix this, process_all_refs is used in changed_inode to handle all 5938 * refs of the right tree as deleted and all refs of the left tree as new. 5939 */ 5940 static int changed_ref(struct send_ctx *sctx, 5941 enum btrfs_compare_tree_result result) 5942 { 5943 int ret = 0; 5944 5945 if (sctx->cur_ino != sctx->cmp_key->objectid) { 5946 inconsistent_snapshot_error(sctx, result, "reference"); 5947 return -EIO; 5948 } 5949 5950 if (!sctx->cur_inode_new_gen && 5951 sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) { 5952 if (result == BTRFS_COMPARE_TREE_NEW) 5953 ret = record_new_ref(sctx); 5954 else if (result == BTRFS_COMPARE_TREE_DELETED) 5955 ret = record_deleted_ref(sctx); 5956 else if (result == BTRFS_COMPARE_TREE_CHANGED) 5957 ret = record_changed_ref(sctx); 5958 } 5959 5960 return ret; 5961 } 5962 5963 /* 5964 * Process new/deleted/changed xattrs. We skip processing in the 5965 * cur_inode_new_gen case because changed_inode did already initiate processing 5966 * of xattrs. The reason is the same as in changed_ref 5967 */ 5968 static int changed_xattr(struct send_ctx *sctx, 5969 enum btrfs_compare_tree_result result) 5970 { 5971 int ret = 0; 5972 5973 if (sctx->cur_ino != sctx->cmp_key->objectid) { 5974 inconsistent_snapshot_error(sctx, result, "xattr"); 5975 return -EIO; 5976 } 5977 5978 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 5979 if (result == BTRFS_COMPARE_TREE_NEW) 5980 ret = process_new_xattr(sctx); 5981 else if (result == BTRFS_COMPARE_TREE_DELETED) 5982 ret = process_deleted_xattr(sctx); 5983 else if (result == BTRFS_COMPARE_TREE_CHANGED) 5984 ret = process_changed_xattr(sctx); 5985 } 5986 5987 return ret; 5988 } 5989 5990 /* 5991 * Process new/deleted/changed extents. We skip processing in the 5992 * cur_inode_new_gen case because changed_inode did already initiate processing 5993 * of extents. The reason is the same as in changed_ref 5994 */ 5995 static int changed_extent(struct send_ctx *sctx, 5996 enum btrfs_compare_tree_result result) 5997 { 5998 int ret = 0; 5999 6000 if (sctx->cur_ino != sctx->cmp_key->objectid) { 6001 6002 if (result == BTRFS_COMPARE_TREE_CHANGED) { 6003 struct extent_buffer *leaf_l; 6004 struct extent_buffer *leaf_r; 6005 struct btrfs_file_extent_item *ei_l; 6006 struct btrfs_file_extent_item *ei_r; 6007 6008 leaf_l = sctx->left_path->nodes[0]; 6009 leaf_r = sctx->right_path->nodes[0]; 6010 ei_l = btrfs_item_ptr(leaf_l, 6011 sctx->left_path->slots[0], 6012 struct btrfs_file_extent_item); 6013 ei_r = btrfs_item_ptr(leaf_r, 6014 sctx->right_path->slots[0], 6015 struct btrfs_file_extent_item); 6016 6017 /* 6018 * We may have found an extent item that has changed 6019 * only its disk_bytenr field and the corresponding 6020 * inode item was not updated. This case happens due to 6021 * very specific timings during relocation when a leaf 6022 * that contains file extent items is COWed while 6023 * relocation is ongoing and its in the stage where it 6024 * updates data pointers. So when this happens we can 6025 * safely ignore it since we know it's the same extent, 6026 * but just at different logical and physical locations 6027 * (when an extent is fully replaced with a new one, we 6028 * know the generation number must have changed too, 6029 * since snapshot creation implies committing the current 6030 * transaction, and the inode item must have been updated 6031 * as well). 6032 * This replacement of the disk_bytenr happens at 6033 * relocation.c:replace_file_extents() through 6034 * relocation.c:btrfs_reloc_cow_block(). 6035 */ 6036 if (btrfs_file_extent_generation(leaf_l, ei_l) == 6037 btrfs_file_extent_generation(leaf_r, ei_r) && 6038 btrfs_file_extent_ram_bytes(leaf_l, ei_l) == 6039 btrfs_file_extent_ram_bytes(leaf_r, ei_r) && 6040 btrfs_file_extent_compression(leaf_l, ei_l) == 6041 btrfs_file_extent_compression(leaf_r, ei_r) && 6042 btrfs_file_extent_encryption(leaf_l, ei_l) == 6043 btrfs_file_extent_encryption(leaf_r, ei_r) && 6044 btrfs_file_extent_other_encoding(leaf_l, ei_l) == 6045 btrfs_file_extent_other_encoding(leaf_r, ei_r) && 6046 btrfs_file_extent_type(leaf_l, ei_l) == 6047 btrfs_file_extent_type(leaf_r, ei_r) && 6048 btrfs_file_extent_disk_bytenr(leaf_l, ei_l) != 6049 btrfs_file_extent_disk_bytenr(leaf_r, ei_r) && 6050 btrfs_file_extent_disk_num_bytes(leaf_l, ei_l) == 6051 btrfs_file_extent_disk_num_bytes(leaf_r, ei_r) && 6052 btrfs_file_extent_offset(leaf_l, ei_l) == 6053 btrfs_file_extent_offset(leaf_r, ei_r) && 6054 btrfs_file_extent_num_bytes(leaf_l, ei_l) == 6055 btrfs_file_extent_num_bytes(leaf_r, ei_r)) 6056 return 0; 6057 } 6058 6059 inconsistent_snapshot_error(sctx, result, "extent"); 6060 return -EIO; 6061 } 6062 6063 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 6064 if (result != BTRFS_COMPARE_TREE_DELETED) 6065 ret = process_extent(sctx, sctx->left_path, 6066 sctx->cmp_key); 6067 } 6068 6069 return ret; 6070 } 6071 6072 static int dir_changed(struct send_ctx *sctx, u64 dir) 6073 { 6074 u64 orig_gen, new_gen; 6075 int ret; 6076 6077 ret = get_inode_info(sctx->send_root, dir, NULL, &new_gen, NULL, NULL, 6078 NULL, NULL); 6079 if (ret) 6080 return ret; 6081 6082 ret = get_inode_info(sctx->parent_root, dir, NULL, &orig_gen, NULL, 6083 NULL, NULL, NULL); 6084 if (ret) 6085 return ret; 6086 6087 return (orig_gen != new_gen) ? 1 : 0; 6088 } 6089 6090 static int compare_refs(struct send_ctx *sctx, struct btrfs_path *path, 6091 struct btrfs_key *key) 6092 { 6093 struct btrfs_inode_extref *extref; 6094 struct extent_buffer *leaf; 6095 u64 dirid = 0, last_dirid = 0; 6096 unsigned long ptr; 6097 u32 item_size; 6098 u32 cur_offset = 0; 6099 int ref_name_len; 6100 int ret = 0; 6101 6102 /* Easy case, just check this one dirid */ 6103 if (key->type == BTRFS_INODE_REF_KEY) { 6104 dirid = key->offset; 6105 6106 ret = dir_changed(sctx, dirid); 6107 goto out; 6108 } 6109 6110 leaf = path->nodes[0]; 6111 item_size = btrfs_item_size_nr(leaf, path->slots[0]); 6112 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); 6113 while (cur_offset < item_size) { 6114 extref = (struct btrfs_inode_extref *)(ptr + 6115 cur_offset); 6116 dirid = btrfs_inode_extref_parent(leaf, extref); 6117 ref_name_len = btrfs_inode_extref_name_len(leaf, extref); 6118 cur_offset += ref_name_len + sizeof(*extref); 6119 if (dirid == last_dirid) 6120 continue; 6121 ret = dir_changed(sctx, dirid); 6122 if (ret) 6123 break; 6124 last_dirid = dirid; 6125 } 6126 out: 6127 return ret; 6128 } 6129 6130 /* 6131 * Updates compare related fields in sctx and simply forwards to the actual 6132 * changed_xxx functions. 6133 */ 6134 static int changed_cb(struct btrfs_root *left_root, 6135 struct btrfs_root *right_root, 6136 struct btrfs_path *left_path, 6137 struct btrfs_path *right_path, 6138 struct btrfs_key *key, 6139 enum btrfs_compare_tree_result result, 6140 void *ctx) 6141 { 6142 int ret = 0; 6143 struct send_ctx *sctx = ctx; 6144 6145 if (result == BTRFS_COMPARE_TREE_SAME) { 6146 if (key->type == BTRFS_INODE_REF_KEY || 6147 key->type == BTRFS_INODE_EXTREF_KEY) { 6148 ret = compare_refs(sctx, left_path, key); 6149 if (!ret) 6150 return 0; 6151 if (ret < 0) 6152 return ret; 6153 } else if (key->type == BTRFS_EXTENT_DATA_KEY) { 6154 return maybe_send_hole(sctx, left_path, key); 6155 } else { 6156 return 0; 6157 } 6158 result = BTRFS_COMPARE_TREE_CHANGED; 6159 ret = 0; 6160 } 6161 6162 sctx->left_path = left_path; 6163 sctx->right_path = right_path; 6164 sctx->cmp_key = key; 6165 6166 ret = finish_inode_if_needed(sctx, 0); 6167 if (ret < 0) 6168 goto out; 6169 6170 /* Ignore non-FS objects */ 6171 if (key->objectid == BTRFS_FREE_INO_OBJECTID || 6172 key->objectid == BTRFS_FREE_SPACE_OBJECTID) 6173 goto out; 6174 6175 if (key->type == BTRFS_INODE_ITEM_KEY) 6176 ret = changed_inode(sctx, result); 6177 else if (key->type == BTRFS_INODE_REF_KEY || 6178 key->type == BTRFS_INODE_EXTREF_KEY) 6179 ret = changed_ref(sctx, result); 6180 else if (key->type == BTRFS_XATTR_ITEM_KEY) 6181 ret = changed_xattr(sctx, result); 6182 else if (key->type == BTRFS_EXTENT_DATA_KEY) 6183 ret = changed_extent(sctx, result); 6184 6185 out: 6186 return ret; 6187 } 6188 6189 static int full_send_tree(struct send_ctx *sctx) 6190 { 6191 int ret; 6192 struct btrfs_root *send_root = sctx->send_root; 6193 struct btrfs_key key; 6194 struct btrfs_key found_key; 6195 struct btrfs_path *path; 6196 struct extent_buffer *eb; 6197 int slot; 6198 6199 path = alloc_path_for_send(); 6200 if (!path) 6201 return -ENOMEM; 6202 6203 key.objectid = BTRFS_FIRST_FREE_OBJECTID; 6204 key.type = BTRFS_INODE_ITEM_KEY; 6205 key.offset = 0; 6206 6207 ret = btrfs_search_slot_for_read(send_root, &key, path, 1, 0); 6208 if (ret < 0) 6209 goto out; 6210 if (ret) 6211 goto out_finish; 6212 6213 while (1) { 6214 eb = path->nodes[0]; 6215 slot = path->slots[0]; 6216 btrfs_item_key_to_cpu(eb, &found_key, slot); 6217 6218 ret = changed_cb(send_root, NULL, path, NULL, 6219 &found_key, BTRFS_COMPARE_TREE_NEW, sctx); 6220 if (ret < 0) 6221 goto out; 6222 6223 key.objectid = found_key.objectid; 6224 key.type = found_key.type; 6225 key.offset = found_key.offset + 1; 6226 6227 ret = btrfs_next_item(send_root, path); 6228 if (ret < 0) 6229 goto out; 6230 if (ret) { 6231 ret = 0; 6232 break; 6233 } 6234 } 6235 6236 out_finish: 6237 ret = finish_inode_if_needed(sctx, 1); 6238 6239 out: 6240 btrfs_free_path(path); 6241 return ret; 6242 } 6243 6244 static int send_subvol(struct send_ctx *sctx) 6245 { 6246 int ret; 6247 6248 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_STREAM_HEADER)) { 6249 ret = send_header(sctx); 6250 if (ret < 0) 6251 goto out; 6252 } 6253 6254 ret = send_subvol_begin(sctx); 6255 if (ret < 0) 6256 goto out; 6257 6258 if (sctx->parent_root) { 6259 ret = btrfs_compare_trees(sctx->send_root, sctx->parent_root, 6260 changed_cb, sctx); 6261 if (ret < 0) 6262 goto out; 6263 ret = finish_inode_if_needed(sctx, 1); 6264 if (ret < 0) 6265 goto out; 6266 } else { 6267 ret = full_send_tree(sctx); 6268 if (ret < 0) 6269 goto out; 6270 } 6271 6272 out: 6273 free_recorded_refs(sctx); 6274 return ret; 6275 } 6276 6277 /* 6278 * If orphan cleanup did remove any orphans from a root, it means the tree 6279 * was modified and therefore the commit root is not the same as the current 6280 * root anymore. This is a problem, because send uses the commit root and 6281 * therefore can see inode items that don't exist in the current root anymore, 6282 * and for example make calls to btrfs_iget, which will do tree lookups based 6283 * on the current root and not on the commit root. Those lookups will fail, 6284 * returning a -ESTALE error, and making send fail with that error. So make 6285 * sure a send does not see any orphans we have just removed, and that it will 6286 * see the same inodes regardless of whether a transaction commit happened 6287 * before it started (meaning that the commit root will be the same as the 6288 * current root) or not. 6289 */ 6290 static int ensure_commit_roots_uptodate(struct send_ctx *sctx) 6291 { 6292 int i; 6293 struct btrfs_trans_handle *trans = NULL; 6294 6295 again: 6296 if (sctx->parent_root && 6297 sctx->parent_root->node != sctx->parent_root->commit_root) 6298 goto commit_trans; 6299 6300 for (i = 0; i < sctx->clone_roots_cnt; i++) 6301 if (sctx->clone_roots[i].root->node != 6302 sctx->clone_roots[i].root->commit_root) 6303 goto commit_trans; 6304 6305 if (trans) 6306 return btrfs_end_transaction(trans); 6307 6308 return 0; 6309 6310 commit_trans: 6311 /* Use any root, all fs roots will get their commit roots updated. */ 6312 if (!trans) { 6313 trans = btrfs_join_transaction(sctx->send_root); 6314 if (IS_ERR(trans)) 6315 return PTR_ERR(trans); 6316 goto again; 6317 } 6318 6319 return btrfs_commit_transaction(trans); 6320 } 6321 6322 static void btrfs_root_dec_send_in_progress(struct btrfs_root* root) 6323 { 6324 spin_lock(&root->root_item_lock); 6325 root->send_in_progress--; 6326 /* 6327 * Not much left to do, we don't know why it's unbalanced and 6328 * can't blindly reset it to 0. 6329 */ 6330 if (root->send_in_progress < 0) 6331 btrfs_err(root->fs_info, 6332 "send_in_progres unbalanced %d root %llu", 6333 root->send_in_progress, root->root_key.objectid); 6334 spin_unlock(&root->root_item_lock); 6335 } 6336 6337 long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_) 6338 { 6339 int ret = 0; 6340 struct btrfs_root *send_root = BTRFS_I(file_inode(mnt_file))->root; 6341 struct btrfs_fs_info *fs_info = send_root->fs_info; 6342 struct btrfs_root *clone_root; 6343 struct btrfs_ioctl_send_args *arg = NULL; 6344 struct btrfs_key key; 6345 struct send_ctx *sctx = NULL; 6346 u32 i; 6347 u64 *clone_sources_tmp = NULL; 6348 int clone_sources_to_rollback = 0; 6349 unsigned alloc_size; 6350 int sort_clone_roots = 0; 6351 int index; 6352 6353 if (!capable(CAP_SYS_ADMIN)) 6354 return -EPERM; 6355 6356 /* 6357 * The subvolume must remain read-only during send, protect against 6358 * making it RW. This also protects against deletion. 6359 */ 6360 spin_lock(&send_root->root_item_lock); 6361 send_root->send_in_progress++; 6362 spin_unlock(&send_root->root_item_lock); 6363 6364 /* 6365 * This is done when we lookup the root, it should already be complete 6366 * by the time we get here. 6367 */ 6368 WARN_ON(send_root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE); 6369 6370 /* 6371 * Userspace tools do the checks and warn the user if it's 6372 * not RO. 6373 */ 6374 if (!btrfs_root_readonly(send_root)) { 6375 ret = -EPERM; 6376 goto out; 6377 } 6378 6379 arg = memdup_user(arg_, sizeof(*arg)); 6380 if (IS_ERR(arg)) { 6381 ret = PTR_ERR(arg); 6382 arg = NULL; 6383 goto out; 6384 } 6385 6386 /* 6387 * Check that we don't overflow at later allocations, we request 6388 * clone_sources_count + 1 items, and compare to unsigned long inside 6389 * access_ok. 6390 */ 6391 if (arg->clone_sources_count > 6392 ULONG_MAX / sizeof(struct clone_root) - 1) { 6393 ret = -EINVAL; 6394 goto out; 6395 } 6396 6397 if (!access_ok(VERIFY_READ, arg->clone_sources, 6398 sizeof(*arg->clone_sources) * 6399 arg->clone_sources_count)) { 6400 ret = -EFAULT; 6401 goto out; 6402 } 6403 6404 if (arg->flags & ~BTRFS_SEND_FLAG_MASK) { 6405 ret = -EINVAL; 6406 goto out; 6407 } 6408 6409 sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL); 6410 if (!sctx) { 6411 ret = -ENOMEM; 6412 goto out; 6413 } 6414 6415 INIT_LIST_HEAD(&sctx->new_refs); 6416 INIT_LIST_HEAD(&sctx->deleted_refs); 6417 INIT_RADIX_TREE(&sctx->name_cache, GFP_KERNEL); 6418 INIT_LIST_HEAD(&sctx->name_cache_list); 6419 6420 sctx->flags = arg->flags; 6421 6422 sctx->send_filp = fget(arg->send_fd); 6423 if (!sctx->send_filp) { 6424 ret = -EBADF; 6425 goto out; 6426 } 6427 6428 sctx->send_root = send_root; 6429 /* 6430 * Unlikely but possible, if the subvolume is marked for deletion but 6431 * is slow to remove the directory entry, send can still be started 6432 */ 6433 if (btrfs_root_dead(sctx->send_root)) { 6434 ret = -EPERM; 6435 goto out; 6436 } 6437 6438 sctx->clone_roots_cnt = arg->clone_sources_count; 6439 6440 sctx->send_max_size = BTRFS_SEND_BUF_SIZE; 6441 sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL); 6442 if (!sctx->send_buf) { 6443 ret = -ENOMEM; 6444 goto out; 6445 } 6446 6447 sctx->read_buf = kvmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL); 6448 if (!sctx->read_buf) { 6449 ret = -ENOMEM; 6450 goto out; 6451 } 6452 6453 sctx->pending_dir_moves = RB_ROOT; 6454 sctx->waiting_dir_moves = RB_ROOT; 6455 sctx->orphan_dirs = RB_ROOT; 6456 6457 alloc_size = sizeof(struct clone_root) * (arg->clone_sources_count + 1); 6458 6459 sctx->clone_roots = kzalloc(alloc_size, GFP_KERNEL); 6460 if (!sctx->clone_roots) { 6461 ret = -ENOMEM; 6462 goto out; 6463 } 6464 6465 alloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources); 6466 6467 if (arg->clone_sources_count) { 6468 clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL); 6469 if (!clone_sources_tmp) { 6470 ret = -ENOMEM; 6471 goto out; 6472 } 6473 6474 ret = copy_from_user(clone_sources_tmp, arg->clone_sources, 6475 alloc_size); 6476 if (ret) { 6477 ret = -EFAULT; 6478 goto out; 6479 } 6480 6481 for (i = 0; i < arg->clone_sources_count; i++) { 6482 key.objectid = clone_sources_tmp[i]; 6483 key.type = BTRFS_ROOT_ITEM_KEY; 6484 key.offset = (u64)-1; 6485 6486 index = srcu_read_lock(&fs_info->subvol_srcu); 6487 6488 clone_root = btrfs_read_fs_root_no_name(fs_info, &key); 6489 if (IS_ERR(clone_root)) { 6490 srcu_read_unlock(&fs_info->subvol_srcu, index); 6491 ret = PTR_ERR(clone_root); 6492 goto out; 6493 } 6494 spin_lock(&clone_root->root_item_lock); 6495 if (!btrfs_root_readonly(clone_root) || 6496 btrfs_root_dead(clone_root)) { 6497 spin_unlock(&clone_root->root_item_lock); 6498 srcu_read_unlock(&fs_info->subvol_srcu, index); 6499 ret = -EPERM; 6500 goto out; 6501 } 6502 clone_root->send_in_progress++; 6503 spin_unlock(&clone_root->root_item_lock); 6504 srcu_read_unlock(&fs_info->subvol_srcu, index); 6505 6506 sctx->clone_roots[i].root = clone_root; 6507 clone_sources_to_rollback = i + 1; 6508 } 6509 kvfree(clone_sources_tmp); 6510 clone_sources_tmp = NULL; 6511 } 6512 6513 if (arg->parent_root) { 6514 key.objectid = arg->parent_root; 6515 key.type = BTRFS_ROOT_ITEM_KEY; 6516 key.offset = (u64)-1; 6517 6518 index = srcu_read_lock(&fs_info->subvol_srcu); 6519 6520 sctx->parent_root = btrfs_read_fs_root_no_name(fs_info, &key); 6521 if (IS_ERR(sctx->parent_root)) { 6522 srcu_read_unlock(&fs_info->subvol_srcu, index); 6523 ret = PTR_ERR(sctx->parent_root); 6524 goto out; 6525 } 6526 6527 spin_lock(&sctx->parent_root->root_item_lock); 6528 sctx->parent_root->send_in_progress++; 6529 if (!btrfs_root_readonly(sctx->parent_root) || 6530 btrfs_root_dead(sctx->parent_root)) { 6531 spin_unlock(&sctx->parent_root->root_item_lock); 6532 srcu_read_unlock(&fs_info->subvol_srcu, index); 6533 ret = -EPERM; 6534 goto out; 6535 } 6536 spin_unlock(&sctx->parent_root->root_item_lock); 6537 6538 srcu_read_unlock(&fs_info->subvol_srcu, index); 6539 } 6540 6541 /* 6542 * Clones from send_root are allowed, but only if the clone source 6543 * is behind the current send position. This is checked while searching 6544 * for possible clone sources. 6545 */ 6546 sctx->clone_roots[sctx->clone_roots_cnt++].root = sctx->send_root; 6547 6548 /* We do a bsearch later */ 6549 sort(sctx->clone_roots, sctx->clone_roots_cnt, 6550 sizeof(*sctx->clone_roots), __clone_root_cmp_sort, 6551 NULL); 6552 sort_clone_roots = 1; 6553 6554 ret = ensure_commit_roots_uptodate(sctx); 6555 if (ret) 6556 goto out; 6557 6558 current->journal_info = BTRFS_SEND_TRANS_STUB; 6559 ret = send_subvol(sctx); 6560 current->journal_info = NULL; 6561 if (ret < 0) 6562 goto out; 6563 6564 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) { 6565 ret = begin_cmd(sctx, BTRFS_SEND_C_END); 6566 if (ret < 0) 6567 goto out; 6568 ret = send_cmd(sctx); 6569 if (ret < 0) 6570 goto out; 6571 } 6572 6573 out: 6574 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)); 6575 while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) { 6576 struct rb_node *n; 6577 struct pending_dir_move *pm; 6578 6579 n = rb_first(&sctx->pending_dir_moves); 6580 pm = rb_entry(n, struct pending_dir_move, node); 6581 while (!list_empty(&pm->list)) { 6582 struct pending_dir_move *pm2; 6583 6584 pm2 = list_first_entry(&pm->list, 6585 struct pending_dir_move, list); 6586 free_pending_move(sctx, pm2); 6587 } 6588 free_pending_move(sctx, pm); 6589 } 6590 6591 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)); 6592 while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) { 6593 struct rb_node *n; 6594 struct waiting_dir_move *dm; 6595 6596 n = rb_first(&sctx->waiting_dir_moves); 6597 dm = rb_entry(n, struct waiting_dir_move, node); 6598 rb_erase(&dm->node, &sctx->waiting_dir_moves); 6599 kfree(dm); 6600 } 6601 6602 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs)); 6603 while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) { 6604 struct rb_node *n; 6605 struct orphan_dir_info *odi; 6606 6607 n = rb_first(&sctx->orphan_dirs); 6608 odi = rb_entry(n, struct orphan_dir_info, node); 6609 free_orphan_dir_info(sctx, odi); 6610 } 6611 6612 if (sort_clone_roots) { 6613 for (i = 0; i < sctx->clone_roots_cnt; i++) 6614 btrfs_root_dec_send_in_progress( 6615 sctx->clone_roots[i].root); 6616 } else { 6617 for (i = 0; sctx && i < clone_sources_to_rollback; i++) 6618 btrfs_root_dec_send_in_progress( 6619 sctx->clone_roots[i].root); 6620 6621 btrfs_root_dec_send_in_progress(send_root); 6622 } 6623 if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) 6624 btrfs_root_dec_send_in_progress(sctx->parent_root); 6625 6626 kfree(arg); 6627 kvfree(clone_sources_tmp); 6628 6629 if (sctx) { 6630 if (sctx->send_filp) 6631 fput(sctx->send_filp); 6632 6633 kvfree(sctx->clone_roots); 6634 kvfree(sctx->send_buf); 6635 kvfree(sctx->read_buf); 6636 6637 name_cache_free(sctx); 6638 6639 kfree(sctx); 6640 } 6641 6642 return ret; 6643 } 6644