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