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, u64 *who_mode) 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, who_mode, 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 static int update_ref_path(struct send_ctx *sctx, struct recorded_ref *ref) 3687 { 3688 int ret; 3689 struct fs_path *new_path; 3690 3691 /* 3692 * Our reference's name member points to its full_path member string, so 3693 * we use here a new path. 3694 */ 3695 new_path = fs_path_alloc(); 3696 if (!new_path) 3697 return -ENOMEM; 3698 3699 ret = get_cur_path(sctx, ref->dir, ref->dir_gen, new_path); 3700 if (ret < 0) { 3701 fs_path_free(new_path); 3702 return ret; 3703 } 3704 ret = fs_path_add(new_path, ref->name, ref->name_len); 3705 if (ret < 0) { 3706 fs_path_free(new_path); 3707 return ret; 3708 } 3709 3710 fs_path_free(ref->full_path); 3711 set_ref_path(ref, new_path); 3712 3713 return 0; 3714 } 3715 3716 /* 3717 * This does all the move/link/unlink/rmdir magic. 3718 */ 3719 static int process_recorded_refs(struct send_ctx *sctx, int *pending_move) 3720 { 3721 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 3722 int ret = 0; 3723 struct recorded_ref *cur; 3724 struct recorded_ref *cur2; 3725 struct list_head check_dirs; 3726 struct fs_path *valid_path = NULL; 3727 u64 ow_inode = 0; 3728 u64 ow_gen; 3729 u64 ow_mode; 3730 int did_overwrite = 0; 3731 int is_orphan = 0; 3732 u64 last_dir_ino_rm = 0; 3733 bool can_rename = true; 3734 bool orphanized_dir = false; 3735 bool orphanized_ancestor = false; 3736 3737 btrfs_debug(fs_info, "process_recorded_refs %llu", sctx->cur_ino); 3738 3739 /* 3740 * This should never happen as the root dir always has the same ref 3741 * which is always '..' 3742 */ 3743 BUG_ON(sctx->cur_ino <= BTRFS_FIRST_FREE_OBJECTID); 3744 INIT_LIST_HEAD(&check_dirs); 3745 3746 valid_path = fs_path_alloc(); 3747 if (!valid_path) { 3748 ret = -ENOMEM; 3749 goto out; 3750 } 3751 3752 /* 3753 * First, check if the first ref of the current inode was overwritten 3754 * before. If yes, we know that the current inode was already orphanized 3755 * and thus use the orphan name. If not, we can use get_cur_path to 3756 * get the path of the first ref as it would like while receiving at 3757 * this point in time. 3758 * New inodes are always orphan at the beginning, so force to use the 3759 * orphan name in this case. 3760 * The first ref is stored in valid_path and will be updated if it 3761 * gets moved around. 3762 */ 3763 if (!sctx->cur_inode_new) { 3764 ret = did_overwrite_first_ref(sctx, sctx->cur_ino, 3765 sctx->cur_inode_gen); 3766 if (ret < 0) 3767 goto out; 3768 if (ret) 3769 did_overwrite = 1; 3770 } 3771 if (sctx->cur_inode_new || did_overwrite) { 3772 ret = gen_unique_name(sctx, sctx->cur_ino, 3773 sctx->cur_inode_gen, valid_path); 3774 if (ret < 0) 3775 goto out; 3776 is_orphan = 1; 3777 } else { 3778 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, 3779 valid_path); 3780 if (ret < 0) 3781 goto out; 3782 } 3783 3784 list_for_each_entry(cur, &sctx->new_refs, list) { 3785 /* 3786 * We may have refs where the parent directory does not exist 3787 * yet. This happens if the parent directories inum is higher 3788 * the the current inum. To handle this case, we create the 3789 * parent directory out of order. But we need to check if this 3790 * did already happen before due to other refs in the same dir. 3791 */ 3792 ret = get_cur_inode_state(sctx, cur->dir, cur->dir_gen); 3793 if (ret < 0) 3794 goto out; 3795 if (ret == inode_state_will_create) { 3796 ret = 0; 3797 /* 3798 * First check if any of the current inodes refs did 3799 * already create the dir. 3800 */ 3801 list_for_each_entry(cur2, &sctx->new_refs, list) { 3802 if (cur == cur2) 3803 break; 3804 if (cur2->dir == cur->dir) { 3805 ret = 1; 3806 break; 3807 } 3808 } 3809 3810 /* 3811 * If that did not happen, check if a previous inode 3812 * did already create the dir. 3813 */ 3814 if (!ret) 3815 ret = did_create_dir(sctx, cur->dir); 3816 if (ret < 0) 3817 goto out; 3818 if (!ret) { 3819 ret = send_create_inode(sctx, cur->dir); 3820 if (ret < 0) 3821 goto out; 3822 } 3823 } 3824 3825 /* 3826 * Check if this new ref would overwrite the first ref of 3827 * another unprocessed inode. If yes, orphanize the 3828 * overwritten inode. If we find an overwritten ref that is 3829 * not the first ref, simply unlink it. 3830 */ 3831 ret = will_overwrite_ref(sctx, cur->dir, cur->dir_gen, 3832 cur->name, cur->name_len, 3833 &ow_inode, &ow_gen, &ow_mode); 3834 if (ret < 0) 3835 goto out; 3836 if (ret) { 3837 ret = is_first_ref(sctx->parent_root, 3838 ow_inode, cur->dir, cur->name, 3839 cur->name_len); 3840 if (ret < 0) 3841 goto out; 3842 if (ret) { 3843 struct name_cache_entry *nce; 3844 struct waiting_dir_move *wdm; 3845 3846 ret = orphanize_inode(sctx, ow_inode, ow_gen, 3847 cur->full_path); 3848 if (ret < 0) 3849 goto out; 3850 if (S_ISDIR(ow_mode)) 3851 orphanized_dir = true; 3852 3853 /* 3854 * If ow_inode has its rename operation delayed 3855 * make sure that its orphanized name is used in 3856 * the source path when performing its rename 3857 * operation. 3858 */ 3859 if (is_waiting_for_move(sctx, ow_inode)) { 3860 wdm = get_waiting_dir_move(sctx, 3861 ow_inode); 3862 ASSERT(wdm); 3863 wdm->orphanized = true; 3864 } 3865 3866 /* 3867 * Make sure we clear our orphanized inode's 3868 * name from the name cache. This is because the 3869 * inode ow_inode might be an ancestor of some 3870 * other inode that will be orphanized as well 3871 * later and has an inode number greater than 3872 * sctx->send_progress. We need to prevent 3873 * future name lookups from using the old name 3874 * and get instead the orphan name. 3875 */ 3876 nce = name_cache_search(sctx, ow_inode, ow_gen); 3877 if (nce) { 3878 name_cache_delete(sctx, nce); 3879 kfree(nce); 3880 } 3881 3882 /* 3883 * ow_inode might currently be an ancestor of 3884 * cur_ino, therefore compute valid_path (the 3885 * current path of cur_ino) again because it 3886 * might contain the pre-orphanization name of 3887 * ow_inode, which is no longer valid. 3888 */ 3889 ret = is_ancestor(sctx->parent_root, 3890 ow_inode, ow_gen, 3891 sctx->cur_ino, NULL); 3892 if (ret > 0) { 3893 orphanized_ancestor = true; 3894 fs_path_reset(valid_path); 3895 ret = get_cur_path(sctx, sctx->cur_ino, 3896 sctx->cur_inode_gen, 3897 valid_path); 3898 } 3899 if (ret < 0) 3900 goto out; 3901 } else { 3902 ret = send_unlink(sctx, cur->full_path); 3903 if (ret < 0) 3904 goto out; 3905 } 3906 } 3907 3908 if (S_ISDIR(sctx->cur_inode_mode) && sctx->parent_root) { 3909 ret = wait_for_dest_dir_move(sctx, cur, is_orphan); 3910 if (ret < 0) 3911 goto out; 3912 if (ret == 1) { 3913 can_rename = false; 3914 *pending_move = 1; 3915 } 3916 } 3917 3918 if (S_ISDIR(sctx->cur_inode_mode) && sctx->parent_root && 3919 can_rename) { 3920 ret = wait_for_parent_move(sctx, cur, is_orphan); 3921 if (ret < 0) 3922 goto out; 3923 if (ret == 1) { 3924 can_rename = false; 3925 *pending_move = 1; 3926 } 3927 } 3928 3929 /* 3930 * link/move the ref to the new place. If we have an orphan 3931 * inode, move it and update valid_path. If not, link or move 3932 * it depending on the inode mode. 3933 */ 3934 if (is_orphan && can_rename) { 3935 ret = send_rename(sctx, valid_path, cur->full_path); 3936 if (ret < 0) 3937 goto out; 3938 is_orphan = 0; 3939 ret = fs_path_copy(valid_path, cur->full_path); 3940 if (ret < 0) 3941 goto out; 3942 } else if (can_rename) { 3943 if (S_ISDIR(sctx->cur_inode_mode)) { 3944 /* 3945 * Dirs can't be linked, so move it. For moved 3946 * dirs, we always have one new and one deleted 3947 * ref. The deleted ref is ignored later. 3948 */ 3949 ret = send_rename(sctx, valid_path, 3950 cur->full_path); 3951 if (!ret) 3952 ret = fs_path_copy(valid_path, 3953 cur->full_path); 3954 if (ret < 0) 3955 goto out; 3956 } else { 3957 /* 3958 * We might have previously orphanized an inode 3959 * which is an ancestor of our current inode, 3960 * so our reference's full path, which was 3961 * computed before any such orphanizations, must 3962 * be updated. 3963 */ 3964 if (orphanized_dir) { 3965 ret = update_ref_path(sctx, cur); 3966 if (ret < 0) 3967 goto out; 3968 } 3969 ret = send_link(sctx, cur->full_path, 3970 valid_path); 3971 if (ret < 0) 3972 goto out; 3973 } 3974 } 3975 ret = dup_ref(cur, &check_dirs); 3976 if (ret < 0) 3977 goto out; 3978 } 3979 3980 if (S_ISDIR(sctx->cur_inode_mode) && sctx->cur_inode_deleted) { 3981 /* 3982 * Check if we can already rmdir the directory. If not, 3983 * orphanize it. For every dir item inside that gets deleted 3984 * later, we do this check again and rmdir it then if possible. 3985 * See the use of check_dirs for more details. 3986 */ 3987 ret = can_rmdir(sctx, sctx->cur_ino, sctx->cur_inode_gen, 3988 sctx->cur_ino); 3989 if (ret < 0) 3990 goto out; 3991 if (ret) { 3992 ret = send_rmdir(sctx, valid_path); 3993 if (ret < 0) 3994 goto out; 3995 } else if (!is_orphan) { 3996 ret = orphanize_inode(sctx, sctx->cur_ino, 3997 sctx->cur_inode_gen, valid_path); 3998 if (ret < 0) 3999 goto out; 4000 is_orphan = 1; 4001 } 4002 4003 list_for_each_entry(cur, &sctx->deleted_refs, list) { 4004 ret = dup_ref(cur, &check_dirs); 4005 if (ret < 0) 4006 goto out; 4007 } 4008 } else if (S_ISDIR(sctx->cur_inode_mode) && 4009 !list_empty(&sctx->deleted_refs)) { 4010 /* 4011 * We have a moved dir. Add the old parent to check_dirs 4012 */ 4013 cur = list_entry(sctx->deleted_refs.next, struct recorded_ref, 4014 list); 4015 ret = dup_ref(cur, &check_dirs); 4016 if (ret < 0) 4017 goto out; 4018 } else if (!S_ISDIR(sctx->cur_inode_mode)) { 4019 /* 4020 * We have a non dir inode. Go through all deleted refs and 4021 * unlink them if they were not already overwritten by other 4022 * inodes. 4023 */ 4024 list_for_each_entry(cur, &sctx->deleted_refs, list) { 4025 ret = did_overwrite_ref(sctx, cur->dir, cur->dir_gen, 4026 sctx->cur_ino, sctx->cur_inode_gen, 4027 cur->name, cur->name_len); 4028 if (ret < 0) 4029 goto out; 4030 if (!ret) { 4031 /* 4032 * If we orphanized any ancestor before, we need 4033 * to recompute the full path for deleted names, 4034 * since any such path was computed before we 4035 * processed any references and orphanized any 4036 * ancestor inode. 4037 */ 4038 if (orphanized_ancestor) { 4039 ret = update_ref_path(sctx, cur); 4040 if (ret < 0) 4041 goto out; 4042 } 4043 ret = send_unlink(sctx, cur->full_path); 4044 if (ret < 0) 4045 goto out; 4046 } 4047 ret = dup_ref(cur, &check_dirs); 4048 if (ret < 0) 4049 goto out; 4050 } 4051 /* 4052 * If the inode is still orphan, unlink the orphan. This may 4053 * happen when a previous inode did overwrite the first ref 4054 * of this inode and no new refs were added for the current 4055 * inode. Unlinking does not mean that the inode is deleted in 4056 * all cases. There may still be links to this inode in other 4057 * places. 4058 */ 4059 if (is_orphan) { 4060 ret = send_unlink(sctx, valid_path); 4061 if (ret < 0) 4062 goto out; 4063 } 4064 } 4065 4066 /* 4067 * We did collect all parent dirs where cur_inode was once located. We 4068 * now go through all these dirs and check if they are pending for 4069 * deletion and if it's finally possible to perform the rmdir now. 4070 * We also update the inode stats of the parent dirs here. 4071 */ 4072 list_for_each_entry(cur, &check_dirs, list) { 4073 /* 4074 * In case we had refs into dirs that were not processed yet, 4075 * we don't need to do the utime and rmdir logic for these dirs. 4076 * The dir will be processed later. 4077 */ 4078 if (cur->dir > sctx->cur_ino) 4079 continue; 4080 4081 ret = get_cur_inode_state(sctx, cur->dir, cur->dir_gen); 4082 if (ret < 0) 4083 goto out; 4084 4085 if (ret == inode_state_did_create || 4086 ret == inode_state_no_change) { 4087 /* TODO delayed utimes */ 4088 ret = send_utimes(sctx, cur->dir, cur->dir_gen); 4089 if (ret < 0) 4090 goto out; 4091 } else if (ret == inode_state_did_delete && 4092 cur->dir != last_dir_ino_rm) { 4093 ret = can_rmdir(sctx, cur->dir, cur->dir_gen, 4094 sctx->cur_ino); 4095 if (ret < 0) 4096 goto out; 4097 if (ret) { 4098 ret = get_cur_path(sctx, cur->dir, 4099 cur->dir_gen, valid_path); 4100 if (ret < 0) 4101 goto out; 4102 ret = send_rmdir(sctx, valid_path); 4103 if (ret < 0) 4104 goto out; 4105 last_dir_ino_rm = cur->dir; 4106 } 4107 } 4108 } 4109 4110 ret = 0; 4111 4112 out: 4113 __free_recorded_refs(&check_dirs); 4114 free_recorded_refs(sctx); 4115 fs_path_free(valid_path); 4116 return ret; 4117 } 4118 4119 static int record_ref(struct btrfs_root *root, int num, u64 dir, int index, 4120 struct fs_path *name, void *ctx, struct list_head *refs) 4121 { 4122 int ret = 0; 4123 struct send_ctx *sctx = ctx; 4124 struct fs_path *p; 4125 u64 gen; 4126 4127 p = fs_path_alloc(); 4128 if (!p) 4129 return -ENOMEM; 4130 4131 ret = get_inode_info(root, dir, NULL, &gen, NULL, NULL, 4132 NULL, NULL); 4133 if (ret < 0) 4134 goto out; 4135 4136 ret = get_cur_path(sctx, dir, gen, p); 4137 if (ret < 0) 4138 goto out; 4139 ret = fs_path_add_path(p, name); 4140 if (ret < 0) 4141 goto out; 4142 4143 ret = __record_ref(refs, dir, gen, p); 4144 4145 out: 4146 if (ret) 4147 fs_path_free(p); 4148 return ret; 4149 } 4150 4151 static int __record_new_ref(int num, u64 dir, int index, 4152 struct fs_path *name, 4153 void *ctx) 4154 { 4155 struct send_ctx *sctx = ctx; 4156 return record_ref(sctx->send_root, num, dir, index, name, 4157 ctx, &sctx->new_refs); 4158 } 4159 4160 4161 static int __record_deleted_ref(int num, u64 dir, int index, 4162 struct fs_path *name, 4163 void *ctx) 4164 { 4165 struct send_ctx *sctx = ctx; 4166 return record_ref(sctx->parent_root, num, dir, index, name, 4167 ctx, &sctx->deleted_refs); 4168 } 4169 4170 static int record_new_ref(struct send_ctx *sctx) 4171 { 4172 int ret; 4173 4174 ret = iterate_inode_ref(sctx->send_root, sctx->left_path, 4175 sctx->cmp_key, 0, __record_new_ref, sctx); 4176 if (ret < 0) 4177 goto out; 4178 ret = 0; 4179 4180 out: 4181 return ret; 4182 } 4183 4184 static int record_deleted_ref(struct send_ctx *sctx) 4185 { 4186 int ret; 4187 4188 ret = iterate_inode_ref(sctx->parent_root, sctx->right_path, 4189 sctx->cmp_key, 0, __record_deleted_ref, sctx); 4190 if (ret < 0) 4191 goto out; 4192 ret = 0; 4193 4194 out: 4195 return ret; 4196 } 4197 4198 struct find_ref_ctx { 4199 u64 dir; 4200 u64 dir_gen; 4201 struct btrfs_root *root; 4202 struct fs_path *name; 4203 int found_idx; 4204 }; 4205 4206 static int __find_iref(int num, u64 dir, int index, 4207 struct fs_path *name, 4208 void *ctx_) 4209 { 4210 struct find_ref_ctx *ctx = ctx_; 4211 u64 dir_gen; 4212 int ret; 4213 4214 if (dir == ctx->dir && fs_path_len(name) == fs_path_len(ctx->name) && 4215 strncmp(name->start, ctx->name->start, fs_path_len(name)) == 0) { 4216 /* 4217 * To avoid doing extra lookups we'll only do this if everything 4218 * else matches. 4219 */ 4220 ret = get_inode_info(ctx->root, dir, NULL, &dir_gen, NULL, 4221 NULL, NULL, NULL); 4222 if (ret) 4223 return ret; 4224 if (dir_gen != ctx->dir_gen) 4225 return 0; 4226 ctx->found_idx = num; 4227 return 1; 4228 } 4229 return 0; 4230 } 4231 4232 static int find_iref(struct btrfs_root *root, 4233 struct btrfs_path *path, 4234 struct btrfs_key *key, 4235 u64 dir, u64 dir_gen, struct fs_path *name) 4236 { 4237 int ret; 4238 struct find_ref_ctx ctx; 4239 4240 ctx.dir = dir; 4241 ctx.name = name; 4242 ctx.dir_gen = dir_gen; 4243 ctx.found_idx = -1; 4244 ctx.root = root; 4245 4246 ret = iterate_inode_ref(root, path, key, 0, __find_iref, &ctx); 4247 if (ret < 0) 4248 return ret; 4249 4250 if (ctx.found_idx == -1) 4251 return -ENOENT; 4252 4253 return ctx.found_idx; 4254 } 4255 4256 static int __record_changed_new_ref(int num, u64 dir, int index, 4257 struct fs_path *name, 4258 void *ctx) 4259 { 4260 u64 dir_gen; 4261 int ret; 4262 struct send_ctx *sctx = ctx; 4263 4264 ret = get_inode_info(sctx->send_root, dir, NULL, &dir_gen, NULL, 4265 NULL, NULL, NULL); 4266 if (ret) 4267 return ret; 4268 4269 ret = find_iref(sctx->parent_root, sctx->right_path, 4270 sctx->cmp_key, dir, dir_gen, name); 4271 if (ret == -ENOENT) 4272 ret = __record_new_ref(num, dir, index, name, sctx); 4273 else if (ret > 0) 4274 ret = 0; 4275 4276 return ret; 4277 } 4278 4279 static int __record_changed_deleted_ref(int num, u64 dir, int index, 4280 struct fs_path *name, 4281 void *ctx) 4282 { 4283 u64 dir_gen; 4284 int ret; 4285 struct send_ctx *sctx = ctx; 4286 4287 ret = get_inode_info(sctx->parent_root, dir, NULL, &dir_gen, NULL, 4288 NULL, NULL, NULL); 4289 if (ret) 4290 return ret; 4291 4292 ret = find_iref(sctx->send_root, sctx->left_path, sctx->cmp_key, 4293 dir, dir_gen, name); 4294 if (ret == -ENOENT) 4295 ret = __record_deleted_ref(num, dir, index, name, sctx); 4296 else if (ret > 0) 4297 ret = 0; 4298 4299 return ret; 4300 } 4301 4302 static int record_changed_ref(struct send_ctx *sctx) 4303 { 4304 int ret = 0; 4305 4306 ret = iterate_inode_ref(sctx->send_root, sctx->left_path, 4307 sctx->cmp_key, 0, __record_changed_new_ref, sctx); 4308 if (ret < 0) 4309 goto out; 4310 ret = iterate_inode_ref(sctx->parent_root, sctx->right_path, 4311 sctx->cmp_key, 0, __record_changed_deleted_ref, sctx); 4312 if (ret < 0) 4313 goto out; 4314 ret = 0; 4315 4316 out: 4317 return ret; 4318 } 4319 4320 /* 4321 * Record and process all refs at once. Needed when an inode changes the 4322 * generation number, which means that it was deleted and recreated. 4323 */ 4324 static int process_all_refs(struct send_ctx *sctx, 4325 enum btrfs_compare_tree_result cmd) 4326 { 4327 int ret; 4328 struct btrfs_root *root; 4329 struct btrfs_path *path; 4330 struct btrfs_key key; 4331 struct btrfs_key found_key; 4332 struct extent_buffer *eb; 4333 int slot; 4334 iterate_inode_ref_t cb; 4335 int pending_move = 0; 4336 4337 path = alloc_path_for_send(); 4338 if (!path) 4339 return -ENOMEM; 4340 4341 if (cmd == BTRFS_COMPARE_TREE_NEW) { 4342 root = sctx->send_root; 4343 cb = __record_new_ref; 4344 } else if (cmd == BTRFS_COMPARE_TREE_DELETED) { 4345 root = sctx->parent_root; 4346 cb = __record_deleted_ref; 4347 } else { 4348 btrfs_err(sctx->send_root->fs_info, 4349 "Wrong command %d in process_all_refs", cmd); 4350 ret = -EINVAL; 4351 goto out; 4352 } 4353 4354 key.objectid = sctx->cmp_key->objectid; 4355 key.type = BTRFS_INODE_REF_KEY; 4356 key.offset = 0; 4357 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 4358 if (ret < 0) 4359 goto out; 4360 4361 while (1) { 4362 eb = path->nodes[0]; 4363 slot = path->slots[0]; 4364 if (slot >= btrfs_header_nritems(eb)) { 4365 ret = btrfs_next_leaf(root, path); 4366 if (ret < 0) 4367 goto out; 4368 else if (ret > 0) 4369 break; 4370 continue; 4371 } 4372 4373 btrfs_item_key_to_cpu(eb, &found_key, slot); 4374 4375 if (found_key.objectid != key.objectid || 4376 (found_key.type != BTRFS_INODE_REF_KEY && 4377 found_key.type != BTRFS_INODE_EXTREF_KEY)) 4378 break; 4379 4380 ret = iterate_inode_ref(root, path, &found_key, 0, cb, sctx); 4381 if (ret < 0) 4382 goto out; 4383 4384 path->slots[0]++; 4385 } 4386 btrfs_release_path(path); 4387 4388 /* 4389 * We don't actually care about pending_move as we are simply 4390 * re-creating this inode and will be rename'ing it into place once we 4391 * rename the parent directory. 4392 */ 4393 ret = process_recorded_refs(sctx, &pending_move); 4394 out: 4395 btrfs_free_path(path); 4396 return ret; 4397 } 4398 4399 static int send_set_xattr(struct send_ctx *sctx, 4400 struct fs_path *path, 4401 const char *name, int name_len, 4402 const char *data, int data_len) 4403 { 4404 int ret = 0; 4405 4406 ret = begin_cmd(sctx, BTRFS_SEND_C_SET_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 TLV_PUT(sctx, BTRFS_SEND_A_XATTR_DATA, data, data_len); 4413 4414 ret = send_cmd(sctx); 4415 4416 tlv_put_failure: 4417 out: 4418 return ret; 4419 } 4420 4421 static int send_remove_xattr(struct send_ctx *sctx, 4422 struct fs_path *path, 4423 const char *name, int name_len) 4424 { 4425 int ret = 0; 4426 4427 ret = begin_cmd(sctx, BTRFS_SEND_C_REMOVE_XATTR); 4428 if (ret < 0) 4429 goto out; 4430 4431 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, path); 4432 TLV_PUT_STRING(sctx, BTRFS_SEND_A_XATTR_NAME, name, name_len); 4433 4434 ret = send_cmd(sctx); 4435 4436 tlv_put_failure: 4437 out: 4438 return ret; 4439 } 4440 4441 static int __process_new_xattr(int num, struct btrfs_key *di_key, 4442 const char *name, int name_len, 4443 const char *data, int data_len, 4444 u8 type, void *ctx) 4445 { 4446 int ret; 4447 struct send_ctx *sctx = ctx; 4448 struct fs_path *p; 4449 struct posix_acl_xattr_header dummy_acl; 4450 4451 p = fs_path_alloc(); 4452 if (!p) 4453 return -ENOMEM; 4454 4455 /* 4456 * This hack is needed because empty acls are stored as zero byte 4457 * data in xattrs. Problem with that is, that receiving these zero byte 4458 * acls will fail later. To fix this, we send a dummy acl list that 4459 * only contains the version number and no entries. 4460 */ 4461 if (!strncmp(name, XATTR_NAME_POSIX_ACL_ACCESS, name_len) || 4462 !strncmp(name, XATTR_NAME_POSIX_ACL_DEFAULT, name_len)) { 4463 if (data_len == 0) { 4464 dummy_acl.a_version = 4465 cpu_to_le32(POSIX_ACL_XATTR_VERSION); 4466 data = (char *)&dummy_acl; 4467 data_len = sizeof(dummy_acl); 4468 } 4469 } 4470 4471 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4472 if (ret < 0) 4473 goto out; 4474 4475 ret = send_set_xattr(sctx, p, name, name_len, data, data_len); 4476 4477 out: 4478 fs_path_free(p); 4479 return ret; 4480 } 4481 4482 static int __process_deleted_xattr(int num, struct btrfs_key *di_key, 4483 const char *name, int name_len, 4484 const char *data, int data_len, 4485 u8 type, void *ctx) 4486 { 4487 int ret; 4488 struct send_ctx *sctx = ctx; 4489 struct fs_path *p; 4490 4491 p = fs_path_alloc(); 4492 if (!p) 4493 return -ENOMEM; 4494 4495 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4496 if (ret < 0) 4497 goto out; 4498 4499 ret = send_remove_xattr(sctx, p, name, name_len); 4500 4501 out: 4502 fs_path_free(p); 4503 return ret; 4504 } 4505 4506 static int process_new_xattr(struct send_ctx *sctx) 4507 { 4508 int ret = 0; 4509 4510 ret = iterate_dir_item(sctx->send_root, sctx->left_path, 4511 sctx->cmp_key, __process_new_xattr, sctx); 4512 4513 return ret; 4514 } 4515 4516 static int process_deleted_xattr(struct send_ctx *sctx) 4517 { 4518 return iterate_dir_item(sctx->parent_root, sctx->right_path, 4519 sctx->cmp_key, __process_deleted_xattr, sctx); 4520 } 4521 4522 struct find_xattr_ctx { 4523 const char *name; 4524 int name_len; 4525 int found_idx; 4526 char *found_data; 4527 int found_data_len; 4528 }; 4529 4530 static int __find_xattr(int num, struct btrfs_key *di_key, 4531 const char *name, int name_len, 4532 const char *data, int data_len, 4533 u8 type, void *vctx) 4534 { 4535 struct find_xattr_ctx *ctx = vctx; 4536 4537 if (name_len == ctx->name_len && 4538 strncmp(name, ctx->name, name_len) == 0) { 4539 ctx->found_idx = num; 4540 ctx->found_data_len = data_len; 4541 ctx->found_data = kmemdup(data, data_len, GFP_KERNEL); 4542 if (!ctx->found_data) 4543 return -ENOMEM; 4544 return 1; 4545 } 4546 return 0; 4547 } 4548 4549 static int find_xattr(struct btrfs_root *root, 4550 struct btrfs_path *path, 4551 struct btrfs_key *key, 4552 const char *name, int name_len, 4553 char **data, int *data_len) 4554 { 4555 int ret; 4556 struct find_xattr_ctx ctx; 4557 4558 ctx.name = name; 4559 ctx.name_len = name_len; 4560 ctx.found_idx = -1; 4561 ctx.found_data = NULL; 4562 ctx.found_data_len = 0; 4563 4564 ret = iterate_dir_item(root, path, key, __find_xattr, &ctx); 4565 if (ret < 0) 4566 return ret; 4567 4568 if (ctx.found_idx == -1) 4569 return -ENOENT; 4570 if (data) { 4571 *data = ctx.found_data; 4572 *data_len = ctx.found_data_len; 4573 } else { 4574 kfree(ctx.found_data); 4575 } 4576 return ctx.found_idx; 4577 } 4578 4579 4580 static int __process_changed_new_xattr(int num, struct btrfs_key *di_key, 4581 const char *name, int name_len, 4582 const char *data, int data_len, 4583 u8 type, void *ctx) 4584 { 4585 int ret; 4586 struct send_ctx *sctx = ctx; 4587 char *found_data = NULL; 4588 int found_data_len = 0; 4589 4590 ret = find_xattr(sctx->parent_root, sctx->right_path, 4591 sctx->cmp_key, name, name_len, &found_data, 4592 &found_data_len); 4593 if (ret == -ENOENT) { 4594 ret = __process_new_xattr(num, di_key, name, name_len, data, 4595 data_len, type, ctx); 4596 } else if (ret >= 0) { 4597 if (data_len != found_data_len || 4598 memcmp(data, found_data, data_len)) { 4599 ret = __process_new_xattr(num, di_key, name, name_len, 4600 data, data_len, type, ctx); 4601 } else { 4602 ret = 0; 4603 } 4604 } 4605 4606 kfree(found_data); 4607 return ret; 4608 } 4609 4610 static int __process_changed_deleted_xattr(int num, struct btrfs_key *di_key, 4611 const char *name, int name_len, 4612 const char *data, int data_len, 4613 u8 type, void *ctx) 4614 { 4615 int ret; 4616 struct send_ctx *sctx = ctx; 4617 4618 ret = find_xattr(sctx->send_root, sctx->left_path, sctx->cmp_key, 4619 name, name_len, NULL, NULL); 4620 if (ret == -ENOENT) 4621 ret = __process_deleted_xattr(num, di_key, name, name_len, data, 4622 data_len, type, ctx); 4623 else if (ret >= 0) 4624 ret = 0; 4625 4626 return ret; 4627 } 4628 4629 static int process_changed_xattr(struct send_ctx *sctx) 4630 { 4631 int ret = 0; 4632 4633 ret = iterate_dir_item(sctx->send_root, sctx->left_path, 4634 sctx->cmp_key, __process_changed_new_xattr, sctx); 4635 if (ret < 0) 4636 goto out; 4637 ret = iterate_dir_item(sctx->parent_root, sctx->right_path, 4638 sctx->cmp_key, __process_changed_deleted_xattr, sctx); 4639 4640 out: 4641 return ret; 4642 } 4643 4644 static int process_all_new_xattrs(struct send_ctx *sctx) 4645 { 4646 int ret; 4647 struct btrfs_root *root; 4648 struct btrfs_path *path; 4649 struct btrfs_key key; 4650 struct btrfs_key found_key; 4651 struct extent_buffer *eb; 4652 int slot; 4653 4654 path = alloc_path_for_send(); 4655 if (!path) 4656 return -ENOMEM; 4657 4658 root = sctx->send_root; 4659 4660 key.objectid = sctx->cmp_key->objectid; 4661 key.type = BTRFS_XATTR_ITEM_KEY; 4662 key.offset = 0; 4663 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 4664 if (ret < 0) 4665 goto out; 4666 4667 while (1) { 4668 eb = path->nodes[0]; 4669 slot = path->slots[0]; 4670 if (slot >= btrfs_header_nritems(eb)) { 4671 ret = btrfs_next_leaf(root, path); 4672 if (ret < 0) { 4673 goto out; 4674 } else if (ret > 0) { 4675 ret = 0; 4676 break; 4677 } 4678 continue; 4679 } 4680 4681 btrfs_item_key_to_cpu(eb, &found_key, slot); 4682 if (found_key.objectid != key.objectid || 4683 found_key.type != key.type) { 4684 ret = 0; 4685 goto out; 4686 } 4687 4688 ret = iterate_dir_item(root, path, &found_key, 4689 __process_new_xattr, sctx); 4690 if (ret < 0) 4691 goto out; 4692 4693 path->slots[0]++; 4694 } 4695 4696 out: 4697 btrfs_free_path(path); 4698 return ret; 4699 } 4700 4701 static ssize_t fill_read_buf(struct send_ctx *sctx, u64 offset, u32 len) 4702 { 4703 struct btrfs_root *root = sctx->send_root; 4704 struct btrfs_fs_info *fs_info = root->fs_info; 4705 struct inode *inode; 4706 struct page *page; 4707 char *addr; 4708 struct btrfs_key key; 4709 pgoff_t index = offset >> PAGE_SHIFT; 4710 pgoff_t last_index; 4711 unsigned pg_offset = offset & ~PAGE_MASK; 4712 ssize_t ret = 0; 4713 4714 key.objectid = sctx->cur_ino; 4715 key.type = BTRFS_INODE_ITEM_KEY; 4716 key.offset = 0; 4717 4718 inode = btrfs_iget(fs_info->sb, &key, root, NULL); 4719 if (IS_ERR(inode)) 4720 return PTR_ERR(inode); 4721 4722 if (offset + len > i_size_read(inode)) { 4723 if (offset > i_size_read(inode)) 4724 len = 0; 4725 else 4726 len = offset - i_size_read(inode); 4727 } 4728 if (len == 0) 4729 goto out; 4730 4731 last_index = (offset + len - 1) >> PAGE_SHIFT; 4732 4733 /* initial readahead */ 4734 memset(&sctx->ra, 0, sizeof(struct file_ra_state)); 4735 file_ra_state_init(&sctx->ra, inode->i_mapping); 4736 btrfs_force_ra(inode->i_mapping, &sctx->ra, NULL, index, 4737 last_index - index + 1); 4738 4739 while (index <= last_index) { 4740 unsigned cur_len = min_t(unsigned, len, 4741 PAGE_SIZE - pg_offset); 4742 page = find_or_create_page(inode->i_mapping, index, GFP_KERNEL); 4743 if (!page) { 4744 ret = -ENOMEM; 4745 break; 4746 } 4747 4748 if (!PageUptodate(page)) { 4749 btrfs_readpage(NULL, page); 4750 lock_page(page); 4751 if (!PageUptodate(page)) { 4752 unlock_page(page); 4753 put_page(page); 4754 ret = -EIO; 4755 break; 4756 } 4757 } 4758 4759 addr = kmap(page); 4760 memcpy(sctx->read_buf + ret, addr + pg_offset, cur_len); 4761 kunmap(page); 4762 unlock_page(page); 4763 put_page(page); 4764 index++; 4765 pg_offset = 0; 4766 len -= cur_len; 4767 ret += cur_len; 4768 } 4769 out: 4770 iput(inode); 4771 return ret; 4772 } 4773 4774 /* 4775 * Read some bytes from the current inode/file and send a write command to 4776 * user space. 4777 */ 4778 static int send_write(struct send_ctx *sctx, u64 offset, u32 len) 4779 { 4780 struct btrfs_fs_info *fs_info = sctx->send_root->fs_info; 4781 int ret = 0; 4782 struct fs_path *p; 4783 ssize_t num_read = 0; 4784 4785 p = fs_path_alloc(); 4786 if (!p) 4787 return -ENOMEM; 4788 4789 btrfs_debug(fs_info, "send_write offset=%llu, len=%d", offset, len); 4790 4791 num_read = fill_read_buf(sctx, offset, len); 4792 if (num_read <= 0) { 4793 if (num_read < 0) 4794 ret = num_read; 4795 goto out; 4796 } 4797 4798 ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE); 4799 if (ret < 0) 4800 goto out; 4801 4802 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4803 if (ret < 0) 4804 goto out; 4805 4806 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4807 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4808 TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, num_read); 4809 4810 ret = send_cmd(sctx); 4811 4812 tlv_put_failure: 4813 out: 4814 fs_path_free(p); 4815 if (ret < 0) 4816 return ret; 4817 return num_read; 4818 } 4819 4820 /* 4821 * Send a clone command to user space. 4822 */ 4823 static int send_clone(struct send_ctx *sctx, 4824 u64 offset, u32 len, 4825 struct clone_root *clone_root) 4826 { 4827 int ret = 0; 4828 struct fs_path *p; 4829 u64 gen; 4830 4831 btrfs_debug(sctx->send_root->fs_info, 4832 "send_clone offset=%llu, len=%d, clone_root=%llu, clone_inode=%llu, clone_offset=%llu", 4833 offset, len, clone_root->root->objectid, clone_root->ino, 4834 clone_root->offset); 4835 4836 p = fs_path_alloc(); 4837 if (!p) 4838 return -ENOMEM; 4839 4840 ret = begin_cmd(sctx, BTRFS_SEND_C_CLONE); 4841 if (ret < 0) 4842 goto out; 4843 4844 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4845 if (ret < 0) 4846 goto out; 4847 4848 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4849 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_LEN, len); 4850 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4851 4852 if (clone_root->root == sctx->send_root) { 4853 ret = get_inode_info(sctx->send_root, clone_root->ino, NULL, 4854 &gen, NULL, NULL, NULL, NULL); 4855 if (ret < 0) 4856 goto out; 4857 ret = get_cur_path(sctx, clone_root->ino, gen, p); 4858 } else { 4859 ret = get_inode_path(clone_root->root, clone_root->ino, p); 4860 } 4861 if (ret < 0) 4862 goto out; 4863 4864 /* 4865 * If the parent we're using has a received_uuid set then use that as 4866 * our clone source as that is what we will look for when doing a 4867 * receive. 4868 * 4869 * This covers the case that we create a snapshot off of a received 4870 * subvolume and then use that as the parent and try to receive on a 4871 * different host. 4872 */ 4873 if (!btrfs_is_empty_uuid(clone_root->root->root_item.received_uuid)) 4874 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 4875 clone_root->root->root_item.received_uuid); 4876 else 4877 TLV_PUT_UUID(sctx, BTRFS_SEND_A_CLONE_UUID, 4878 clone_root->root->root_item.uuid); 4879 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_CTRANSID, 4880 le64_to_cpu(clone_root->root->root_item.ctransid)); 4881 TLV_PUT_PATH(sctx, BTRFS_SEND_A_CLONE_PATH, p); 4882 TLV_PUT_U64(sctx, BTRFS_SEND_A_CLONE_OFFSET, 4883 clone_root->offset); 4884 4885 ret = send_cmd(sctx); 4886 4887 tlv_put_failure: 4888 out: 4889 fs_path_free(p); 4890 return ret; 4891 } 4892 4893 /* 4894 * Send an update extent command to user space. 4895 */ 4896 static int send_update_extent(struct send_ctx *sctx, 4897 u64 offset, u32 len) 4898 { 4899 int ret = 0; 4900 struct fs_path *p; 4901 4902 p = fs_path_alloc(); 4903 if (!p) 4904 return -ENOMEM; 4905 4906 ret = begin_cmd(sctx, BTRFS_SEND_C_UPDATE_EXTENT); 4907 if (ret < 0) 4908 goto out; 4909 4910 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4911 if (ret < 0) 4912 goto out; 4913 4914 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4915 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4916 TLV_PUT_U64(sctx, BTRFS_SEND_A_SIZE, len); 4917 4918 ret = send_cmd(sctx); 4919 4920 tlv_put_failure: 4921 out: 4922 fs_path_free(p); 4923 return ret; 4924 } 4925 4926 static int send_hole(struct send_ctx *sctx, u64 end) 4927 { 4928 struct fs_path *p = NULL; 4929 u64 offset = sctx->cur_inode_last_extent; 4930 u64 len; 4931 int ret = 0; 4932 4933 p = fs_path_alloc(); 4934 if (!p) 4935 return -ENOMEM; 4936 ret = get_cur_path(sctx, sctx->cur_ino, sctx->cur_inode_gen, p); 4937 if (ret < 0) 4938 goto tlv_put_failure; 4939 memset(sctx->read_buf, 0, BTRFS_SEND_READ_SIZE); 4940 while (offset < end) { 4941 len = min_t(u64, end - offset, BTRFS_SEND_READ_SIZE); 4942 4943 ret = begin_cmd(sctx, BTRFS_SEND_C_WRITE); 4944 if (ret < 0) 4945 break; 4946 TLV_PUT_PATH(sctx, BTRFS_SEND_A_PATH, p); 4947 TLV_PUT_U64(sctx, BTRFS_SEND_A_FILE_OFFSET, offset); 4948 TLV_PUT(sctx, BTRFS_SEND_A_DATA, sctx->read_buf, len); 4949 ret = send_cmd(sctx); 4950 if (ret < 0) 4951 break; 4952 offset += len; 4953 } 4954 tlv_put_failure: 4955 fs_path_free(p); 4956 return ret; 4957 } 4958 4959 static int send_extent_data(struct send_ctx *sctx, 4960 const u64 offset, 4961 const u64 len) 4962 { 4963 u64 sent = 0; 4964 4965 if (sctx->flags & BTRFS_SEND_FLAG_NO_FILE_DATA) 4966 return send_update_extent(sctx, offset, len); 4967 4968 while (sent < len) { 4969 u64 size = len - sent; 4970 int ret; 4971 4972 if (size > BTRFS_SEND_READ_SIZE) 4973 size = BTRFS_SEND_READ_SIZE; 4974 ret = send_write(sctx, offset + sent, size); 4975 if (ret < 0) 4976 return ret; 4977 if (!ret) 4978 break; 4979 sent += ret; 4980 } 4981 return 0; 4982 } 4983 4984 static int clone_range(struct send_ctx *sctx, 4985 struct clone_root *clone_root, 4986 const u64 disk_byte, 4987 u64 data_offset, 4988 u64 offset, 4989 u64 len) 4990 { 4991 struct btrfs_path *path; 4992 struct btrfs_key key; 4993 int ret; 4994 4995 path = alloc_path_for_send(); 4996 if (!path) 4997 return -ENOMEM; 4998 4999 /* 5000 * We can't send a clone operation for the entire range if we find 5001 * extent items in the respective range in the source file that 5002 * refer to different extents or if we find holes. 5003 * So check for that and do a mix of clone and regular write/copy 5004 * operations if needed. 5005 * 5006 * Example: 5007 * 5008 * mkfs.btrfs -f /dev/sda 5009 * mount /dev/sda /mnt 5010 * xfs_io -f -c "pwrite -S 0xaa 0K 100K" /mnt/foo 5011 * cp --reflink=always /mnt/foo /mnt/bar 5012 * xfs_io -c "pwrite -S 0xbb 50K 50K" /mnt/foo 5013 * btrfs subvolume snapshot -r /mnt /mnt/snap 5014 * 5015 * If when we send the snapshot and we are processing file bar (which 5016 * has a higher inode number than foo) we blindly send a clone operation 5017 * for the [0, 100K[ range from foo to bar, the receiver ends up getting 5018 * a file bar that matches the content of file foo - iow, doesn't match 5019 * the content from bar in the original filesystem. 5020 */ 5021 key.objectid = clone_root->ino; 5022 key.type = BTRFS_EXTENT_DATA_KEY; 5023 key.offset = clone_root->offset; 5024 ret = btrfs_search_slot(NULL, clone_root->root, &key, path, 0, 0); 5025 if (ret < 0) 5026 goto out; 5027 if (ret > 0 && path->slots[0] > 0) { 5028 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0] - 1); 5029 if (key.objectid == clone_root->ino && 5030 key.type == BTRFS_EXTENT_DATA_KEY) 5031 path->slots[0]--; 5032 } 5033 5034 while (true) { 5035 struct extent_buffer *leaf = path->nodes[0]; 5036 int slot = path->slots[0]; 5037 struct btrfs_file_extent_item *ei; 5038 u8 type; 5039 u64 ext_len; 5040 u64 clone_len; 5041 5042 if (slot >= btrfs_header_nritems(leaf)) { 5043 ret = btrfs_next_leaf(clone_root->root, path); 5044 if (ret < 0) 5045 goto out; 5046 else if (ret > 0) 5047 break; 5048 continue; 5049 } 5050 5051 btrfs_item_key_to_cpu(leaf, &key, slot); 5052 5053 /* 5054 * We might have an implicit trailing hole (NO_HOLES feature 5055 * enabled). We deal with it after leaving this loop. 5056 */ 5057 if (key.objectid != clone_root->ino || 5058 key.type != BTRFS_EXTENT_DATA_KEY) 5059 break; 5060 5061 ei = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); 5062 type = btrfs_file_extent_type(leaf, ei); 5063 if (type == BTRFS_FILE_EXTENT_INLINE) { 5064 ext_len = btrfs_file_extent_inline_len(leaf, slot, ei); 5065 ext_len = PAGE_ALIGN(ext_len); 5066 } else { 5067 ext_len = btrfs_file_extent_num_bytes(leaf, ei); 5068 } 5069 5070 if (key.offset + ext_len <= clone_root->offset) 5071 goto next; 5072 5073 if (key.offset > clone_root->offset) { 5074 /* Implicit hole, NO_HOLES feature enabled. */ 5075 u64 hole_len = key.offset - clone_root->offset; 5076 5077 if (hole_len > len) 5078 hole_len = len; 5079 ret = send_extent_data(sctx, offset, hole_len); 5080 if (ret < 0) 5081 goto out; 5082 5083 len -= hole_len; 5084 if (len == 0) 5085 break; 5086 offset += hole_len; 5087 clone_root->offset += hole_len; 5088 data_offset += hole_len; 5089 } 5090 5091 if (key.offset >= clone_root->offset + len) 5092 break; 5093 5094 clone_len = min_t(u64, ext_len, len); 5095 5096 if (btrfs_file_extent_disk_bytenr(leaf, ei) == disk_byte && 5097 btrfs_file_extent_offset(leaf, ei) == data_offset) 5098 ret = send_clone(sctx, offset, clone_len, clone_root); 5099 else 5100 ret = send_extent_data(sctx, offset, clone_len); 5101 5102 if (ret < 0) 5103 goto out; 5104 5105 len -= clone_len; 5106 if (len == 0) 5107 break; 5108 offset += clone_len; 5109 clone_root->offset += clone_len; 5110 data_offset += clone_len; 5111 next: 5112 path->slots[0]++; 5113 } 5114 5115 if (len > 0) 5116 ret = send_extent_data(sctx, offset, len); 5117 else 5118 ret = 0; 5119 out: 5120 btrfs_free_path(path); 5121 return ret; 5122 } 5123 5124 static int send_write_or_clone(struct send_ctx *sctx, 5125 struct btrfs_path *path, 5126 struct btrfs_key *key, 5127 struct clone_root *clone_root) 5128 { 5129 int ret = 0; 5130 struct btrfs_file_extent_item *ei; 5131 u64 offset = key->offset; 5132 u64 len; 5133 u8 type; 5134 u64 bs = sctx->send_root->fs_info->sb->s_blocksize; 5135 5136 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 5137 struct btrfs_file_extent_item); 5138 type = btrfs_file_extent_type(path->nodes[0], ei); 5139 if (type == BTRFS_FILE_EXTENT_INLINE) { 5140 len = btrfs_file_extent_inline_len(path->nodes[0], 5141 path->slots[0], ei); 5142 /* 5143 * it is possible the inline item won't cover the whole page, 5144 * but there may be items after this page. Make 5145 * sure to send the whole thing 5146 */ 5147 len = PAGE_ALIGN(len); 5148 } else { 5149 len = btrfs_file_extent_num_bytes(path->nodes[0], ei); 5150 } 5151 5152 if (offset + len > sctx->cur_inode_size) 5153 len = sctx->cur_inode_size - offset; 5154 if (len == 0) { 5155 ret = 0; 5156 goto out; 5157 } 5158 5159 if (clone_root && IS_ALIGNED(offset + len, bs)) { 5160 u64 disk_byte; 5161 u64 data_offset; 5162 5163 disk_byte = btrfs_file_extent_disk_bytenr(path->nodes[0], ei); 5164 data_offset = btrfs_file_extent_offset(path->nodes[0], ei); 5165 ret = clone_range(sctx, clone_root, disk_byte, data_offset, 5166 offset, len); 5167 } else { 5168 ret = send_extent_data(sctx, offset, len); 5169 } 5170 out: 5171 return ret; 5172 } 5173 5174 static int is_extent_unchanged(struct send_ctx *sctx, 5175 struct btrfs_path *left_path, 5176 struct btrfs_key *ekey) 5177 { 5178 int ret = 0; 5179 struct btrfs_key key; 5180 struct btrfs_path *path = NULL; 5181 struct extent_buffer *eb; 5182 int slot; 5183 struct btrfs_key found_key; 5184 struct btrfs_file_extent_item *ei; 5185 u64 left_disknr; 5186 u64 right_disknr; 5187 u64 left_offset; 5188 u64 right_offset; 5189 u64 left_offset_fixed; 5190 u64 left_len; 5191 u64 right_len; 5192 u64 left_gen; 5193 u64 right_gen; 5194 u8 left_type; 5195 u8 right_type; 5196 5197 path = alloc_path_for_send(); 5198 if (!path) 5199 return -ENOMEM; 5200 5201 eb = left_path->nodes[0]; 5202 slot = left_path->slots[0]; 5203 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 5204 left_type = btrfs_file_extent_type(eb, ei); 5205 5206 if (left_type != BTRFS_FILE_EXTENT_REG) { 5207 ret = 0; 5208 goto out; 5209 } 5210 left_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 5211 left_len = btrfs_file_extent_num_bytes(eb, ei); 5212 left_offset = btrfs_file_extent_offset(eb, ei); 5213 left_gen = btrfs_file_extent_generation(eb, ei); 5214 5215 /* 5216 * Following comments will refer to these graphics. L is the left 5217 * extents which we are checking at the moment. 1-8 are the right 5218 * extents that we iterate. 5219 * 5220 * |-----L-----| 5221 * |-1-|-2a-|-3-|-4-|-5-|-6-| 5222 * 5223 * |-----L-----| 5224 * |--1--|-2b-|...(same as above) 5225 * 5226 * Alternative situation. Happens on files where extents got split. 5227 * |-----L-----| 5228 * |-----------7-----------|-6-| 5229 * 5230 * Alternative situation. Happens on files which got larger. 5231 * |-----L-----| 5232 * |-8-| 5233 * Nothing follows after 8. 5234 */ 5235 5236 key.objectid = ekey->objectid; 5237 key.type = BTRFS_EXTENT_DATA_KEY; 5238 key.offset = ekey->offset; 5239 ret = btrfs_search_slot_for_read(sctx->parent_root, &key, path, 0, 0); 5240 if (ret < 0) 5241 goto out; 5242 if (ret) { 5243 ret = 0; 5244 goto out; 5245 } 5246 5247 /* 5248 * Handle special case where the right side has no extents at all. 5249 */ 5250 eb = path->nodes[0]; 5251 slot = path->slots[0]; 5252 btrfs_item_key_to_cpu(eb, &found_key, slot); 5253 if (found_key.objectid != key.objectid || 5254 found_key.type != key.type) { 5255 /* If we're a hole then just pretend nothing changed */ 5256 ret = (left_disknr) ? 0 : 1; 5257 goto out; 5258 } 5259 5260 /* 5261 * We're now on 2a, 2b or 7. 5262 */ 5263 key = found_key; 5264 while (key.offset < ekey->offset + left_len) { 5265 ei = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 5266 right_type = btrfs_file_extent_type(eb, ei); 5267 if (right_type != BTRFS_FILE_EXTENT_REG && 5268 right_type != BTRFS_FILE_EXTENT_INLINE) { 5269 ret = 0; 5270 goto out; 5271 } 5272 5273 if (right_type == BTRFS_FILE_EXTENT_INLINE) { 5274 right_len = btrfs_file_extent_inline_len(eb, slot, ei); 5275 right_len = PAGE_ALIGN(right_len); 5276 } else { 5277 right_len = btrfs_file_extent_num_bytes(eb, ei); 5278 } 5279 5280 /* 5281 * Are we at extent 8? If yes, we know the extent is changed. 5282 * This may only happen on the first iteration. 5283 */ 5284 if (found_key.offset + right_len <= ekey->offset) { 5285 /* If we're a hole just pretend nothing changed */ 5286 ret = (left_disknr) ? 0 : 1; 5287 goto out; 5288 } 5289 5290 /* 5291 * We just wanted to see if when we have an inline extent, what 5292 * follows it is a regular extent (wanted to check the above 5293 * condition for inline extents too). This should normally not 5294 * happen but it's possible for example when we have an inline 5295 * compressed extent representing data with a size matching 5296 * the page size (currently the same as sector size). 5297 */ 5298 if (right_type == BTRFS_FILE_EXTENT_INLINE) { 5299 ret = 0; 5300 goto out; 5301 } 5302 5303 right_disknr = btrfs_file_extent_disk_bytenr(eb, ei); 5304 right_offset = btrfs_file_extent_offset(eb, ei); 5305 right_gen = btrfs_file_extent_generation(eb, ei); 5306 5307 left_offset_fixed = left_offset; 5308 if (key.offset < ekey->offset) { 5309 /* Fix the right offset for 2a and 7. */ 5310 right_offset += ekey->offset - key.offset; 5311 } else { 5312 /* Fix the left offset for all behind 2a and 2b */ 5313 left_offset_fixed += key.offset - ekey->offset; 5314 } 5315 5316 /* 5317 * Check if we have the same extent. 5318 */ 5319 if (left_disknr != right_disknr || 5320 left_offset_fixed != right_offset || 5321 left_gen != right_gen) { 5322 ret = 0; 5323 goto out; 5324 } 5325 5326 /* 5327 * Go to the next extent. 5328 */ 5329 ret = btrfs_next_item(sctx->parent_root, path); 5330 if (ret < 0) 5331 goto out; 5332 if (!ret) { 5333 eb = path->nodes[0]; 5334 slot = path->slots[0]; 5335 btrfs_item_key_to_cpu(eb, &found_key, slot); 5336 } 5337 if (ret || found_key.objectid != key.objectid || 5338 found_key.type != key.type) { 5339 key.offset += right_len; 5340 break; 5341 } 5342 if (found_key.offset != key.offset + right_len) { 5343 ret = 0; 5344 goto out; 5345 } 5346 key = found_key; 5347 } 5348 5349 /* 5350 * We're now behind the left extent (treat as unchanged) or at the end 5351 * of the right side (treat as changed). 5352 */ 5353 if (key.offset >= ekey->offset + left_len) 5354 ret = 1; 5355 else 5356 ret = 0; 5357 5358 5359 out: 5360 btrfs_free_path(path); 5361 return ret; 5362 } 5363 5364 static int get_last_extent(struct send_ctx *sctx, u64 offset) 5365 { 5366 struct btrfs_path *path; 5367 struct btrfs_root *root = sctx->send_root; 5368 struct btrfs_file_extent_item *fi; 5369 struct btrfs_key key; 5370 u64 extent_end; 5371 u8 type; 5372 int ret; 5373 5374 path = alloc_path_for_send(); 5375 if (!path) 5376 return -ENOMEM; 5377 5378 sctx->cur_inode_last_extent = 0; 5379 5380 key.objectid = sctx->cur_ino; 5381 key.type = BTRFS_EXTENT_DATA_KEY; 5382 key.offset = offset; 5383 ret = btrfs_search_slot_for_read(root, &key, path, 0, 1); 5384 if (ret < 0) 5385 goto out; 5386 ret = 0; 5387 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]); 5388 if (key.objectid != sctx->cur_ino || key.type != BTRFS_EXTENT_DATA_KEY) 5389 goto out; 5390 5391 fi = btrfs_item_ptr(path->nodes[0], path->slots[0], 5392 struct btrfs_file_extent_item); 5393 type = btrfs_file_extent_type(path->nodes[0], fi); 5394 if (type == BTRFS_FILE_EXTENT_INLINE) { 5395 u64 size = btrfs_file_extent_inline_len(path->nodes[0], 5396 path->slots[0], fi); 5397 extent_end = ALIGN(key.offset + size, 5398 sctx->send_root->fs_info->sectorsize); 5399 } else { 5400 extent_end = key.offset + 5401 btrfs_file_extent_num_bytes(path->nodes[0], fi); 5402 } 5403 sctx->cur_inode_last_extent = extent_end; 5404 out: 5405 btrfs_free_path(path); 5406 return ret; 5407 } 5408 5409 static int range_is_hole_in_parent(struct send_ctx *sctx, 5410 const u64 start, 5411 const u64 end) 5412 { 5413 struct btrfs_path *path; 5414 struct btrfs_key key; 5415 struct btrfs_root *root = sctx->parent_root; 5416 u64 search_start = start; 5417 int ret; 5418 5419 path = alloc_path_for_send(); 5420 if (!path) 5421 return -ENOMEM; 5422 5423 key.objectid = sctx->cur_ino; 5424 key.type = BTRFS_EXTENT_DATA_KEY; 5425 key.offset = search_start; 5426 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 5427 if (ret < 0) 5428 goto out; 5429 if (ret > 0 && path->slots[0] > 0) 5430 path->slots[0]--; 5431 5432 while (search_start < end) { 5433 struct extent_buffer *leaf = path->nodes[0]; 5434 int slot = path->slots[0]; 5435 struct btrfs_file_extent_item *fi; 5436 u64 extent_end; 5437 5438 if (slot >= btrfs_header_nritems(leaf)) { 5439 ret = btrfs_next_leaf(root, path); 5440 if (ret < 0) 5441 goto out; 5442 else if (ret > 0) 5443 break; 5444 continue; 5445 } 5446 5447 btrfs_item_key_to_cpu(leaf, &key, slot); 5448 if (key.objectid < sctx->cur_ino || 5449 key.type < BTRFS_EXTENT_DATA_KEY) 5450 goto next; 5451 if (key.objectid > sctx->cur_ino || 5452 key.type > BTRFS_EXTENT_DATA_KEY || 5453 key.offset >= end) 5454 break; 5455 5456 fi = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); 5457 if (btrfs_file_extent_type(leaf, fi) == 5458 BTRFS_FILE_EXTENT_INLINE) { 5459 u64 size = btrfs_file_extent_inline_len(leaf, slot, fi); 5460 5461 extent_end = ALIGN(key.offset + size, 5462 root->fs_info->sectorsize); 5463 } else { 5464 extent_end = key.offset + 5465 btrfs_file_extent_num_bytes(leaf, fi); 5466 } 5467 if (extent_end <= start) 5468 goto next; 5469 if (btrfs_file_extent_disk_bytenr(leaf, fi) == 0) { 5470 search_start = extent_end; 5471 goto next; 5472 } 5473 ret = 0; 5474 goto out; 5475 next: 5476 path->slots[0]++; 5477 } 5478 ret = 1; 5479 out: 5480 btrfs_free_path(path); 5481 return ret; 5482 } 5483 5484 static int maybe_send_hole(struct send_ctx *sctx, struct btrfs_path *path, 5485 struct btrfs_key *key) 5486 { 5487 struct btrfs_file_extent_item *fi; 5488 u64 extent_end; 5489 u8 type; 5490 int ret = 0; 5491 5492 if (sctx->cur_ino != key->objectid || !need_send_hole(sctx)) 5493 return 0; 5494 5495 if (sctx->cur_inode_last_extent == (u64)-1) { 5496 ret = get_last_extent(sctx, key->offset - 1); 5497 if (ret) 5498 return ret; 5499 } 5500 5501 fi = btrfs_item_ptr(path->nodes[0], path->slots[0], 5502 struct btrfs_file_extent_item); 5503 type = btrfs_file_extent_type(path->nodes[0], fi); 5504 if (type == BTRFS_FILE_EXTENT_INLINE) { 5505 u64 size = btrfs_file_extent_inline_len(path->nodes[0], 5506 path->slots[0], fi); 5507 extent_end = ALIGN(key->offset + size, 5508 sctx->send_root->fs_info->sectorsize); 5509 } else { 5510 extent_end = key->offset + 5511 btrfs_file_extent_num_bytes(path->nodes[0], fi); 5512 } 5513 5514 if (path->slots[0] == 0 && 5515 sctx->cur_inode_last_extent < key->offset) { 5516 /* 5517 * We might have skipped entire leafs that contained only 5518 * file extent items for our current inode. These leafs have 5519 * a generation number smaller (older) than the one in the 5520 * current leaf and the leaf our last extent came from, and 5521 * are located between these 2 leafs. 5522 */ 5523 ret = get_last_extent(sctx, key->offset - 1); 5524 if (ret) 5525 return ret; 5526 } 5527 5528 if (sctx->cur_inode_last_extent < key->offset) { 5529 ret = range_is_hole_in_parent(sctx, 5530 sctx->cur_inode_last_extent, 5531 key->offset); 5532 if (ret < 0) 5533 return ret; 5534 else if (ret == 0) 5535 ret = send_hole(sctx, key->offset); 5536 else 5537 ret = 0; 5538 } 5539 sctx->cur_inode_last_extent = extent_end; 5540 return ret; 5541 } 5542 5543 static int process_extent(struct send_ctx *sctx, 5544 struct btrfs_path *path, 5545 struct btrfs_key *key) 5546 { 5547 struct clone_root *found_clone = NULL; 5548 int ret = 0; 5549 5550 if (S_ISLNK(sctx->cur_inode_mode)) 5551 return 0; 5552 5553 if (sctx->parent_root && !sctx->cur_inode_new) { 5554 ret = is_extent_unchanged(sctx, path, key); 5555 if (ret < 0) 5556 goto out; 5557 if (ret) { 5558 ret = 0; 5559 goto out_hole; 5560 } 5561 } else { 5562 struct btrfs_file_extent_item *ei; 5563 u8 type; 5564 5565 ei = btrfs_item_ptr(path->nodes[0], path->slots[0], 5566 struct btrfs_file_extent_item); 5567 type = btrfs_file_extent_type(path->nodes[0], ei); 5568 if (type == BTRFS_FILE_EXTENT_PREALLOC || 5569 type == BTRFS_FILE_EXTENT_REG) { 5570 /* 5571 * The send spec does not have a prealloc command yet, 5572 * so just leave a hole for prealloc'ed extents until 5573 * we have enough commands queued up to justify rev'ing 5574 * the send spec. 5575 */ 5576 if (type == BTRFS_FILE_EXTENT_PREALLOC) { 5577 ret = 0; 5578 goto out; 5579 } 5580 5581 /* Have a hole, just skip it. */ 5582 if (btrfs_file_extent_disk_bytenr(path->nodes[0], ei) == 0) { 5583 ret = 0; 5584 goto out; 5585 } 5586 } 5587 } 5588 5589 ret = find_extent_clone(sctx, path, key->objectid, key->offset, 5590 sctx->cur_inode_size, &found_clone); 5591 if (ret != -ENOENT && ret < 0) 5592 goto out; 5593 5594 ret = send_write_or_clone(sctx, path, key, found_clone); 5595 if (ret) 5596 goto out; 5597 out_hole: 5598 ret = maybe_send_hole(sctx, path, key); 5599 out: 5600 return ret; 5601 } 5602 5603 static int process_all_extents(struct send_ctx *sctx) 5604 { 5605 int ret; 5606 struct btrfs_root *root; 5607 struct btrfs_path *path; 5608 struct btrfs_key key; 5609 struct btrfs_key found_key; 5610 struct extent_buffer *eb; 5611 int slot; 5612 5613 root = sctx->send_root; 5614 path = alloc_path_for_send(); 5615 if (!path) 5616 return -ENOMEM; 5617 5618 key.objectid = sctx->cmp_key->objectid; 5619 key.type = BTRFS_EXTENT_DATA_KEY; 5620 key.offset = 0; 5621 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 5622 if (ret < 0) 5623 goto out; 5624 5625 while (1) { 5626 eb = path->nodes[0]; 5627 slot = path->slots[0]; 5628 5629 if (slot >= btrfs_header_nritems(eb)) { 5630 ret = btrfs_next_leaf(root, path); 5631 if (ret < 0) { 5632 goto out; 5633 } else if (ret > 0) { 5634 ret = 0; 5635 break; 5636 } 5637 continue; 5638 } 5639 5640 btrfs_item_key_to_cpu(eb, &found_key, slot); 5641 5642 if (found_key.objectid != key.objectid || 5643 found_key.type != key.type) { 5644 ret = 0; 5645 goto out; 5646 } 5647 5648 ret = process_extent(sctx, path, &found_key); 5649 if (ret < 0) 5650 goto out; 5651 5652 path->slots[0]++; 5653 } 5654 5655 out: 5656 btrfs_free_path(path); 5657 return ret; 5658 } 5659 5660 static int process_recorded_refs_if_needed(struct send_ctx *sctx, int at_end, 5661 int *pending_move, 5662 int *refs_processed) 5663 { 5664 int ret = 0; 5665 5666 if (sctx->cur_ino == 0) 5667 goto out; 5668 if (!at_end && sctx->cur_ino == sctx->cmp_key->objectid && 5669 sctx->cmp_key->type <= BTRFS_INODE_EXTREF_KEY) 5670 goto out; 5671 if (list_empty(&sctx->new_refs) && list_empty(&sctx->deleted_refs)) 5672 goto out; 5673 5674 ret = process_recorded_refs(sctx, pending_move); 5675 if (ret < 0) 5676 goto out; 5677 5678 *refs_processed = 1; 5679 out: 5680 return ret; 5681 } 5682 5683 static int finish_inode_if_needed(struct send_ctx *sctx, int at_end) 5684 { 5685 int ret = 0; 5686 u64 left_mode; 5687 u64 left_uid; 5688 u64 left_gid; 5689 u64 right_mode; 5690 u64 right_uid; 5691 u64 right_gid; 5692 int need_chmod = 0; 5693 int need_chown = 0; 5694 int pending_move = 0; 5695 int refs_processed = 0; 5696 5697 ret = process_recorded_refs_if_needed(sctx, at_end, &pending_move, 5698 &refs_processed); 5699 if (ret < 0) 5700 goto out; 5701 5702 /* 5703 * We have processed the refs and thus need to advance send_progress. 5704 * Now, calls to get_cur_xxx will take the updated refs of the current 5705 * inode into account. 5706 * 5707 * On the other hand, if our current inode is a directory and couldn't 5708 * be moved/renamed because its parent was renamed/moved too and it has 5709 * a higher inode number, we can only move/rename our current inode 5710 * after we moved/renamed its parent. Therefore in this case operate on 5711 * the old path (pre move/rename) of our current inode, and the 5712 * move/rename will be performed later. 5713 */ 5714 if (refs_processed && !pending_move) 5715 sctx->send_progress = sctx->cur_ino + 1; 5716 5717 if (sctx->cur_ino == 0 || sctx->cur_inode_deleted) 5718 goto out; 5719 if (!at_end && sctx->cmp_key->objectid == sctx->cur_ino) 5720 goto out; 5721 5722 ret = get_inode_info(sctx->send_root, sctx->cur_ino, NULL, NULL, 5723 &left_mode, &left_uid, &left_gid, NULL); 5724 if (ret < 0) 5725 goto out; 5726 5727 if (!sctx->parent_root || sctx->cur_inode_new) { 5728 need_chown = 1; 5729 if (!S_ISLNK(sctx->cur_inode_mode)) 5730 need_chmod = 1; 5731 } else { 5732 ret = get_inode_info(sctx->parent_root, sctx->cur_ino, 5733 NULL, NULL, &right_mode, &right_uid, 5734 &right_gid, NULL); 5735 if (ret < 0) 5736 goto out; 5737 5738 if (left_uid != right_uid || left_gid != right_gid) 5739 need_chown = 1; 5740 if (!S_ISLNK(sctx->cur_inode_mode) && left_mode != right_mode) 5741 need_chmod = 1; 5742 } 5743 5744 if (S_ISREG(sctx->cur_inode_mode)) { 5745 if (need_send_hole(sctx)) { 5746 if (sctx->cur_inode_last_extent == (u64)-1 || 5747 sctx->cur_inode_last_extent < 5748 sctx->cur_inode_size) { 5749 ret = get_last_extent(sctx, (u64)-1); 5750 if (ret) 5751 goto out; 5752 } 5753 if (sctx->cur_inode_last_extent < 5754 sctx->cur_inode_size) { 5755 ret = send_hole(sctx, sctx->cur_inode_size); 5756 if (ret) 5757 goto out; 5758 } 5759 } 5760 ret = send_truncate(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5761 sctx->cur_inode_size); 5762 if (ret < 0) 5763 goto out; 5764 } 5765 5766 if (need_chown) { 5767 ret = send_chown(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5768 left_uid, left_gid); 5769 if (ret < 0) 5770 goto out; 5771 } 5772 if (need_chmod) { 5773 ret = send_chmod(sctx, sctx->cur_ino, sctx->cur_inode_gen, 5774 left_mode); 5775 if (ret < 0) 5776 goto out; 5777 } 5778 5779 /* 5780 * If other directory inodes depended on our current directory 5781 * inode's move/rename, now do their move/rename operations. 5782 */ 5783 if (!is_waiting_for_move(sctx, sctx->cur_ino)) { 5784 ret = apply_children_dir_moves(sctx); 5785 if (ret) 5786 goto out; 5787 /* 5788 * Need to send that every time, no matter if it actually 5789 * changed between the two trees as we have done changes to 5790 * the inode before. If our inode is a directory and it's 5791 * waiting to be moved/renamed, we will send its utimes when 5792 * it's moved/renamed, therefore we don't need to do it here. 5793 */ 5794 sctx->send_progress = sctx->cur_ino + 1; 5795 ret = send_utimes(sctx, sctx->cur_ino, sctx->cur_inode_gen); 5796 if (ret < 0) 5797 goto out; 5798 } 5799 5800 out: 5801 return ret; 5802 } 5803 5804 static int changed_inode(struct send_ctx *sctx, 5805 enum btrfs_compare_tree_result result) 5806 { 5807 int ret = 0; 5808 struct btrfs_key *key = sctx->cmp_key; 5809 struct btrfs_inode_item *left_ii = NULL; 5810 struct btrfs_inode_item *right_ii = NULL; 5811 u64 left_gen = 0; 5812 u64 right_gen = 0; 5813 5814 sctx->cur_ino = key->objectid; 5815 sctx->cur_inode_new_gen = 0; 5816 sctx->cur_inode_last_extent = (u64)-1; 5817 5818 /* 5819 * Set send_progress to current inode. This will tell all get_cur_xxx 5820 * functions that the current inode's refs are not updated yet. Later, 5821 * when process_recorded_refs is finished, it is set to cur_ino + 1. 5822 */ 5823 sctx->send_progress = sctx->cur_ino; 5824 5825 if (result == BTRFS_COMPARE_TREE_NEW || 5826 result == BTRFS_COMPARE_TREE_CHANGED) { 5827 left_ii = btrfs_item_ptr(sctx->left_path->nodes[0], 5828 sctx->left_path->slots[0], 5829 struct btrfs_inode_item); 5830 left_gen = btrfs_inode_generation(sctx->left_path->nodes[0], 5831 left_ii); 5832 } else { 5833 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 5834 sctx->right_path->slots[0], 5835 struct btrfs_inode_item); 5836 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 5837 right_ii); 5838 } 5839 if (result == BTRFS_COMPARE_TREE_CHANGED) { 5840 right_ii = btrfs_item_ptr(sctx->right_path->nodes[0], 5841 sctx->right_path->slots[0], 5842 struct btrfs_inode_item); 5843 5844 right_gen = btrfs_inode_generation(sctx->right_path->nodes[0], 5845 right_ii); 5846 5847 /* 5848 * The cur_ino = root dir case is special here. We can't treat 5849 * the inode as deleted+reused because it would generate a 5850 * stream that tries to delete/mkdir the root dir. 5851 */ 5852 if (left_gen != right_gen && 5853 sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) 5854 sctx->cur_inode_new_gen = 1; 5855 } 5856 5857 if (result == BTRFS_COMPARE_TREE_NEW) { 5858 sctx->cur_inode_gen = left_gen; 5859 sctx->cur_inode_new = 1; 5860 sctx->cur_inode_deleted = 0; 5861 sctx->cur_inode_size = btrfs_inode_size( 5862 sctx->left_path->nodes[0], left_ii); 5863 sctx->cur_inode_mode = btrfs_inode_mode( 5864 sctx->left_path->nodes[0], left_ii); 5865 sctx->cur_inode_rdev = btrfs_inode_rdev( 5866 sctx->left_path->nodes[0], left_ii); 5867 if (sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) 5868 ret = send_create_inode_if_needed(sctx); 5869 } else if (result == BTRFS_COMPARE_TREE_DELETED) { 5870 sctx->cur_inode_gen = right_gen; 5871 sctx->cur_inode_new = 0; 5872 sctx->cur_inode_deleted = 1; 5873 sctx->cur_inode_size = btrfs_inode_size( 5874 sctx->right_path->nodes[0], right_ii); 5875 sctx->cur_inode_mode = btrfs_inode_mode( 5876 sctx->right_path->nodes[0], right_ii); 5877 } else if (result == BTRFS_COMPARE_TREE_CHANGED) { 5878 /* 5879 * We need to do some special handling in case the inode was 5880 * reported as changed with a changed generation number. This 5881 * means that the original inode was deleted and new inode 5882 * reused the same inum. So we have to treat the old inode as 5883 * deleted and the new one as new. 5884 */ 5885 if (sctx->cur_inode_new_gen) { 5886 /* 5887 * First, process the inode as if it was deleted. 5888 */ 5889 sctx->cur_inode_gen = right_gen; 5890 sctx->cur_inode_new = 0; 5891 sctx->cur_inode_deleted = 1; 5892 sctx->cur_inode_size = btrfs_inode_size( 5893 sctx->right_path->nodes[0], right_ii); 5894 sctx->cur_inode_mode = btrfs_inode_mode( 5895 sctx->right_path->nodes[0], right_ii); 5896 ret = process_all_refs(sctx, 5897 BTRFS_COMPARE_TREE_DELETED); 5898 if (ret < 0) 5899 goto out; 5900 5901 /* 5902 * Now process the inode as if it was new. 5903 */ 5904 sctx->cur_inode_gen = left_gen; 5905 sctx->cur_inode_new = 1; 5906 sctx->cur_inode_deleted = 0; 5907 sctx->cur_inode_size = btrfs_inode_size( 5908 sctx->left_path->nodes[0], left_ii); 5909 sctx->cur_inode_mode = btrfs_inode_mode( 5910 sctx->left_path->nodes[0], left_ii); 5911 sctx->cur_inode_rdev = btrfs_inode_rdev( 5912 sctx->left_path->nodes[0], left_ii); 5913 ret = send_create_inode_if_needed(sctx); 5914 if (ret < 0) 5915 goto out; 5916 5917 ret = process_all_refs(sctx, BTRFS_COMPARE_TREE_NEW); 5918 if (ret < 0) 5919 goto out; 5920 /* 5921 * Advance send_progress now as we did not get into 5922 * process_recorded_refs_if_needed in the new_gen case. 5923 */ 5924 sctx->send_progress = sctx->cur_ino + 1; 5925 5926 /* 5927 * Now process all extents and xattrs of the inode as if 5928 * they were all new. 5929 */ 5930 ret = process_all_extents(sctx); 5931 if (ret < 0) 5932 goto out; 5933 ret = process_all_new_xattrs(sctx); 5934 if (ret < 0) 5935 goto out; 5936 } else { 5937 sctx->cur_inode_gen = left_gen; 5938 sctx->cur_inode_new = 0; 5939 sctx->cur_inode_new_gen = 0; 5940 sctx->cur_inode_deleted = 0; 5941 sctx->cur_inode_size = btrfs_inode_size( 5942 sctx->left_path->nodes[0], left_ii); 5943 sctx->cur_inode_mode = btrfs_inode_mode( 5944 sctx->left_path->nodes[0], left_ii); 5945 } 5946 } 5947 5948 out: 5949 return ret; 5950 } 5951 5952 /* 5953 * We have to process new refs before deleted refs, but compare_trees gives us 5954 * the new and deleted refs mixed. To fix this, we record the new/deleted refs 5955 * first and later process them in process_recorded_refs. 5956 * For the cur_inode_new_gen case, we skip recording completely because 5957 * changed_inode did already initiate processing of refs. The reason for this is 5958 * that in this case, compare_tree actually compares the refs of 2 different 5959 * inodes. To fix this, process_all_refs is used in changed_inode to handle all 5960 * refs of the right tree as deleted and all refs of the left tree as new. 5961 */ 5962 static int changed_ref(struct send_ctx *sctx, 5963 enum btrfs_compare_tree_result result) 5964 { 5965 int ret = 0; 5966 5967 if (sctx->cur_ino != sctx->cmp_key->objectid) { 5968 inconsistent_snapshot_error(sctx, result, "reference"); 5969 return -EIO; 5970 } 5971 5972 if (!sctx->cur_inode_new_gen && 5973 sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) { 5974 if (result == BTRFS_COMPARE_TREE_NEW) 5975 ret = record_new_ref(sctx); 5976 else if (result == BTRFS_COMPARE_TREE_DELETED) 5977 ret = record_deleted_ref(sctx); 5978 else if (result == BTRFS_COMPARE_TREE_CHANGED) 5979 ret = record_changed_ref(sctx); 5980 } 5981 5982 return ret; 5983 } 5984 5985 /* 5986 * Process new/deleted/changed xattrs. We skip processing in the 5987 * cur_inode_new_gen case because changed_inode did already initiate processing 5988 * of xattrs. The reason is the same as in changed_ref 5989 */ 5990 static int changed_xattr(struct send_ctx *sctx, 5991 enum btrfs_compare_tree_result result) 5992 { 5993 int ret = 0; 5994 5995 if (sctx->cur_ino != sctx->cmp_key->objectid) { 5996 inconsistent_snapshot_error(sctx, result, "xattr"); 5997 return -EIO; 5998 } 5999 6000 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 6001 if (result == BTRFS_COMPARE_TREE_NEW) 6002 ret = process_new_xattr(sctx); 6003 else if (result == BTRFS_COMPARE_TREE_DELETED) 6004 ret = process_deleted_xattr(sctx); 6005 else if (result == BTRFS_COMPARE_TREE_CHANGED) 6006 ret = process_changed_xattr(sctx); 6007 } 6008 6009 return ret; 6010 } 6011 6012 /* 6013 * Process new/deleted/changed extents. We skip processing in the 6014 * cur_inode_new_gen case because changed_inode did already initiate processing 6015 * of extents. The reason is the same as in changed_ref 6016 */ 6017 static int changed_extent(struct send_ctx *sctx, 6018 enum btrfs_compare_tree_result result) 6019 { 6020 int ret = 0; 6021 6022 if (sctx->cur_ino != sctx->cmp_key->objectid) { 6023 6024 if (result == BTRFS_COMPARE_TREE_CHANGED) { 6025 struct extent_buffer *leaf_l; 6026 struct extent_buffer *leaf_r; 6027 struct btrfs_file_extent_item *ei_l; 6028 struct btrfs_file_extent_item *ei_r; 6029 6030 leaf_l = sctx->left_path->nodes[0]; 6031 leaf_r = sctx->right_path->nodes[0]; 6032 ei_l = btrfs_item_ptr(leaf_l, 6033 sctx->left_path->slots[0], 6034 struct btrfs_file_extent_item); 6035 ei_r = btrfs_item_ptr(leaf_r, 6036 sctx->right_path->slots[0], 6037 struct btrfs_file_extent_item); 6038 6039 /* 6040 * We may have found an extent item that has changed 6041 * only its disk_bytenr field and the corresponding 6042 * inode item was not updated. This case happens due to 6043 * very specific timings during relocation when a leaf 6044 * that contains file extent items is COWed while 6045 * relocation is ongoing and its in the stage where it 6046 * updates data pointers. So when this happens we can 6047 * safely ignore it since we know it's the same extent, 6048 * but just at different logical and physical locations 6049 * (when an extent is fully replaced with a new one, we 6050 * know the generation number must have changed too, 6051 * since snapshot creation implies committing the current 6052 * transaction, and the inode item must have been updated 6053 * as well). 6054 * This replacement of the disk_bytenr happens at 6055 * relocation.c:replace_file_extents() through 6056 * relocation.c:btrfs_reloc_cow_block(). 6057 */ 6058 if (btrfs_file_extent_generation(leaf_l, ei_l) == 6059 btrfs_file_extent_generation(leaf_r, ei_r) && 6060 btrfs_file_extent_ram_bytes(leaf_l, ei_l) == 6061 btrfs_file_extent_ram_bytes(leaf_r, ei_r) && 6062 btrfs_file_extent_compression(leaf_l, ei_l) == 6063 btrfs_file_extent_compression(leaf_r, ei_r) && 6064 btrfs_file_extent_encryption(leaf_l, ei_l) == 6065 btrfs_file_extent_encryption(leaf_r, ei_r) && 6066 btrfs_file_extent_other_encoding(leaf_l, ei_l) == 6067 btrfs_file_extent_other_encoding(leaf_r, ei_r) && 6068 btrfs_file_extent_type(leaf_l, ei_l) == 6069 btrfs_file_extent_type(leaf_r, ei_r) && 6070 btrfs_file_extent_disk_bytenr(leaf_l, ei_l) != 6071 btrfs_file_extent_disk_bytenr(leaf_r, ei_r) && 6072 btrfs_file_extent_disk_num_bytes(leaf_l, ei_l) == 6073 btrfs_file_extent_disk_num_bytes(leaf_r, ei_r) && 6074 btrfs_file_extent_offset(leaf_l, ei_l) == 6075 btrfs_file_extent_offset(leaf_r, ei_r) && 6076 btrfs_file_extent_num_bytes(leaf_l, ei_l) == 6077 btrfs_file_extent_num_bytes(leaf_r, ei_r)) 6078 return 0; 6079 } 6080 6081 inconsistent_snapshot_error(sctx, result, "extent"); 6082 return -EIO; 6083 } 6084 6085 if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) { 6086 if (result != BTRFS_COMPARE_TREE_DELETED) 6087 ret = process_extent(sctx, sctx->left_path, 6088 sctx->cmp_key); 6089 } 6090 6091 return ret; 6092 } 6093 6094 static int dir_changed(struct send_ctx *sctx, u64 dir) 6095 { 6096 u64 orig_gen, new_gen; 6097 int ret; 6098 6099 ret = get_inode_info(sctx->send_root, dir, NULL, &new_gen, NULL, NULL, 6100 NULL, NULL); 6101 if (ret) 6102 return ret; 6103 6104 ret = get_inode_info(sctx->parent_root, dir, NULL, &orig_gen, NULL, 6105 NULL, NULL, NULL); 6106 if (ret) 6107 return ret; 6108 6109 return (orig_gen != new_gen) ? 1 : 0; 6110 } 6111 6112 static int compare_refs(struct send_ctx *sctx, struct btrfs_path *path, 6113 struct btrfs_key *key) 6114 { 6115 struct btrfs_inode_extref *extref; 6116 struct extent_buffer *leaf; 6117 u64 dirid = 0, last_dirid = 0; 6118 unsigned long ptr; 6119 u32 item_size; 6120 u32 cur_offset = 0; 6121 int ref_name_len; 6122 int ret = 0; 6123 6124 /* Easy case, just check this one dirid */ 6125 if (key->type == BTRFS_INODE_REF_KEY) { 6126 dirid = key->offset; 6127 6128 ret = dir_changed(sctx, dirid); 6129 goto out; 6130 } 6131 6132 leaf = path->nodes[0]; 6133 item_size = btrfs_item_size_nr(leaf, path->slots[0]); 6134 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); 6135 while (cur_offset < item_size) { 6136 extref = (struct btrfs_inode_extref *)(ptr + 6137 cur_offset); 6138 dirid = btrfs_inode_extref_parent(leaf, extref); 6139 ref_name_len = btrfs_inode_extref_name_len(leaf, extref); 6140 cur_offset += ref_name_len + sizeof(*extref); 6141 if (dirid == last_dirid) 6142 continue; 6143 ret = dir_changed(sctx, dirid); 6144 if (ret) 6145 break; 6146 last_dirid = dirid; 6147 } 6148 out: 6149 return ret; 6150 } 6151 6152 /* 6153 * Updates compare related fields in sctx and simply forwards to the actual 6154 * changed_xxx functions. 6155 */ 6156 static int changed_cb(struct btrfs_root *left_root, 6157 struct btrfs_root *right_root, 6158 struct btrfs_path *left_path, 6159 struct btrfs_path *right_path, 6160 struct btrfs_key *key, 6161 enum btrfs_compare_tree_result result, 6162 void *ctx) 6163 { 6164 int ret = 0; 6165 struct send_ctx *sctx = ctx; 6166 6167 if (result == BTRFS_COMPARE_TREE_SAME) { 6168 if (key->type == BTRFS_INODE_REF_KEY || 6169 key->type == BTRFS_INODE_EXTREF_KEY) { 6170 ret = compare_refs(sctx, left_path, key); 6171 if (!ret) 6172 return 0; 6173 if (ret < 0) 6174 return ret; 6175 } else if (key->type == BTRFS_EXTENT_DATA_KEY) { 6176 return maybe_send_hole(sctx, left_path, key); 6177 } else { 6178 return 0; 6179 } 6180 result = BTRFS_COMPARE_TREE_CHANGED; 6181 ret = 0; 6182 } 6183 6184 sctx->left_path = left_path; 6185 sctx->right_path = right_path; 6186 sctx->cmp_key = key; 6187 6188 ret = finish_inode_if_needed(sctx, 0); 6189 if (ret < 0) 6190 goto out; 6191 6192 /* Ignore non-FS objects */ 6193 if (key->objectid == BTRFS_FREE_INO_OBJECTID || 6194 key->objectid == BTRFS_FREE_SPACE_OBJECTID) 6195 goto out; 6196 6197 if (key->type == BTRFS_INODE_ITEM_KEY) 6198 ret = changed_inode(sctx, result); 6199 else if (key->type == BTRFS_INODE_REF_KEY || 6200 key->type == BTRFS_INODE_EXTREF_KEY) 6201 ret = changed_ref(sctx, result); 6202 else if (key->type == BTRFS_XATTR_ITEM_KEY) 6203 ret = changed_xattr(sctx, result); 6204 else if (key->type == BTRFS_EXTENT_DATA_KEY) 6205 ret = changed_extent(sctx, result); 6206 6207 out: 6208 return ret; 6209 } 6210 6211 static int full_send_tree(struct send_ctx *sctx) 6212 { 6213 int ret; 6214 struct btrfs_root *send_root = sctx->send_root; 6215 struct btrfs_key key; 6216 struct btrfs_key found_key; 6217 struct btrfs_path *path; 6218 struct extent_buffer *eb; 6219 int slot; 6220 6221 path = alloc_path_for_send(); 6222 if (!path) 6223 return -ENOMEM; 6224 6225 key.objectid = BTRFS_FIRST_FREE_OBJECTID; 6226 key.type = BTRFS_INODE_ITEM_KEY; 6227 key.offset = 0; 6228 6229 ret = btrfs_search_slot_for_read(send_root, &key, path, 1, 0); 6230 if (ret < 0) 6231 goto out; 6232 if (ret) 6233 goto out_finish; 6234 6235 while (1) { 6236 eb = path->nodes[0]; 6237 slot = path->slots[0]; 6238 btrfs_item_key_to_cpu(eb, &found_key, slot); 6239 6240 ret = changed_cb(send_root, NULL, path, NULL, 6241 &found_key, BTRFS_COMPARE_TREE_NEW, sctx); 6242 if (ret < 0) 6243 goto out; 6244 6245 key.objectid = found_key.objectid; 6246 key.type = found_key.type; 6247 key.offset = found_key.offset + 1; 6248 6249 ret = btrfs_next_item(send_root, path); 6250 if (ret < 0) 6251 goto out; 6252 if (ret) { 6253 ret = 0; 6254 break; 6255 } 6256 } 6257 6258 out_finish: 6259 ret = finish_inode_if_needed(sctx, 1); 6260 6261 out: 6262 btrfs_free_path(path); 6263 return ret; 6264 } 6265 6266 static int send_subvol(struct send_ctx *sctx) 6267 { 6268 int ret; 6269 6270 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_STREAM_HEADER)) { 6271 ret = send_header(sctx); 6272 if (ret < 0) 6273 goto out; 6274 } 6275 6276 ret = send_subvol_begin(sctx); 6277 if (ret < 0) 6278 goto out; 6279 6280 if (sctx->parent_root) { 6281 ret = btrfs_compare_trees(sctx->send_root, sctx->parent_root, 6282 changed_cb, sctx); 6283 if (ret < 0) 6284 goto out; 6285 ret = finish_inode_if_needed(sctx, 1); 6286 if (ret < 0) 6287 goto out; 6288 } else { 6289 ret = full_send_tree(sctx); 6290 if (ret < 0) 6291 goto out; 6292 } 6293 6294 out: 6295 free_recorded_refs(sctx); 6296 return ret; 6297 } 6298 6299 /* 6300 * If orphan cleanup did remove any orphans from a root, it means the tree 6301 * was modified and therefore the commit root is not the same as the current 6302 * root anymore. This is a problem, because send uses the commit root and 6303 * therefore can see inode items that don't exist in the current root anymore, 6304 * and for example make calls to btrfs_iget, which will do tree lookups based 6305 * on the current root and not on the commit root. Those lookups will fail, 6306 * returning a -ESTALE error, and making send fail with that error. So make 6307 * sure a send does not see any orphans we have just removed, and that it will 6308 * see the same inodes regardless of whether a transaction commit happened 6309 * before it started (meaning that the commit root will be the same as the 6310 * current root) or not. 6311 */ 6312 static int ensure_commit_roots_uptodate(struct send_ctx *sctx) 6313 { 6314 int i; 6315 struct btrfs_trans_handle *trans = NULL; 6316 6317 again: 6318 if (sctx->parent_root && 6319 sctx->parent_root->node != sctx->parent_root->commit_root) 6320 goto commit_trans; 6321 6322 for (i = 0; i < sctx->clone_roots_cnt; i++) 6323 if (sctx->clone_roots[i].root->node != 6324 sctx->clone_roots[i].root->commit_root) 6325 goto commit_trans; 6326 6327 if (trans) 6328 return btrfs_end_transaction(trans); 6329 6330 return 0; 6331 6332 commit_trans: 6333 /* Use any root, all fs roots will get their commit roots updated. */ 6334 if (!trans) { 6335 trans = btrfs_join_transaction(sctx->send_root); 6336 if (IS_ERR(trans)) 6337 return PTR_ERR(trans); 6338 goto again; 6339 } 6340 6341 return btrfs_commit_transaction(trans); 6342 } 6343 6344 static void btrfs_root_dec_send_in_progress(struct btrfs_root* root) 6345 { 6346 spin_lock(&root->root_item_lock); 6347 root->send_in_progress--; 6348 /* 6349 * Not much left to do, we don't know why it's unbalanced and 6350 * can't blindly reset it to 0. 6351 */ 6352 if (root->send_in_progress < 0) 6353 btrfs_err(root->fs_info, 6354 "send_in_progres unbalanced %d root %llu", 6355 root->send_in_progress, root->root_key.objectid); 6356 spin_unlock(&root->root_item_lock); 6357 } 6358 6359 long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_) 6360 { 6361 int ret = 0; 6362 struct btrfs_root *send_root = BTRFS_I(file_inode(mnt_file))->root; 6363 struct btrfs_fs_info *fs_info = send_root->fs_info; 6364 struct btrfs_root *clone_root; 6365 struct btrfs_ioctl_send_args *arg = NULL; 6366 struct btrfs_key key; 6367 struct send_ctx *sctx = NULL; 6368 u32 i; 6369 u64 *clone_sources_tmp = NULL; 6370 int clone_sources_to_rollback = 0; 6371 unsigned alloc_size; 6372 int sort_clone_roots = 0; 6373 int index; 6374 6375 if (!capable(CAP_SYS_ADMIN)) 6376 return -EPERM; 6377 6378 /* 6379 * The subvolume must remain read-only during send, protect against 6380 * making it RW. This also protects against deletion. 6381 */ 6382 spin_lock(&send_root->root_item_lock); 6383 send_root->send_in_progress++; 6384 spin_unlock(&send_root->root_item_lock); 6385 6386 /* 6387 * This is done when we lookup the root, it should already be complete 6388 * by the time we get here. 6389 */ 6390 WARN_ON(send_root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE); 6391 6392 /* 6393 * Userspace tools do the checks and warn the user if it's 6394 * not RO. 6395 */ 6396 if (!btrfs_root_readonly(send_root)) { 6397 ret = -EPERM; 6398 goto out; 6399 } 6400 6401 arg = memdup_user(arg_, sizeof(*arg)); 6402 if (IS_ERR(arg)) { 6403 ret = PTR_ERR(arg); 6404 arg = NULL; 6405 goto out; 6406 } 6407 6408 /* 6409 * Check that we don't overflow at later allocations, we request 6410 * clone_sources_count + 1 items, and compare to unsigned long inside 6411 * access_ok. 6412 */ 6413 if (arg->clone_sources_count > 6414 ULONG_MAX / sizeof(struct clone_root) - 1) { 6415 ret = -EINVAL; 6416 goto out; 6417 } 6418 6419 if (!access_ok(VERIFY_READ, arg->clone_sources, 6420 sizeof(*arg->clone_sources) * 6421 arg->clone_sources_count)) { 6422 ret = -EFAULT; 6423 goto out; 6424 } 6425 6426 if (arg->flags & ~BTRFS_SEND_FLAG_MASK) { 6427 ret = -EINVAL; 6428 goto out; 6429 } 6430 6431 sctx = kzalloc(sizeof(struct send_ctx), GFP_KERNEL); 6432 if (!sctx) { 6433 ret = -ENOMEM; 6434 goto out; 6435 } 6436 6437 INIT_LIST_HEAD(&sctx->new_refs); 6438 INIT_LIST_HEAD(&sctx->deleted_refs); 6439 INIT_RADIX_TREE(&sctx->name_cache, GFP_KERNEL); 6440 INIT_LIST_HEAD(&sctx->name_cache_list); 6441 6442 sctx->flags = arg->flags; 6443 6444 sctx->send_filp = fget(arg->send_fd); 6445 if (!sctx->send_filp) { 6446 ret = -EBADF; 6447 goto out; 6448 } 6449 6450 sctx->send_root = send_root; 6451 /* 6452 * Unlikely but possible, if the subvolume is marked for deletion but 6453 * is slow to remove the directory entry, send can still be started 6454 */ 6455 if (btrfs_root_dead(sctx->send_root)) { 6456 ret = -EPERM; 6457 goto out; 6458 } 6459 6460 sctx->clone_roots_cnt = arg->clone_sources_count; 6461 6462 sctx->send_max_size = BTRFS_SEND_BUF_SIZE; 6463 sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL); 6464 if (!sctx->send_buf) { 6465 ret = -ENOMEM; 6466 goto out; 6467 } 6468 6469 sctx->read_buf = kvmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL); 6470 if (!sctx->read_buf) { 6471 ret = -ENOMEM; 6472 goto out; 6473 } 6474 6475 sctx->pending_dir_moves = RB_ROOT; 6476 sctx->waiting_dir_moves = RB_ROOT; 6477 sctx->orphan_dirs = RB_ROOT; 6478 6479 alloc_size = sizeof(struct clone_root) * (arg->clone_sources_count + 1); 6480 6481 sctx->clone_roots = kzalloc(alloc_size, GFP_KERNEL); 6482 if (!sctx->clone_roots) { 6483 ret = -ENOMEM; 6484 goto out; 6485 } 6486 6487 alloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources); 6488 6489 if (arg->clone_sources_count) { 6490 clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL); 6491 if (!clone_sources_tmp) { 6492 ret = -ENOMEM; 6493 goto out; 6494 } 6495 6496 ret = copy_from_user(clone_sources_tmp, arg->clone_sources, 6497 alloc_size); 6498 if (ret) { 6499 ret = -EFAULT; 6500 goto out; 6501 } 6502 6503 for (i = 0; i < arg->clone_sources_count; i++) { 6504 key.objectid = clone_sources_tmp[i]; 6505 key.type = BTRFS_ROOT_ITEM_KEY; 6506 key.offset = (u64)-1; 6507 6508 index = srcu_read_lock(&fs_info->subvol_srcu); 6509 6510 clone_root = btrfs_read_fs_root_no_name(fs_info, &key); 6511 if (IS_ERR(clone_root)) { 6512 srcu_read_unlock(&fs_info->subvol_srcu, index); 6513 ret = PTR_ERR(clone_root); 6514 goto out; 6515 } 6516 spin_lock(&clone_root->root_item_lock); 6517 if (!btrfs_root_readonly(clone_root) || 6518 btrfs_root_dead(clone_root)) { 6519 spin_unlock(&clone_root->root_item_lock); 6520 srcu_read_unlock(&fs_info->subvol_srcu, index); 6521 ret = -EPERM; 6522 goto out; 6523 } 6524 clone_root->send_in_progress++; 6525 spin_unlock(&clone_root->root_item_lock); 6526 srcu_read_unlock(&fs_info->subvol_srcu, index); 6527 6528 sctx->clone_roots[i].root = clone_root; 6529 clone_sources_to_rollback = i + 1; 6530 } 6531 kvfree(clone_sources_tmp); 6532 clone_sources_tmp = NULL; 6533 } 6534 6535 if (arg->parent_root) { 6536 key.objectid = arg->parent_root; 6537 key.type = BTRFS_ROOT_ITEM_KEY; 6538 key.offset = (u64)-1; 6539 6540 index = srcu_read_lock(&fs_info->subvol_srcu); 6541 6542 sctx->parent_root = btrfs_read_fs_root_no_name(fs_info, &key); 6543 if (IS_ERR(sctx->parent_root)) { 6544 srcu_read_unlock(&fs_info->subvol_srcu, index); 6545 ret = PTR_ERR(sctx->parent_root); 6546 goto out; 6547 } 6548 6549 spin_lock(&sctx->parent_root->root_item_lock); 6550 sctx->parent_root->send_in_progress++; 6551 if (!btrfs_root_readonly(sctx->parent_root) || 6552 btrfs_root_dead(sctx->parent_root)) { 6553 spin_unlock(&sctx->parent_root->root_item_lock); 6554 srcu_read_unlock(&fs_info->subvol_srcu, index); 6555 ret = -EPERM; 6556 goto out; 6557 } 6558 spin_unlock(&sctx->parent_root->root_item_lock); 6559 6560 srcu_read_unlock(&fs_info->subvol_srcu, index); 6561 } 6562 6563 /* 6564 * Clones from send_root are allowed, but only if the clone source 6565 * is behind the current send position. This is checked while searching 6566 * for possible clone sources. 6567 */ 6568 sctx->clone_roots[sctx->clone_roots_cnt++].root = sctx->send_root; 6569 6570 /* We do a bsearch later */ 6571 sort(sctx->clone_roots, sctx->clone_roots_cnt, 6572 sizeof(*sctx->clone_roots), __clone_root_cmp_sort, 6573 NULL); 6574 sort_clone_roots = 1; 6575 6576 ret = ensure_commit_roots_uptodate(sctx); 6577 if (ret) 6578 goto out; 6579 6580 current->journal_info = BTRFS_SEND_TRANS_STUB; 6581 ret = send_subvol(sctx); 6582 current->journal_info = NULL; 6583 if (ret < 0) 6584 goto out; 6585 6586 if (!(sctx->flags & BTRFS_SEND_FLAG_OMIT_END_CMD)) { 6587 ret = begin_cmd(sctx, BTRFS_SEND_C_END); 6588 if (ret < 0) 6589 goto out; 6590 ret = send_cmd(sctx); 6591 if (ret < 0) 6592 goto out; 6593 } 6594 6595 out: 6596 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)); 6597 while (sctx && !RB_EMPTY_ROOT(&sctx->pending_dir_moves)) { 6598 struct rb_node *n; 6599 struct pending_dir_move *pm; 6600 6601 n = rb_first(&sctx->pending_dir_moves); 6602 pm = rb_entry(n, struct pending_dir_move, node); 6603 while (!list_empty(&pm->list)) { 6604 struct pending_dir_move *pm2; 6605 6606 pm2 = list_first_entry(&pm->list, 6607 struct pending_dir_move, list); 6608 free_pending_move(sctx, pm2); 6609 } 6610 free_pending_move(sctx, pm); 6611 } 6612 6613 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)); 6614 while (sctx && !RB_EMPTY_ROOT(&sctx->waiting_dir_moves)) { 6615 struct rb_node *n; 6616 struct waiting_dir_move *dm; 6617 6618 n = rb_first(&sctx->waiting_dir_moves); 6619 dm = rb_entry(n, struct waiting_dir_move, node); 6620 rb_erase(&dm->node, &sctx->waiting_dir_moves); 6621 kfree(dm); 6622 } 6623 6624 WARN_ON(sctx && !ret && !RB_EMPTY_ROOT(&sctx->orphan_dirs)); 6625 while (sctx && !RB_EMPTY_ROOT(&sctx->orphan_dirs)) { 6626 struct rb_node *n; 6627 struct orphan_dir_info *odi; 6628 6629 n = rb_first(&sctx->orphan_dirs); 6630 odi = rb_entry(n, struct orphan_dir_info, node); 6631 free_orphan_dir_info(sctx, odi); 6632 } 6633 6634 if (sort_clone_roots) { 6635 for (i = 0; i < sctx->clone_roots_cnt; i++) 6636 btrfs_root_dec_send_in_progress( 6637 sctx->clone_roots[i].root); 6638 } else { 6639 for (i = 0; sctx && i < clone_sources_to_rollback; i++) 6640 btrfs_root_dec_send_in_progress( 6641 sctx->clone_roots[i].root); 6642 6643 btrfs_root_dec_send_in_progress(send_root); 6644 } 6645 if (sctx && !IS_ERR_OR_NULL(sctx->parent_root)) 6646 btrfs_root_dec_send_in_progress(sctx->parent_root); 6647 6648 kfree(arg); 6649 kvfree(clone_sources_tmp); 6650 6651 if (sctx) { 6652 if (sctx->send_filp) 6653 fput(sctx->send_filp); 6654 6655 kvfree(sctx->clone_roots); 6656 kvfree(sctx->send_buf); 6657 kvfree(sctx->read_buf); 6658 6659 name_cache_free(sctx); 6660 6661 kfree(sctx); 6662 } 6663 6664 return ret; 6665 } 6666