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