1d7e9812f55e1da2b56b2dea1376cac01bc89c50
[platform/kernel/linux-rpi.git] / fs / btrfs / tree-log.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2008 Oracle.  All rights reserved.
4  */
5
6 #include <linux/sched.h>
7 #include <linux/slab.h>
8 #include <linux/blkdev.h>
9 #include <linux/list_sort.h>
10 #include <linux/iversion.h>
11 #include "misc.h"
12 #include "ctree.h"
13 #include "tree-log.h"
14 #include "disk-io.h"
15 #include "locking.h"
16 #include "print-tree.h"
17 #include "backref.h"
18 #include "compression.h"
19 #include "qgroup.h"
20 #include "block-group.h"
21 #include "space-info.h"
22 #include "zoned.h"
23
24 /* magic values for the inode_only field in btrfs_log_inode:
25  *
26  * LOG_INODE_ALL means to log everything
27  * LOG_INODE_EXISTS means to log just enough to recreate the inode
28  * during log replay
29  */
30 enum {
31         LOG_INODE_ALL,
32         LOG_INODE_EXISTS,
33         LOG_OTHER_INODE,
34         LOG_OTHER_INODE_ALL,
35 };
36
37 /*
38  * directory trouble cases
39  *
40  * 1) on rename or unlink, if the inode being unlinked isn't in the fsync
41  * log, we must force a full commit before doing an fsync of the directory
42  * where the unlink was done.
43  * ---> record transid of last unlink/rename per directory
44  *
45  * mkdir foo/some_dir
46  * normal commit
47  * rename foo/some_dir foo2/some_dir
48  * mkdir foo/some_dir
49  * fsync foo/some_dir/some_file
50  *
51  * The fsync above will unlink the original some_dir without recording
52  * it in its new location (foo2).  After a crash, some_dir will be gone
53  * unless the fsync of some_file forces a full commit
54  *
55  * 2) we must log any new names for any file or dir that is in the fsync
56  * log. ---> check inode while renaming/linking.
57  *
58  * 2a) we must log any new names for any file or dir during rename
59  * when the directory they are being removed from was logged.
60  * ---> check inode and old parent dir during rename
61  *
62  *  2a is actually the more important variant.  With the extra logging
63  *  a crash might unlink the old name without recreating the new one
64  *
65  * 3) after a crash, we must go through any directories with a link count
66  * of zero and redo the rm -rf
67  *
68  * mkdir f1/foo
69  * normal commit
70  * rm -rf f1/foo
71  * fsync(f1)
72  *
73  * The directory f1 was fully removed from the FS, but fsync was never
74  * called on f1, only its parent dir.  After a crash the rm -rf must
75  * be replayed.  This must be able to recurse down the entire
76  * directory tree.  The inode link count fixup code takes care of the
77  * ugly details.
78  */
79
80 /*
81  * stages for the tree walking.  The first
82  * stage (0) is to only pin down the blocks we find
83  * the second stage (1) is to make sure that all the inodes
84  * we find in the log are created in the subvolume.
85  *
86  * The last stage is to deal with directories and links and extents
87  * and all the other fun semantics
88  */
89 enum {
90         LOG_WALK_PIN_ONLY,
91         LOG_WALK_REPLAY_INODES,
92         LOG_WALK_REPLAY_DIR_INDEX,
93         LOG_WALK_REPLAY_ALL,
94 };
95
96 static int btrfs_log_inode(struct btrfs_trans_handle *trans,
97                            struct btrfs_root *root, struct btrfs_inode *inode,
98                            int inode_only,
99                            struct btrfs_log_ctx *ctx);
100 static int link_to_fixup_dir(struct btrfs_trans_handle *trans,
101                              struct btrfs_root *root,
102                              struct btrfs_path *path, u64 objectid);
103 static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans,
104                                        struct btrfs_root *root,
105                                        struct btrfs_root *log,
106                                        struct btrfs_path *path,
107                                        u64 dirid, int del_all);
108 static void wait_log_commit(struct btrfs_root *root, int transid);
109
110 /*
111  * tree logging is a special write ahead log used to make sure that
112  * fsyncs and O_SYNCs can happen without doing full tree commits.
113  *
114  * Full tree commits are expensive because they require commonly
115  * modified blocks to be recowed, creating many dirty pages in the
116  * extent tree an 4x-6x higher write load than ext3.
117  *
118  * Instead of doing a tree commit on every fsync, we use the
119  * key ranges and transaction ids to find items for a given file or directory
120  * that have changed in this transaction.  Those items are copied into
121  * a special tree (one per subvolume root), that tree is written to disk
122  * and then the fsync is considered complete.
123  *
124  * After a crash, items are copied out of the log-tree back into the
125  * subvolume tree.  Any file data extents found are recorded in the extent
126  * allocation tree, and the log-tree freed.
127  *
128  * The log tree is read three times, once to pin down all the extents it is
129  * using in ram and once, once to create all the inodes logged in the tree
130  * and once to do all the other items.
131  */
132
133 /*
134  * start a sub transaction and setup the log tree
135  * this increments the log tree writer count to make the people
136  * syncing the tree wait for us to finish
137  */
138 static int start_log_trans(struct btrfs_trans_handle *trans,
139                            struct btrfs_root *root,
140                            struct btrfs_log_ctx *ctx)
141 {
142         struct btrfs_fs_info *fs_info = root->fs_info;
143         struct btrfs_root *tree_root = fs_info->tree_root;
144         const bool zoned = btrfs_is_zoned(fs_info);
145         int ret = 0;
146         bool created = false;
147
148         /*
149          * First check if the log root tree was already created. If not, create
150          * it before locking the root's log_mutex, just to keep lockdep happy.
151          */
152         if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &tree_root->state)) {
153                 mutex_lock(&tree_root->log_mutex);
154                 if (!fs_info->log_root_tree) {
155                         ret = btrfs_init_log_root_tree(trans, fs_info);
156                         if (!ret) {
157                                 set_bit(BTRFS_ROOT_HAS_LOG_TREE, &tree_root->state);
158                                 created = true;
159                         }
160                 }
161                 mutex_unlock(&tree_root->log_mutex);
162                 if (ret)
163                         return ret;
164         }
165
166         mutex_lock(&root->log_mutex);
167
168 again:
169         if (root->log_root) {
170                 int index = (root->log_transid + 1) % 2;
171
172                 if (btrfs_need_log_full_commit(trans)) {
173                         ret = -EAGAIN;
174                         goto out;
175                 }
176
177                 if (zoned && atomic_read(&root->log_commit[index])) {
178                         wait_log_commit(root, root->log_transid - 1);
179                         goto again;
180                 }
181
182                 if (!root->log_start_pid) {
183                         clear_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);
184                         root->log_start_pid = current->pid;
185                 } else if (root->log_start_pid != current->pid) {
186                         set_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);
187                 }
188         } else {
189                 /*
190                  * This means fs_info->log_root_tree was already created
191                  * for some other FS trees. Do the full commit not to mix
192                  * nodes from multiple log transactions to do sequential
193                  * writing.
194                  */
195                 if (zoned && !created) {
196                         ret = -EAGAIN;
197                         goto out;
198                 }
199
200                 ret = btrfs_add_log_tree(trans, root);
201                 if (ret)
202                         goto out;
203
204                 set_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);
205                 clear_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state);
206                 root->log_start_pid = current->pid;
207         }
208
209         atomic_inc(&root->log_writers);
210         if (ctx && !ctx->logging_new_name) {
211                 int index = root->log_transid % 2;
212                 list_add_tail(&ctx->list, &root->log_ctxs[index]);
213                 ctx->log_transid = root->log_transid;
214         }
215
216 out:
217         mutex_unlock(&root->log_mutex);
218         return ret;
219 }
220
221 /*
222  * returns 0 if there was a log transaction running and we were able
223  * to join, or returns -ENOENT if there were not transactions
224  * in progress
225  */
226 static int join_running_log_trans(struct btrfs_root *root)
227 {
228         const bool zoned = btrfs_is_zoned(root->fs_info);
229         int ret = -ENOENT;
230
231         if (!test_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state))
232                 return ret;
233
234         mutex_lock(&root->log_mutex);
235 again:
236         if (root->log_root) {
237                 int index = (root->log_transid + 1) % 2;
238
239                 ret = 0;
240                 if (zoned && atomic_read(&root->log_commit[index])) {
241                         wait_log_commit(root, root->log_transid - 1);
242                         goto again;
243                 }
244                 atomic_inc(&root->log_writers);
245         }
246         mutex_unlock(&root->log_mutex);
247         return ret;
248 }
249
250 /*
251  * This either makes the current running log transaction wait
252  * until you call btrfs_end_log_trans() or it makes any future
253  * log transactions wait until you call btrfs_end_log_trans()
254  */
255 void btrfs_pin_log_trans(struct btrfs_root *root)
256 {
257         atomic_inc(&root->log_writers);
258 }
259
260 /*
261  * indicate we're done making changes to the log tree
262  * and wake up anyone waiting to do a sync
263  */
264 void btrfs_end_log_trans(struct btrfs_root *root)
265 {
266         if (atomic_dec_and_test(&root->log_writers)) {
267                 /* atomic_dec_and_test implies a barrier */
268                 cond_wake_up_nomb(&root->log_writer_wait);
269         }
270 }
271
272 static int btrfs_write_tree_block(struct extent_buffer *buf)
273 {
274         return filemap_fdatawrite_range(buf->pages[0]->mapping, buf->start,
275                                         buf->start + buf->len - 1);
276 }
277
278 static void btrfs_wait_tree_block_writeback(struct extent_buffer *buf)
279 {
280         filemap_fdatawait_range(buf->pages[0]->mapping,
281                                 buf->start, buf->start + buf->len - 1);
282 }
283
284 /*
285  * the walk control struct is used to pass state down the chain when
286  * processing the log tree.  The stage field tells us which part
287  * of the log tree processing we are currently doing.  The others
288  * are state fields used for that specific part
289  */
290 struct walk_control {
291         /* should we free the extent on disk when done?  This is used
292          * at transaction commit time while freeing a log tree
293          */
294         int free;
295
296         /* should we write out the extent buffer?  This is used
297          * while flushing the log tree to disk during a sync
298          */
299         int write;
300
301         /* should we wait for the extent buffer io to finish?  Also used
302          * while flushing the log tree to disk for a sync
303          */
304         int wait;
305
306         /* pin only walk, we record which extents on disk belong to the
307          * log trees
308          */
309         int pin;
310
311         /* what stage of the replay code we're currently in */
312         int stage;
313
314         /*
315          * Ignore any items from the inode currently being processed. Needs
316          * to be set every time we find a BTRFS_INODE_ITEM_KEY and we are in
317          * the LOG_WALK_REPLAY_INODES stage.
318          */
319         bool ignore_cur_inode;
320
321         /* the root we are currently replaying */
322         struct btrfs_root *replay_dest;
323
324         /* the trans handle for the current replay */
325         struct btrfs_trans_handle *trans;
326
327         /* the function that gets used to process blocks we find in the
328          * tree.  Note the extent_buffer might not be up to date when it is
329          * passed in, and it must be checked or read if you need the data
330          * inside it
331          */
332         int (*process_func)(struct btrfs_root *log, struct extent_buffer *eb,
333                             struct walk_control *wc, u64 gen, int level);
334 };
335
336 /*
337  * process_func used to pin down extents, write them or wait on them
338  */
339 static int process_one_buffer(struct btrfs_root *log,
340                               struct extent_buffer *eb,
341                               struct walk_control *wc, u64 gen, int level)
342 {
343         struct btrfs_fs_info *fs_info = log->fs_info;
344         int ret = 0;
345
346         /*
347          * If this fs is mixed then we need to be able to process the leaves to
348          * pin down any logged extents, so we have to read the block.
349          */
350         if (btrfs_fs_incompat(fs_info, MIXED_GROUPS)) {
351                 ret = btrfs_read_buffer(eb, gen, level, NULL);
352                 if (ret)
353                         return ret;
354         }
355
356         if (wc->pin)
357                 ret = btrfs_pin_extent_for_log_replay(wc->trans, eb->start,
358                                                       eb->len);
359
360         if (!ret && btrfs_buffer_uptodate(eb, gen, 0)) {
361                 if (wc->pin && btrfs_header_level(eb) == 0)
362                         ret = btrfs_exclude_logged_extents(eb);
363                 if (wc->write)
364                         btrfs_write_tree_block(eb);
365                 if (wc->wait)
366                         btrfs_wait_tree_block_writeback(eb);
367         }
368         return ret;
369 }
370
371 /*
372  * Item overwrite used by replay and tree logging.  eb, slot and key all refer
373  * to the src data we are copying out.
374  *
375  * root is the tree we are copying into, and path is a scratch
376  * path for use in this function (it should be released on entry and
377  * will be released on exit).
378  *
379  * If the key is already in the destination tree the existing item is
380  * overwritten.  If the existing item isn't big enough, it is extended.
381  * If it is too large, it is truncated.
382  *
383  * If the key isn't in the destination yet, a new item is inserted.
384  */
385 static noinline int overwrite_item(struct btrfs_trans_handle *trans,
386                                    struct btrfs_root *root,
387                                    struct btrfs_path *path,
388                                    struct extent_buffer *eb, int slot,
389                                    struct btrfs_key *key)
390 {
391         int ret;
392         u32 item_size;
393         u64 saved_i_size = 0;
394         int save_old_i_size = 0;
395         unsigned long src_ptr;
396         unsigned long dst_ptr;
397         int overwrite_root = 0;
398         bool inode_item = key->type == BTRFS_INODE_ITEM_KEY;
399
400         if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID)
401                 overwrite_root = 1;
402
403         item_size = btrfs_item_size_nr(eb, slot);
404         src_ptr = btrfs_item_ptr_offset(eb, slot);
405
406         /* look for the key in the destination tree */
407         ret = btrfs_search_slot(NULL, root, key, path, 0, 0);
408         if (ret < 0)
409                 return ret;
410
411         if (ret == 0) {
412                 char *src_copy;
413                 char *dst_copy;
414                 u32 dst_size = btrfs_item_size_nr(path->nodes[0],
415                                                   path->slots[0]);
416                 if (dst_size != item_size)
417                         goto insert;
418
419                 if (item_size == 0) {
420                         btrfs_release_path(path);
421                         return 0;
422                 }
423                 dst_copy = kmalloc(item_size, GFP_NOFS);
424                 src_copy = kmalloc(item_size, GFP_NOFS);
425                 if (!dst_copy || !src_copy) {
426                         btrfs_release_path(path);
427                         kfree(dst_copy);
428                         kfree(src_copy);
429                         return -ENOMEM;
430                 }
431
432                 read_extent_buffer(eb, src_copy, src_ptr, item_size);
433
434                 dst_ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
435                 read_extent_buffer(path->nodes[0], dst_copy, dst_ptr,
436                                    item_size);
437                 ret = memcmp(dst_copy, src_copy, item_size);
438
439                 kfree(dst_copy);
440                 kfree(src_copy);
441                 /*
442                  * they have the same contents, just return, this saves
443                  * us from cowing blocks in the destination tree and doing
444                  * extra writes that may not have been done by a previous
445                  * sync
446                  */
447                 if (ret == 0) {
448                         btrfs_release_path(path);
449                         return 0;
450                 }
451
452                 /*
453                  * We need to load the old nbytes into the inode so when we
454                  * replay the extents we've logged we get the right nbytes.
455                  */
456                 if (inode_item) {
457                         struct btrfs_inode_item *item;
458                         u64 nbytes;
459                         u32 mode;
460
461                         item = btrfs_item_ptr(path->nodes[0], path->slots[0],
462                                               struct btrfs_inode_item);
463                         nbytes = btrfs_inode_nbytes(path->nodes[0], item);
464                         item = btrfs_item_ptr(eb, slot,
465                                               struct btrfs_inode_item);
466                         btrfs_set_inode_nbytes(eb, item, nbytes);
467
468                         /*
469                          * If this is a directory we need to reset the i_size to
470                          * 0 so that we can set it up properly when replaying
471                          * the rest of the items in this log.
472                          */
473                         mode = btrfs_inode_mode(eb, item);
474                         if (S_ISDIR(mode))
475                                 btrfs_set_inode_size(eb, item, 0);
476                 }
477         } else if (inode_item) {
478                 struct btrfs_inode_item *item;
479                 u32 mode;
480
481                 /*
482                  * New inode, set nbytes to 0 so that the nbytes comes out
483                  * properly when we replay the extents.
484                  */
485                 item = btrfs_item_ptr(eb, slot, struct btrfs_inode_item);
486                 btrfs_set_inode_nbytes(eb, item, 0);
487
488                 /*
489                  * If this is a directory we need to reset the i_size to 0 so
490                  * that we can set it up properly when replaying the rest of
491                  * the items in this log.
492                  */
493                 mode = btrfs_inode_mode(eb, item);
494                 if (S_ISDIR(mode))
495                         btrfs_set_inode_size(eb, item, 0);
496         }
497 insert:
498         btrfs_release_path(path);
499         /* try to insert the key into the destination tree */
500         path->skip_release_on_error = 1;
501         ret = btrfs_insert_empty_item(trans, root, path,
502                                       key, item_size);
503         path->skip_release_on_error = 0;
504
505         /* make sure any existing item is the correct size */
506         if (ret == -EEXIST || ret == -EOVERFLOW) {
507                 u32 found_size;
508                 found_size = btrfs_item_size_nr(path->nodes[0],
509                                                 path->slots[0]);
510                 if (found_size > item_size)
511                         btrfs_truncate_item(path, item_size, 1);
512                 else if (found_size < item_size)
513                         btrfs_extend_item(path, item_size - found_size);
514         } else if (ret) {
515                 return ret;
516         }
517         dst_ptr = btrfs_item_ptr_offset(path->nodes[0],
518                                         path->slots[0]);
519
520         /* don't overwrite an existing inode if the generation number
521          * was logged as zero.  This is done when the tree logging code
522          * is just logging an inode to make sure it exists after recovery.
523          *
524          * Also, don't overwrite i_size on directories during replay.
525          * log replay inserts and removes directory items based on the
526          * state of the tree found in the subvolume, and i_size is modified
527          * as it goes
528          */
529         if (key->type == BTRFS_INODE_ITEM_KEY && ret == -EEXIST) {
530                 struct btrfs_inode_item *src_item;
531                 struct btrfs_inode_item *dst_item;
532
533                 src_item = (struct btrfs_inode_item *)src_ptr;
534                 dst_item = (struct btrfs_inode_item *)dst_ptr;
535
536                 if (btrfs_inode_generation(eb, src_item) == 0) {
537                         struct extent_buffer *dst_eb = path->nodes[0];
538                         const u64 ino_size = btrfs_inode_size(eb, src_item);
539
540                         /*
541                          * For regular files an ino_size == 0 is used only when
542                          * logging that an inode exists, as part of a directory
543                          * fsync, and the inode wasn't fsynced before. In this
544                          * case don't set the size of the inode in the fs/subvol
545                          * tree, otherwise we would be throwing valid data away.
546                          */
547                         if (S_ISREG(btrfs_inode_mode(eb, src_item)) &&
548                             S_ISREG(btrfs_inode_mode(dst_eb, dst_item)) &&
549                             ino_size != 0)
550                                 btrfs_set_inode_size(dst_eb, dst_item, ino_size);
551                         goto no_copy;
552                 }
553
554                 if (overwrite_root &&
555                     S_ISDIR(btrfs_inode_mode(eb, src_item)) &&
556                     S_ISDIR(btrfs_inode_mode(path->nodes[0], dst_item))) {
557                         save_old_i_size = 1;
558                         saved_i_size = btrfs_inode_size(path->nodes[0],
559                                                         dst_item);
560                 }
561         }
562
563         copy_extent_buffer(path->nodes[0], eb, dst_ptr,
564                            src_ptr, item_size);
565
566         if (save_old_i_size) {
567                 struct btrfs_inode_item *dst_item;
568                 dst_item = (struct btrfs_inode_item *)dst_ptr;
569                 btrfs_set_inode_size(path->nodes[0], dst_item, saved_i_size);
570         }
571
572         /* make sure the generation is filled in */
573         if (key->type == BTRFS_INODE_ITEM_KEY) {
574                 struct btrfs_inode_item *dst_item;
575                 dst_item = (struct btrfs_inode_item *)dst_ptr;
576                 if (btrfs_inode_generation(path->nodes[0], dst_item) == 0) {
577                         btrfs_set_inode_generation(path->nodes[0], dst_item,
578                                                    trans->transid);
579                 }
580         }
581 no_copy:
582         btrfs_mark_buffer_dirty(path->nodes[0]);
583         btrfs_release_path(path);
584         return 0;
585 }
586
587 /*
588  * simple helper to read an inode off the disk from a given root
589  * This can only be called for subvolume roots and not for the log
590  */
591 static noinline struct inode *read_one_inode(struct btrfs_root *root,
592                                              u64 objectid)
593 {
594         struct inode *inode;
595
596         inode = btrfs_iget(root->fs_info->sb, objectid, root);
597         if (IS_ERR(inode))
598                 inode = NULL;
599         return inode;
600 }
601
602 /* replays a single extent in 'eb' at 'slot' with 'key' into the
603  * subvolume 'root'.  path is released on entry and should be released
604  * on exit.
605  *
606  * extents in the log tree have not been allocated out of the extent
607  * tree yet.  So, this completes the allocation, taking a reference
608  * as required if the extent already exists or creating a new extent
609  * if it isn't in the extent allocation tree yet.
610  *
611  * The extent is inserted into the file, dropping any existing extents
612  * from the file that overlap the new one.
613  */
614 static noinline int replay_one_extent(struct btrfs_trans_handle *trans,
615                                       struct btrfs_root *root,
616                                       struct btrfs_path *path,
617                                       struct extent_buffer *eb, int slot,
618                                       struct btrfs_key *key)
619 {
620         struct btrfs_drop_extents_args drop_args = { 0 };
621         struct btrfs_fs_info *fs_info = root->fs_info;
622         int found_type;
623         u64 extent_end;
624         u64 start = key->offset;
625         u64 nbytes = 0;
626         struct btrfs_file_extent_item *item;
627         struct inode *inode = NULL;
628         unsigned long size;
629         int ret = 0;
630
631         item = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item);
632         found_type = btrfs_file_extent_type(eb, item);
633
634         if (found_type == BTRFS_FILE_EXTENT_REG ||
635             found_type == BTRFS_FILE_EXTENT_PREALLOC) {
636                 nbytes = btrfs_file_extent_num_bytes(eb, item);
637                 extent_end = start + nbytes;
638
639                 /*
640                  * We don't add to the inodes nbytes if we are prealloc or a
641                  * hole.
642                  */
643                 if (btrfs_file_extent_disk_bytenr(eb, item) == 0)
644                         nbytes = 0;
645         } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
646                 size = btrfs_file_extent_ram_bytes(eb, item);
647                 nbytes = btrfs_file_extent_ram_bytes(eb, item);
648                 extent_end = ALIGN(start + size,
649                                    fs_info->sectorsize);
650         } else {
651                 ret = 0;
652                 goto out;
653         }
654
655         inode = read_one_inode(root, key->objectid);
656         if (!inode) {
657                 ret = -EIO;
658                 goto out;
659         }
660
661         /*
662          * first check to see if we already have this extent in the
663          * file.  This must be done before the btrfs_drop_extents run
664          * so we don't try to drop this extent.
665          */
666         ret = btrfs_lookup_file_extent(trans, root, path,
667                         btrfs_ino(BTRFS_I(inode)), start, 0);
668
669         if (ret == 0 &&
670             (found_type == BTRFS_FILE_EXTENT_REG ||
671              found_type == BTRFS_FILE_EXTENT_PREALLOC)) {
672                 struct btrfs_file_extent_item cmp1;
673                 struct btrfs_file_extent_item cmp2;
674                 struct btrfs_file_extent_item *existing;
675                 struct extent_buffer *leaf;
676
677                 leaf = path->nodes[0];
678                 existing = btrfs_item_ptr(leaf, path->slots[0],
679                                           struct btrfs_file_extent_item);
680
681                 read_extent_buffer(eb, &cmp1, (unsigned long)item,
682                                    sizeof(cmp1));
683                 read_extent_buffer(leaf, &cmp2, (unsigned long)existing,
684                                    sizeof(cmp2));
685
686                 /*
687                  * we already have a pointer to this exact extent,
688                  * we don't have to do anything
689                  */
690                 if (memcmp(&cmp1, &cmp2, sizeof(cmp1)) == 0) {
691                         btrfs_release_path(path);
692                         goto out;
693                 }
694         }
695         btrfs_release_path(path);
696
697         /* drop any overlapping extents */
698         drop_args.start = start;
699         drop_args.end = extent_end;
700         drop_args.drop_cache = true;
701         ret = btrfs_drop_extents(trans, root, BTRFS_I(inode), &drop_args);
702         if (ret)
703                 goto out;
704
705         if (found_type == BTRFS_FILE_EXTENT_REG ||
706             found_type == BTRFS_FILE_EXTENT_PREALLOC) {
707                 u64 offset;
708                 unsigned long dest_offset;
709                 struct btrfs_key ins;
710
711                 if (btrfs_file_extent_disk_bytenr(eb, item) == 0 &&
712                     btrfs_fs_incompat(fs_info, NO_HOLES))
713                         goto update_inode;
714
715                 ret = btrfs_insert_empty_item(trans, root, path, key,
716                                               sizeof(*item));
717                 if (ret)
718                         goto out;
719                 dest_offset = btrfs_item_ptr_offset(path->nodes[0],
720                                                     path->slots[0]);
721                 copy_extent_buffer(path->nodes[0], eb, dest_offset,
722                                 (unsigned long)item,  sizeof(*item));
723
724                 ins.objectid = btrfs_file_extent_disk_bytenr(eb, item);
725                 ins.offset = btrfs_file_extent_disk_num_bytes(eb, item);
726                 ins.type = BTRFS_EXTENT_ITEM_KEY;
727                 offset = key->offset - btrfs_file_extent_offset(eb, item);
728
729                 /*
730                  * Manually record dirty extent, as here we did a shallow
731                  * file extent item copy and skip normal backref update,
732                  * but modifying extent tree all by ourselves.
733                  * So need to manually record dirty extent for qgroup,
734                  * as the owner of the file extent changed from log tree
735                  * (doesn't affect qgroup) to fs/file tree(affects qgroup)
736                  */
737                 ret = btrfs_qgroup_trace_extent(trans,
738                                 btrfs_file_extent_disk_bytenr(eb, item),
739                                 btrfs_file_extent_disk_num_bytes(eb, item),
740                                 GFP_NOFS);
741                 if (ret < 0)
742                         goto out;
743
744                 if (ins.objectid > 0) {
745                         struct btrfs_ref ref = { 0 };
746                         u64 csum_start;
747                         u64 csum_end;
748                         LIST_HEAD(ordered_sums);
749
750                         /*
751                          * is this extent already allocated in the extent
752                          * allocation tree?  If so, just add a reference
753                          */
754                         ret = btrfs_lookup_data_extent(fs_info, ins.objectid,
755                                                 ins.offset);
756                         if (ret < 0) {
757                                 goto out;
758                         } else if (ret == 0) {
759                                 btrfs_init_generic_ref(&ref,
760                                                 BTRFS_ADD_DELAYED_REF,
761                                                 ins.objectid, ins.offset, 0);
762                                 btrfs_init_data_ref(&ref,
763                                                 root->root_key.objectid,
764                                                 key->objectid, offset, 0, false);
765                                 ret = btrfs_inc_extent_ref(trans, &ref);
766                                 if (ret)
767                                         goto out;
768                         } else {
769                                 /*
770                                  * insert the extent pointer in the extent
771                                  * allocation tree
772                                  */
773                                 ret = btrfs_alloc_logged_file_extent(trans,
774                                                 root->root_key.objectid,
775                                                 key->objectid, offset, &ins);
776                                 if (ret)
777                                         goto out;
778                         }
779                         btrfs_release_path(path);
780
781                         if (btrfs_file_extent_compression(eb, item)) {
782                                 csum_start = ins.objectid;
783                                 csum_end = csum_start + ins.offset;
784                         } else {
785                                 csum_start = ins.objectid +
786                                         btrfs_file_extent_offset(eb, item);
787                                 csum_end = csum_start +
788                                         btrfs_file_extent_num_bytes(eb, item);
789                         }
790
791                         ret = btrfs_lookup_csums_range(root->log_root,
792                                                 csum_start, csum_end - 1,
793                                                 &ordered_sums, 0);
794                         if (ret)
795                                 goto out;
796                         /*
797                          * Now delete all existing cums in the csum root that
798                          * cover our range. We do this because we can have an
799                          * extent that is completely referenced by one file
800                          * extent item and partially referenced by another
801                          * file extent item (like after using the clone or
802                          * extent_same ioctls). In this case if we end up doing
803                          * the replay of the one that partially references the
804                          * extent first, and we do not do the csum deletion
805                          * below, we can get 2 csum items in the csum tree that
806                          * overlap each other. For example, imagine our log has
807                          * the two following file extent items:
808                          *
809                          * key (257 EXTENT_DATA 409600)
810                          *     extent data disk byte 12845056 nr 102400
811                          *     extent data offset 20480 nr 20480 ram 102400
812                          *
813                          * key (257 EXTENT_DATA 819200)
814                          *     extent data disk byte 12845056 nr 102400
815                          *     extent data offset 0 nr 102400 ram 102400
816                          *
817                          * Where the second one fully references the 100K extent
818                          * that starts at disk byte 12845056, and the log tree
819                          * has a single csum item that covers the entire range
820                          * of the extent:
821                          *
822                          * key (EXTENT_CSUM EXTENT_CSUM 12845056) itemsize 100
823                          *
824                          * After the first file extent item is replayed, the
825                          * csum tree gets the following csum item:
826                          *
827                          * key (EXTENT_CSUM EXTENT_CSUM 12865536) itemsize 20
828                          *
829                          * Which covers the 20K sub-range starting at offset 20K
830                          * of our extent. Now when we replay the second file
831                          * extent item, if we do not delete existing csum items
832                          * that cover any of its blocks, we end up getting two
833                          * csum items in our csum tree that overlap each other:
834                          *
835                          * key (EXTENT_CSUM EXTENT_CSUM 12845056) itemsize 100
836                          * key (EXTENT_CSUM EXTENT_CSUM 12865536) itemsize 20
837                          *
838                          * Which is a problem, because after this anyone trying
839                          * to lookup up for the checksum of any block of our
840                          * extent starting at an offset of 40K or higher, will
841                          * end up looking at the second csum item only, which
842                          * does not contain the checksum for any block starting
843                          * at offset 40K or higher of our extent.
844                          */
845                         while (!list_empty(&ordered_sums)) {
846                                 struct btrfs_ordered_sum *sums;
847                                 sums = list_entry(ordered_sums.next,
848                                                 struct btrfs_ordered_sum,
849                                                 list);
850                                 if (!ret)
851                                         ret = btrfs_del_csums(trans,
852                                                               fs_info->csum_root,
853                                                               sums->bytenr,
854                                                               sums->len);
855                                 if (!ret)
856                                         ret = btrfs_csum_file_blocks(trans,
857                                                 fs_info->csum_root, sums);
858                                 list_del(&sums->list);
859                                 kfree(sums);
860                         }
861                         if (ret)
862                                 goto out;
863                 } else {
864                         btrfs_release_path(path);
865                 }
866         } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
867                 /* inline extents are easy, we just overwrite them */
868                 ret = overwrite_item(trans, root, path, eb, slot, key);
869                 if (ret)
870                         goto out;
871         }
872
873         ret = btrfs_inode_set_file_extent_range(BTRFS_I(inode), start,
874                                                 extent_end - start);
875         if (ret)
876                 goto out;
877
878 update_inode:
879         btrfs_update_inode_bytes(BTRFS_I(inode), nbytes, drop_args.bytes_found);
880         ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
881 out:
882         if (inode)
883                 iput(inode);
884         return ret;
885 }
886
887 /*
888  * when cleaning up conflicts between the directory names in the
889  * subvolume, directory names in the log and directory names in the
890  * inode back references, we may have to unlink inodes from directories.
891  *
892  * This is a helper function to do the unlink of a specific directory
893  * item
894  */
895 static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
896                                       struct btrfs_root *root,
897                                       struct btrfs_path *path,
898                                       struct btrfs_inode *dir,
899                                       struct btrfs_dir_item *di)
900 {
901         struct inode *inode;
902         char *name;
903         int name_len;
904         struct extent_buffer *leaf;
905         struct btrfs_key location;
906         int ret;
907
908         leaf = path->nodes[0];
909
910         btrfs_dir_item_key_to_cpu(leaf, di, &location);
911         name_len = btrfs_dir_name_len(leaf, di);
912         name = kmalloc(name_len, GFP_NOFS);
913         if (!name)
914                 return -ENOMEM;
915
916         read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len);
917         btrfs_release_path(path);
918
919         inode = read_one_inode(root, location.objectid);
920         if (!inode) {
921                 ret = -EIO;
922                 goto out;
923         }
924
925         ret = link_to_fixup_dir(trans, root, path, location.objectid);
926         if (ret)
927                 goto out;
928
929         ret = btrfs_unlink_inode(trans, root, dir, BTRFS_I(inode), name,
930                         name_len);
931         if (ret)
932                 goto out;
933         else
934                 ret = btrfs_run_delayed_items(trans);
935 out:
936         kfree(name);
937         iput(inode);
938         return ret;
939 }
940
941 /*
942  * See if a given name and sequence number found in an inode back reference are
943  * already in a directory and correctly point to this inode.
944  *
945  * Returns: < 0 on error, 0 if the directory entry does not exists and 1 if it
946  * exists.
947  */
948 static noinline int inode_in_dir(struct btrfs_root *root,
949                                  struct btrfs_path *path,
950                                  u64 dirid, u64 objectid, u64 index,
951                                  const char *name, int name_len)
952 {
953         struct btrfs_dir_item *di;
954         struct btrfs_key location;
955         int ret = 0;
956
957         di = btrfs_lookup_dir_index_item(NULL, root, path, dirid,
958                                          index, name, name_len, 0);
959         if (IS_ERR(di)) {
960                 ret = PTR_ERR(di);
961                 goto out;
962         } else if (di) {
963                 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);
964                 if (location.objectid != objectid)
965                         goto out;
966         } else {
967                 goto out;
968         }
969
970         btrfs_release_path(path);
971         di = btrfs_lookup_dir_item(NULL, root, path, dirid, name, name_len, 0);
972         if (IS_ERR(di)) {
973                 ret = PTR_ERR(di);
974                 goto out;
975         } else if (di) {
976                 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location);
977                 if (location.objectid == objectid)
978                         ret = 1;
979         }
980 out:
981         btrfs_release_path(path);
982         return ret;
983 }
984
985 /*
986  * helper function to check a log tree for a named back reference in
987  * an inode.  This is used to decide if a back reference that is
988  * found in the subvolume conflicts with what we find in the log.
989  *
990  * inode backreferences may have multiple refs in a single item,
991  * during replay we process one reference at a time, and we don't
992  * want to delete valid links to a file from the subvolume if that
993  * link is also in the log.
994  */
995 static noinline int backref_in_log(struct btrfs_root *log,
996                                    struct btrfs_key *key,
997                                    u64 ref_objectid,
998                                    const char *name, int namelen)
999 {
1000         struct btrfs_path *path;
1001         int ret;
1002
1003         path = btrfs_alloc_path();
1004         if (!path)
1005                 return -ENOMEM;
1006
1007         ret = btrfs_search_slot(NULL, log, key, path, 0, 0);
1008         if (ret < 0) {
1009                 goto out;
1010         } else if (ret == 1) {
1011                 ret = 0;
1012                 goto out;
1013         }
1014
1015         if (key->type == BTRFS_INODE_EXTREF_KEY)
1016                 ret = !!btrfs_find_name_in_ext_backref(path->nodes[0],
1017                                                        path->slots[0],
1018                                                        ref_objectid,
1019                                                        name, namelen);
1020         else
1021                 ret = !!btrfs_find_name_in_backref(path->nodes[0],
1022                                                    path->slots[0],
1023                                                    name, namelen);
1024 out:
1025         btrfs_free_path(path);
1026         return ret;
1027 }
1028
1029 static inline int __add_inode_ref(struct btrfs_trans_handle *trans,
1030                                   struct btrfs_root *root,
1031                                   struct btrfs_path *path,
1032                                   struct btrfs_root *log_root,
1033                                   struct btrfs_inode *dir,
1034                                   struct btrfs_inode *inode,
1035                                   u64 inode_objectid, u64 parent_objectid,
1036                                   u64 ref_index, char *name, int namelen,
1037                                   int *search_done)
1038 {
1039         int ret;
1040         char *victim_name;
1041         int victim_name_len;
1042         struct extent_buffer *leaf;
1043         struct btrfs_dir_item *di;
1044         struct btrfs_key search_key;
1045         struct btrfs_inode_extref *extref;
1046
1047 again:
1048         /* Search old style refs */
1049         search_key.objectid = inode_objectid;
1050         search_key.type = BTRFS_INODE_REF_KEY;
1051         search_key.offset = parent_objectid;
1052         ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
1053         if (ret == 0) {
1054                 struct btrfs_inode_ref *victim_ref;
1055                 unsigned long ptr;
1056                 unsigned long ptr_end;
1057
1058                 leaf = path->nodes[0];
1059
1060                 /* are we trying to overwrite a back ref for the root directory
1061                  * if so, just jump out, we're done
1062                  */
1063                 if (search_key.objectid == search_key.offset)
1064                         return 1;
1065
1066                 /* check all the names in this back reference to see
1067                  * if they are in the log.  if so, we allow them to stay
1068                  * otherwise they must be unlinked as a conflict
1069                  */
1070                 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
1071                 ptr_end = ptr + btrfs_item_size_nr(leaf, path->slots[0]);
1072                 while (ptr < ptr_end) {
1073                         victim_ref = (struct btrfs_inode_ref *)ptr;
1074                         victim_name_len = btrfs_inode_ref_name_len(leaf,
1075                                                                    victim_ref);
1076                         victim_name = kmalloc(victim_name_len, GFP_NOFS);
1077                         if (!victim_name)
1078                                 return -ENOMEM;
1079
1080                         read_extent_buffer(leaf, victim_name,
1081                                            (unsigned long)(victim_ref + 1),
1082                                            victim_name_len);
1083
1084                         ret = backref_in_log(log_root, &search_key,
1085                                              parent_objectid, victim_name,
1086                                              victim_name_len);
1087                         if (ret < 0) {
1088                                 kfree(victim_name);
1089                                 return ret;
1090                         } else if (!ret) {
1091                                 inc_nlink(&inode->vfs_inode);
1092                                 btrfs_release_path(path);
1093
1094                                 ret = btrfs_unlink_inode(trans, root, dir, inode,
1095                                                 victim_name, victim_name_len);
1096                                 kfree(victim_name);
1097                                 if (ret)
1098                                         return ret;
1099                                 ret = btrfs_run_delayed_items(trans);
1100                                 if (ret)
1101                                         return ret;
1102                                 *search_done = 1;
1103                                 goto again;
1104                         }
1105                         kfree(victim_name);
1106
1107                         ptr = (unsigned long)(victim_ref + 1) + victim_name_len;
1108                 }
1109
1110                 /*
1111                  * NOTE: we have searched root tree and checked the
1112                  * corresponding ref, it does not need to check again.
1113                  */
1114                 *search_done = 1;
1115         }
1116         btrfs_release_path(path);
1117
1118         /* Same search but for extended refs */
1119         extref = btrfs_lookup_inode_extref(NULL, root, path, name, namelen,
1120                                            inode_objectid, parent_objectid, 0,
1121                                            0);
1122         if (IS_ERR(extref)) {
1123                 return PTR_ERR(extref);
1124         } else if (extref) {
1125                 u32 item_size;
1126                 u32 cur_offset = 0;
1127                 unsigned long base;
1128                 struct inode *victim_parent;
1129
1130                 leaf = path->nodes[0];
1131
1132                 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1133                 base = btrfs_item_ptr_offset(leaf, path->slots[0]);
1134
1135                 while (cur_offset < item_size) {
1136                         extref = (struct btrfs_inode_extref *)(base + cur_offset);
1137
1138                         victim_name_len = btrfs_inode_extref_name_len(leaf, extref);
1139
1140                         if (btrfs_inode_extref_parent(leaf, extref) != parent_objectid)
1141                                 goto next;
1142
1143                         victim_name = kmalloc(victim_name_len, GFP_NOFS);
1144                         if (!victim_name)
1145                                 return -ENOMEM;
1146                         read_extent_buffer(leaf, victim_name, (unsigned long)&extref->name,
1147                                            victim_name_len);
1148
1149                         search_key.objectid = inode_objectid;
1150                         search_key.type = BTRFS_INODE_EXTREF_KEY;
1151                         search_key.offset = btrfs_extref_hash(parent_objectid,
1152                                                               victim_name,
1153                                                               victim_name_len);
1154                         ret = backref_in_log(log_root, &search_key,
1155                                              parent_objectid, victim_name,
1156                                              victim_name_len);
1157                         if (ret < 0) {
1158                                 kfree(victim_name);
1159                                 return ret;
1160                         } else if (!ret) {
1161                                 ret = -ENOENT;
1162                                 victim_parent = read_one_inode(root,
1163                                                 parent_objectid);
1164                                 if (victim_parent) {
1165                                         inc_nlink(&inode->vfs_inode);
1166                                         btrfs_release_path(path);
1167
1168                                         ret = btrfs_unlink_inode(trans, root,
1169                                                         BTRFS_I(victim_parent),
1170                                                         inode,
1171                                                         victim_name,
1172                                                         victim_name_len);
1173                                         if (!ret)
1174                                                 ret = btrfs_run_delayed_items(
1175                                                                   trans);
1176                                 }
1177                                 iput(victim_parent);
1178                                 kfree(victim_name);
1179                                 if (ret)
1180                                         return ret;
1181                                 *search_done = 1;
1182                                 goto again;
1183                         }
1184                         kfree(victim_name);
1185 next:
1186                         cur_offset += victim_name_len + sizeof(*extref);
1187                 }
1188                 *search_done = 1;
1189         }
1190         btrfs_release_path(path);
1191
1192         /* look for a conflicting sequence number */
1193         di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(dir),
1194                                          ref_index, name, namelen, 0);
1195         if (IS_ERR(di)) {
1196                 return PTR_ERR(di);
1197         } else if (di) {
1198                 ret = drop_one_dir_item(trans, root, path, dir, di);
1199                 if (ret)
1200                         return ret;
1201         }
1202         btrfs_release_path(path);
1203
1204         /* look for a conflicting name */
1205         di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(dir),
1206                                    name, namelen, 0);
1207         if (IS_ERR(di)) {
1208                 return PTR_ERR(di);
1209         } else if (di) {
1210                 ret = drop_one_dir_item(trans, root, path, dir, di);
1211                 if (ret)
1212                         return ret;
1213         }
1214         btrfs_release_path(path);
1215
1216         return 0;
1217 }
1218
1219 static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
1220                              u32 *namelen, char **name, u64 *index,
1221                              u64 *parent_objectid)
1222 {
1223         struct btrfs_inode_extref *extref;
1224
1225         extref = (struct btrfs_inode_extref *)ref_ptr;
1226
1227         *namelen = btrfs_inode_extref_name_len(eb, extref);
1228         *name = kmalloc(*namelen, GFP_NOFS);
1229         if (*name == NULL)
1230                 return -ENOMEM;
1231
1232         read_extent_buffer(eb, *name, (unsigned long)&extref->name,
1233                            *namelen);
1234
1235         if (index)
1236                 *index = btrfs_inode_extref_index(eb, extref);
1237         if (parent_objectid)
1238                 *parent_objectid = btrfs_inode_extref_parent(eb, extref);
1239
1240         return 0;
1241 }
1242
1243 static int ref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
1244                           u32 *namelen, char **name, u64 *index)
1245 {
1246         struct btrfs_inode_ref *ref;
1247
1248         ref = (struct btrfs_inode_ref *)ref_ptr;
1249
1250         *namelen = btrfs_inode_ref_name_len(eb, ref);
1251         *name = kmalloc(*namelen, GFP_NOFS);
1252         if (*name == NULL)
1253                 return -ENOMEM;
1254
1255         read_extent_buffer(eb, *name, (unsigned long)(ref + 1), *namelen);
1256
1257         if (index)
1258                 *index = btrfs_inode_ref_index(eb, ref);
1259
1260         return 0;
1261 }
1262
1263 /*
1264  * Take an inode reference item from the log tree and iterate all names from the
1265  * inode reference item in the subvolume tree with the same key (if it exists).
1266  * For any name that is not in the inode reference item from the log tree, do a
1267  * proper unlink of that name (that is, remove its entry from the inode
1268  * reference item and both dir index keys).
1269  */
1270 static int unlink_old_inode_refs(struct btrfs_trans_handle *trans,
1271                                  struct btrfs_root *root,
1272                                  struct btrfs_path *path,
1273                                  struct btrfs_inode *inode,
1274                                  struct extent_buffer *log_eb,
1275                                  int log_slot,
1276                                  struct btrfs_key *key)
1277 {
1278         int ret;
1279         unsigned long ref_ptr;
1280         unsigned long ref_end;
1281         struct extent_buffer *eb;
1282
1283 again:
1284         btrfs_release_path(path);
1285         ret = btrfs_search_slot(NULL, root, key, path, 0, 0);
1286         if (ret > 0) {
1287                 ret = 0;
1288                 goto out;
1289         }
1290         if (ret < 0)
1291                 goto out;
1292
1293         eb = path->nodes[0];
1294         ref_ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
1295         ref_end = ref_ptr + btrfs_item_size_nr(eb, path->slots[0]);
1296         while (ref_ptr < ref_end) {
1297                 char *name = NULL;
1298                 int namelen;
1299                 u64 parent_id;
1300
1301                 if (key->type == BTRFS_INODE_EXTREF_KEY) {
1302                         ret = extref_get_fields(eb, ref_ptr, &namelen, &name,
1303                                                 NULL, &parent_id);
1304                 } else {
1305                         parent_id = key->offset;
1306                         ret = ref_get_fields(eb, ref_ptr, &namelen, &name,
1307                                              NULL);
1308                 }
1309                 if (ret)
1310                         goto out;
1311
1312                 if (key->type == BTRFS_INODE_EXTREF_KEY)
1313                         ret = !!btrfs_find_name_in_ext_backref(log_eb, log_slot,
1314                                                                parent_id, name,
1315                                                                namelen);
1316                 else
1317                         ret = !!btrfs_find_name_in_backref(log_eb, log_slot,
1318                                                            name, namelen);
1319
1320                 if (!ret) {
1321                         struct inode *dir;
1322
1323                         btrfs_release_path(path);
1324                         dir = read_one_inode(root, parent_id);
1325                         if (!dir) {
1326                                 ret = -ENOENT;
1327                                 kfree(name);
1328                                 goto out;
1329                         }
1330                         ret = btrfs_unlink_inode(trans, root, BTRFS_I(dir),
1331                                                  inode, name, namelen);
1332                         kfree(name);
1333                         iput(dir);
1334                         /*
1335                          * Whenever we need to check if a name exists or not, we
1336                          * check the subvolume tree. So after an unlink we must
1337                          * run delayed items, so that future checks for a name
1338                          * during log replay see that the name does not exists
1339                          * anymore.
1340                          */
1341                         if (!ret)
1342                                 ret = btrfs_run_delayed_items(trans);
1343                         if (ret)
1344                                 goto out;
1345                         goto again;
1346                 }
1347
1348                 kfree(name);
1349                 ref_ptr += namelen;
1350                 if (key->type == BTRFS_INODE_EXTREF_KEY)
1351                         ref_ptr += sizeof(struct btrfs_inode_extref);
1352                 else
1353                         ref_ptr += sizeof(struct btrfs_inode_ref);
1354         }
1355         ret = 0;
1356  out:
1357         btrfs_release_path(path);
1358         return ret;
1359 }
1360
1361 static int btrfs_inode_ref_exists(struct inode *inode, struct inode *dir,
1362                                   const u8 ref_type, const char *name,
1363                                   const int namelen)
1364 {
1365         struct btrfs_key key;
1366         struct btrfs_path *path;
1367         const u64 parent_id = btrfs_ino(BTRFS_I(dir));
1368         int ret;
1369
1370         path = btrfs_alloc_path();
1371         if (!path)
1372                 return -ENOMEM;
1373
1374         key.objectid = btrfs_ino(BTRFS_I(inode));
1375         key.type = ref_type;
1376         if (key.type == BTRFS_INODE_REF_KEY)
1377                 key.offset = parent_id;
1378         else
1379                 key.offset = btrfs_extref_hash(parent_id, name, namelen);
1380
1381         ret = btrfs_search_slot(NULL, BTRFS_I(inode)->root, &key, path, 0, 0);
1382         if (ret < 0)
1383                 goto out;
1384         if (ret > 0) {
1385                 ret = 0;
1386                 goto out;
1387         }
1388         if (key.type == BTRFS_INODE_EXTREF_KEY)
1389                 ret = !!btrfs_find_name_in_ext_backref(path->nodes[0],
1390                                 path->slots[0], parent_id, name, namelen);
1391         else
1392                 ret = !!btrfs_find_name_in_backref(path->nodes[0], path->slots[0],
1393                                                    name, namelen);
1394
1395 out:
1396         btrfs_free_path(path);
1397         return ret;
1398 }
1399
1400 static int add_link(struct btrfs_trans_handle *trans, struct btrfs_root *root,
1401                     struct inode *dir, struct inode *inode, const char *name,
1402                     int namelen, u64 ref_index)
1403 {
1404         struct btrfs_dir_item *dir_item;
1405         struct btrfs_key key;
1406         struct btrfs_path *path;
1407         struct inode *other_inode = NULL;
1408         int ret;
1409
1410         path = btrfs_alloc_path();
1411         if (!path)
1412                 return -ENOMEM;
1413
1414         dir_item = btrfs_lookup_dir_item(NULL, root, path,
1415                                          btrfs_ino(BTRFS_I(dir)),
1416                                          name, namelen, 0);
1417         if (!dir_item) {
1418                 btrfs_release_path(path);
1419                 goto add_link;
1420         } else if (IS_ERR(dir_item)) {
1421                 ret = PTR_ERR(dir_item);
1422                 goto out;
1423         }
1424
1425         /*
1426          * Our inode's dentry collides with the dentry of another inode which is
1427          * in the log but not yet processed since it has a higher inode number.
1428          * So delete that other dentry.
1429          */
1430         btrfs_dir_item_key_to_cpu(path->nodes[0], dir_item, &key);
1431         btrfs_release_path(path);
1432         other_inode = read_one_inode(root, key.objectid);
1433         if (!other_inode) {
1434                 ret = -ENOENT;
1435                 goto out;
1436         }
1437         ret = btrfs_unlink_inode(trans, root, BTRFS_I(dir), BTRFS_I(other_inode),
1438                                  name, namelen);
1439         if (ret)
1440                 goto out;
1441         /*
1442          * If we dropped the link count to 0, bump it so that later the iput()
1443          * on the inode will not free it. We will fixup the link count later.
1444          */
1445         if (other_inode->i_nlink == 0)
1446                 inc_nlink(other_inode);
1447
1448         ret = btrfs_run_delayed_items(trans);
1449         if (ret)
1450                 goto out;
1451 add_link:
1452         ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
1453                              name, namelen, 0, ref_index);
1454 out:
1455         iput(other_inode);
1456         btrfs_free_path(path);
1457
1458         return ret;
1459 }
1460
1461 /*
1462  * replay one inode back reference item found in the log tree.
1463  * eb, slot and key refer to the buffer and key found in the log tree.
1464  * root is the destination we are replaying into, and path is for temp
1465  * use by this function.  (it should be released on return).
1466  */
1467 static noinline int add_inode_ref(struct btrfs_trans_handle *trans,
1468                                   struct btrfs_root *root,
1469                                   struct btrfs_root *log,
1470                                   struct btrfs_path *path,
1471                                   struct extent_buffer *eb, int slot,
1472                                   struct btrfs_key *key)
1473 {
1474         struct inode *dir = NULL;
1475         struct inode *inode = NULL;
1476         unsigned long ref_ptr;
1477         unsigned long ref_end;
1478         char *name = NULL;
1479         int namelen;
1480         int ret;
1481         int search_done = 0;
1482         int log_ref_ver = 0;
1483         u64 parent_objectid;
1484         u64 inode_objectid;
1485         u64 ref_index = 0;
1486         int ref_struct_size;
1487
1488         ref_ptr = btrfs_item_ptr_offset(eb, slot);
1489         ref_end = ref_ptr + btrfs_item_size_nr(eb, slot);
1490
1491         if (key->type == BTRFS_INODE_EXTREF_KEY) {
1492                 struct btrfs_inode_extref *r;
1493
1494                 ref_struct_size = sizeof(struct btrfs_inode_extref);
1495                 log_ref_ver = 1;
1496                 r = (struct btrfs_inode_extref *)ref_ptr;
1497                 parent_objectid = btrfs_inode_extref_parent(eb, r);
1498         } else {
1499                 ref_struct_size = sizeof(struct btrfs_inode_ref);
1500                 parent_objectid = key->offset;
1501         }
1502         inode_objectid = key->objectid;
1503
1504         /*
1505          * it is possible that we didn't log all the parent directories
1506          * for a given inode.  If we don't find the dir, just don't
1507          * copy the back ref in.  The link count fixup code will take
1508          * care of the rest
1509          */
1510         dir = read_one_inode(root, parent_objectid);
1511         if (!dir) {
1512                 ret = -ENOENT;
1513                 goto out;
1514         }
1515
1516         inode = read_one_inode(root, inode_objectid);
1517         if (!inode) {
1518                 ret = -EIO;
1519                 goto out;
1520         }
1521
1522         while (ref_ptr < ref_end) {
1523                 if (log_ref_ver) {
1524                         ret = extref_get_fields(eb, ref_ptr, &namelen, &name,
1525                                                 &ref_index, &parent_objectid);
1526                         /*
1527                          * parent object can change from one array
1528                          * item to another.
1529                          */
1530                         if (!dir)
1531                                 dir = read_one_inode(root, parent_objectid);
1532                         if (!dir) {
1533                                 ret = -ENOENT;
1534                                 goto out;
1535                         }
1536                 } else {
1537                         ret = ref_get_fields(eb, ref_ptr, &namelen, &name,
1538                                              &ref_index);
1539                 }
1540                 if (ret)
1541                         goto out;
1542
1543                 ret = inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)),
1544                                    btrfs_ino(BTRFS_I(inode)), ref_index,
1545                                    name, namelen);
1546                 if (ret < 0) {
1547                         goto out;
1548                 } else if (ret == 0) {
1549                         /*
1550                          * look for a conflicting back reference in the
1551                          * metadata. if we find one we have to unlink that name
1552                          * of the file before we add our new link.  Later on, we
1553                          * overwrite any existing back reference, and we don't
1554                          * want to create dangling pointers in the directory.
1555                          */
1556
1557                         if (!search_done) {
1558                                 ret = __add_inode_ref(trans, root, path, log,
1559                                                       BTRFS_I(dir),
1560                                                       BTRFS_I(inode),
1561                                                       inode_objectid,
1562                                                       parent_objectid,
1563                                                       ref_index, name, namelen,
1564                                                       &search_done);
1565                                 if (ret) {
1566                                         if (ret == 1)
1567                                                 ret = 0;
1568                                         goto out;
1569                                 }
1570                         }
1571
1572                         /*
1573                          * If a reference item already exists for this inode
1574                          * with the same parent and name, but different index,
1575                          * drop it and the corresponding directory index entries
1576                          * from the parent before adding the new reference item
1577                          * and dir index entries, otherwise we would fail with
1578                          * -EEXIST returned from btrfs_add_link() below.
1579                          */
1580                         ret = btrfs_inode_ref_exists(inode, dir, key->type,
1581                                                      name, namelen);
1582                         if (ret > 0) {
1583                                 ret = btrfs_unlink_inode(trans, root,
1584                                                          BTRFS_I(dir),
1585                                                          BTRFS_I(inode),
1586                                                          name, namelen);
1587                                 /*
1588                                  * If we dropped the link count to 0, bump it so
1589                                  * that later the iput() on the inode will not
1590                                  * free it. We will fixup the link count later.
1591                                  */
1592                                 if (!ret && inode->i_nlink == 0)
1593                                         inc_nlink(inode);
1594                                 /*
1595                                  * Whenever we need to check if a name exists or
1596                                  * not, we check the subvolume tree. So after an
1597                                  * unlink we must run delayed items, so that future
1598                                  * checks for a name during log replay see that the
1599                                  * name does not exists anymore.
1600                                  */
1601                                 if (!ret)
1602                                         ret = btrfs_run_delayed_items(trans);
1603                         }
1604                         if (ret < 0)
1605                                 goto out;
1606
1607                         /* insert our name */
1608                         ret = add_link(trans, root, dir, inode, name, namelen,
1609                                        ref_index);
1610                         if (ret)
1611                                 goto out;
1612
1613                         ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
1614                         if (ret)
1615                                 goto out;
1616                 }
1617                 /* Else, ret == 1, we already have a perfect match, we're done. */
1618
1619                 ref_ptr = (unsigned long)(ref_ptr + ref_struct_size) + namelen;
1620                 kfree(name);
1621                 name = NULL;
1622                 if (log_ref_ver) {
1623                         iput(dir);
1624                         dir = NULL;
1625                 }
1626         }
1627
1628         /*
1629          * Before we overwrite the inode reference item in the subvolume tree
1630          * with the item from the log tree, we must unlink all names from the
1631          * parent directory that are in the subvolume's tree inode reference
1632          * item, otherwise we end up with an inconsistent subvolume tree where
1633          * dir index entries exist for a name but there is no inode reference
1634          * item with the same name.
1635          */
1636         ret = unlink_old_inode_refs(trans, root, path, BTRFS_I(inode), eb, slot,
1637                                     key);
1638         if (ret)
1639                 goto out;
1640
1641         /* finally write the back reference in the inode */
1642         ret = overwrite_item(trans, root, path, eb, slot, key);
1643 out:
1644         btrfs_release_path(path);
1645         kfree(name);
1646         iput(dir);
1647         iput(inode);
1648         return ret;
1649 }
1650
1651 static int count_inode_extrefs(struct btrfs_root *root,
1652                 struct btrfs_inode *inode, struct btrfs_path *path)
1653 {
1654         int ret = 0;
1655         int name_len;
1656         unsigned int nlink = 0;
1657         u32 item_size;
1658         u32 cur_offset = 0;
1659         u64 inode_objectid = btrfs_ino(inode);
1660         u64 offset = 0;
1661         unsigned long ptr;
1662         struct btrfs_inode_extref *extref;
1663         struct extent_buffer *leaf;
1664
1665         while (1) {
1666                 ret = btrfs_find_one_extref(root, inode_objectid, offset, path,
1667                                             &extref, &offset);
1668                 if (ret)
1669                         break;
1670
1671                 leaf = path->nodes[0];
1672                 item_size = btrfs_item_size_nr(leaf, path->slots[0]);
1673                 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
1674                 cur_offset = 0;
1675
1676                 while (cur_offset < item_size) {
1677                         extref = (struct btrfs_inode_extref *) (ptr + cur_offset);
1678                         name_len = btrfs_inode_extref_name_len(leaf, extref);
1679
1680                         nlink++;
1681
1682                         cur_offset += name_len + sizeof(*extref);
1683                 }
1684
1685                 offset++;
1686                 btrfs_release_path(path);
1687         }
1688         btrfs_release_path(path);
1689
1690         if (ret < 0 && ret != -ENOENT)
1691                 return ret;
1692         return nlink;
1693 }
1694
1695 static int count_inode_refs(struct btrfs_root *root,
1696                         struct btrfs_inode *inode, struct btrfs_path *path)
1697 {
1698         int ret;
1699         struct btrfs_key key;
1700         unsigned int nlink = 0;
1701         unsigned long ptr;
1702         unsigned long ptr_end;
1703         int name_len;
1704         u64 ino = btrfs_ino(inode);
1705
1706         key.objectid = ino;
1707         key.type = BTRFS_INODE_REF_KEY;
1708         key.offset = (u64)-1;
1709
1710         while (1) {
1711                 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
1712                 if (ret < 0)
1713                         break;
1714                 if (ret > 0) {
1715                         if (path->slots[0] == 0)
1716                                 break;
1717                         path->slots[0]--;
1718                 }
1719 process_slot:
1720                 btrfs_item_key_to_cpu(path->nodes[0], &key,
1721                                       path->slots[0]);
1722                 if (key.objectid != ino ||
1723                     key.type != BTRFS_INODE_REF_KEY)
1724                         break;
1725                 ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
1726                 ptr_end = ptr + btrfs_item_size_nr(path->nodes[0],
1727                                                    path->slots[0]);
1728                 while (ptr < ptr_end) {
1729                         struct btrfs_inode_ref *ref;
1730
1731                         ref = (struct btrfs_inode_ref *)ptr;
1732                         name_len = btrfs_inode_ref_name_len(path->nodes[0],
1733                                                             ref);
1734                         ptr = (unsigned long)(ref + 1) + name_len;
1735                         nlink++;
1736                 }
1737
1738                 if (key.offset == 0)
1739                         break;
1740                 if (path->slots[0] > 0) {
1741                         path->slots[0]--;
1742                         goto process_slot;
1743                 }
1744                 key.offset--;
1745                 btrfs_release_path(path);
1746         }
1747         btrfs_release_path(path);
1748
1749         return nlink;
1750 }
1751
1752 /*
1753  * There are a few corners where the link count of the file can't
1754  * be properly maintained during replay.  So, instead of adding
1755  * lots of complexity to the log code, we just scan the backrefs
1756  * for any file that has been through replay.
1757  *
1758  * The scan will update the link count on the inode to reflect the
1759  * number of back refs found.  If it goes down to zero, the iput
1760  * will free the inode.
1761  */
1762 static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans,
1763                                            struct btrfs_root *root,
1764                                            struct inode *inode)
1765 {
1766         struct btrfs_path *path;
1767         int ret;
1768         u64 nlink = 0;
1769         u64 ino = btrfs_ino(BTRFS_I(inode));
1770
1771         path = btrfs_alloc_path();
1772         if (!path)
1773                 return -ENOMEM;
1774
1775         ret = count_inode_refs(root, BTRFS_I(inode), path);
1776         if (ret < 0)
1777                 goto out;
1778
1779         nlink = ret;
1780
1781         ret = count_inode_extrefs(root, BTRFS_I(inode), path);
1782         if (ret < 0)
1783                 goto out;
1784
1785         nlink += ret;
1786
1787         ret = 0;
1788
1789         if (nlink != inode->i_nlink) {
1790                 set_nlink(inode, nlink);
1791                 ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
1792                 if (ret)
1793                         goto out;
1794         }
1795         BTRFS_I(inode)->index_cnt = (u64)-1;
1796
1797         if (inode->i_nlink == 0) {
1798                 if (S_ISDIR(inode->i_mode)) {
1799                         ret = replay_dir_deletes(trans, root, NULL, path,
1800                                                  ino, 1);
1801                         if (ret)
1802                                 goto out;
1803                 }
1804                 ret = btrfs_insert_orphan_item(trans, root, ino);
1805                 if (ret == -EEXIST)
1806                         ret = 0;
1807         }
1808
1809 out:
1810         btrfs_free_path(path);
1811         return ret;
1812 }
1813
1814 static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,
1815                                             struct btrfs_root *root,
1816                                             struct btrfs_path *path)
1817 {
1818         int ret;
1819         struct btrfs_key key;
1820         struct inode *inode;
1821
1822         key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;
1823         key.type = BTRFS_ORPHAN_ITEM_KEY;
1824         key.offset = (u64)-1;
1825         while (1) {
1826                 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1827                 if (ret < 0)
1828                         break;
1829
1830                 if (ret == 1) {
1831                         ret = 0;
1832                         if (path->slots[0] == 0)
1833                                 break;
1834                         path->slots[0]--;
1835                 }
1836
1837                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
1838                 if (key.objectid != BTRFS_TREE_LOG_FIXUP_OBJECTID ||
1839                     key.type != BTRFS_ORPHAN_ITEM_KEY)
1840                         break;
1841
1842                 ret = btrfs_del_item(trans, root, path);
1843                 if (ret)
1844                         break;
1845
1846                 btrfs_release_path(path);
1847                 inode = read_one_inode(root, key.offset);
1848                 if (!inode) {
1849                         ret = -EIO;
1850                         break;
1851                 }
1852
1853                 ret = fixup_inode_link_count(trans, root, inode);
1854                 iput(inode);
1855                 if (ret)
1856                         break;
1857
1858                 /*
1859                  * fixup on a directory may create new entries,
1860                  * make sure we always look for the highset possible
1861                  * offset
1862                  */
1863                 key.offset = (u64)-1;
1864         }
1865         btrfs_release_path(path);
1866         return ret;
1867 }
1868
1869
1870 /*
1871  * record a given inode in the fixup dir so we can check its link
1872  * count when replay is done.  The link count is incremented here
1873  * so the inode won't go away until we check it
1874  */
1875 static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans,
1876                                       struct btrfs_root *root,
1877                                       struct btrfs_path *path,
1878                                       u64 objectid)
1879 {
1880         struct btrfs_key key;
1881         int ret = 0;
1882         struct inode *inode;
1883
1884         inode = read_one_inode(root, objectid);
1885         if (!inode)
1886                 return -EIO;
1887
1888         key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;
1889         key.type = BTRFS_ORPHAN_ITEM_KEY;
1890         key.offset = objectid;
1891
1892         ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
1893
1894         btrfs_release_path(path);
1895         if (ret == 0) {
1896                 if (!inode->i_nlink)
1897                         set_nlink(inode, 1);
1898                 else
1899                         inc_nlink(inode);
1900                 ret = btrfs_update_inode(trans, root, BTRFS_I(inode));
1901         } else if (ret == -EEXIST) {
1902                 ret = 0;
1903         }
1904         iput(inode);
1905
1906         return ret;
1907 }
1908
1909 /*
1910  * when replaying the log for a directory, we only insert names
1911  * for inodes that actually exist.  This means an fsync on a directory
1912  * does not implicitly fsync all the new files in it
1913  */
1914 static noinline int insert_one_name(struct btrfs_trans_handle *trans,
1915                                     struct btrfs_root *root,
1916                                     u64 dirid, u64 index,
1917                                     char *name, int name_len,
1918                                     struct btrfs_key *location)
1919 {
1920         struct inode *inode;
1921         struct inode *dir;
1922         int ret;
1923
1924         inode = read_one_inode(root, location->objectid);
1925         if (!inode)
1926                 return -ENOENT;
1927
1928         dir = read_one_inode(root, dirid);
1929         if (!dir) {
1930                 iput(inode);
1931                 return -EIO;
1932         }
1933
1934         ret = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode), name,
1935                         name_len, 1, index);
1936
1937         /* FIXME, put inode into FIXUP list */
1938
1939         iput(inode);
1940         iput(dir);
1941         return ret;
1942 }
1943
1944 /*
1945  * take a single entry in a log directory item and replay it into
1946  * the subvolume.
1947  *
1948  * if a conflicting item exists in the subdirectory already,
1949  * the inode it points to is unlinked and put into the link count
1950  * fix up tree.
1951  *
1952  * If a name from the log points to a file or directory that does
1953  * not exist in the FS, it is skipped.  fsyncs on directories
1954  * do not force down inodes inside that directory, just changes to the
1955  * names or unlinks in a directory.
1956  *
1957  * Returns < 0 on error, 0 if the name wasn't replayed (dentry points to a
1958  * non-existing inode) and 1 if the name was replayed.
1959  */
1960 static noinline int replay_one_name(struct btrfs_trans_handle *trans,
1961                                     struct btrfs_root *root,
1962                                     struct btrfs_path *path,
1963                                     struct extent_buffer *eb,
1964                                     struct btrfs_dir_item *di,
1965                                     struct btrfs_key *key)
1966 {
1967         char *name;
1968         int name_len;
1969         struct btrfs_dir_item *dst_di;
1970         struct btrfs_key found_key;
1971         struct btrfs_key log_key;
1972         struct inode *dir;
1973         u8 log_type;
1974         bool exists;
1975         int ret;
1976         bool update_size = (key->type == BTRFS_DIR_INDEX_KEY);
1977         bool name_added = false;
1978
1979         dir = read_one_inode(root, key->objectid);
1980         if (!dir)
1981                 return -EIO;
1982
1983         name_len = btrfs_dir_name_len(eb, di);
1984         name = kmalloc(name_len, GFP_NOFS);
1985         if (!name) {
1986                 ret = -ENOMEM;
1987                 goto out;
1988         }
1989
1990         log_type = btrfs_dir_type(eb, di);
1991         read_extent_buffer(eb, name, (unsigned long)(di + 1),
1992                    name_len);
1993
1994         btrfs_dir_item_key_to_cpu(eb, di, &log_key);
1995         ret = btrfs_lookup_inode(trans, root, path, &log_key, 0);
1996         btrfs_release_path(path);
1997         if (ret < 0)
1998                 goto out;
1999         exists = (ret == 0);
2000         ret = 0;
2001
2002         if (key->type == BTRFS_DIR_ITEM_KEY) {
2003                 dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid,
2004                                        name, name_len, 1);
2005         } else if (key->type == BTRFS_DIR_INDEX_KEY) {
2006                 dst_di = btrfs_lookup_dir_index_item(trans, root, path,
2007                                                      key->objectid,
2008                                                      key->offset, name,
2009                                                      name_len, 1);
2010         } else {
2011                 /* Corruption */
2012                 ret = -EINVAL;
2013                 goto out;
2014         }
2015
2016         if (IS_ERR(dst_di)) {
2017                 ret = PTR_ERR(dst_di);
2018                 goto out;
2019         } else if (!dst_di) {
2020                 /* we need a sequence number to insert, so we only
2021                  * do inserts for the BTRFS_DIR_INDEX_KEY types
2022                  */
2023                 if (key->type != BTRFS_DIR_INDEX_KEY)
2024                         goto out;
2025                 goto insert;
2026         }
2027
2028         btrfs_dir_item_key_to_cpu(path->nodes[0], dst_di, &found_key);
2029         /* the existing item matches the logged item */
2030         if (found_key.objectid == log_key.objectid &&
2031             found_key.type == log_key.type &&
2032             found_key.offset == log_key.offset &&
2033             btrfs_dir_type(path->nodes[0], dst_di) == log_type) {
2034                 update_size = false;
2035                 goto out;
2036         }
2037
2038         /*
2039          * don't drop the conflicting directory entry if the inode
2040          * for the new entry doesn't exist
2041          */
2042         if (!exists)
2043                 goto out;
2044
2045         ret = drop_one_dir_item(trans, root, path, BTRFS_I(dir), dst_di);
2046         if (ret)
2047                 goto out;
2048
2049         if (key->type == BTRFS_DIR_INDEX_KEY)
2050                 goto insert;
2051 out:
2052         btrfs_release_path(path);
2053         if (!ret && update_size) {
2054                 btrfs_i_size_write(BTRFS_I(dir), dir->i_size + name_len * 2);
2055                 ret = btrfs_update_inode(trans, root, BTRFS_I(dir));
2056         }
2057         kfree(name);
2058         iput(dir);
2059         if (!ret && name_added)
2060                 ret = 1;
2061         return ret;
2062
2063 insert:
2064         /*
2065          * Check if the inode reference exists in the log for the given name,
2066          * inode and parent inode
2067          */
2068         found_key.objectid = log_key.objectid;
2069         found_key.type = BTRFS_INODE_REF_KEY;
2070         found_key.offset = key->objectid;
2071         ret = backref_in_log(root->log_root, &found_key, 0, name, name_len);
2072         if (ret < 0) {
2073                 goto out;
2074         } else if (ret) {
2075                 /* The dentry will be added later. */
2076                 ret = 0;
2077                 update_size = false;
2078                 goto out;
2079         }
2080
2081         found_key.objectid = log_key.objectid;
2082         found_key.type = BTRFS_INODE_EXTREF_KEY;
2083         found_key.offset = key->objectid;
2084         ret = backref_in_log(root->log_root, &found_key, key->objectid, name,
2085                              name_len);
2086         if (ret < 0) {
2087                 goto out;
2088         } else if (ret) {
2089                 /* The dentry will be added later. */
2090                 ret = 0;
2091                 update_size = false;
2092                 goto out;
2093         }
2094         btrfs_release_path(path);
2095         ret = insert_one_name(trans, root, key->objectid, key->offset,
2096                               name, name_len, &log_key);
2097         if (ret && ret != -ENOENT && ret != -EEXIST)
2098                 goto out;
2099         if (!ret)
2100                 name_added = true;
2101         update_size = false;
2102         ret = 0;
2103         goto out;
2104 }
2105
2106 /*
2107  * find all the names in a directory item and reconcile them into
2108  * the subvolume.  Only BTRFS_DIR_ITEM_KEY types will have more than
2109  * one name in a directory item, but the same code gets used for
2110  * both directory index types
2111  */
2112 static noinline int replay_one_dir_item(struct btrfs_trans_handle *trans,
2113                                         struct btrfs_root *root,
2114                                         struct btrfs_path *path,
2115                                         struct extent_buffer *eb, int slot,
2116                                         struct btrfs_key *key)
2117 {
2118         int ret = 0;
2119         u32 item_size = btrfs_item_size_nr(eb, slot);
2120         struct btrfs_dir_item *di;
2121         int name_len;
2122         unsigned long ptr;
2123         unsigned long ptr_end;
2124         struct btrfs_path *fixup_path = NULL;
2125
2126         ptr = btrfs_item_ptr_offset(eb, slot);
2127         ptr_end = ptr + item_size;
2128         while (ptr < ptr_end) {
2129                 di = (struct btrfs_dir_item *)ptr;
2130                 name_len = btrfs_dir_name_len(eb, di);
2131                 ret = replay_one_name(trans, root, path, eb, di, key);
2132                 if (ret < 0)
2133                         break;
2134                 ptr = (unsigned long)(di + 1);
2135                 ptr += name_len;
2136
2137                 /*
2138                  * If this entry refers to a non-directory (directories can not
2139                  * have a link count > 1) and it was added in the transaction
2140                  * that was not committed, make sure we fixup the link count of
2141                  * the inode it the entry points to. Otherwise something like
2142                  * the following would result in a directory pointing to an
2143                  * inode with a wrong link that does not account for this dir
2144                  * entry:
2145                  *
2146                  * mkdir testdir
2147                  * touch testdir/foo
2148                  * touch testdir/bar
2149                  * sync
2150                  *
2151                  * ln testdir/bar testdir/bar_link
2152                  * ln testdir/foo testdir/foo_link
2153                  * xfs_io -c "fsync" testdir/bar
2154                  *
2155                  * <power failure>
2156                  *
2157                  * mount fs, log replay happens
2158                  *
2159                  * File foo would remain with a link count of 1 when it has two
2160                  * entries pointing to it in the directory testdir. This would
2161                  * make it impossible to ever delete the parent directory has
2162                  * it would result in stale dentries that can never be deleted.
2163                  */
2164                 if (ret == 1 && btrfs_dir_type(eb, di) != BTRFS_FT_DIR) {
2165                         struct btrfs_key di_key;
2166
2167                         if (!fixup_path) {
2168                                 fixup_path = btrfs_alloc_path();
2169                                 if (!fixup_path) {
2170                                         ret = -ENOMEM;
2171                                         break;
2172                                 }
2173                         }
2174
2175                         btrfs_dir_item_key_to_cpu(eb, di, &di_key);
2176                         ret = link_to_fixup_dir(trans, root, fixup_path,
2177                                                 di_key.objectid);
2178                         if (ret)
2179                                 break;
2180                 }
2181                 ret = 0;
2182         }
2183         btrfs_free_path(fixup_path);
2184         return ret;
2185 }
2186
2187 /*
2188  * directory replay has two parts.  There are the standard directory
2189  * items in the log copied from the subvolume, and range items
2190  * created in the log while the subvolume was logged.
2191  *
2192  * The range items tell us which parts of the key space the log
2193  * is authoritative for.  During replay, if a key in the subvolume
2194  * directory is in a logged range item, but not actually in the log
2195  * that means it was deleted from the directory before the fsync
2196  * and should be removed.
2197  */
2198 static noinline int find_dir_range(struct btrfs_root *root,
2199                                    struct btrfs_path *path,
2200                                    u64 dirid, int key_type,
2201                                    u64 *start_ret, u64 *end_ret)
2202 {
2203         struct btrfs_key key;
2204         u64 found_end;
2205         struct btrfs_dir_log_item *item;
2206         int ret;
2207         int nritems;
2208
2209         if (*start_ret == (u64)-1)
2210                 return 1;
2211
2212         key.objectid = dirid;
2213         key.type = key_type;
2214         key.offset = *start_ret;
2215
2216         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
2217         if (ret < 0)
2218                 goto out;
2219         if (ret > 0) {
2220                 if (path->slots[0] == 0)
2221                         goto out;
2222                 path->slots[0]--;
2223         }
2224         if (ret != 0)
2225                 btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
2226
2227         if (key.type != key_type || key.objectid != dirid) {
2228                 ret = 1;
2229                 goto next;
2230         }
2231         item = btrfs_item_ptr(path->nodes[0], path->slots[0],
2232                               struct btrfs_dir_log_item);
2233         found_end = btrfs_dir_log_end(path->nodes[0], item);
2234
2235         if (*start_ret >= key.offset && *start_ret <= found_end) {
2236                 ret = 0;
2237                 *start_ret = key.offset;
2238                 *end_ret = found_end;
2239                 goto out;
2240         }
2241         ret = 1;
2242 next:
2243         /* check the next slot in the tree to see if it is a valid item */
2244         nritems = btrfs_header_nritems(path->nodes[0]);
2245         path->slots[0]++;
2246         if (path->slots[0] >= nritems) {
2247                 ret = btrfs_next_leaf(root, path);
2248                 if (ret)
2249                         goto out;
2250         }
2251
2252         btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
2253
2254         if (key.type != key_type || key.objectid != dirid) {
2255                 ret = 1;
2256                 goto out;
2257         }
2258         item = btrfs_item_ptr(path->nodes[0], path->slots[0],
2259                               struct btrfs_dir_log_item);
2260         found_end = btrfs_dir_log_end(path->nodes[0], item);
2261         *start_ret = key.offset;
2262         *end_ret = found_end;
2263         ret = 0;
2264 out:
2265         btrfs_release_path(path);
2266         return ret;
2267 }
2268
2269 /*
2270  * this looks for a given directory item in the log.  If the directory
2271  * item is not in the log, the item is removed and the inode it points
2272  * to is unlinked
2273  */
2274 static noinline int check_item_in_log(struct btrfs_trans_handle *trans,
2275                                       struct btrfs_root *root,
2276                                       struct btrfs_root *log,
2277                                       struct btrfs_path *path,
2278                                       struct btrfs_path *log_path,
2279                                       struct inode *dir,
2280                                       struct btrfs_key *dir_key)
2281 {
2282         int ret;
2283         struct extent_buffer *eb;
2284         int slot;
2285         u32 item_size;
2286         struct btrfs_dir_item *di;
2287         struct btrfs_dir_item *log_di;
2288         int name_len;
2289         unsigned long ptr;
2290         unsigned long ptr_end;
2291         char *name;
2292         struct inode *inode;
2293         struct btrfs_key location;
2294
2295 again:
2296         eb = path->nodes[0];
2297         slot = path->slots[0];
2298         item_size = btrfs_item_size_nr(eb, slot);
2299         ptr = btrfs_item_ptr_offset(eb, slot);
2300         ptr_end = ptr + item_size;
2301         while (ptr < ptr_end) {
2302                 di = (struct btrfs_dir_item *)ptr;
2303                 name_len = btrfs_dir_name_len(eb, di);
2304                 name = kmalloc(name_len, GFP_NOFS);
2305                 if (!name) {
2306                         ret = -ENOMEM;
2307                         goto out;
2308                 }
2309                 read_extent_buffer(eb, name, (unsigned long)(di + 1),
2310                                   name_len);
2311                 log_di = NULL;
2312                 if (log && dir_key->type == BTRFS_DIR_ITEM_KEY) {
2313                         log_di = btrfs_lookup_dir_item(trans, log, log_path,
2314                                                        dir_key->objectid,
2315                                                        name, name_len, 0);
2316                 } else if (log && dir_key->type == BTRFS_DIR_INDEX_KEY) {
2317                         log_di = btrfs_lookup_dir_index_item(trans, log,
2318                                                      log_path,
2319                                                      dir_key->objectid,
2320                                                      dir_key->offset,
2321                                                      name, name_len, 0);
2322                 }
2323                 if (!log_di) {
2324                         btrfs_dir_item_key_to_cpu(eb, di, &location);
2325                         btrfs_release_path(path);
2326                         btrfs_release_path(log_path);
2327                         inode = read_one_inode(root, location.objectid);
2328                         if (!inode) {
2329                                 kfree(name);
2330                                 return -EIO;
2331                         }
2332
2333                         ret = link_to_fixup_dir(trans, root,
2334                                                 path, location.objectid);
2335                         if (ret) {
2336                                 kfree(name);
2337                                 iput(inode);
2338                                 goto out;
2339                         }
2340
2341                         inc_nlink(inode);
2342                         ret = btrfs_unlink_inode(trans, root, BTRFS_I(dir),
2343                                         BTRFS_I(inode), name, name_len);
2344                         if (!ret)
2345                                 ret = btrfs_run_delayed_items(trans);
2346                         kfree(name);
2347                         iput(inode);
2348                         if (ret)
2349                                 goto out;
2350
2351                         /* there might still be more names under this key
2352                          * check and repeat if required
2353                          */
2354                         ret = btrfs_search_slot(NULL, root, dir_key, path,
2355                                                 0, 0);
2356                         if (ret == 0)
2357                                 goto again;
2358                         ret = 0;
2359                         goto out;
2360                 } else if (IS_ERR(log_di)) {
2361                         kfree(name);
2362                         return PTR_ERR(log_di);
2363                 }
2364                 btrfs_release_path(log_path);
2365                 kfree(name);
2366
2367                 ptr = (unsigned long)(di + 1);
2368                 ptr += name_len;
2369         }
2370         ret = 0;
2371 out:
2372         btrfs_release_path(path);
2373         btrfs_release_path(log_path);
2374         return ret;
2375 }
2376
2377 static int replay_xattr_deletes(struct btrfs_trans_handle *trans,
2378                               struct btrfs_root *root,
2379                               struct btrfs_root *log,
2380                               struct btrfs_path *path,
2381                               const u64 ino)
2382 {
2383         struct btrfs_key search_key;
2384         struct btrfs_path *log_path;
2385         int i;
2386         int nritems;
2387         int ret;
2388
2389         log_path = btrfs_alloc_path();
2390         if (!log_path)
2391                 return -ENOMEM;
2392
2393         search_key.objectid = ino;
2394         search_key.type = BTRFS_XATTR_ITEM_KEY;
2395         search_key.offset = 0;
2396 again:
2397         ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
2398         if (ret < 0)
2399                 goto out;
2400 process_leaf:
2401         nritems = btrfs_header_nritems(path->nodes[0]);
2402         for (i = path->slots[0]; i < nritems; i++) {
2403                 struct btrfs_key key;
2404                 struct btrfs_dir_item *di;
2405                 struct btrfs_dir_item *log_di;
2406                 u32 total_size;
2407                 u32 cur;
2408
2409                 btrfs_item_key_to_cpu(path->nodes[0], &key, i);
2410                 if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY) {
2411                         ret = 0;
2412                         goto out;
2413                 }
2414
2415                 di = btrfs_item_ptr(path->nodes[0], i, struct btrfs_dir_item);
2416                 total_size = btrfs_item_size_nr(path->nodes[0], i);
2417                 cur = 0;
2418                 while (cur < total_size) {
2419                         u16 name_len = btrfs_dir_name_len(path->nodes[0], di);
2420                         u16 data_len = btrfs_dir_data_len(path->nodes[0], di);
2421                         u32 this_len = sizeof(*di) + name_len + data_len;
2422                         char *name;
2423
2424                         name = kmalloc(name_len, GFP_NOFS);
2425                         if (!name) {
2426                                 ret = -ENOMEM;
2427                                 goto out;
2428                         }
2429                         read_extent_buffer(path->nodes[0], name,
2430                                            (unsigned long)(di + 1), name_len);
2431
2432                         log_di = btrfs_lookup_xattr(NULL, log, log_path, ino,
2433                                                     name, name_len, 0);
2434                         btrfs_release_path(log_path);
2435                         if (!log_di) {
2436                                 /* Doesn't exist in log tree, so delete it. */
2437                                 btrfs_release_path(path);
2438                                 di = btrfs_lookup_xattr(trans, root, path, ino,
2439                                                         name, name_len, -1);
2440                                 kfree(name);
2441                                 if (IS_ERR(di)) {
2442                                         ret = PTR_ERR(di);
2443                                         goto out;
2444                                 }
2445                                 ASSERT(di);
2446                                 ret = btrfs_delete_one_dir_name(trans, root,
2447                                                                 path, di);
2448                                 if (ret)
2449                                         goto out;
2450                                 btrfs_release_path(path);
2451                                 search_key = key;
2452                                 goto again;
2453                         }
2454                         kfree(name);
2455                         if (IS_ERR(log_di)) {
2456                                 ret = PTR_ERR(log_di);
2457                                 goto out;
2458                         }
2459                         cur += this_len;
2460                         di = (struct btrfs_dir_item *)((char *)di + this_len);
2461                 }
2462         }
2463         ret = btrfs_next_leaf(root, path);
2464         if (ret > 0)
2465                 ret = 0;
2466         else if (ret == 0)
2467                 goto process_leaf;
2468 out:
2469         btrfs_free_path(log_path);
2470         btrfs_release_path(path);
2471         return ret;
2472 }
2473
2474
2475 /*
2476  * deletion replay happens before we copy any new directory items
2477  * out of the log or out of backreferences from inodes.  It
2478  * scans the log to find ranges of keys that log is authoritative for,
2479  * and then scans the directory to find items in those ranges that are
2480  * not present in the log.
2481  *
2482  * Anything we don't find in the log is unlinked and removed from the
2483  * directory.
2484  */
2485 static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans,
2486                                        struct btrfs_root *root,
2487                                        struct btrfs_root *log,
2488                                        struct btrfs_path *path,
2489                                        u64 dirid, int del_all)
2490 {
2491         u64 range_start;
2492         u64 range_end;
2493         int key_type = BTRFS_DIR_LOG_ITEM_KEY;
2494         int ret = 0;
2495         struct btrfs_key dir_key;
2496         struct btrfs_key found_key;
2497         struct btrfs_path *log_path;
2498         struct inode *dir;
2499
2500         dir_key.objectid = dirid;
2501         dir_key.type = BTRFS_DIR_ITEM_KEY;
2502         log_path = btrfs_alloc_path();
2503         if (!log_path)
2504                 return -ENOMEM;
2505
2506         dir = read_one_inode(root, dirid);
2507         /* it isn't an error if the inode isn't there, that can happen
2508          * because we replay the deletes before we copy in the inode item
2509          * from the log
2510          */
2511         if (!dir) {
2512                 btrfs_free_path(log_path);
2513                 return 0;
2514         }
2515 again:
2516         range_start = 0;
2517         range_end = 0;
2518         while (1) {
2519                 if (del_all)
2520                         range_end = (u64)-1;
2521                 else {
2522                         ret = find_dir_range(log, path, dirid, key_type,
2523                                              &range_start, &range_end);
2524                         if (ret < 0)
2525                                 goto out;
2526                         else if (ret > 0)
2527                                 break;
2528                 }
2529
2530                 dir_key.offset = range_start;
2531                 while (1) {
2532                         int nritems;
2533                         ret = btrfs_search_slot(NULL, root, &dir_key, path,
2534                                                 0, 0);
2535                         if (ret < 0)
2536                                 goto out;
2537
2538                         nritems = btrfs_header_nritems(path->nodes[0]);
2539                         if (path->slots[0] >= nritems) {
2540                                 ret = btrfs_next_leaf(root, path);
2541                                 if (ret == 1)
2542                                         break;
2543                                 else if (ret < 0)
2544                                         goto out;
2545                         }
2546                         btrfs_item_key_to_cpu(path->nodes[0], &found_key,
2547                                               path->slots[0]);
2548                         if (found_key.objectid != dirid ||
2549                             found_key.type != dir_key.type)
2550                                 goto next_type;
2551
2552                         if (found_key.offset > range_end)
2553                                 break;
2554
2555                         ret = check_item_in_log(trans, root, log, path,
2556                                                 log_path, dir,
2557                                                 &found_key);
2558                         if (ret)
2559                                 goto out;
2560                         if (found_key.offset == (u64)-1)
2561                                 break;
2562                         dir_key.offset = found_key.offset + 1;
2563                 }
2564                 btrfs_release_path(path);
2565                 if (range_end == (u64)-1)
2566                         break;
2567                 range_start = range_end + 1;
2568         }
2569
2570 next_type:
2571         ret = 0;
2572         if (key_type == BTRFS_DIR_LOG_ITEM_KEY) {
2573                 key_type = BTRFS_DIR_LOG_INDEX_KEY;
2574                 dir_key.type = BTRFS_DIR_INDEX_KEY;
2575                 btrfs_release_path(path);
2576                 goto again;
2577         }
2578 out:
2579         btrfs_release_path(path);
2580         btrfs_free_path(log_path);
2581         iput(dir);
2582         return ret;
2583 }
2584
2585 /*
2586  * the process_func used to replay items from the log tree.  This
2587  * gets called in two different stages.  The first stage just looks
2588  * for inodes and makes sure they are all copied into the subvolume.
2589  *
2590  * The second stage copies all the other item types from the log into
2591  * the subvolume.  The two stage approach is slower, but gets rid of
2592  * lots of complexity around inodes referencing other inodes that exist
2593  * only in the log (references come from either directory items or inode
2594  * back refs).
2595  */
2596 static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
2597                              struct walk_control *wc, u64 gen, int level)
2598 {
2599         int nritems;
2600         struct btrfs_path *path;
2601         struct btrfs_root *root = wc->replay_dest;
2602         struct btrfs_key key;
2603         int i;
2604         int ret;
2605
2606         ret = btrfs_read_buffer(eb, gen, level, NULL);
2607         if (ret)
2608                 return ret;
2609
2610         level = btrfs_header_level(eb);
2611
2612         if (level != 0)
2613                 return 0;
2614
2615         path = btrfs_alloc_path();
2616         if (!path)
2617                 return -ENOMEM;
2618
2619         nritems = btrfs_header_nritems(eb);
2620         for (i = 0; i < nritems; i++) {
2621                 btrfs_item_key_to_cpu(eb, &key, i);
2622
2623                 /* inode keys are done during the first stage */
2624                 if (key.type == BTRFS_INODE_ITEM_KEY &&
2625                     wc->stage == LOG_WALK_REPLAY_INODES) {
2626                         struct btrfs_inode_item *inode_item;
2627                         u32 mode;
2628
2629                         inode_item = btrfs_item_ptr(eb, i,
2630                                             struct btrfs_inode_item);
2631                         /*
2632                          * If we have a tmpfile (O_TMPFILE) that got fsync'ed
2633                          * and never got linked before the fsync, skip it, as
2634                          * replaying it is pointless since it would be deleted
2635                          * later. We skip logging tmpfiles, but it's always
2636                          * possible we are replaying a log created with a kernel
2637                          * that used to log tmpfiles.
2638                          */
2639                         if (btrfs_inode_nlink(eb, inode_item) == 0) {
2640                                 wc->ignore_cur_inode = true;
2641                                 continue;
2642                         } else {
2643                                 wc->ignore_cur_inode = false;
2644                         }
2645                         ret = replay_xattr_deletes(wc->trans, root, log,
2646                                                    path, key.objectid);
2647                         if (ret)
2648                                 break;
2649                         mode = btrfs_inode_mode(eb, inode_item);
2650                         if (S_ISDIR(mode)) {
2651                                 ret = replay_dir_deletes(wc->trans,
2652                                          root, log, path, key.objectid, 0);
2653                                 if (ret)
2654                                         break;
2655                         }
2656                         ret = overwrite_item(wc->trans, root, path,
2657                                              eb, i, &key);
2658                         if (ret)
2659                                 break;
2660
2661                         /*
2662                          * Before replaying extents, truncate the inode to its
2663                          * size. We need to do it now and not after log replay
2664                          * because before an fsync we can have prealloc extents
2665                          * added beyond the inode's i_size. If we did it after,
2666                          * through orphan cleanup for example, we would drop
2667                          * those prealloc extents just after replaying them.
2668                          */
2669                         if (S_ISREG(mode)) {
2670                                 struct btrfs_drop_extents_args drop_args = { 0 };
2671                                 struct inode *inode;
2672                                 u64 from;
2673
2674                                 inode = read_one_inode(root, key.objectid);
2675                                 if (!inode) {
2676                                         ret = -EIO;
2677                                         break;
2678                                 }
2679                                 from = ALIGN(i_size_read(inode),
2680                                              root->fs_info->sectorsize);
2681                                 drop_args.start = from;
2682                                 drop_args.end = (u64)-1;
2683                                 drop_args.drop_cache = true;
2684                                 ret = btrfs_drop_extents(wc->trans, root,
2685                                                          BTRFS_I(inode),
2686                                                          &drop_args);
2687                                 if (!ret) {
2688                                         inode_sub_bytes(inode,
2689                                                         drop_args.bytes_found);
2690                                         /* Update the inode's nbytes. */
2691                                         ret = btrfs_update_inode(wc->trans,
2692                                                         root, BTRFS_I(inode));
2693                                 }
2694                                 iput(inode);
2695                                 if (ret)
2696                                         break;
2697                         }
2698
2699                         ret = link_to_fixup_dir(wc->trans, root,
2700                                                 path, key.objectid);
2701                         if (ret)
2702                                 break;
2703                 }
2704
2705                 if (wc->ignore_cur_inode)
2706                         continue;
2707
2708                 if (key.type == BTRFS_DIR_INDEX_KEY &&
2709                     wc->stage == LOG_WALK_REPLAY_DIR_INDEX) {
2710                         ret = replay_one_dir_item(wc->trans, root, path,
2711                                                   eb, i, &key);
2712                         if (ret)
2713                                 break;
2714                 }
2715
2716                 if (wc->stage < LOG_WALK_REPLAY_ALL)
2717                         continue;
2718
2719                 /* these keys are simply copied */
2720                 if (key.type == BTRFS_XATTR_ITEM_KEY) {
2721                         ret = overwrite_item(wc->trans, root, path,
2722                                              eb, i, &key);
2723                         if (ret)
2724                                 break;
2725                 } else if (key.type == BTRFS_INODE_REF_KEY ||
2726                            key.type == BTRFS_INODE_EXTREF_KEY) {
2727                         ret = add_inode_ref(wc->trans, root, log, path,
2728                                             eb, i, &key);
2729                         if (ret && ret != -ENOENT)
2730                                 break;
2731                         ret = 0;
2732                 } else if (key.type == BTRFS_EXTENT_DATA_KEY) {
2733                         ret = replay_one_extent(wc->trans, root, path,
2734                                                 eb, i, &key);
2735                         if (ret)
2736                                 break;
2737                 } else if (key.type == BTRFS_DIR_ITEM_KEY) {
2738                         ret = replay_one_dir_item(wc->trans, root, path,
2739                                                   eb, i, &key);
2740                         if (ret)
2741                                 break;
2742                 }
2743         }
2744         btrfs_free_path(path);
2745         return ret;
2746 }
2747
2748 /*
2749  * Correctly adjust the reserved bytes occupied by a log tree extent buffer
2750  */
2751 static void unaccount_log_buffer(struct btrfs_fs_info *fs_info, u64 start)
2752 {
2753         struct btrfs_block_group *cache;
2754
2755         cache = btrfs_lookup_block_group(fs_info, start);
2756         if (!cache) {
2757                 btrfs_err(fs_info, "unable to find block group for %llu", start);
2758                 return;
2759         }
2760
2761         spin_lock(&cache->space_info->lock);
2762         spin_lock(&cache->lock);
2763         cache->reserved -= fs_info->nodesize;
2764         cache->space_info->bytes_reserved -= fs_info->nodesize;
2765         spin_unlock(&cache->lock);
2766         spin_unlock(&cache->space_info->lock);
2767
2768         btrfs_put_block_group(cache);
2769 }
2770
2771 static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
2772                                    struct btrfs_root *root,
2773                                    struct btrfs_path *path, int *level,
2774                                    struct walk_control *wc)
2775 {
2776         struct btrfs_fs_info *fs_info = root->fs_info;
2777         u64 bytenr;
2778         u64 ptr_gen;
2779         struct extent_buffer *next;
2780         struct extent_buffer *cur;
2781         u32 blocksize;
2782         int ret = 0;
2783
2784         while (*level > 0) {
2785                 struct btrfs_key first_key;
2786
2787                 cur = path->nodes[*level];
2788
2789                 WARN_ON(btrfs_header_level(cur) != *level);
2790
2791                 if (path->slots[*level] >=
2792                     btrfs_header_nritems(cur))
2793                         break;
2794
2795                 bytenr = btrfs_node_blockptr(cur, path->slots[*level]);
2796                 ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]);
2797                 btrfs_node_key_to_cpu(cur, &first_key, path->slots[*level]);
2798                 blocksize = fs_info->nodesize;
2799
2800                 next = btrfs_find_create_tree_block(fs_info, bytenr,
2801                                                     btrfs_header_owner(cur),
2802                                                     *level - 1);
2803                 if (IS_ERR(next))
2804                         return PTR_ERR(next);
2805
2806                 if (*level == 1) {
2807                         ret = wc->process_func(root, next, wc, ptr_gen,
2808                                                *level - 1);
2809                         if (ret) {
2810                                 free_extent_buffer(next);
2811                                 return ret;
2812                         }
2813
2814                         path->slots[*level]++;
2815                         if (wc->free) {
2816                                 ret = btrfs_read_buffer(next, ptr_gen,
2817                                                         *level - 1, &first_key);
2818                                 if (ret) {
2819                                         free_extent_buffer(next);
2820                                         return ret;
2821                                 }
2822
2823                                 if (trans) {
2824                                         btrfs_tree_lock(next);
2825                                         btrfs_clean_tree_block(next);
2826                                         btrfs_wait_tree_block_writeback(next);
2827                                         btrfs_tree_unlock(next);
2828                                         ret = btrfs_pin_reserved_extent(trans,
2829                                                         bytenr, blocksize);
2830                                         if (ret) {
2831                                                 free_extent_buffer(next);
2832                                                 return ret;
2833                                         }
2834                                         btrfs_redirty_list_add(
2835                                                 trans->transaction, next);
2836                                 } else {
2837                                         if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2838                                                 clear_extent_buffer_dirty(next);
2839                                         unaccount_log_buffer(fs_info, bytenr);
2840                                 }
2841                         }
2842                         free_extent_buffer(next);
2843                         continue;
2844                 }
2845                 ret = btrfs_read_buffer(next, ptr_gen, *level - 1, &first_key);
2846                 if (ret) {
2847                         free_extent_buffer(next);
2848                         return ret;
2849                 }
2850
2851                 if (path->nodes[*level-1])
2852                         free_extent_buffer(path->nodes[*level-1]);
2853                 path->nodes[*level-1] = next;
2854                 *level = btrfs_header_level(next);
2855                 path->slots[*level] = 0;
2856                 cond_resched();
2857         }
2858         path->slots[*level] = btrfs_header_nritems(path->nodes[*level]);
2859
2860         cond_resched();
2861         return 0;
2862 }
2863
2864 static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
2865                                  struct btrfs_root *root,
2866                                  struct btrfs_path *path, int *level,
2867                                  struct walk_control *wc)
2868 {
2869         struct btrfs_fs_info *fs_info = root->fs_info;
2870         int i;
2871         int slot;
2872         int ret;
2873
2874         for (i = *level; i < BTRFS_MAX_LEVEL - 1 && path->nodes[i]; i++) {
2875                 slot = path->slots[i];
2876                 if (slot + 1 < btrfs_header_nritems(path->nodes[i])) {
2877                         path->slots[i]++;
2878                         *level = i;
2879                         WARN_ON(*level == 0);
2880                         return 0;
2881                 } else {
2882                         ret = wc->process_func(root, path->nodes[*level], wc,
2883                                  btrfs_header_generation(path->nodes[*level]),
2884                                  *level);
2885                         if (ret)
2886                                 return ret;
2887
2888                         if (wc->free) {
2889                                 struct extent_buffer *next;
2890
2891                                 next = path->nodes[*level];
2892
2893                                 if (trans) {
2894                                         btrfs_tree_lock(next);
2895                                         btrfs_clean_tree_block(next);
2896                                         btrfs_wait_tree_block_writeback(next);
2897                                         btrfs_tree_unlock(next);
2898                                         ret = btrfs_pin_reserved_extent(trans,
2899                                                      path->nodes[*level]->start,
2900                                                      path->nodes[*level]->len);
2901                                         if (ret)
2902                                                 return ret;
2903                                         btrfs_redirty_list_add(trans->transaction,
2904                                                                next);
2905                                 } else {
2906                                         if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2907                                                 clear_extent_buffer_dirty(next);
2908
2909                                         unaccount_log_buffer(fs_info,
2910                                                 path->nodes[*level]->start);
2911                                 }
2912                         }
2913                         free_extent_buffer(path->nodes[*level]);
2914                         path->nodes[*level] = NULL;
2915                         *level = i + 1;
2916                 }
2917         }
2918         return 1;
2919 }
2920
2921 /*
2922  * drop the reference count on the tree rooted at 'snap'.  This traverses
2923  * the tree freeing any blocks that have a ref count of zero after being
2924  * decremented.
2925  */
2926 static int walk_log_tree(struct btrfs_trans_handle *trans,
2927                          struct btrfs_root *log, struct walk_control *wc)
2928 {
2929         struct btrfs_fs_info *fs_info = log->fs_info;
2930         int ret = 0;
2931         int wret;
2932         int level;
2933         struct btrfs_path *path;
2934         int orig_level;
2935
2936         path = btrfs_alloc_path();
2937         if (!path)
2938                 return -ENOMEM;
2939
2940         level = btrfs_header_level(log->node);
2941         orig_level = level;
2942         path->nodes[level] = log->node;
2943         atomic_inc(&log->node->refs);
2944         path->slots[level] = 0;
2945
2946         while (1) {
2947                 wret = walk_down_log_tree(trans, log, path, &level, wc);
2948                 if (wret > 0)
2949                         break;
2950                 if (wret < 0) {
2951                         ret = wret;
2952                         goto out;
2953                 }
2954
2955                 wret = walk_up_log_tree(trans, log, path, &level, wc);
2956                 if (wret > 0)
2957                         break;
2958                 if (wret < 0) {
2959                         ret = wret;
2960                         goto out;
2961                 }
2962         }
2963
2964         /* was the root node processed? if not, catch it here */
2965         if (path->nodes[orig_level]) {
2966                 ret = wc->process_func(log, path->nodes[orig_level], wc,
2967                          btrfs_header_generation(path->nodes[orig_level]),
2968                          orig_level);
2969                 if (ret)
2970                         goto out;
2971                 if (wc->free) {
2972                         struct extent_buffer *next;
2973
2974                         next = path->nodes[orig_level];
2975
2976                         if (trans) {
2977                                 btrfs_tree_lock(next);
2978                                 btrfs_clean_tree_block(next);
2979                                 btrfs_wait_tree_block_writeback(next);
2980                                 btrfs_tree_unlock(next);
2981                                 ret = btrfs_pin_reserved_extent(trans,
2982                                                 next->start, next->len);
2983                                 if (ret)
2984                                         goto out;
2985                                 btrfs_redirty_list_add(trans->transaction, next);
2986                         } else {
2987                                 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2988                                         clear_extent_buffer_dirty(next);
2989                                 unaccount_log_buffer(fs_info, next->start);
2990                         }
2991                 }
2992         }
2993
2994 out:
2995         btrfs_free_path(path);
2996         return ret;
2997 }
2998
2999 /*
3000  * helper function to update the item for a given subvolumes log root
3001  * in the tree of log roots
3002  */
3003 static int update_log_root(struct btrfs_trans_handle *trans,
3004                            struct btrfs_root *log,
3005                            struct btrfs_root_item *root_item)
3006 {
3007         struct btrfs_fs_info *fs_info = log->fs_info;
3008         int ret;
3009
3010         if (log->log_transid == 1) {
3011                 /* insert root item on the first sync */
3012                 ret = btrfs_insert_root(trans, fs_info->log_root_tree,
3013                                 &log->root_key, root_item);
3014         } else {
3015                 ret = btrfs_update_root(trans, fs_info->log_root_tree,
3016                                 &log->root_key, root_item);
3017         }
3018         return ret;
3019 }
3020
3021 static void wait_log_commit(struct btrfs_root *root, int transid)
3022 {
3023         DEFINE_WAIT(wait);
3024         int index = transid % 2;
3025
3026         /*
3027          * we only allow two pending log transactions at a time,
3028          * so we know that if ours is more than 2 older than the
3029          * current transaction, we're done
3030          */
3031         for (;;) {
3032                 prepare_to_wait(&root->log_commit_wait[index],
3033                                 &wait, TASK_UNINTERRUPTIBLE);
3034
3035                 if (!(root->log_transid_committed < transid &&
3036                       atomic_read(&root->log_commit[index])))
3037                         break;
3038
3039                 mutex_unlock(&root->log_mutex);
3040                 schedule();
3041                 mutex_lock(&root->log_mutex);
3042         }
3043         finish_wait(&root->log_commit_wait[index], &wait);
3044 }
3045
3046 static void wait_for_writer(struct btrfs_root *root)
3047 {
3048         DEFINE_WAIT(wait);
3049
3050         for (;;) {
3051                 prepare_to_wait(&root->log_writer_wait, &wait,
3052                                 TASK_UNINTERRUPTIBLE);
3053                 if (!atomic_read(&root->log_writers))
3054                         break;
3055
3056                 mutex_unlock(&root->log_mutex);
3057                 schedule();
3058                 mutex_lock(&root->log_mutex);
3059         }
3060         finish_wait(&root->log_writer_wait, &wait);
3061 }
3062
3063 static inline void btrfs_remove_log_ctx(struct btrfs_root *root,
3064                                         struct btrfs_log_ctx *ctx)
3065 {
3066         if (!ctx)
3067                 return;
3068
3069         mutex_lock(&root->log_mutex);
3070         list_del_init(&ctx->list);
3071         mutex_unlock(&root->log_mutex);
3072 }
3073
3074 /* 
3075  * Invoked in log mutex context, or be sure there is no other task which
3076  * can access the list.
3077  */
3078 static inline void btrfs_remove_all_log_ctxs(struct btrfs_root *root,
3079                                              int index, int error)
3080 {
3081         struct btrfs_log_ctx *ctx;
3082         struct btrfs_log_ctx *safe;
3083
3084         list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) {
3085                 list_del_init(&ctx->list);
3086                 ctx->log_ret = error;
3087         }
3088 }
3089
3090 /*
3091  * btrfs_sync_log does sends a given tree log down to the disk and
3092  * updates the super blocks to record it.  When this call is done,
3093  * you know that any inodes previously logged are safely on disk only
3094  * if it returns 0.
3095  *
3096  * Any other return value means you need to call btrfs_commit_transaction.
3097  * Some of the edge cases for fsyncing directories that have had unlinks
3098  * or renames done in the past mean that sometimes the only safe
3099  * fsync is to commit the whole FS.  When btrfs_sync_log returns -EAGAIN,
3100  * that has happened.
3101  */
3102 int btrfs_sync_log(struct btrfs_trans_handle *trans,
3103                    struct btrfs_root *root, struct btrfs_log_ctx *ctx)
3104 {
3105         int index1;
3106         int index2;
3107         int mark;
3108         int ret;
3109         struct btrfs_fs_info *fs_info = root->fs_info;
3110         struct btrfs_root *log = root->log_root;
3111         struct btrfs_root *log_root_tree = fs_info->log_root_tree;
3112         struct btrfs_root_item new_root_item;
3113         int log_transid = 0;
3114         struct btrfs_log_ctx root_log_ctx;
3115         struct blk_plug plug;
3116         u64 log_root_start;
3117         u64 log_root_level;
3118
3119         mutex_lock(&root->log_mutex);
3120         log_transid = ctx->log_transid;
3121         if (root->log_transid_committed >= log_transid) {
3122                 mutex_unlock(&root->log_mutex);
3123                 return ctx->log_ret;
3124         }
3125
3126         index1 = log_transid % 2;
3127         if (atomic_read(&root->log_commit[index1])) {
3128                 wait_log_commit(root, log_transid);
3129                 mutex_unlock(&root->log_mutex);
3130                 return ctx->log_ret;
3131         }
3132         ASSERT(log_transid == root->log_transid);
3133         atomic_set(&root->log_commit[index1], 1);
3134
3135         /* wait for previous tree log sync to complete */
3136         if (atomic_read(&root->log_commit[(index1 + 1) % 2]))
3137                 wait_log_commit(root, log_transid - 1);
3138
3139         while (1) {
3140                 int batch = atomic_read(&root->log_batch);
3141                 /* when we're on an ssd, just kick the log commit out */
3142                 if (!btrfs_test_opt(fs_info, SSD) &&
3143                     test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) {
3144                         mutex_unlock(&root->log_mutex);
3145                         schedule_timeout_uninterruptible(1);
3146                         mutex_lock(&root->log_mutex);
3147                 }
3148                 wait_for_writer(root);
3149                 if (batch == atomic_read(&root->log_batch))
3150                         break;
3151         }
3152
3153         /* bail out if we need to do a full commit */
3154         if (btrfs_need_log_full_commit(trans)) {
3155                 ret = -EAGAIN;
3156                 mutex_unlock(&root->log_mutex);
3157                 goto out;
3158         }
3159
3160         if (log_transid % 2 == 0)
3161                 mark = EXTENT_DIRTY;
3162         else
3163                 mark = EXTENT_NEW;
3164
3165         /* we start IO on  all the marked extents here, but we don't actually
3166          * wait for them until later.
3167          */
3168         blk_start_plug(&plug);
3169         ret = btrfs_write_marked_extents(fs_info, &log->dirty_log_pages, mark);
3170         /*
3171          * -EAGAIN happens when someone, e.g., a concurrent transaction
3172          *  commit, writes a dirty extent in this tree-log commit. This
3173          *  concurrent write will create a hole writing out the extents,
3174          *  and we cannot proceed on a zoned filesystem, requiring
3175          *  sequential writing. While we can bail out to a full commit
3176          *  here, but we can continue hoping the concurrent writing fills
3177          *  the hole.
3178          */
3179         if (ret == -EAGAIN && btrfs_is_zoned(fs_info))
3180                 ret = 0;
3181         if (ret) {
3182                 blk_finish_plug(&plug);
3183                 btrfs_abort_transaction(trans, ret);
3184                 btrfs_set_log_full_commit(trans);
3185                 mutex_unlock(&root->log_mutex);
3186                 goto out;
3187         }
3188
3189         /*
3190          * We _must_ update under the root->log_mutex in order to make sure we
3191          * have a consistent view of the log root we are trying to commit at
3192          * this moment.
3193          *
3194          * We _must_ copy this into a local copy, because we are not holding the
3195          * log_root_tree->log_mutex yet.  This is important because when we
3196          * commit the log_root_tree we must have a consistent view of the
3197          * log_root_tree when we update the super block to point at the
3198          * log_root_tree bytenr.  If we update the log_root_tree here we'll race
3199          * with the commit and possibly point at the new block which we may not
3200          * have written out.
3201          */
3202         btrfs_set_root_node(&log->root_item, log->node);
3203         memcpy(&new_root_item, &log->root_item, sizeof(new_root_item));
3204
3205         root->log_transid++;
3206         log->log_transid = root->log_transid;
3207         root->log_start_pid = 0;
3208         /*
3209          * IO has been started, blocks of the log tree have WRITTEN flag set
3210          * in their headers. new modifications of the log will be written to
3211          * new positions. so it's safe to allow log writers to go in.
3212          */
3213         mutex_unlock(&root->log_mutex);
3214
3215         if (btrfs_is_zoned(fs_info)) {
3216                 mutex_lock(&fs_info->tree_root->log_mutex);
3217                 if (!log_root_tree->node) {
3218                         ret = btrfs_alloc_log_tree_node(trans, log_root_tree);
3219                         if (ret) {
3220                                 mutex_unlock(&fs_info->tree_root->log_mutex);
3221                                 blk_finish_plug(&plug);
3222                                 goto out;
3223                         }
3224                 }
3225                 mutex_unlock(&fs_info->tree_root->log_mutex);
3226         }
3227
3228         btrfs_init_log_ctx(&root_log_ctx, NULL);
3229
3230         mutex_lock(&log_root_tree->log_mutex);
3231
3232         index2 = log_root_tree->log_transid % 2;
3233         list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);
3234         root_log_ctx.log_transid = log_root_tree->log_transid;
3235
3236         /*
3237          * Now we are safe to update the log_root_tree because we're under the
3238          * log_mutex, and we're a current writer so we're holding the commit
3239          * open until we drop the log_mutex.
3240          */
3241         ret = update_log_root(trans, log, &new_root_item);
3242         if (ret) {
3243                 if (!list_empty(&root_log_ctx.list))
3244                         list_del_init(&root_log_ctx.list);
3245
3246                 blk_finish_plug(&plug);
3247                 btrfs_set_log_full_commit(trans);
3248
3249                 if (ret != -ENOSPC) {
3250                         btrfs_abort_transaction(trans, ret);
3251                         mutex_unlock(&log_root_tree->log_mutex);
3252                         goto out;
3253                 }
3254                 btrfs_wait_tree_log_extents(log, mark);
3255                 mutex_unlock(&log_root_tree->log_mutex);
3256                 ret = -EAGAIN;
3257                 goto out;
3258         }
3259
3260         if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) {
3261                 blk_finish_plug(&plug);
3262                 list_del_init(&root_log_ctx.list);
3263                 mutex_unlock(&log_root_tree->log_mutex);
3264                 ret = root_log_ctx.log_ret;
3265                 goto out;
3266         }
3267
3268         index2 = root_log_ctx.log_transid % 2;
3269         if (atomic_read(&log_root_tree->log_commit[index2])) {
3270                 blk_finish_plug(&plug);
3271                 ret = btrfs_wait_tree_log_extents(log, mark);
3272                 wait_log_commit(log_root_tree,
3273                                 root_log_ctx.log_transid);
3274                 mutex_unlock(&log_root_tree->log_mutex);
3275                 if (!ret)
3276                         ret = root_log_ctx.log_ret;
3277                 goto out;
3278         }
3279         ASSERT(root_log_ctx.log_transid == log_root_tree->log_transid);
3280         atomic_set(&log_root_tree->log_commit[index2], 1);
3281
3282         if (atomic_read(&log_root_tree->log_commit[(index2 + 1) % 2])) {
3283                 wait_log_commit(log_root_tree,
3284                                 root_log_ctx.log_transid - 1);
3285         }
3286
3287         /*
3288          * now that we've moved on to the tree of log tree roots,
3289          * check the full commit flag again
3290          */
3291         if (btrfs_need_log_full_commit(trans)) {
3292                 blk_finish_plug(&plug);
3293                 btrfs_wait_tree_log_extents(log, mark);
3294                 mutex_unlock(&log_root_tree->log_mutex);
3295                 ret = -EAGAIN;
3296                 goto out_wake_log_root;
3297         }
3298
3299         ret = btrfs_write_marked_extents(fs_info,
3300                                          &log_root_tree->dirty_log_pages,
3301                                          EXTENT_DIRTY | EXTENT_NEW);
3302         blk_finish_plug(&plug);
3303         /*
3304          * As described above, -EAGAIN indicates a hole in the extents. We
3305          * cannot wait for these write outs since the waiting cause a
3306          * deadlock. Bail out to the full commit instead.
3307          */
3308         if (ret == -EAGAIN && btrfs_is_zoned(fs_info)) {
3309                 btrfs_set_log_full_commit(trans);
3310                 btrfs_wait_tree_log_extents(log, mark);
3311                 mutex_unlock(&log_root_tree->log_mutex);
3312                 goto out_wake_log_root;
3313         } else if (ret) {
3314                 btrfs_set_log_full_commit(trans);
3315                 btrfs_abort_transaction(trans, ret);
3316                 mutex_unlock(&log_root_tree->log_mutex);
3317                 goto out_wake_log_root;
3318         }
3319         ret = btrfs_wait_tree_log_extents(log, mark);
3320         if (!ret)
3321                 ret = btrfs_wait_tree_log_extents(log_root_tree,
3322                                                   EXTENT_NEW | EXTENT_DIRTY);
3323         if (ret) {
3324                 btrfs_set_log_full_commit(trans);
3325                 mutex_unlock(&log_root_tree->log_mutex);
3326                 goto out_wake_log_root;
3327         }
3328
3329         log_root_start = log_root_tree->node->start;
3330         log_root_level = btrfs_header_level(log_root_tree->node);
3331         log_root_tree->log_transid++;
3332         mutex_unlock(&log_root_tree->log_mutex);
3333
3334         /*
3335          * Here we are guaranteed that nobody is going to write the superblock
3336          * for the current transaction before us and that neither we do write
3337          * our superblock before the previous transaction finishes its commit
3338          * and writes its superblock, because:
3339          *
3340          * 1) We are holding a handle on the current transaction, so no body
3341          *    can commit it until we release the handle;
3342          *
3343          * 2) Before writing our superblock we acquire the tree_log_mutex, so
3344          *    if the previous transaction is still committing, and hasn't yet
3345          *    written its superblock, we wait for it to do it, because a
3346          *    transaction commit acquires the tree_log_mutex when the commit
3347          *    begins and releases it only after writing its superblock.
3348          */
3349         mutex_lock(&fs_info->tree_log_mutex);
3350
3351         /*
3352          * The previous transaction writeout phase could have failed, and thus
3353          * marked the fs in an error state.  We must not commit here, as we
3354          * could have updated our generation in the super_for_commit and
3355          * writing the super here would result in transid mismatches.  If there
3356          * is an error here just bail.
3357          */
3358         if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
3359                 ret = -EIO;
3360                 btrfs_set_log_full_commit(trans);
3361                 btrfs_abort_transaction(trans, ret);
3362                 mutex_unlock(&fs_info->tree_log_mutex);
3363                 goto out_wake_log_root;
3364         }
3365
3366         btrfs_set_super_log_root(fs_info->super_for_commit, log_root_start);
3367         btrfs_set_super_log_root_level(fs_info->super_for_commit, log_root_level);
3368         ret = write_all_supers(fs_info, 1);
3369         mutex_unlock(&fs_info->tree_log_mutex);
3370         if (ret) {
3371                 btrfs_set_log_full_commit(trans);
3372                 btrfs_abort_transaction(trans, ret);
3373                 goto out_wake_log_root;
3374         }
3375
3376         /*
3377          * We know there can only be one task here, since we have not yet set
3378          * root->log_commit[index1] to 0 and any task attempting to sync the
3379          * log must wait for the previous log transaction to commit if it's
3380          * still in progress or wait for the current log transaction commit if
3381          * someone else already started it. We use <= and not < because the
3382          * first log transaction has an ID of 0.
3383          */
3384         ASSERT(root->last_log_commit <= log_transid);
3385         root->last_log_commit = log_transid;
3386
3387 out_wake_log_root:
3388         mutex_lock(&log_root_tree->log_mutex);
3389         btrfs_remove_all_log_ctxs(log_root_tree, index2, ret);
3390
3391         log_root_tree->log_transid_committed++;
3392         atomic_set(&log_root_tree->log_commit[index2], 0);
3393         mutex_unlock(&log_root_tree->log_mutex);
3394
3395         /*
3396          * The barrier before waitqueue_active (in cond_wake_up) is needed so
3397          * all the updates above are seen by the woken threads. It might not be
3398          * necessary, but proving that seems to be hard.
3399          */
3400         cond_wake_up(&log_root_tree->log_commit_wait[index2]);
3401 out:
3402         mutex_lock(&root->log_mutex);
3403         btrfs_remove_all_log_ctxs(root, index1, ret);
3404         root->log_transid_committed++;
3405         atomic_set(&root->log_commit[index1], 0);
3406         mutex_unlock(&root->log_mutex);
3407
3408         /*
3409          * The barrier before waitqueue_active (in cond_wake_up) is needed so
3410          * all the updates above are seen by the woken threads. It might not be
3411          * necessary, but proving that seems to be hard.
3412          */
3413         cond_wake_up(&root->log_commit_wait[index1]);
3414         return ret;
3415 }
3416
3417 static void free_log_tree(struct btrfs_trans_handle *trans,
3418                           struct btrfs_root *log)
3419 {
3420         int ret;
3421         struct walk_control wc = {
3422                 .free = 1,
3423                 .process_func = process_one_buffer
3424         };
3425
3426         if (log->node) {
3427                 ret = walk_log_tree(trans, log, &wc);
3428                 if (ret) {
3429                         /*
3430                          * We weren't able to traverse the entire log tree, the
3431                          * typical scenario is getting an -EIO when reading an
3432                          * extent buffer of the tree, due to a previous writeback
3433                          * failure of it.
3434                          */
3435                         set_bit(BTRFS_FS_STATE_LOG_CLEANUP_ERROR,
3436                                 &log->fs_info->fs_state);
3437
3438                         /*
3439                          * Some extent buffers of the log tree may still be dirty
3440                          * and not yet written back to storage, because we may
3441                          * have updates to a log tree without syncing a log tree,
3442                          * such as during rename and link operations. So flush
3443                          * them out and wait for their writeback to complete, so
3444                          * that we properly cleanup their state and pages.
3445                          */
3446                         btrfs_write_marked_extents(log->fs_info,
3447                                                    &log->dirty_log_pages,
3448                                                    EXTENT_DIRTY | EXTENT_NEW);
3449                         btrfs_wait_tree_log_extents(log,
3450                                                     EXTENT_DIRTY | EXTENT_NEW);
3451
3452                         if (trans)
3453                                 btrfs_abort_transaction(trans, ret);
3454                         else
3455                                 btrfs_handle_fs_error(log->fs_info, ret, NULL);
3456                 }
3457         }
3458
3459         clear_extent_bits(&log->dirty_log_pages, 0, (u64)-1,
3460                           EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT);
3461         extent_io_tree_release(&log->log_csum_range);
3462
3463         btrfs_put_root(log);
3464 }
3465
3466 /*
3467  * free all the extents used by the tree log.  This should be called
3468  * at commit time of the full transaction
3469  */
3470 int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root)
3471 {
3472         if (root->log_root) {
3473                 free_log_tree(trans, root->log_root);
3474                 root->log_root = NULL;
3475                 clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);
3476         }
3477         return 0;
3478 }
3479
3480 int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
3481                              struct btrfs_fs_info *fs_info)
3482 {
3483         if (fs_info->log_root_tree) {
3484                 free_log_tree(trans, fs_info->log_root_tree);
3485                 fs_info->log_root_tree = NULL;
3486                 clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &fs_info->tree_root->state);
3487         }
3488         return 0;
3489 }
3490
3491 /*
3492  * Check if an inode was logged in the current transaction. This may often
3493  * return some false positives, because logged_trans is an in memory only field,
3494  * not persisted anywhere. This is meant to be used in contexts where a false
3495  * positive has no functional consequences.
3496  */
3497 static bool inode_logged(struct btrfs_trans_handle *trans,
3498                          struct btrfs_inode *inode)
3499 {
3500         if (inode->logged_trans == trans->transid)
3501                 return true;
3502
3503         /*
3504          * The inode's logged_trans is always 0 when we load it (because it is
3505          * not persisted in the inode item or elsewhere). So if it is 0, the
3506          * inode was last modified in the current transaction then the inode may
3507          * have been logged before in the current transaction, then evicted and
3508          * loaded again in the current transaction - or may have never been logged
3509          * in the current transaction, but since we can not be sure, we have to
3510          * assume it was, otherwise our callers can leave an inconsistent log.
3511          */
3512         if (inode->logged_trans == 0 &&
3513             inode->last_trans == trans->transid &&
3514             !test_bit(BTRFS_FS_LOG_RECOVERING, &trans->fs_info->flags))
3515                 return true;
3516
3517         return false;
3518 }
3519
3520 /*
3521  * If both a file and directory are logged, and unlinks or renames are
3522  * mixed in, we have a few interesting corners:
3523  *
3524  * create file X in dir Y
3525  * link file X to X.link in dir Y
3526  * fsync file X
3527  * unlink file X but leave X.link
3528  * fsync dir Y
3529  *
3530  * After a crash we would expect only X.link to exist.  But file X
3531  * didn't get fsync'd again so the log has back refs for X and X.link.
3532  *
3533  * We solve this by removing directory entries and inode backrefs from the
3534  * log when a file that was logged in the current transaction is
3535  * unlinked.  Any later fsync will include the updated log entries, and
3536  * we'll be able to reconstruct the proper directory items from backrefs.
3537  *
3538  * This optimizations allows us to avoid relogging the entire inode
3539  * or the entire directory.
3540  */
3541 int btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
3542                                  struct btrfs_root *root,
3543                                  const char *name, int name_len,
3544                                  struct btrfs_inode *dir, u64 index)
3545 {
3546         struct btrfs_root *log;
3547         struct btrfs_dir_item *di;
3548         struct btrfs_path *path;
3549         int ret;
3550         int err = 0;
3551         u64 dir_ino = btrfs_ino(dir);
3552
3553         if (!inode_logged(trans, dir))
3554                 return 0;
3555
3556         ret = join_running_log_trans(root);
3557         if (ret)
3558                 return 0;
3559
3560         mutex_lock(&dir->log_mutex);
3561
3562         log = root->log_root;
3563         path = btrfs_alloc_path();
3564         if (!path) {
3565                 err = -ENOMEM;
3566                 goto out_unlock;
3567         }
3568
3569         di = btrfs_lookup_dir_item(trans, log, path, dir_ino,
3570                                    name, name_len, -1);
3571         if (IS_ERR(di)) {
3572                 err = PTR_ERR(di);
3573                 goto fail;
3574         }
3575         if (di) {
3576                 ret = btrfs_delete_one_dir_name(trans, log, path, di);
3577                 if (ret) {
3578                         err = ret;
3579                         goto fail;
3580                 }
3581         }
3582         btrfs_release_path(path);
3583         di = btrfs_lookup_dir_index_item(trans, log, path, dir_ino,
3584                                          index, name, name_len, -1);
3585         if (IS_ERR(di)) {
3586                 err = PTR_ERR(di);
3587                 goto fail;
3588         }
3589         if (di) {
3590                 ret = btrfs_delete_one_dir_name(trans, log, path, di);
3591                 if (ret) {
3592                         err = ret;
3593                         goto fail;
3594                 }
3595         }
3596
3597         /*
3598          * We do not need to update the size field of the directory's inode item
3599          * because on log replay we update the field to reflect all existing
3600          * entries in the directory (see overwrite_item()).
3601          */
3602 fail:
3603         btrfs_free_path(path);
3604 out_unlock:
3605         mutex_unlock(&dir->log_mutex);
3606         if (err == -ENOSPC) {
3607                 btrfs_set_log_full_commit(trans);
3608                 err = 0;
3609         } else if (err < 0) {
3610                 btrfs_abort_transaction(trans, err);
3611         }
3612
3613         btrfs_end_log_trans(root);
3614
3615         return err;
3616 }
3617
3618 /* see comments for btrfs_del_dir_entries_in_log */
3619 int btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
3620                                struct btrfs_root *root,
3621                                const char *name, int name_len,
3622                                struct btrfs_inode *inode, u64 dirid)
3623 {
3624         struct btrfs_root *log;
3625         u64 index;
3626         int ret;
3627
3628         if (!inode_logged(trans, inode))
3629                 return 0;
3630
3631         ret = join_running_log_trans(root);
3632         if (ret)
3633                 return 0;
3634         log = root->log_root;
3635         mutex_lock(&inode->log_mutex);
3636
3637         ret = btrfs_del_inode_ref(trans, log, name, name_len, btrfs_ino(inode),
3638                                   dirid, &index);
3639         mutex_unlock(&inode->log_mutex);
3640         if (ret == -ENOSPC) {
3641                 btrfs_set_log_full_commit(trans);
3642                 ret = 0;
3643         } else if (ret < 0 && ret != -ENOENT)
3644                 btrfs_abort_transaction(trans, ret);
3645         btrfs_end_log_trans(root);
3646
3647         return ret;
3648 }
3649
3650 /*
3651  * creates a range item in the log for 'dirid'.  first_offset and
3652  * last_offset tell us which parts of the key space the log should
3653  * be considered authoritative for.
3654  */
3655 static noinline int insert_dir_log_key(struct btrfs_trans_handle *trans,
3656                                        struct btrfs_root *log,
3657                                        struct btrfs_path *path,
3658                                        int key_type, u64 dirid,
3659                                        u64 first_offset, u64 last_offset)
3660 {
3661         int ret;
3662         struct btrfs_key key;
3663         struct btrfs_dir_log_item *item;
3664
3665         key.objectid = dirid;
3666         key.offset = first_offset;
3667         if (key_type == BTRFS_DIR_ITEM_KEY)
3668                 key.type = BTRFS_DIR_LOG_ITEM_KEY;
3669         else
3670                 key.type = BTRFS_DIR_LOG_INDEX_KEY;
3671         ret = btrfs_insert_empty_item(trans, log, path, &key, sizeof(*item));
3672         if (ret)
3673                 return ret;
3674
3675         item = btrfs_item_ptr(path->nodes[0], path->slots[0],
3676                               struct btrfs_dir_log_item);
3677         btrfs_set_dir_log_end(path->nodes[0], item, last_offset);
3678         btrfs_mark_buffer_dirty(path->nodes[0]);
3679         btrfs_release_path(path);
3680         return 0;
3681 }
3682
3683 /*
3684  * log all the items included in the current transaction for a given
3685  * directory.  This also creates the range items in the log tree required
3686  * to replay anything deleted before the fsync
3687  */
3688 static noinline int log_dir_items(struct btrfs_trans_handle *trans,
3689                           struct btrfs_root *root, struct btrfs_inode *inode,
3690                           struct btrfs_path *path,
3691                           struct btrfs_path *dst_path, int key_type,
3692                           struct btrfs_log_ctx *ctx,
3693                           u64 min_offset, u64 *last_offset_ret)
3694 {
3695         struct btrfs_key min_key;
3696         struct btrfs_root *log = root->log_root;
3697         struct extent_buffer *src;
3698         int err = 0;
3699         int ret;
3700         int i;
3701         int nritems;
3702         u64 first_offset = min_offset;
3703         u64 last_offset = (u64)-1;
3704         u64 ino = btrfs_ino(inode);
3705
3706         log = root->log_root;
3707
3708         min_key.objectid = ino;
3709         min_key.type = key_type;
3710         min_key.offset = min_offset;
3711
3712         ret = btrfs_search_forward(root, &min_key, path, trans->transid);
3713
3714         /*
3715          * we didn't find anything from this transaction, see if there
3716          * is anything at all
3717          */
3718         if (ret != 0 || min_key.objectid != ino || min_key.type != key_type) {
3719                 min_key.objectid = ino;
3720                 min_key.type = key_type;
3721                 min_key.offset = (u64)-1;
3722                 btrfs_release_path(path);
3723                 ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);
3724                 if (ret < 0) {
3725                         btrfs_release_path(path);
3726                         return ret;
3727                 }
3728                 ret = btrfs_previous_item(root, path, ino, key_type);
3729
3730                 /* if ret == 0 there are items for this type,
3731                  * create a range to tell us the last key of this type.
3732                  * otherwise, there are no items in this directory after
3733                  * *min_offset, and we create a range to indicate that.
3734                  */
3735                 if (ret == 0) {
3736                         struct btrfs_key tmp;
3737                         btrfs_item_key_to_cpu(path->nodes[0], &tmp,
3738                                               path->slots[0]);
3739                         if (key_type == tmp.type)
3740                                 first_offset = max(min_offset, tmp.offset) + 1;
3741                 }
3742                 goto done;
3743         }
3744
3745         /* go backward to find any previous key */
3746         ret = btrfs_previous_item(root, path, ino, key_type);
3747         if (ret == 0) {
3748                 struct btrfs_key tmp;
3749                 btrfs_item_key_to_cpu(path->nodes[0], &tmp, path->slots[0]);
3750                 if (key_type == tmp.type) {
3751                         first_offset = tmp.offset;
3752                         ret = overwrite_item(trans, log, dst_path,
3753                                              path->nodes[0], path->slots[0],
3754                                              &tmp);
3755                         if (ret) {
3756                                 err = ret;
3757                                 goto done;
3758                         }
3759                 }
3760         }
3761         btrfs_release_path(path);
3762
3763         /*
3764          * Find the first key from this transaction again.  See the note for
3765          * log_new_dir_dentries, if we're logging a directory recursively we
3766          * won't be holding its i_mutex, which means we can modify the directory
3767          * while we're logging it.  If we remove an entry between our first
3768          * search and this search we'll not find the key again and can just
3769          * bail.
3770          */
3771 search:
3772         ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);
3773         if (ret != 0)
3774                 goto done;
3775
3776         /*
3777          * we have a block from this transaction, log every item in it
3778          * from our directory
3779          */
3780         while (1) {
3781                 struct btrfs_key tmp;
3782                 src = path->nodes[0];
3783                 nritems = btrfs_header_nritems(src);
3784                 for (i = path->slots[0]; i < nritems; i++) {
3785                         struct btrfs_dir_item *di;
3786
3787                         btrfs_item_key_to_cpu(src, &min_key, i);
3788
3789                         if (min_key.objectid != ino || min_key.type != key_type)
3790                                 goto done;
3791
3792                         if (need_resched()) {
3793                                 btrfs_release_path(path);
3794                                 cond_resched();
3795                                 goto search;
3796                         }
3797
3798                         ret = overwrite_item(trans, log, dst_path, src, i,
3799                                              &min_key);
3800                         if (ret) {
3801                                 err = ret;
3802                                 goto done;
3803                         }
3804
3805                         /*
3806                          * We must make sure that when we log a directory entry,
3807                          * the corresponding inode, after log replay, has a
3808                          * matching link count. For example:
3809                          *
3810                          * touch foo
3811                          * mkdir mydir
3812                          * sync
3813                          * ln foo mydir/bar
3814                          * xfs_io -c "fsync" mydir
3815                          * <crash>
3816                          * <mount fs and log replay>
3817                          *
3818                          * Would result in a fsync log that when replayed, our
3819                          * file inode would have a link count of 1, but we get
3820                          * two directory entries pointing to the same inode.
3821                          * After removing one of the names, it would not be
3822                          * possible to remove the other name, which resulted
3823                          * always in stale file handle errors, and would not
3824                          * be possible to rmdir the parent directory, since
3825                          * its i_size could never decrement to the value
3826                          * BTRFS_EMPTY_DIR_SIZE, resulting in -ENOTEMPTY errors.
3827                          */
3828                         di = btrfs_item_ptr(src, i, struct btrfs_dir_item);
3829                         btrfs_dir_item_key_to_cpu(src, di, &tmp);
3830                         if (ctx &&
3831                             (btrfs_dir_transid(src, di) == trans->transid ||
3832                              btrfs_dir_type(src, di) == BTRFS_FT_DIR) &&
3833                             tmp.type != BTRFS_ROOT_ITEM_KEY)
3834                                 ctx->log_new_dentries = true;
3835                 }
3836                 path->slots[0] = nritems;
3837
3838                 /*
3839                  * look ahead to the next item and see if it is also
3840                  * from this directory and from this transaction
3841                  */
3842                 ret = btrfs_next_leaf(root, path);
3843                 if (ret) {
3844                         if (ret == 1)
3845                                 last_offset = (u64)-1;
3846                         else
3847                                 err = ret;
3848                         goto done;
3849                 }
3850                 btrfs_item_key_to_cpu(path->nodes[0], &tmp, path->slots[0]);
3851                 if (tmp.objectid != ino || tmp.type != key_type) {
3852                         last_offset = (u64)-1;
3853                         goto done;
3854                 }
3855                 if (btrfs_header_generation(path->nodes[0]) != trans->transid) {
3856                         ret = overwrite_item(trans, log, dst_path,
3857                                              path->nodes[0], path->slots[0],
3858                                              &tmp);
3859                         if (ret)
3860                                 err = ret;
3861                         else
3862                                 last_offset = tmp.offset;
3863                         goto done;
3864                 }
3865         }
3866 done:
3867         btrfs_release_path(path);
3868         btrfs_release_path(dst_path);
3869
3870         if (err == 0) {
3871                 *last_offset_ret = last_offset;
3872                 /*
3873                  * insert the log range keys to indicate where the log
3874                  * is valid
3875                  */
3876                 ret = insert_dir_log_key(trans, log, path, key_type,
3877                                          ino, first_offset, last_offset);
3878                 if (ret)
3879                         err = ret;
3880         }
3881         return err;
3882 }
3883
3884 /*
3885  * logging directories is very similar to logging inodes, We find all the items
3886  * from the current transaction and write them to the log.
3887  *
3888  * The recovery code scans the directory in the subvolume, and if it finds a
3889  * key in the range logged that is not present in the log tree, then it means
3890  * that dir entry was unlinked during the transaction.
3891  *
3892  * In order for that scan to work, we must include one key smaller than
3893  * the smallest logged by this transaction and one key larger than the largest
3894  * key logged by this transaction.
3895  */
3896 static noinline int log_directory_changes(struct btrfs_trans_handle *trans,
3897                           struct btrfs_root *root, struct btrfs_inode *inode,
3898                           struct btrfs_path *path,
3899                           struct btrfs_path *dst_path,
3900                           struct btrfs_log_ctx *ctx)
3901 {
3902         u64 min_key;
3903         u64 max_key;
3904         int ret;
3905         int key_type = BTRFS_DIR_ITEM_KEY;
3906
3907 again:
3908         min_key = 0;
3909         max_key = 0;
3910         while (1) {
3911                 ret = log_dir_items(trans, root, inode, path, dst_path, key_type,
3912                                 ctx, min_key, &max_key);
3913                 if (ret)
3914                         return ret;
3915                 if (max_key == (u64)-1)
3916                         break;
3917                 min_key = max_key + 1;
3918         }
3919
3920         if (key_type == BTRFS_DIR_ITEM_KEY) {
3921                 key_type = BTRFS_DIR_INDEX_KEY;
3922                 goto again;
3923         }
3924         return 0;
3925 }
3926
3927 /*
3928  * a helper function to drop items from the log before we relog an
3929  * inode.  max_key_type indicates the highest item type to remove.
3930  * This cannot be run for file data extents because it does not
3931  * free the extents they point to.
3932  */
3933 static int drop_objectid_items(struct btrfs_trans_handle *trans,
3934                                   struct btrfs_root *log,
3935                                   struct btrfs_path *path,
3936                                   u64 objectid, int max_key_type)
3937 {
3938         int ret;
3939         struct btrfs_key key;
3940         struct btrfs_key found_key;
3941         int start_slot;
3942
3943         key.objectid = objectid;
3944         key.type = max_key_type;
3945         key.offset = (u64)-1;
3946
3947         while (1) {
3948                 ret = btrfs_search_slot(trans, log, &key, path, -1, 1);
3949                 BUG_ON(ret == 0); /* Logic error */
3950                 if (ret < 0)
3951                         break;
3952
3953                 if (path->slots[0] == 0)
3954                         break;
3955
3956                 path->slots[0]--;
3957                 btrfs_item_key_to_cpu(path->nodes[0], &found_key,
3958                                       path->slots[0]);
3959
3960                 if (found_key.objectid != objectid)
3961                         break;
3962
3963                 found_key.offset = 0;
3964                 found_key.type = 0;
3965                 ret = btrfs_bin_search(path->nodes[0], &found_key, &start_slot);
3966                 if (ret < 0)
3967                         break;
3968
3969                 ret = btrfs_del_items(trans, log, path, start_slot,
3970                                       path->slots[0] - start_slot + 1);
3971                 /*
3972                  * If start slot isn't 0 then we don't need to re-search, we've
3973                  * found the last guy with the objectid in this tree.
3974                  */
3975                 if (ret || start_slot != 0)
3976                         break;
3977                 btrfs_release_path(path);
3978         }
3979         btrfs_release_path(path);
3980         if (ret > 0)
3981                 ret = 0;
3982         return ret;
3983 }
3984
3985 static void fill_inode_item(struct btrfs_trans_handle *trans,
3986                             struct extent_buffer *leaf,
3987                             struct btrfs_inode_item *item,
3988                             struct inode *inode, int log_inode_only,
3989                             u64 logged_isize)
3990 {
3991         struct btrfs_map_token token;
3992         u64 flags;
3993
3994         btrfs_init_map_token(&token, leaf);
3995
3996         if (log_inode_only) {
3997                 /* set the generation to zero so the recover code
3998                  * can tell the difference between an logging
3999                  * just to say 'this inode exists' and a logging
4000                  * to say 'update this inode with these values'
4001                  */
4002                 btrfs_set_token_inode_generation(&token, item, 0);
4003                 btrfs_set_token_inode_size(&token, item, logged_isize);
4004         } else {
4005                 btrfs_set_token_inode_generation(&token, item,
4006                                                  BTRFS_I(inode)->generation);
4007                 btrfs_set_token_inode_size(&token, item, inode->i_size);
4008         }
4009
4010         btrfs_set_token_inode_uid(&token, item, i_uid_read(inode));
4011         btrfs_set_token_inode_gid(&token, item, i_gid_read(inode));
4012         btrfs_set_token_inode_mode(&token, item, inode->i_mode);
4013         btrfs_set_token_inode_nlink(&token, item, inode->i_nlink);
4014
4015         btrfs_set_token_timespec_sec(&token, &item->atime,
4016                                      inode->i_atime.tv_sec);
4017         btrfs_set_token_timespec_nsec(&token, &item->atime,
4018                                       inode->i_atime.tv_nsec);
4019
4020         btrfs_set_token_timespec_sec(&token, &item->mtime,
4021                                      inode->i_mtime.tv_sec);
4022         btrfs_set_token_timespec_nsec(&token, &item->mtime,
4023                                       inode->i_mtime.tv_nsec);
4024
4025         btrfs_set_token_timespec_sec(&token, &item->ctime,
4026                                      inode->i_ctime.tv_sec);
4027         btrfs_set_token_timespec_nsec(&token, &item->ctime,
4028                                       inode->i_ctime.tv_nsec);
4029
4030         /*
4031          * We do not need to set the nbytes field, in fact during a fast fsync
4032          * its value may not even be correct, since a fast fsync does not wait
4033          * for ordered extent completion, which is where we update nbytes, it
4034          * only waits for writeback to complete. During log replay as we find
4035          * file extent items and replay them, we adjust the nbytes field of the
4036          * inode item in subvolume tree as needed (see overwrite_item()).
4037          */
4038
4039         btrfs_set_token_inode_sequence(&token, item, inode_peek_iversion(inode));
4040         btrfs_set_token_inode_transid(&token, item, trans->transid);
4041         btrfs_set_token_inode_rdev(&token, item, inode->i_rdev);
4042         flags = btrfs_inode_combine_flags(BTRFS_I(inode)->flags,
4043                                           BTRFS_I(inode)->ro_flags);
4044         btrfs_set_token_inode_flags(&token, item, flags);
4045         btrfs_set_token_inode_block_group(&token, item, 0);
4046 }
4047
4048 static int log_inode_item(struct btrfs_trans_handle *trans,
4049                           struct btrfs_root *log, struct btrfs_path *path,
4050                           struct btrfs_inode *inode, bool inode_item_dropped)
4051 {
4052         struct btrfs_inode_item *inode_item;
4053         int ret;
4054
4055         /*
4056          * If we are doing a fast fsync and the inode was logged before in the
4057          * current transaction, then we know the inode was previously logged and
4058          * it exists in the log tree. For performance reasons, in this case use
4059          * btrfs_search_slot() directly with ins_len set to 0 so that we never
4060          * attempt a write lock on the leaf's parent, which adds unnecessary lock
4061          * contention in case there are concurrent fsyncs for other inodes of the
4062          * same subvolume. Using btrfs_insert_empty_item() when the inode item
4063          * already exists can also result in unnecessarily splitting a leaf.
4064          */
4065         if (!inode_item_dropped && inode->logged_trans == trans->transid) {
4066                 ret = btrfs_search_slot(trans, log, &inode->location, path, 0, 1);
4067                 ASSERT(ret <= 0);
4068                 if (ret > 0)
4069                         ret = -ENOENT;
4070         } else {
4071                 /*
4072                  * This means it is the first fsync in the current transaction,
4073                  * so the inode item is not in the log and we need to insert it.
4074                  * We can never get -EEXIST because we are only called for a fast
4075                  * fsync and in case an inode eviction happens after the inode was
4076                  * logged before in the current transaction, when we load again
4077                  * the inode, we set BTRFS_INODE_NEEDS_FULL_SYNC on its runtime
4078                  * flags and set ->logged_trans to 0.
4079                  */
4080                 ret = btrfs_insert_empty_item(trans, log, path, &inode->location,
4081                                               sizeof(*inode_item));
4082                 ASSERT(ret != -EEXIST);
4083         }
4084         if (ret)
4085                 return ret;
4086         inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4087                                     struct btrfs_inode_item);
4088         fill_inode_item(trans, path->nodes[0], inode_item, &inode->vfs_inode,
4089                         0, 0);
4090         btrfs_release_path(path);
4091         return 0;
4092 }
4093
4094 static int log_csums(struct btrfs_trans_handle *trans,
4095                      struct btrfs_inode *inode,
4096                      struct btrfs_root *log_root,
4097                      struct btrfs_ordered_sum *sums)
4098 {
4099         const u64 lock_end = sums->bytenr + sums->len - 1;
4100         struct extent_state *cached_state = NULL;
4101         int ret;
4102
4103         /*
4104          * If this inode was not used for reflink operations in the current
4105          * transaction with new extents, then do the fast path, no need to
4106          * worry about logging checksum items with overlapping ranges.
4107          */
4108         if (inode->last_reflink_trans < trans->transid)
4109                 return btrfs_csum_file_blocks(trans, log_root, sums);
4110
4111         /*
4112          * Serialize logging for checksums. This is to avoid racing with the
4113          * same checksum being logged by another task that is logging another
4114          * file which happens to refer to the same extent as well. Such races
4115          * can leave checksum items in the log with overlapping ranges.
4116          */
4117         ret = lock_extent_bits(&log_root->log_csum_range, sums->bytenr,
4118                                lock_end, &cached_state);
4119         if (ret)
4120                 return ret;
4121         /*
4122          * Due to extent cloning, we might have logged a csum item that covers a
4123          * subrange of a cloned extent, and later we can end up logging a csum
4124          * item for a larger subrange of the same extent or the entire range.
4125          * This would leave csum items in the log tree that cover the same range
4126          * and break the searches for checksums in the log tree, resulting in
4127          * some checksums missing in the fs/subvolume tree. So just delete (or
4128          * trim and adjust) any existing csum items in the log for this range.
4129          */
4130         ret = btrfs_del_csums(trans, log_root, sums->bytenr, sums->len);
4131         if (!ret)
4132                 ret = btrfs_csum_file_blocks(trans, log_root, sums);
4133
4134         unlock_extent_cached(&log_root->log_csum_range, sums->bytenr, lock_end,
4135                              &cached_state);
4136
4137         return ret;
4138 }
4139
4140 static noinline int copy_items(struct btrfs_trans_handle *trans,
4141                                struct btrfs_inode *inode,
4142                                struct btrfs_path *dst_path,
4143                                struct btrfs_path *src_path,
4144                                int start_slot, int nr, int inode_only,
4145                                u64 logged_isize)
4146 {
4147         struct btrfs_fs_info *fs_info = trans->fs_info;
4148         unsigned long src_offset;
4149         unsigned long dst_offset;
4150         struct btrfs_root *log = inode->root->log_root;
4151         struct btrfs_file_extent_item *extent;
4152         struct btrfs_inode_item *inode_item;
4153         struct extent_buffer *src = src_path->nodes[0];
4154         int ret;
4155         struct btrfs_key *ins_keys;
4156         u32 *ins_sizes;
4157         char *ins_data;
4158         int i;
4159         struct list_head ordered_sums;
4160         int skip_csum = inode->flags & BTRFS_INODE_NODATASUM;
4161
4162         INIT_LIST_HEAD(&ordered_sums);
4163
4164         ins_data = kmalloc(nr * sizeof(struct btrfs_key) +
4165                            nr * sizeof(u32), GFP_NOFS);
4166         if (!ins_data)
4167                 return -ENOMEM;
4168
4169         ins_sizes = (u32 *)ins_data;
4170         ins_keys = (struct btrfs_key *)(ins_data + nr * sizeof(u32));
4171
4172         for (i = 0; i < nr; i++) {
4173                 ins_sizes[i] = btrfs_item_size_nr(src, i + start_slot);
4174                 btrfs_item_key_to_cpu(src, ins_keys + i, i + start_slot);
4175         }
4176         ret = btrfs_insert_empty_items(trans, log, dst_path,
4177                                        ins_keys, ins_sizes, nr);
4178         if (ret) {
4179                 kfree(ins_data);
4180                 return ret;
4181         }
4182
4183         for (i = 0; i < nr; i++, dst_path->slots[0]++) {
4184                 dst_offset = btrfs_item_ptr_offset(dst_path->nodes[0],
4185                                                    dst_path->slots[0]);
4186
4187                 src_offset = btrfs_item_ptr_offset(src, start_slot + i);
4188
4189                 if (ins_keys[i].type == BTRFS_INODE_ITEM_KEY) {
4190                         inode_item = btrfs_item_ptr(dst_path->nodes[0],
4191                                                     dst_path->slots[0],
4192                                                     struct btrfs_inode_item);
4193                         fill_inode_item(trans, dst_path->nodes[0], inode_item,
4194                                         &inode->vfs_inode,
4195                                         inode_only == LOG_INODE_EXISTS,
4196                                         logged_isize);
4197                 } else {
4198                         copy_extent_buffer(dst_path->nodes[0], src, dst_offset,
4199                                            src_offset, ins_sizes[i]);
4200                 }
4201
4202                 /* take a reference on file data extents so that truncates
4203                  * or deletes of this inode don't have to relog the inode
4204                  * again
4205                  */
4206                 if (ins_keys[i].type == BTRFS_EXTENT_DATA_KEY &&
4207                     !skip_csum) {
4208                         int found_type;
4209                         extent = btrfs_item_ptr(src, start_slot + i,
4210                                                 struct btrfs_file_extent_item);
4211
4212                         if (btrfs_file_extent_generation(src, extent) < trans->transid)
4213                                 continue;
4214
4215                         found_type = btrfs_file_extent_type(src, extent);
4216                         if (found_type == BTRFS_FILE_EXTENT_REG) {
4217                                 u64 ds, dl, cs, cl;
4218                                 ds = btrfs_file_extent_disk_bytenr(src,
4219                                                                 extent);
4220                                 /* ds == 0 is a hole */
4221                                 if (ds == 0)
4222                                         continue;
4223
4224                                 dl = btrfs_file_extent_disk_num_bytes(src,
4225                                                                 extent);
4226                                 cs = btrfs_file_extent_offset(src, extent);
4227                                 cl = btrfs_file_extent_num_bytes(src,
4228                                                                 extent);
4229                                 if (btrfs_file_extent_compression(src,
4230                                                                   extent)) {
4231                                         cs = 0;
4232                                         cl = dl;
4233                                 }
4234
4235                                 ret = btrfs_lookup_csums_range(
4236                                                 fs_info->csum_root,
4237                                                 ds + cs, ds + cs + cl - 1,
4238                                                 &ordered_sums, 0);
4239                                 if (ret)
4240                                         break;
4241                         }
4242                 }
4243         }
4244
4245         btrfs_mark_buffer_dirty(dst_path->nodes[0]);
4246         btrfs_release_path(dst_path);
4247         kfree(ins_data);
4248
4249         /*
4250          * we have to do this after the loop above to avoid changing the
4251          * log tree while trying to change the log tree.
4252          */
4253         while (!list_empty(&ordered_sums)) {
4254                 struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
4255                                                    struct btrfs_ordered_sum,
4256                                                    list);
4257                 if (!ret)
4258                         ret = log_csums(trans, inode, log, sums);
4259                 list_del(&sums->list);
4260                 kfree(sums);
4261         }
4262
4263         return ret;
4264 }
4265
4266 static int extent_cmp(void *priv, const struct list_head *a,
4267                       const struct list_head *b)
4268 {
4269         const struct extent_map *em1, *em2;
4270
4271         em1 = list_entry(a, struct extent_map, list);
4272         em2 = list_entry(b, struct extent_map, list);
4273
4274         if (em1->start < em2->start)
4275                 return -1;
4276         else if (em1->start > em2->start)
4277                 return 1;
4278         return 0;
4279 }
4280
4281 static int log_extent_csums(struct btrfs_trans_handle *trans,
4282                             struct btrfs_inode *inode,
4283                             struct btrfs_root *log_root,
4284                             const struct extent_map *em,
4285                             struct btrfs_log_ctx *ctx)
4286 {
4287         struct btrfs_ordered_extent *ordered;
4288         u64 csum_offset;
4289         u64 csum_len;
4290         u64 mod_start = em->mod_start;
4291         u64 mod_len = em->mod_len;
4292         LIST_HEAD(ordered_sums);
4293         int ret = 0;
4294
4295         if (inode->flags & BTRFS_INODE_NODATASUM ||
4296             test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||
4297             em->block_start == EXTENT_MAP_HOLE)
4298                 return 0;
4299
4300         list_for_each_entry(ordered, &ctx->ordered_extents, log_list) {
4301                 const u64 ordered_end = ordered->file_offset + ordered->num_bytes;
4302                 const u64 mod_end = mod_start + mod_len;
4303                 struct btrfs_ordered_sum *sums;
4304
4305                 if (mod_len == 0)
4306                         break;
4307
4308                 if (ordered_end <= mod_start)
4309                         continue;
4310                 if (mod_end <= ordered->file_offset)
4311                         break;
4312
4313                 /*
4314                  * We are going to copy all the csums on this ordered extent, so
4315                  * go ahead and adjust mod_start and mod_len in case this ordered
4316                  * extent has already been logged.
4317                  */
4318                 if (ordered->file_offset > mod_start) {
4319                         if (ordered_end >= mod_end)
4320                                 mod_len = ordered->file_offset - mod_start;
4321                         /*
4322                          * If we have this case
4323                          *
4324                          * |--------- logged extent ---------|
4325                          *       |----- ordered extent ----|
4326                          *
4327                          * Just don't mess with mod_start and mod_len, we'll
4328                          * just end up logging more csums than we need and it
4329                          * will be ok.
4330                          */
4331                 } else {
4332                         if (ordered_end < mod_end) {
4333                                 mod_len = mod_end - ordered_end;
4334                                 mod_start = ordered_end;
4335                         } else {
4336                                 mod_len = 0;
4337                         }
4338                 }
4339
4340                 /*
4341                  * To keep us from looping for the above case of an ordered
4342                  * extent that falls inside of the logged extent.
4343                  */
4344                 if (test_and_set_bit(BTRFS_ORDERED_LOGGED_CSUM, &ordered->flags))
4345                         continue;
4346
4347                 list_for_each_entry(sums, &ordered->list, list) {
4348                         ret = log_csums(trans, inode, log_root, sums);
4349                         if (ret)
4350                                 return ret;
4351                 }
4352         }
4353
4354         /* We're done, found all csums in the ordered extents. */
4355         if (mod_len == 0)
4356                 return 0;
4357
4358         /* If we're compressed we have to save the entire range of csums. */
4359         if (em->compress_type) {
4360                 csum_offset = 0;
4361                 csum_len = max(em->block_len, em->orig_block_len);
4362         } else {
4363                 csum_offset = mod_start - em->start;
4364                 csum_len = mod_len;
4365         }
4366
4367         /* block start is already adjusted for the file extent offset. */
4368         ret = btrfs_lookup_csums_range(trans->fs_info->csum_root,
4369                                        em->block_start + csum_offset,
4370                                        em->block_start + csum_offset +
4371                                        csum_len - 1, &ordered_sums, 0);
4372         if (ret)
4373                 return ret;
4374
4375         while (!list_empty(&ordered_sums)) {
4376                 struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
4377                                                    struct btrfs_ordered_sum,
4378                                                    list);
4379                 if (!ret)
4380                         ret = log_csums(trans, inode, log_root, sums);
4381                 list_del(&sums->list);
4382                 kfree(sums);
4383         }
4384
4385         return ret;
4386 }
4387
4388 static int log_one_extent(struct btrfs_trans_handle *trans,
4389                           struct btrfs_inode *inode, struct btrfs_root *root,
4390                           const struct extent_map *em,
4391                           struct btrfs_path *path,
4392                           struct btrfs_log_ctx *ctx)
4393 {
4394         struct btrfs_drop_extents_args drop_args = { 0 };
4395         struct btrfs_root *log = root->log_root;
4396         struct btrfs_file_extent_item *fi;
4397         struct extent_buffer *leaf;
4398         struct btrfs_map_token token;
4399         struct btrfs_key key;
4400         u64 extent_offset = em->start - em->orig_start;
4401         u64 block_len;
4402         int ret;
4403
4404         ret = log_extent_csums(trans, inode, log, em, ctx);
4405         if (ret)
4406                 return ret;
4407
4408         drop_args.path = path;
4409         drop_args.start = em->start;
4410         drop_args.end = em->start + em->len;
4411         drop_args.replace_extent = true;
4412         drop_args.extent_item_size = sizeof(*fi);
4413         ret = btrfs_drop_extents(trans, log, inode, &drop_args);
4414         if (ret)
4415                 return ret;
4416
4417         if (!drop_args.extent_inserted) {
4418                 key.objectid = btrfs_ino(inode);
4419                 key.type = BTRFS_EXTENT_DATA_KEY;
4420                 key.offset = em->start;
4421
4422                 ret = btrfs_insert_empty_item(trans, log, path, &key,
4423                                               sizeof(*fi));
4424                 if (ret)
4425                         return ret;
4426         }
4427         leaf = path->nodes[0];
4428         btrfs_init_map_token(&token, leaf);
4429         fi = btrfs_item_ptr(leaf, path->slots[0],
4430                             struct btrfs_file_extent_item);
4431
4432         btrfs_set_token_file_extent_generation(&token, fi, trans->transid);
4433         if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
4434                 btrfs_set_token_file_extent_type(&token, fi,
4435                                                  BTRFS_FILE_EXTENT_PREALLOC);
4436         else
4437                 btrfs_set_token_file_extent_type(&token, fi,
4438                                                  BTRFS_FILE_EXTENT_REG);
4439
4440         block_len = max(em->block_len, em->orig_block_len);
4441         if (em->compress_type != BTRFS_COMPRESS_NONE) {
4442                 btrfs_set_token_file_extent_disk_bytenr(&token, fi,
4443                                                         em->block_start);
4444                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, block_len);
4445         } else if (em->block_start < EXTENT_MAP_LAST_BYTE) {
4446                 btrfs_set_token_file_extent_disk_bytenr(&token, fi,
4447                                                         em->block_start -
4448                                                         extent_offset);
4449                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, block_len);
4450         } else {
4451                 btrfs_set_token_file_extent_disk_bytenr(&token, fi, 0);
4452                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, 0);
4453         }
4454
4455         btrfs_set_token_file_extent_offset(&token, fi, extent_offset);
4456         btrfs_set_token_file_extent_num_bytes(&token, fi, em->len);
4457         btrfs_set_token_file_extent_ram_bytes(&token, fi, em->ram_bytes);
4458         btrfs_set_token_file_extent_compression(&token, fi, em->compress_type);
4459         btrfs_set_token_file_extent_encryption(&token, fi, 0);
4460         btrfs_set_token_file_extent_other_encoding(&token, fi, 0);
4461         btrfs_mark_buffer_dirty(leaf);
4462
4463         btrfs_release_path(path);
4464
4465         return ret;
4466 }
4467
4468 /*
4469  * Log all prealloc extents beyond the inode's i_size to make sure we do not
4470  * lose them after doing a full/fast fsync and replaying the log. We scan the
4471  * subvolume's root instead of iterating the inode's extent map tree because
4472  * otherwise we can log incorrect extent items based on extent map conversion.
4473  * That can happen due to the fact that extent maps are merged when they
4474  * are not in the extent map tree's list of modified extents.
4475  */
4476 static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans,
4477                                       struct btrfs_inode *inode,
4478                                       struct btrfs_path *path)
4479 {
4480         struct btrfs_root *root = inode->root;
4481         struct btrfs_key key;
4482         const u64 i_size = i_size_read(&inode->vfs_inode);
4483         const u64 ino = btrfs_ino(inode);
4484         struct btrfs_path *dst_path = NULL;
4485         bool dropped_extents = false;
4486         u64 truncate_offset = i_size;
4487         struct extent_buffer *leaf;
4488         int slot;
4489         int ins_nr = 0;
4490         int start_slot;
4491         int ret;
4492
4493         if (!(inode->flags & BTRFS_INODE_PREALLOC))
4494                 return 0;
4495
4496         key.objectid = ino;
4497         key.type = BTRFS_EXTENT_DATA_KEY;
4498         key.offset = i_size;
4499         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4500         if (ret < 0)
4501                 goto out;
4502
4503         /*
4504          * We must check if there is a prealloc extent that starts before the
4505          * i_size and crosses the i_size boundary. This is to ensure later we
4506          * truncate down to the end of that extent and not to the i_size, as
4507          * otherwise we end up losing part of the prealloc extent after a log
4508          * replay and with an implicit hole if there is another prealloc extent
4509          * that starts at an offset beyond i_size.
4510          */
4511         ret = btrfs_previous_item(root, path, ino, BTRFS_EXTENT_DATA_KEY);
4512         if (ret < 0)
4513                 goto out;
4514
4515         if (ret == 0) {
4516                 struct btrfs_file_extent_item *ei;
4517
4518                 leaf = path->nodes[0];
4519                 slot = path->slots[0];
4520                 ei = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
4521
4522                 if (btrfs_file_extent_type(leaf, ei) ==
4523                     BTRFS_FILE_EXTENT_PREALLOC) {
4524                         u64 extent_end;
4525
4526                         btrfs_item_key_to_cpu(leaf, &key, slot);
4527                         extent_end = key.offset +
4528                                 btrfs_file_extent_num_bytes(leaf, ei);
4529
4530                         if (extent_end > i_size)
4531                                 truncate_offset = extent_end;
4532                 }
4533         } else {
4534                 ret = 0;
4535         }
4536
4537         while (true) {
4538                 leaf = path->nodes[0];
4539                 slot = path->slots[0];
4540
4541                 if (slot >= btrfs_header_nritems(leaf)) {
4542                         if (ins_nr > 0) {
4543                                 ret = copy_items(trans, inode, dst_path, path,
4544                                                  start_slot, ins_nr, 1, 0);
4545                                 if (ret < 0)
4546                                         goto out;
4547                                 ins_nr = 0;
4548                         }
4549                         ret = btrfs_next_leaf(root, path);
4550                         if (ret < 0)
4551                                 goto out;
4552                         if (ret > 0) {
4553                                 ret = 0;
4554                                 break;
4555                         }
4556                         continue;
4557                 }
4558
4559                 btrfs_item_key_to_cpu(leaf, &key, slot);
4560                 if (key.objectid > ino)
4561                         break;
4562                 if (WARN_ON_ONCE(key.objectid < ino) ||
4563                     key.type < BTRFS_EXTENT_DATA_KEY ||
4564                     key.offset < i_size) {
4565                         path->slots[0]++;
4566                         continue;
4567                 }
4568                 if (!dropped_extents) {
4569                         /*
4570                          * Avoid logging extent items logged in past fsync calls
4571                          * and leading to duplicate keys in the log tree.
4572                          */
4573                         do {
4574                                 ret = btrfs_truncate_inode_items(trans,
4575                                                          root->log_root,
4576                                                          inode, truncate_offset,
4577                                                          BTRFS_EXTENT_DATA_KEY,
4578                                                          NULL);
4579                         } while (ret == -EAGAIN);
4580                         if (ret)
4581                                 goto out;
4582                         dropped_extents = true;
4583                 }
4584                 if (ins_nr == 0)
4585                         start_slot = slot;
4586                 ins_nr++;
4587                 path->slots[0]++;
4588                 if (!dst_path) {
4589                         dst_path = btrfs_alloc_path();
4590                         if (!dst_path) {
4591                                 ret = -ENOMEM;
4592                                 goto out;
4593                         }
4594                 }
4595         }
4596         if (ins_nr > 0)
4597                 ret = copy_items(trans, inode, dst_path, path,
4598                                  start_slot, ins_nr, 1, 0);
4599 out:
4600         btrfs_release_path(path);
4601         btrfs_free_path(dst_path);
4602         return ret;
4603 }
4604
4605 static int btrfs_log_changed_extents(struct btrfs_trans_handle *trans,
4606                                      struct btrfs_root *root,
4607                                      struct btrfs_inode *inode,
4608                                      struct btrfs_path *path,
4609                                      struct btrfs_log_ctx *ctx)
4610 {
4611         struct btrfs_ordered_extent *ordered;
4612         struct btrfs_ordered_extent *tmp;
4613         struct extent_map *em, *n;
4614         struct list_head extents;
4615         struct extent_map_tree *tree = &inode->extent_tree;
4616         int ret = 0;
4617         int num = 0;
4618
4619         INIT_LIST_HEAD(&extents);
4620
4621         write_lock(&tree->lock);
4622
4623         list_for_each_entry_safe(em, n, &tree->modified_extents, list) {
4624                 list_del_init(&em->list);
4625                 /*
4626                  * Just an arbitrary number, this can be really CPU intensive
4627                  * once we start getting a lot of extents, and really once we
4628                  * have a bunch of extents we just want to commit since it will
4629                  * be faster.
4630                  */
4631                 if (++num > 32768) {
4632                         list_del_init(&tree->modified_extents);
4633                         ret = -EFBIG;
4634                         goto process;
4635                 }
4636
4637                 if (em->generation < trans->transid)
4638                         continue;
4639
4640                 /* We log prealloc extents beyond eof later. */
4641                 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) &&
4642                     em->start >= i_size_read(&inode->vfs_inode))
4643                         continue;
4644
4645                 /* Need a ref to keep it from getting evicted from cache */
4646                 refcount_inc(&em->refs);
4647                 set_bit(EXTENT_FLAG_LOGGING, &em->flags);
4648                 list_add_tail(&em->list, &extents);
4649                 num++;
4650         }
4651
4652         list_sort(NULL, &extents, extent_cmp);
4653 process:
4654         while (!list_empty(&extents)) {
4655                 em = list_entry(extents.next, struct extent_map, list);
4656
4657                 list_del_init(&em->list);
4658
4659                 /*
4660                  * If we had an error we just need to delete everybody from our
4661                  * private list.
4662                  */
4663                 if (ret) {
4664                         clear_em_logging(tree, em);
4665                         free_extent_map(em);
4666                         continue;
4667                 }
4668
4669                 write_unlock(&tree->lock);
4670
4671                 ret = log_one_extent(trans, inode, root, em, path, ctx);
4672                 write_lock(&tree->lock);
4673                 clear_em_logging(tree, em);
4674                 free_extent_map(em);
4675         }
4676         WARN_ON(!list_empty(&extents));
4677         write_unlock(&tree->lock);
4678
4679         btrfs_release_path(path);
4680         if (!ret)
4681                 ret = btrfs_log_prealloc_extents(trans, inode, path);
4682         if (ret)
4683                 return ret;
4684
4685         /*
4686          * We have logged all extents successfully, now make sure the commit of
4687          * the current transaction waits for the ordered extents to complete
4688          * before it commits and wipes out the log trees, otherwise we would
4689          * lose data if an ordered extents completes after the transaction
4690          * commits and a power failure happens after the transaction commit.
4691          */
4692         list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {
4693                 list_del_init(&ordered->log_list);
4694                 set_bit(BTRFS_ORDERED_LOGGED, &ordered->flags);
4695
4696                 if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {
4697                         spin_lock_irq(&inode->ordered_tree.lock);
4698                         if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {
4699                                 set_bit(BTRFS_ORDERED_PENDING, &ordered->flags);
4700                                 atomic_inc(&trans->transaction->pending_ordered);
4701                         }
4702                         spin_unlock_irq(&inode->ordered_tree.lock);
4703                 }
4704                 btrfs_put_ordered_extent(ordered);
4705         }
4706
4707         return 0;
4708 }
4709
4710 static int logged_inode_size(struct btrfs_root *log, struct btrfs_inode *inode,
4711                              struct btrfs_path *path, u64 *size_ret)
4712 {
4713         struct btrfs_key key;
4714         int ret;
4715
4716         key.objectid = btrfs_ino(inode);
4717         key.type = BTRFS_INODE_ITEM_KEY;
4718         key.offset = 0;
4719
4720         ret = btrfs_search_slot(NULL, log, &key, path, 0, 0);
4721         if (ret < 0) {
4722                 return ret;
4723         } else if (ret > 0) {
4724                 *size_ret = 0;
4725         } else {
4726                 struct btrfs_inode_item *item;
4727
4728                 item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4729                                       struct btrfs_inode_item);
4730                 *size_ret = btrfs_inode_size(path->nodes[0], item);
4731                 /*
4732                  * If the in-memory inode's i_size is smaller then the inode
4733                  * size stored in the btree, return the inode's i_size, so
4734                  * that we get a correct inode size after replaying the log
4735                  * when before a power failure we had a shrinking truncate
4736                  * followed by addition of a new name (rename / new hard link).
4737                  * Otherwise return the inode size from the btree, to avoid
4738                  * data loss when replaying a log due to previously doing a
4739                  * write that expands the inode's size and logging a new name
4740                  * immediately after.
4741                  */
4742                 if (*size_ret > inode->vfs_inode.i_size)
4743                         *size_ret = inode->vfs_inode.i_size;
4744         }
4745
4746         btrfs_release_path(path);
4747         return 0;
4748 }
4749
4750 /*
4751  * At the moment we always log all xattrs. This is to figure out at log replay
4752  * time which xattrs must have their deletion replayed. If a xattr is missing
4753  * in the log tree and exists in the fs/subvol tree, we delete it. This is
4754  * because if a xattr is deleted, the inode is fsynced and a power failure
4755  * happens, causing the log to be replayed the next time the fs is mounted,
4756  * we want the xattr to not exist anymore (same behaviour as other filesystems
4757  * with a journal, ext3/4, xfs, f2fs, etc).
4758  */
4759 static int btrfs_log_all_xattrs(struct btrfs_trans_handle *trans,
4760                                 struct btrfs_root *root,
4761                                 struct btrfs_inode *inode,
4762                                 struct btrfs_path *path,
4763                                 struct btrfs_path *dst_path)
4764 {
4765         int ret;
4766         struct btrfs_key key;
4767         const u64 ino = btrfs_ino(inode);
4768         int ins_nr = 0;
4769         int start_slot = 0;
4770         bool found_xattrs = false;
4771
4772         if (test_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags))
4773                 return 0;
4774
4775         key.objectid = ino;
4776         key.type = BTRFS_XATTR_ITEM_KEY;
4777         key.offset = 0;
4778
4779         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4780         if (ret < 0)
4781                 return ret;
4782
4783         while (true) {
4784                 int slot = path->slots[0];
4785                 struct extent_buffer *leaf = path->nodes[0];
4786                 int nritems = btrfs_header_nritems(leaf);
4787
4788                 if (slot >= nritems) {
4789                         if (ins_nr > 0) {
4790                                 ret = copy_items(trans, inode, dst_path, path,
4791                                                  start_slot, ins_nr, 1, 0);
4792                                 if (ret < 0)
4793                                         return ret;
4794                                 ins_nr = 0;
4795                         }
4796                         ret = btrfs_next_leaf(root, path);
4797                         if (ret < 0)
4798                                 return ret;
4799                         else if (ret > 0)
4800                                 break;
4801                         continue;
4802                 }
4803
4804                 btrfs_item_key_to_cpu(leaf, &key, slot);
4805                 if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY)
4806                         break;
4807
4808                 if (ins_nr == 0)
4809                         start_slot = slot;
4810                 ins_nr++;
4811                 path->slots[0]++;
4812                 found_xattrs = true;
4813                 cond_resched();
4814         }
4815         if (ins_nr > 0) {
4816                 ret = copy_items(trans, inode, dst_path, path,
4817                                  start_slot, ins_nr, 1, 0);
4818                 if (ret < 0)
4819                         return ret;
4820         }
4821
4822         if (!found_xattrs)
4823                 set_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags);
4824
4825         return 0;
4826 }
4827
4828 /*
4829  * When using the NO_HOLES feature if we punched a hole that causes the
4830  * deletion of entire leafs or all the extent items of the first leaf (the one
4831  * that contains the inode item and references) we may end up not processing
4832  * any extents, because there are no leafs with a generation matching the
4833  * current transaction that have extent items for our inode. So we need to find
4834  * if any holes exist and then log them. We also need to log holes after any
4835  * truncate operation that changes the inode's size.
4836  */
4837 static int btrfs_log_holes(struct btrfs_trans_handle *trans,
4838                            struct btrfs_root *root,
4839                            struct btrfs_inode *inode,
4840                            struct btrfs_path *path)
4841 {
4842         struct btrfs_fs_info *fs_info = root->fs_info;
4843         struct btrfs_key key;
4844         const u64 ino = btrfs_ino(inode);
4845         const u64 i_size = i_size_read(&inode->vfs_inode);
4846         u64 prev_extent_end = 0;
4847         int ret;
4848
4849         if (!btrfs_fs_incompat(fs_info, NO_HOLES) || i_size == 0)
4850                 return 0;
4851
4852         key.objectid = ino;
4853         key.type = BTRFS_EXTENT_DATA_KEY;
4854         key.offset = 0;
4855
4856         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4857         if (ret < 0)
4858                 return ret;
4859
4860         while (true) {
4861                 struct extent_buffer *leaf = path->nodes[0];
4862
4863                 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
4864                         ret = btrfs_next_leaf(root, path);
4865                         if (ret < 0)
4866                                 return ret;
4867                         if (ret > 0) {
4868                                 ret = 0;
4869                                 break;
4870                         }
4871                         leaf = path->nodes[0];
4872                 }
4873
4874                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
4875                 if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)
4876                         break;
4877
4878                 /* We have a hole, log it. */
4879                 if (prev_extent_end < key.offset) {
4880                         const u64 hole_len = key.offset - prev_extent_end;
4881
4882                         /*
4883                          * Release the path to avoid deadlocks with other code
4884                          * paths that search the root while holding locks on
4885                          * leafs from the log root.
4886                          */
4887                         btrfs_release_path(path);
4888                         ret = btrfs_insert_file_extent(trans, root->log_root,
4889                                                        ino, prev_extent_end, 0,
4890                                                        0, hole_len, 0, hole_len,
4891                                                        0, 0, 0);
4892                         if (ret < 0)
4893                                 return ret;
4894
4895                         /*
4896                          * Search for the same key again in the root. Since it's
4897                          * an extent item and we are holding the inode lock, the
4898                          * key must still exist. If it doesn't just emit warning
4899                          * and return an error to fall back to a transaction
4900                          * commit.
4901                          */
4902                         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4903                         if (ret < 0)
4904                                 return ret;
4905                         if (WARN_ON(ret > 0))
4906                                 return -ENOENT;
4907                         leaf = path->nodes[0];
4908                 }
4909
4910                 prev_extent_end = btrfs_file_extent_end(path);
4911                 path->slots[0]++;
4912                 cond_resched();
4913         }
4914
4915         if (prev_extent_end < i_size) {
4916                 u64 hole_len;
4917
4918                 btrfs_release_path(path);
4919                 hole_len = ALIGN(i_size - prev_extent_end, fs_info->sectorsize);
4920                 ret = btrfs_insert_file_extent(trans, root->log_root,
4921                                                ino, prev_extent_end, 0, 0,
4922                                                hole_len, 0, hole_len,
4923                                                0, 0, 0);
4924                 if (ret < 0)
4925                         return ret;
4926         }
4927
4928         return 0;
4929 }
4930
4931 /*
4932  * When we are logging a new inode X, check if it doesn't have a reference that
4933  * matches the reference from some other inode Y created in a past transaction
4934  * and that was renamed in the current transaction. If we don't do this, then at
4935  * log replay time we can lose inode Y (and all its files if it's a directory):
4936  *
4937  * mkdir /mnt/x
4938  * echo "hello world" > /mnt/x/foobar
4939  * sync
4940  * mv /mnt/x /mnt/y
4941  * mkdir /mnt/x                 # or touch /mnt/x
4942  * xfs_io -c fsync /mnt/x
4943  * <power fail>
4944  * mount fs, trigger log replay
4945  *
4946  * After the log replay procedure, we would lose the first directory and all its
4947  * files (file foobar).
4948  * For the case where inode Y is not a directory we simply end up losing it:
4949  *
4950  * echo "123" > /mnt/foo
4951  * sync
4952  * mv /mnt/foo /mnt/bar
4953  * echo "abc" > /mnt/foo
4954  * xfs_io -c fsync /mnt/foo
4955  * <power fail>
4956  *
4957  * We also need this for cases where a snapshot entry is replaced by some other
4958  * entry (file or directory) otherwise we end up with an unreplayable log due to
4959  * attempts to delete the snapshot entry (entry of type BTRFS_ROOT_ITEM_KEY) as
4960  * if it were a regular entry:
4961  *
4962  * mkdir /mnt/x
4963  * btrfs subvolume snapshot /mnt /mnt/x/snap
4964  * btrfs subvolume delete /mnt/x/snap
4965  * rmdir /mnt/x
4966  * mkdir /mnt/x
4967  * fsync /mnt/x or fsync some new file inside it
4968  * <power fail>
4969  *
4970  * The snapshot delete, rmdir of x, mkdir of a new x and the fsync all happen in
4971  * the same transaction.
4972  */
4973 static int btrfs_check_ref_name_override(struct extent_buffer *eb,
4974                                          const int slot,
4975                                          const struct btrfs_key *key,
4976                                          struct btrfs_inode *inode,
4977                                          u64 *other_ino, u64 *other_parent)
4978 {
4979         int ret;
4980         struct btrfs_path *search_path;
4981         char *name = NULL;
4982         u32 name_len = 0;
4983         u32 item_size = btrfs_item_size_nr(eb, slot);
4984         u32 cur_offset = 0;
4985         unsigned long ptr = btrfs_item_ptr_offset(eb, slot);
4986
4987         search_path = btrfs_alloc_path();
4988         if (!search_path)
4989                 return -ENOMEM;
4990         search_path->search_commit_root = 1;
4991         search_path->skip_locking = 1;
4992
4993         while (cur_offset < item_size) {
4994                 u64 parent;
4995                 u32 this_name_len;
4996                 u32 this_len;
4997                 unsigned long name_ptr;
4998                 struct btrfs_dir_item *di;
4999
5000                 if (key->type == BTRFS_INODE_REF_KEY) {
5001                         struct btrfs_inode_ref *iref;
5002
5003                         iref = (struct btrfs_inode_ref *)(ptr + cur_offset);
5004                         parent = key->offset;
5005                         this_name_len = btrfs_inode_ref_name_len(eb, iref);
5006                         name_ptr = (unsigned long)(iref + 1);
5007                         this_len = sizeof(*iref) + this_name_len;
5008                 } else {
5009                         struct btrfs_inode_extref *extref;
5010
5011                         extref = (struct btrfs_inode_extref *)(ptr +
5012                                                                cur_offset);
5013                         parent = btrfs_inode_extref_parent(eb, extref);
5014                         this_name_len = btrfs_inode_extref_name_len(eb, extref);
5015                         name_ptr = (unsigned long)&extref->name;
5016                         this_len = sizeof(*extref) + this_name_len;
5017                 }
5018
5019                 if (this_name_len > name_len) {
5020                         char *new_name;
5021
5022                         new_name = krealloc(name, this_name_len, GFP_NOFS);
5023                         if (!new_name) {
5024                                 ret = -ENOMEM;
5025                                 goto out;
5026                         }
5027                         name_len = this_name_len;
5028                         name = new_name;
5029                 }
5030
5031                 read_extent_buffer(eb, name, name_ptr, this_name_len);
5032                 di = btrfs_lookup_dir_item(NULL, inode->root, search_path,
5033                                 parent, name, this_name_len, 0);
5034                 if (di && !IS_ERR(di)) {
5035                         struct btrfs_key di_key;
5036
5037                         btrfs_dir_item_key_to_cpu(search_path->nodes[0],
5038                                                   di, &di_key);
5039                         if (di_key.type == BTRFS_INODE_ITEM_KEY) {
5040                                 if (di_key.objectid != key->objectid) {
5041                                         ret = 1;
5042                                         *other_ino = di_key.objectid;
5043                                         *other_parent = parent;
5044                                 } else {
5045                                         ret = 0;
5046                                 }
5047                         } else {
5048                                 ret = -EAGAIN;
5049                         }
5050                         goto out;
5051                 } else if (IS_ERR(di)) {
5052                         ret = PTR_ERR(di);
5053                         goto out;
5054                 }
5055                 btrfs_release_path(search_path);
5056
5057                 cur_offset += this_len;
5058         }
5059         ret = 0;
5060 out:
5061         btrfs_free_path(search_path);
5062         kfree(name);
5063         return ret;
5064 }
5065
5066 struct btrfs_ino_list {
5067         u64 ino;
5068         u64 parent;
5069         struct list_head list;
5070 };
5071
5072 static int log_conflicting_inodes(struct btrfs_trans_handle *trans,
5073                                   struct btrfs_root *root,
5074                                   struct btrfs_path *path,
5075                                   struct btrfs_log_ctx *ctx,
5076                                   u64 ino, u64 parent)
5077 {
5078         struct btrfs_ino_list *ino_elem;
5079         LIST_HEAD(inode_list);
5080         int ret = 0;
5081
5082         ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
5083         if (!ino_elem)
5084                 return -ENOMEM;
5085         ino_elem->ino = ino;
5086         ino_elem->parent = parent;
5087         list_add_tail(&ino_elem->list, &inode_list);
5088
5089         while (!list_empty(&inode_list)) {
5090                 struct btrfs_fs_info *fs_info = root->fs_info;
5091                 struct btrfs_key key;
5092                 struct inode *inode;
5093
5094                 ino_elem = list_first_entry(&inode_list, struct btrfs_ino_list,
5095                                             list);
5096                 ino = ino_elem->ino;
5097                 parent = ino_elem->parent;
5098                 list_del(&ino_elem->list);
5099                 kfree(ino_elem);
5100                 if (ret)
5101                         continue;
5102
5103                 btrfs_release_path(path);
5104
5105                 inode = btrfs_iget(fs_info->sb, ino, root);
5106                 /*
5107                  * If the other inode that had a conflicting dir entry was
5108                  * deleted in the current transaction, we need to log its parent
5109                  * directory.
5110                  */
5111                 if (IS_ERR(inode)) {
5112                         ret = PTR_ERR(inode);
5113                         if (ret == -ENOENT) {
5114                                 inode = btrfs_iget(fs_info->sb, parent, root);
5115                                 if (IS_ERR(inode)) {
5116                                         ret = PTR_ERR(inode);
5117                                 } else {
5118                                         ret = btrfs_log_inode(trans, root,
5119                                                       BTRFS_I(inode),
5120                                                       LOG_OTHER_INODE_ALL,
5121                                                       ctx);
5122                                         btrfs_add_delayed_iput(inode);
5123                                 }
5124                         }
5125                         continue;
5126                 }
5127                 /*
5128                  * If the inode was already logged skip it - otherwise we can
5129                  * hit an infinite loop. Example:
5130                  *
5131                  * From the commit root (previous transaction) we have the
5132                  * following inodes:
5133                  *
5134                  * inode 257 a directory
5135                  * inode 258 with references "zz" and "zz_link" on inode 257
5136                  * inode 259 with reference "a" on inode 257
5137                  *
5138                  * And in the current (uncommitted) transaction we have:
5139                  *
5140                  * inode 257 a directory, unchanged
5141                  * inode 258 with references "a" and "a2" on inode 257
5142                  * inode 259 with reference "zz_link" on inode 257
5143                  * inode 261 with reference "zz" on inode 257
5144                  *
5145                  * When logging inode 261 the following infinite loop could
5146                  * happen if we don't skip already logged inodes:
5147                  *
5148                  * - we detect inode 258 as a conflicting inode, with inode 261
5149                  *   on reference "zz", and log it;
5150                  *
5151                  * - we detect inode 259 as a conflicting inode, with inode 258
5152                  *   on reference "a", and log it;
5153                  *
5154                  * - we detect inode 258 as a conflicting inode, with inode 259
5155                  *   on reference "zz_link", and log it - again! After this we
5156                  *   repeat the above steps forever.
5157                  */
5158                 spin_lock(&BTRFS_I(inode)->lock);
5159                 /*
5160                  * Check the inode's logged_trans only instead of
5161                  * btrfs_inode_in_log(). This is because the last_log_commit of
5162                  * the inode is not updated when we only log that it exists (see
5163                  * btrfs_log_inode()).
5164                  */
5165                 if (BTRFS_I(inode)->logged_trans == trans->transid) {
5166                         spin_unlock(&BTRFS_I(inode)->lock);
5167                         btrfs_add_delayed_iput(inode);
5168                         continue;
5169                 }
5170                 spin_unlock(&BTRFS_I(inode)->lock);
5171                 /*
5172                  * We are safe logging the other inode without acquiring its
5173                  * lock as long as we log with the LOG_INODE_EXISTS mode. We
5174                  * are safe against concurrent renames of the other inode as
5175                  * well because during a rename we pin the log and update the
5176                  * log with the new name before we unpin it.
5177                  */
5178                 ret = btrfs_log_inode(trans, root, BTRFS_I(inode),
5179                                       LOG_OTHER_INODE, ctx);
5180                 if (ret) {
5181                         btrfs_add_delayed_iput(inode);
5182                         continue;
5183                 }
5184
5185                 key.objectid = ino;
5186                 key.type = BTRFS_INODE_REF_KEY;
5187                 key.offset = 0;
5188                 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5189                 if (ret < 0) {
5190                         btrfs_add_delayed_iput(inode);
5191                         continue;
5192                 }
5193
5194                 while (true) {
5195                         struct extent_buffer *leaf = path->nodes[0];
5196                         int slot = path->slots[0];
5197                         u64 other_ino = 0;
5198                         u64 other_parent = 0;
5199
5200                         if (slot >= btrfs_header_nritems(leaf)) {
5201                                 ret = btrfs_next_leaf(root, path);
5202                                 if (ret < 0) {
5203                                         break;
5204                                 } else if (ret > 0) {
5205                                         ret = 0;
5206                                         break;
5207                                 }
5208                                 continue;
5209                         }
5210
5211                         btrfs_item_key_to_cpu(leaf, &key, slot);
5212                         if (key.objectid != ino ||
5213                             (key.type != BTRFS_INODE_REF_KEY &&
5214                              key.type != BTRFS_INODE_EXTREF_KEY)) {
5215                                 ret = 0;
5216                                 break;
5217                         }
5218
5219                         ret = btrfs_check_ref_name_override(leaf, slot, &key,
5220                                         BTRFS_I(inode), &other_ino,
5221                                         &other_parent);
5222                         if (ret < 0)
5223                                 break;
5224                         if (ret > 0) {
5225                                 ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
5226                                 if (!ino_elem) {
5227                                         ret = -ENOMEM;
5228                                         break;
5229                                 }
5230                                 ino_elem->ino = other_ino;
5231                                 ino_elem->parent = other_parent;
5232                                 list_add_tail(&ino_elem->list, &inode_list);
5233                                 ret = 0;
5234                         }
5235                         path->slots[0]++;
5236                 }
5237                 btrfs_add_delayed_iput(inode);
5238         }
5239
5240         return ret;
5241 }
5242
5243 static int copy_inode_items_to_log(struct btrfs_trans_handle *trans,
5244                                    struct btrfs_inode *inode,
5245                                    struct btrfs_key *min_key,
5246                                    const struct btrfs_key *max_key,
5247                                    struct btrfs_path *path,
5248                                    struct btrfs_path *dst_path,
5249                                    const u64 logged_isize,
5250                                    const bool recursive_logging,
5251                                    const int inode_only,
5252                                    struct btrfs_log_ctx *ctx,
5253                                    bool *need_log_inode_item)
5254 {
5255         const u64 i_size = i_size_read(&inode->vfs_inode);
5256         struct btrfs_root *root = inode->root;
5257         int ins_start_slot = 0;
5258         int ins_nr = 0;
5259         int ret;
5260
5261         while (1) {
5262                 ret = btrfs_search_forward(root, min_key, path, trans->transid);
5263                 if (ret < 0)
5264                         return ret;
5265                 if (ret > 0) {
5266                         ret = 0;
5267                         break;
5268                 }
5269 again:
5270                 /* Note, ins_nr might be > 0 here, cleanup outside the loop */
5271                 if (min_key->objectid != max_key->objectid)
5272                         break;
5273                 if (min_key->type > max_key->type)
5274                         break;
5275
5276                 if (min_key->type == BTRFS_INODE_ITEM_KEY) {
5277                         *need_log_inode_item = false;
5278                 } else if (min_key->type == BTRFS_EXTENT_DATA_KEY &&
5279                            min_key->offset >= i_size) {
5280                         /*
5281                          * Extents at and beyond eof are logged with
5282                          * btrfs_log_prealloc_extents().
5283                          * Only regular files have BTRFS_EXTENT_DATA_KEY keys,
5284                          * and no keys greater than that, so bail out.
5285                          */
5286                         break;
5287                 } else if ((min_key->type == BTRFS_INODE_REF_KEY ||
5288                             min_key->type == BTRFS_INODE_EXTREF_KEY) &&
5289                            inode->generation == trans->transid &&
5290                            !recursive_logging) {
5291                         u64 other_ino = 0;
5292                         u64 other_parent = 0;
5293
5294                         ret = btrfs_check_ref_name_override(path->nodes[0],
5295                                         path->slots[0], min_key, inode,
5296                                         &other_ino, &other_parent);
5297                         if (ret < 0) {
5298                                 return ret;
5299                         } else if (ret > 0 && ctx &&
5300                                    other_ino != btrfs_ino(BTRFS_I(ctx->inode))) {
5301                                 if (ins_nr > 0) {
5302                                         ins_nr++;
5303                                 } else {
5304                                         ins_nr = 1;
5305                                         ins_start_slot = path->slots[0];
5306                                 }
5307                                 ret = copy_items(trans, inode, dst_path, path,
5308                                                  ins_start_slot, ins_nr,
5309                                                  inode_only, logged_isize);
5310                                 if (ret < 0)
5311                                         return ret;
5312                                 ins_nr = 0;
5313
5314                                 ret = log_conflicting_inodes(trans, root, path,
5315                                                 ctx, other_ino, other_parent);
5316                                 if (ret)
5317                                         return ret;
5318                                 btrfs_release_path(path);
5319                                 goto next_key;
5320                         }
5321                 } else if (min_key->type == BTRFS_XATTR_ITEM_KEY) {
5322                         /* Skip xattrs, logged later with btrfs_log_all_xattrs() */
5323                         if (ins_nr == 0)
5324                                 goto next_slot;
5325                         ret = copy_items(trans, inode, dst_path, path,
5326                                          ins_start_slot,
5327                                          ins_nr, inode_only, logged_isize);
5328                         if (ret < 0)
5329                                 return ret;
5330                         ins_nr = 0;
5331                         goto next_slot;
5332                 }
5333
5334                 if (ins_nr && ins_start_slot + ins_nr == path->slots[0]) {
5335                         ins_nr++;
5336                         goto next_slot;
5337                 } else if (!ins_nr) {
5338                         ins_start_slot = path->slots[0];
5339                         ins_nr = 1;
5340                         goto next_slot;
5341                 }
5342
5343                 ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
5344                                  ins_nr, inode_only, logged_isize);
5345                 if (ret < 0)
5346                         return ret;
5347                 ins_nr = 1;
5348                 ins_start_slot = path->slots[0];
5349 next_slot:
5350                 path->slots[0]++;
5351                 if (path->slots[0] < btrfs_header_nritems(path->nodes[0])) {
5352                         btrfs_item_key_to_cpu(path->nodes[0], min_key,
5353                                               path->slots[0]);
5354                         goto again;
5355                 }
5356                 if (ins_nr) {
5357                         ret = copy_items(trans, inode, dst_path, path,
5358                                          ins_start_slot, ins_nr, inode_only,
5359                                          logged_isize);
5360                         if (ret < 0)
5361                                 return ret;
5362                         ins_nr = 0;
5363                 }
5364                 btrfs_release_path(path);
5365 next_key:
5366                 if (min_key->offset < (u64)-1) {
5367                         min_key->offset++;
5368                 } else if (min_key->type < max_key->type) {
5369                         min_key->type++;
5370                         min_key->offset = 0;
5371                 } else {
5372                         break;
5373                 }
5374         }
5375         if (ins_nr) {
5376                 ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
5377                                  ins_nr, inode_only, logged_isize);
5378                 if (ret)
5379                         return ret;
5380         }
5381
5382         if (inode_only == LOG_INODE_ALL && S_ISREG(inode->vfs_inode.i_mode)) {
5383                 /*
5384                  * Release the path because otherwise we might attempt to double
5385                  * lock the same leaf with btrfs_log_prealloc_extents() below.
5386                  */
5387                 btrfs_release_path(path);
5388                 ret = btrfs_log_prealloc_extents(trans, inode, dst_path);
5389         }
5390
5391         return ret;
5392 }
5393
5394 /* log a single inode in the tree log.
5395  * At least one parent directory for this inode must exist in the tree
5396  * or be logged already.
5397  *
5398  * Any items from this inode changed by the current transaction are copied
5399  * to the log tree.  An extra reference is taken on any extents in this
5400  * file, allowing us to avoid a whole pile of corner cases around logging
5401  * blocks that have been removed from the tree.
5402  *
5403  * See LOG_INODE_ALL and related defines for a description of what inode_only
5404  * does.
5405  *
5406  * This handles both files and directories.
5407  */
5408 static int btrfs_log_inode(struct btrfs_trans_handle *trans,
5409                            struct btrfs_root *root, struct btrfs_inode *inode,
5410                            int inode_only,
5411                            struct btrfs_log_ctx *ctx)
5412 {
5413         struct btrfs_path *path;
5414         struct btrfs_path *dst_path;
5415         struct btrfs_key min_key;
5416         struct btrfs_key max_key;
5417         struct btrfs_root *log = root->log_root;
5418         int err = 0;
5419         int ret = 0;
5420         bool fast_search = false;
5421         u64 ino = btrfs_ino(inode);
5422         struct extent_map_tree *em_tree = &inode->extent_tree;
5423         u64 logged_isize = 0;
5424         bool need_log_inode_item = true;
5425         bool xattrs_logged = false;
5426         bool recursive_logging = false;
5427         bool inode_item_dropped = true;
5428
5429         path = btrfs_alloc_path();
5430         if (!path)
5431                 return -ENOMEM;
5432         dst_path = btrfs_alloc_path();
5433         if (!dst_path) {
5434                 btrfs_free_path(path);
5435                 return -ENOMEM;
5436         }
5437
5438         min_key.objectid = ino;
5439         min_key.type = BTRFS_INODE_ITEM_KEY;
5440         min_key.offset = 0;
5441
5442         max_key.objectid = ino;
5443
5444
5445         /* today the code can only do partial logging of directories */
5446         if (S_ISDIR(inode->vfs_inode.i_mode) ||
5447             (!test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5448                        &inode->runtime_flags) &&
5449              inode_only >= LOG_INODE_EXISTS))
5450                 max_key.type = BTRFS_XATTR_ITEM_KEY;
5451         else
5452                 max_key.type = (u8)-1;
5453         max_key.offset = (u64)-1;
5454
5455         /*
5456          * Only run delayed items if we are a directory. We want to make sure
5457          * all directory indexes hit the fs/subvolume tree so we can find them
5458          * and figure out which index ranges have to be logged.
5459          *
5460          * Otherwise commit the delayed inode only if the full sync flag is set,
5461          * as we want to make sure an up to date version is in the subvolume
5462          * tree so copy_inode_items_to_log() / copy_items() can find it and copy
5463          * it to the log tree. For a non full sync, we always log the inode item
5464          * based on the in-memory struct btrfs_inode which is always up to date.
5465          */
5466         if (S_ISDIR(inode->vfs_inode.i_mode))
5467                 ret = btrfs_commit_inode_delayed_items(trans, inode);
5468         else if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags))
5469                 ret = btrfs_commit_inode_delayed_inode(inode);
5470
5471         if (ret) {
5472                 btrfs_free_path(path);
5473                 btrfs_free_path(dst_path);
5474                 return ret;
5475         }
5476
5477         if (inode_only == LOG_OTHER_INODE || inode_only == LOG_OTHER_INODE_ALL) {
5478                 recursive_logging = true;
5479                 if (inode_only == LOG_OTHER_INODE)
5480                         inode_only = LOG_INODE_EXISTS;
5481                 else
5482                         inode_only = LOG_INODE_ALL;
5483                 mutex_lock_nested(&inode->log_mutex, SINGLE_DEPTH_NESTING);
5484         } else {
5485                 mutex_lock(&inode->log_mutex);
5486         }
5487
5488         /*
5489          * For symlinks, we must always log their content, which is stored in an
5490          * inline extent, otherwise we could end up with an empty symlink after
5491          * log replay, which is invalid on linux (symlink(2) returns -ENOENT if
5492          * one attempts to create an empty symlink).
5493          * We don't need to worry about flushing delalloc, because when we create
5494          * the inline extent when the symlink is created (we never have delalloc
5495          * for symlinks).
5496          */
5497         if (S_ISLNK(inode->vfs_inode.i_mode))
5498                 inode_only = LOG_INODE_ALL;
5499
5500         /*
5501          * This is for cases where logging a directory could result in losing a
5502          * a file after replaying the log. For example, if we move a file from a
5503          * directory A to a directory B, then fsync directory A, we have no way
5504          * to known the file was moved from A to B, so logging just A would
5505          * result in losing the file after a log replay.
5506          */
5507         if (S_ISDIR(inode->vfs_inode.i_mode) &&
5508             inode_only == LOG_INODE_ALL &&
5509             inode->last_unlink_trans >= trans->transid) {
5510                 btrfs_set_log_full_commit(trans);
5511                 err = 1;
5512                 goto out_unlock;
5513         }
5514
5515         /*
5516          * a brute force approach to making sure we get the most uptodate
5517          * copies of everything.
5518          */
5519         if (S_ISDIR(inode->vfs_inode.i_mode)) {
5520                 int max_key_type = BTRFS_DIR_LOG_INDEX_KEY;
5521
5522                 clear_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags);
5523                 if (inode_only == LOG_INODE_EXISTS)
5524                         max_key_type = BTRFS_XATTR_ITEM_KEY;
5525                 ret = drop_objectid_items(trans, log, path, ino, max_key_type);
5526         } else {
5527                 if (inode_only == LOG_INODE_EXISTS) {
5528                         /*
5529                          * Make sure the new inode item we write to the log has
5530                          * the same isize as the current one (if it exists).
5531                          * This is necessary to prevent data loss after log
5532                          * replay, and also to prevent doing a wrong expanding
5533                          * truncate - for e.g. create file, write 4K into offset
5534                          * 0, fsync, write 4K into offset 4096, add hard link,
5535                          * fsync some other file (to sync log), power fail - if
5536                          * we use the inode's current i_size, after log replay
5537                          * we get a 8Kb file, with the last 4Kb extent as a hole
5538                          * (zeroes), as if an expanding truncate happened,
5539                          * instead of getting a file of 4Kb only.
5540                          */
5541                         err = logged_inode_size(log, inode, path, &logged_isize);
5542                         if (err)
5543                                 goto out_unlock;
5544                 }
5545                 if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5546                              &inode->runtime_flags)) {
5547                         if (inode_only == LOG_INODE_EXISTS) {
5548                                 max_key.type = BTRFS_XATTR_ITEM_KEY;
5549                                 ret = drop_objectid_items(trans, log, path, ino,
5550                                                           max_key.type);
5551                         } else {
5552                                 clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5553                                           &inode->runtime_flags);
5554                                 clear_bit(BTRFS_INODE_COPY_EVERYTHING,
5555                                           &inode->runtime_flags);
5556                                 while(1) {
5557                                         ret = btrfs_truncate_inode_items(trans,
5558                                                 log, inode, 0, 0, NULL);
5559                                         if (ret != -EAGAIN)
5560                                                 break;
5561                                 }
5562                         }
5563                 } else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
5564                                               &inode->runtime_flags) ||
5565                            inode_only == LOG_INODE_EXISTS) {
5566                         if (inode_only == LOG_INODE_ALL)
5567                                 fast_search = true;
5568                         max_key.type = BTRFS_XATTR_ITEM_KEY;
5569                         ret = drop_objectid_items(trans, log, path, ino,
5570                                                   max_key.type);
5571                 } else {
5572                         if (inode_only == LOG_INODE_ALL)
5573                                 fast_search = true;
5574                         inode_item_dropped = false;
5575                         goto log_extents;
5576                 }
5577
5578         }
5579         if (ret) {
5580                 err = ret;
5581                 goto out_unlock;
5582         }
5583
5584         err = copy_inode_items_to_log(trans, inode, &min_key, &max_key,
5585                                       path, dst_path, logged_isize,
5586                                       recursive_logging, inode_only, ctx,
5587                                       &need_log_inode_item);
5588         if (err)
5589                 goto out_unlock;
5590
5591         btrfs_release_path(path);
5592         btrfs_release_path(dst_path);
5593         err = btrfs_log_all_xattrs(trans, root, inode, path, dst_path);
5594         if (err)
5595                 goto out_unlock;
5596         xattrs_logged = true;
5597         if (max_key.type >= BTRFS_EXTENT_DATA_KEY && !fast_search) {
5598                 btrfs_release_path(path);
5599                 btrfs_release_path(dst_path);
5600                 err = btrfs_log_holes(trans, root, inode, path);
5601                 if (err)
5602                         goto out_unlock;
5603         }
5604 log_extents:
5605         btrfs_release_path(path);
5606         btrfs_release_path(dst_path);
5607         if (need_log_inode_item) {
5608                 err = log_inode_item(trans, log, dst_path, inode, inode_item_dropped);
5609                 if (err)
5610                         goto out_unlock;
5611                 /*
5612                  * If we are doing a fast fsync and the inode was logged before
5613                  * in this transaction, we don't need to log the xattrs because
5614                  * they were logged before. If xattrs were added, changed or
5615                  * deleted since the last time we logged the inode, then we have
5616                  * already logged them because the inode had the runtime flag
5617                  * BTRFS_INODE_COPY_EVERYTHING set.
5618                  */
5619                 if (!xattrs_logged && inode->logged_trans < trans->transid) {
5620                         err = btrfs_log_all_xattrs(trans, root, inode, path,
5621                                                    dst_path);
5622                         if (err)
5623                                 goto out_unlock;
5624                         btrfs_release_path(path);
5625                 }
5626         }
5627         if (fast_search) {
5628                 ret = btrfs_log_changed_extents(trans, root, inode, dst_path,
5629                                                 ctx);
5630                 if (ret) {
5631                         err = ret;
5632                         goto out_unlock;
5633                 }
5634         } else if (inode_only == LOG_INODE_ALL) {
5635                 struct extent_map *em, *n;
5636
5637                 write_lock(&em_tree->lock);
5638                 list_for_each_entry_safe(em, n, &em_tree->modified_extents, list)
5639                         list_del_init(&em->list);
5640                 write_unlock(&em_tree->lock);
5641         }
5642
5643         if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->vfs_inode.i_mode)) {
5644                 ret = log_directory_changes(trans, root, inode, path, dst_path,
5645                                         ctx);
5646                 if (ret) {
5647                         err = ret;
5648                         goto out_unlock;
5649                 }
5650         }
5651
5652         /*
5653          * If we are logging that an ancestor inode exists as part of logging a
5654          * new name from a link or rename operation, don't mark the inode as
5655          * logged - otherwise if an explicit fsync is made against an ancestor,
5656          * the fsync considers the inode in the log and doesn't sync the log,
5657          * resulting in the ancestor missing after a power failure unless the
5658          * log was synced as part of an fsync against any other unrelated inode.
5659          * So keep it simple for this case and just don't flag the ancestors as
5660          * logged.
5661          */
5662         if (!ctx ||
5663             !(S_ISDIR(inode->vfs_inode.i_mode) && ctx->logging_new_name &&
5664               &inode->vfs_inode != ctx->inode)) {
5665                 spin_lock(&inode->lock);
5666                 inode->logged_trans = trans->transid;
5667                 /*
5668                  * Don't update last_log_commit if we logged that an inode exists.
5669                  * We do this for two reasons:
5670                  *
5671                  * 1) We might have had buffered writes to this inode that were
5672                  *    flushed and had their ordered extents completed in this
5673                  *    transaction, but we did not previously log the inode with
5674                  *    LOG_INODE_ALL. Later the inode was evicted and after that
5675                  *    it was loaded again and this LOG_INODE_EXISTS log operation
5676                  *    happened. We must make sure that if an explicit fsync against
5677                  *    the inode is performed later, it logs the new extents, an
5678                  *    updated inode item, etc, and syncs the log. The same logic
5679                  *    applies to direct IO writes instead of buffered writes.
5680                  *
5681                  * 2) When we log the inode with LOG_INODE_EXISTS, its inode item
5682                  *    is logged with an i_size of 0 or whatever value was logged
5683                  *    before. If later the i_size of the inode is increased by a
5684                  *    truncate operation, the log is synced through an fsync of
5685                  *    some other inode and then finally an explicit fsync against
5686                  *    this inode is made, we must make sure this fsync logs the
5687                  *    inode with the new i_size, the hole between old i_size and
5688                  *    the new i_size, and syncs the log.
5689                  */
5690                 if (inode_only != LOG_INODE_EXISTS)
5691                         inode->last_log_commit = inode->last_sub_trans;
5692                 spin_unlock(&inode->lock);
5693         }
5694 out_unlock:
5695         mutex_unlock(&inode->log_mutex);
5696
5697         btrfs_free_path(path);
5698         btrfs_free_path(dst_path);
5699         return err;
5700 }
5701
5702 /*
5703  * Check if we need to log an inode. This is used in contexts where while
5704  * logging an inode we need to log another inode (either that it exists or in
5705  * full mode). This is used instead of btrfs_inode_in_log() because the later
5706  * requires the inode to be in the log and have the log transaction committed,
5707  * while here we do not care if the log transaction was already committed - our
5708  * caller will commit the log later - and we want to avoid logging an inode
5709  * multiple times when multiple tasks have joined the same log transaction.
5710  */
5711 static bool need_log_inode(struct btrfs_trans_handle *trans,
5712                            struct btrfs_inode *inode)
5713 {
5714         /*
5715          * If a directory was not modified, no dentries added or removed, we can
5716          * and should avoid logging it.
5717          */
5718         if (S_ISDIR(inode->vfs_inode.i_mode) && inode->last_trans < trans->transid)
5719                 return false;
5720
5721         /*
5722          * If this inode does not have new/updated/deleted xattrs since the last
5723          * time it was logged and is flagged as logged in the current transaction,
5724          * we can skip logging it. As for new/deleted names, those are updated in
5725          * the log by link/unlink/rename operations.
5726          * In case the inode was logged and then evicted and reloaded, its
5727          * logged_trans will be 0, in which case we have to fully log it since
5728          * logged_trans is a transient field, not persisted.
5729          */
5730         if (inode->logged_trans == trans->transid &&
5731             !test_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags))
5732                 return false;
5733
5734         return true;
5735 }
5736
5737 struct btrfs_dir_list {
5738         u64 ino;
5739         struct list_head list;
5740 };
5741
5742 /*
5743  * Log the inodes of the new dentries of a directory. See log_dir_items() for
5744  * details about the why it is needed.
5745  * This is a recursive operation - if an existing dentry corresponds to a
5746  * directory, that directory's new entries are logged too (same behaviour as
5747  * ext3/4, xfs, f2fs, reiserfs, nilfs2). Note that when logging the inodes
5748  * the dentries point to we do not lock their i_mutex, otherwise lockdep
5749  * complains about the following circular lock dependency / possible deadlock:
5750  *
5751  *        CPU0                                        CPU1
5752  *        ----                                        ----
5753  * lock(&type->i_mutex_dir_key#3/2);
5754  *                                            lock(sb_internal#2);
5755  *                                            lock(&type->i_mutex_dir_key#3/2);
5756  * lock(&sb->s_type->i_mutex_key#14);
5757  *
5758  * Where sb_internal is the lock (a counter that works as a lock) acquired by
5759  * sb_start_intwrite() in btrfs_start_transaction().
5760  * Not locking i_mutex of the inodes is still safe because:
5761  *
5762  * 1) For regular files we log with a mode of LOG_INODE_EXISTS. It's possible
5763  *    that while logging the inode new references (names) are added or removed
5764  *    from the inode, leaving the logged inode item with a link count that does
5765  *    not match the number of logged inode reference items. This is fine because
5766  *    at log replay time we compute the real number of links and correct the
5767  *    link count in the inode item (see replay_one_buffer() and
5768  *    link_to_fixup_dir());
5769  *
5770  * 2) For directories we log with a mode of LOG_INODE_ALL. It's possible that
5771  *    while logging the inode's items new items with keys BTRFS_DIR_ITEM_KEY and
5772  *    BTRFS_DIR_INDEX_KEY are added to fs/subvol tree and the logged inode item
5773  *    has a size that doesn't match the sum of the lengths of all the logged
5774  *    names. This does not result in a problem because if a dir_item key is
5775  *    logged but its matching dir_index key is not logged, at log replay time we
5776  *    don't use it to replay the respective name (see replay_one_name()). On the
5777  *    other hand if only the dir_index key ends up being logged, the respective
5778  *    name is added to the fs/subvol tree with both the dir_item and dir_index
5779  *    keys created (see replay_one_name()).
5780  *    The directory's inode item with a wrong i_size is not a problem as well,
5781  *    since we don't use it at log replay time to set the i_size in the inode
5782  *    item of the fs/subvol tree (see overwrite_item()).
5783  */
5784 static int log_new_dir_dentries(struct btrfs_trans_handle *trans,
5785                                 struct btrfs_root *root,
5786                                 struct btrfs_inode *start_inode,
5787                                 struct btrfs_log_ctx *ctx)
5788 {
5789         struct btrfs_fs_info *fs_info = root->fs_info;
5790         struct btrfs_root *log = root->log_root;
5791         struct btrfs_path *path;
5792         LIST_HEAD(dir_list);
5793         struct btrfs_dir_list *dir_elem;
5794         int ret = 0;
5795
5796         path = btrfs_alloc_path();
5797         if (!path)
5798                 return -ENOMEM;
5799
5800         dir_elem = kmalloc(sizeof(*dir_elem), GFP_NOFS);
5801         if (!dir_elem) {
5802                 btrfs_free_path(path);
5803                 return -ENOMEM;
5804         }
5805         dir_elem->ino = btrfs_ino(start_inode);
5806         list_add_tail(&dir_elem->list, &dir_list);
5807
5808         while (!list_empty(&dir_list)) {
5809                 struct extent_buffer *leaf;
5810                 struct btrfs_key min_key;
5811                 int nritems;
5812                 int i;
5813
5814                 dir_elem = list_first_entry(&dir_list, struct btrfs_dir_list,
5815                                             list);
5816                 if (ret)
5817                         goto next_dir_inode;
5818
5819                 min_key.objectid = dir_elem->ino;
5820                 min_key.type = BTRFS_DIR_ITEM_KEY;
5821                 min_key.offset = 0;
5822 again:
5823                 btrfs_release_path(path);
5824                 ret = btrfs_search_forward(log, &min_key, path, trans->transid);
5825                 if (ret < 0) {
5826                         goto next_dir_inode;
5827                 } else if (ret > 0) {
5828                         ret = 0;
5829                         goto next_dir_inode;
5830                 }
5831
5832 process_leaf:
5833                 leaf = path->nodes[0];
5834                 nritems = btrfs_header_nritems(leaf);
5835                 for (i = path->slots[0]; i < nritems; i++) {
5836                         struct btrfs_dir_item *di;
5837                         struct btrfs_key di_key;
5838                         struct inode *di_inode;
5839                         struct btrfs_dir_list *new_dir_elem;
5840                         int log_mode = LOG_INODE_EXISTS;
5841                         int type;
5842
5843                         btrfs_item_key_to_cpu(leaf, &min_key, i);
5844                         if (min_key.objectid != dir_elem->ino ||
5845                             min_key.type != BTRFS_DIR_ITEM_KEY)
5846                                 goto next_dir_inode;
5847
5848                         di = btrfs_item_ptr(leaf, i, struct btrfs_dir_item);
5849                         type = btrfs_dir_type(leaf, di);
5850                         if (btrfs_dir_transid(leaf, di) < trans->transid &&
5851                             type != BTRFS_FT_DIR)
5852                                 continue;
5853                         btrfs_dir_item_key_to_cpu(leaf, di, &di_key);
5854                         if (di_key.type == BTRFS_ROOT_ITEM_KEY)
5855                                 continue;
5856
5857                         btrfs_release_path(path);
5858                         di_inode = btrfs_iget(fs_info->sb, di_key.objectid, root);
5859                         if (IS_ERR(di_inode)) {
5860                                 ret = PTR_ERR(di_inode);
5861                                 goto next_dir_inode;
5862                         }
5863
5864                         if (!need_log_inode(trans, BTRFS_I(di_inode))) {
5865                                 btrfs_add_delayed_iput(di_inode);
5866                                 break;
5867                         }
5868
5869                         ctx->log_new_dentries = false;
5870                         if (type == BTRFS_FT_DIR)
5871                                 log_mode = LOG_INODE_ALL;
5872                         ret = btrfs_log_inode(trans, root, BTRFS_I(di_inode),
5873                                               log_mode, ctx);
5874                         btrfs_add_delayed_iput(di_inode);
5875                         if (ret)
5876                                 goto next_dir_inode;
5877                         if (ctx->log_new_dentries) {
5878                                 new_dir_elem = kmalloc(sizeof(*new_dir_elem),
5879                                                        GFP_NOFS);
5880                                 if (!new_dir_elem) {
5881                                         ret = -ENOMEM;
5882                                         goto next_dir_inode;
5883                                 }
5884                                 new_dir_elem->ino = di_key.objectid;
5885                                 list_add_tail(&new_dir_elem->list, &dir_list);
5886                         }
5887                         break;
5888                 }
5889                 if (i == nritems) {
5890                         ret = btrfs_next_leaf(log, path);
5891                         if (ret < 0) {
5892                                 goto next_dir_inode;
5893                         } else if (ret > 0) {
5894                                 ret = 0;
5895                                 goto next_dir_inode;
5896                         }
5897                         goto process_leaf;
5898                 }
5899                 if (min_key.offset < (u64)-1) {
5900                         min_key.offset++;
5901                         goto again;
5902                 }
5903 next_dir_inode:
5904                 list_del(&dir_elem->list);
5905                 kfree(dir_elem);
5906         }
5907
5908         btrfs_free_path(path);
5909         return ret;
5910 }
5911
5912 static int btrfs_log_all_parents(struct btrfs_trans_handle *trans,
5913                                  struct btrfs_inode *inode,
5914                                  struct btrfs_log_ctx *ctx)
5915 {
5916         struct btrfs_fs_info *fs_info = trans->fs_info;
5917         int ret;
5918         struct btrfs_path *path;
5919         struct btrfs_key key;
5920         struct btrfs_root *root = inode->root;
5921         const u64 ino = btrfs_ino(inode);
5922
5923         path = btrfs_alloc_path();
5924         if (!path)
5925                 return -ENOMEM;
5926         path->skip_locking = 1;
5927         path->search_commit_root = 1;
5928
5929         key.objectid = ino;
5930         key.type = BTRFS_INODE_REF_KEY;
5931         key.offset = 0;
5932         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5933         if (ret < 0)
5934                 goto out;
5935
5936         while (true) {
5937                 struct extent_buffer *leaf = path->nodes[0];
5938                 int slot = path->slots[0];
5939                 u32 cur_offset = 0;
5940                 u32 item_size;
5941                 unsigned long ptr;
5942
5943                 if (slot >= btrfs_header_nritems(leaf)) {
5944                         ret = btrfs_next_leaf(root, path);
5945                         if (ret < 0)
5946                                 goto out;
5947                         else if (ret > 0)
5948                                 break;
5949                         continue;
5950                 }
5951
5952                 btrfs_item_key_to_cpu(leaf, &key, slot);
5953                 /* BTRFS_INODE_EXTREF_KEY is BTRFS_INODE_REF_KEY + 1 */
5954                 if (key.objectid != ino || key.type > BTRFS_INODE_EXTREF_KEY)
5955                         break;
5956
5957                 item_size = btrfs_item_size_nr(leaf, slot);
5958                 ptr = btrfs_item_ptr_offset(leaf, slot);
5959                 while (cur_offset < item_size) {
5960                         struct btrfs_key inode_key;
5961                         struct inode *dir_inode;
5962
5963                         inode_key.type = BTRFS_INODE_ITEM_KEY;
5964                         inode_key.offset = 0;
5965
5966                         if (key.type == BTRFS_INODE_EXTREF_KEY) {
5967                                 struct btrfs_inode_extref *extref;
5968
5969                                 extref = (struct btrfs_inode_extref *)
5970                                         (ptr + cur_offset);
5971                                 inode_key.objectid = btrfs_inode_extref_parent(
5972                                         leaf, extref);
5973                                 cur_offset += sizeof(*extref);
5974                                 cur_offset += btrfs_inode_extref_name_len(leaf,
5975                                         extref);
5976                         } else {
5977                                 inode_key.objectid = key.offset;
5978                                 cur_offset = item_size;
5979                         }
5980
5981                         dir_inode = btrfs_iget(fs_info->sb, inode_key.objectid,
5982                                                root);
5983                         /*
5984                          * If the parent inode was deleted, return an error to
5985                          * fallback to a transaction commit. This is to prevent
5986                          * getting an inode that was moved from one parent A to
5987                          * a parent B, got its former parent A deleted and then
5988                          * it got fsync'ed, from existing at both parents after
5989                          * a log replay (and the old parent still existing).
5990                          * Example:
5991                          *
5992                          * mkdir /mnt/A
5993                          * mkdir /mnt/B
5994                          * touch /mnt/B/bar
5995                          * sync
5996                          * mv /mnt/B/bar /mnt/A/bar
5997                          * mv -T /mnt/A /mnt/B
5998                          * fsync /mnt/B/bar
5999                          * <power fail>
6000                          *
6001                          * If we ignore the old parent B which got deleted,
6002                          * after a log replay we would have file bar linked
6003                          * at both parents and the old parent B would still
6004                          * exist.
6005                          */
6006                         if (IS_ERR(dir_inode)) {
6007                                 ret = PTR_ERR(dir_inode);
6008                                 goto out;
6009                         }
6010
6011                         if (!need_log_inode(trans, BTRFS_I(dir_inode))) {
6012                                 btrfs_add_delayed_iput(dir_inode);
6013                                 continue;
6014                         }
6015
6016                         if (ctx)
6017                                 ctx->log_new_dentries = false;
6018                         ret = btrfs_log_inode(trans, root, BTRFS_I(dir_inode),
6019                                               LOG_INODE_ALL, ctx);
6020                         if (!ret && ctx && ctx->log_new_dentries)
6021                                 ret = log_new_dir_dentries(trans, root,
6022                                                    BTRFS_I(dir_inode), ctx);
6023                         btrfs_add_delayed_iput(dir_inode);
6024                         if (ret)
6025                                 goto out;
6026                 }
6027                 path->slots[0]++;
6028         }
6029         ret = 0;
6030 out:
6031         btrfs_free_path(path);
6032         return ret;
6033 }
6034
6035 static int log_new_ancestors(struct btrfs_trans_handle *trans,
6036                              struct btrfs_root *root,
6037                              struct btrfs_path *path,
6038                              struct btrfs_log_ctx *ctx)
6039 {
6040         struct btrfs_key found_key;
6041
6042         btrfs_item_key_to_cpu(path->nodes[0], &found_key, path->slots[0]);
6043
6044         while (true) {
6045                 struct btrfs_fs_info *fs_info = root->fs_info;
6046                 struct extent_buffer *leaf = path->nodes[0];
6047                 int slot = path->slots[0];
6048                 struct btrfs_key search_key;
6049                 struct inode *inode;
6050                 u64 ino;
6051                 int ret = 0;
6052
6053                 btrfs_release_path(path);
6054
6055                 ino = found_key.offset;
6056
6057                 search_key.objectid = found_key.offset;
6058                 search_key.type = BTRFS_INODE_ITEM_KEY;
6059                 search_key.offset = 0;
6060                 inode = btrfs_iget(fs_info->sb, ino, root);
6061                 if (IS_ERR(inode))
6062                         return PTR_ERR(inode);
6063
6064                 if (BTRFS_I(inode)->generation >= trans->transid &&
6065                     need_log_inode(trans, BTRFS_I(inode)))
6066                         ret = btrfs_log_inode(trans, root, BTRFS_I(inode),
6067                                               LOG_INODE_EXISTS, ctx);
6068                 btrfs_add_delayed_iput(inode);
6069                 if (ret)
6070                         return ret;
6071
6072                 if (search_key.objectid == BTRFS_FIRST_FREE_OBJECTID)
6073                         break;
6074
6075                 search_key.type = BTRFS_INODE_REF_KEY;
6076                 ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
6077                 if (ret < 0)
6078                         return ret;
6079
6080                 leaf = path->nodes[0];
6081                 slot = path->slots[0];
6082                 if (slot >= btrfs_header_nritems(leaf)) {
6083                         ret = btrfs_next_leaf(root, path);
6084                         if (ret < 0)
6085                                 return ret;
6086                         else if (ret > 0)
6087                                 return -ENOENT;
6088                         leaf = path->nodes[0];
6089                         slot = path->slots[0];
6090                 }
6091
6092                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
6093                 if (found_key.objectid != search_key.objectid ||
6094                     found_key.type != BTRFS_INODE_REF_KEY)
6095                         return -ENOENT;
6096         }
6097         return 0;
6098 }
6099
6100 static int log_new_ancestors_fast(struct btrfs_trans_handle *trans,
6101                                   struct btrfs_inode *inode,
6102                                   struct dentry *parent,
6103                                   struct btrfs_log_ctx *ctx)
6104 {
6105         struct btrfs_root *root = inode->root;
6106         struct dentry *old_parent = NULL;
6107         struct super_block *sb = inode->vfs_inode.i_sb;
6108         int ret = 0;
6109
6110         while (true) {
6111                 if (!parent || d_really_is_negative(parent) ||
6112                     sb != parent->d_sb)
6113                         break;
6114
6115                 inode = BTRFS_I(d_inode(parent));
6116                 if (root != inode->root)
6117                         break;
6118
6119                 if (inode->generation >= trans->transid &&
6120                     need_log_inode(trans, inode)) {
6121                         ret = btrfs_log_inode(trans, root, inode,
6122                                               LOG_INODE_EXISTS, ctx);
6123                         if (ret)
6124                                 break;
6125                 }
6126                 if (IS_ROOT(parent))
6127                         break;
6128
6129                 parent = dget_parent(parent);
6130                 dput(old_parent);
6131                 old_parent = parent;
6132         }
6133         dput(old_parent);
6134
6135         return ret;
6136 }
6137
6138 static int log_all_new_ancestors(struct btrfs_trans_handle *trans,
6139                                  struct btrfs_inode *inode,
6140                                  struct dentry *parent,
6141                                  struct btrfs_log_ctx *ctx)
6142 {
6143         struct btrfs_root *root = inode->root;
6144         const u64 ino = btrfs_ino(inode);
6145         struct btrfs_path *path;
6146         struct btrfs_key search_key;
6147         int ret;
6148
6149         /*
6150          * For a single hard link case, go through a fast path that does not
6151          * need to iterate the fs/subvolume tree.
6152          */
6153         if (inode->vfs_inode.i_nlink < 2)
6154                 return log_new_ancestors_fast(trans, inode, parent, ctx);
6155
6156         path = btrfs_alloc_path();
6157         if (!path)
6158                 return -ENOMEM;
6159
6160         search_key.objectid = ino;
6161         search_key.type = BTRFS_INODE_REF_KEY;
6162         search_key.offset = 0;
6163 again:
6164         ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
6165         if (ret < 0)
6166                 goto out;
6167         if (ret == 0)
6168                 path->slots[0]++;
6169
6170         while (true) {
6171                 struct extent_buffer *leaf = path->nodes[0];
6172                 int slot = path->slots[0];
6173                 struct btrfs_key found_key;
6174
6175                 if (slot >= btrfs_header_nritems(leaf)) {
6176                         ret = btrfs_next_leaf(root, path);
6177                         if (ret < 0)
6178                                 goto out;
6179                         else if (ret > 0)
6180                                 break;
6181                         continue;
6182                 }
6183
6184                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
6185                 if (found_key.objectid != ino ||
6186                     found_key.type > BTRFS_INODE_EXTREF_KEY)
6187                         break;
6188
6189                 /*
6190                  * Don't deal with extended references because they are rare
6191                  * cases and too complex to deal with (we would need to keep
6192                  * track of which subitem we are processing for each item in
6193                  * this loop, etc). So just return some error to fallback to
6194                  * a transaction commit.
6195                  */
6196                 if (found_key.type == BTRFS_INODE_EXTREF_KEY) {
6197                         ret = -EMLINK;
6198                         goto out;
6199                 }
6200
6201                 /*
6202                  * Logging ancestors needs to do more searches on the fs/subvol
6203                  * tree, so it releases the path as needed to avoid deadlocks.
6204                  * Keep track of the last inode ref key and resume from that key
6205                  * after logging all new ancestors for the current hard link.
6206                  */
6207                 memcpy(&search_key, &found_key, sizeof(search_key));
6208
6209                 ret = log_new_ancestors(trans, root, path, ctx);
6210                 if (ret)
6211                         goto out;
6212                 btrfs_release_path(path);
6213                 goto again;
6214         }
6215         ret = 0;
6216 out:
6217         btrfs_free_path(path);
6218         return ret;
6219 }
6220
6221 /*
6222  * helper function around btrfs_log_inode to make sure newly created
6223  * parent directories also end up in the log.  A minimal inode and backref
6224  * only logging is done of any parent directories that are older than
6225  * the last committed transaction
6226  */
6227 static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
6228                                   struct btrfs_inode *inode,
6229                                   struct dentry *parent,
6230                                   int inode_only,
6231                                   struct btrfs_log_ctx *ctx)
6232 {
6233         struct btrfs_root *root = inode->root;
6234         struct btrfs_fs_info *fs_info = root->fs_info;
6235         int ret = 0;
6236         bool log_dentries = false;
6237
6238         if (btrfs_test_opt(fs_info, NOTREELOG)) {
6239                 ret = 1;
6240                 goto end_no_trans;
6241         }
6242
6243         if (btrfs_root_refs(&root->root_item) == 0) {
6244                 ret = 1;
6245                 goto end_no_trans;
6246         }
6247
6248         /*
6249          * Skip already logged inodes or inodes corresponding to tmpfiles
6250          * (since logging them is pointless, a link count of 0 means they
6251          * will never be accessible).
6252          */
6253         if ((btrfs_inode_in_log(inode, trans->transid) &&
6254              list_empty(&ctx->ordered_extents)) ||
6255             inode->vfs_inode.i_nlink == 0) {
6256                 ret = BTRFS_NO_LOG_SYNC;
6257                 goto end_no_trans;
6258         }
6259
6260         ret = start_log_trans(trans, root, ctx);
6261         if (ret)
6262                 goto end_no_trans;
6263
6264         ret = btrfs_log_inode(trans, root, inode, inode_only, ctx);
6265         if (ret)
6266                 goto end_trans;
6267
6268         /*
6269          * for regular files, if its inode is already on disk, we don't
6270          * have to worry about the parents at all.  This is because
6271          * we can use the last_unlink_trans field to record renames
6272          * and other fun in this file.
6273          */
6274         if (S_ISREG(inode->vfs_inode.i_mode) &&
6275             inode->generation < trans->transid &&
6276             inode->last_unlink_trans < trans->transid) {
6277                 ret = 0;
6278                 goto end_trans;
6279         }
6280
6281         if (S_ISDIR(inode->vfs_inode.i_mode) && ctx && ctx->log_new_dentries)
6282                 log_dentries = true;
6283
6284         /*
6285          * On unlink we must make sure all our current and old parent directory
6286          * inodes are fully logged. This is to prevent leaving dangling
6287          * directory index entries in directories that were our parents but are
6288          * not anymore. Not doing this results in old parent directory being
6289          * impossible to delete after log replay (rmdir will always fail with
6290          * error -ENOTEMPTY).
6291          *
6292          * Example 1:
6293          *
6294          * mkdir testdir
6295          * touch testdir/foo
6296          * ln testdir/foo testdir/bar
6297          * sync
6298          * unlink testdir/bar
6299          * xfs_io -c fsync testdir/foo
6300          * <power failure>
6301          * mount fs, triggers log replay
6302          *
6303          * If we don't log the parent directory (testdir), after log replay the
6304          * directory still has an entry pointing to the file inode using the bar
6305          * name, but a matching BTRFS_INODE_[REF|EXTREF]_KEY does not exist and
6306          * the file inode has a link count of 1.
6307          *
6308          * Example 2:
6309          *
6310          * mkdir testdir
6311          * touch foo
6312          * ln foo testdir/foo2
6313          * ln foo testdir/foo3
6314          * sync
6315          * unlink testdir/foo3
6316          * xfs_io -c fsync foo
6317          * <power failure>
6318          * mount fs, triggers log replay
6319          *
6320          * Similar as the first example, after log replay the parent directory
6321          * testdir still has an entry pointing to the inode file with name foo3
6322          * but the file inode does not have a matching BTRFS_INODE_REF_KEY item
6323          * and has a link count of 2.
6324          */
6325         if (inode->last_unlink_trans >= trans->transid) {
6326                 ret = btrfs_log_all_parents(trans, inode, ctx);
6327                 if (ret)
6328                         goto end_trans;
6329         }
6330
6331         ret = log_all_new_ancestors(trans, inode, parent, ctx);
6332         if (ret)
6333                 goto end_trans;
6334
6335         if (log_dentries)
6336                 ret = log_new_dir_dentries(trans, root, inode, ctx);
6337         else
6338                 ret = 0;
6339 end_trans:
6340         if (ret < 0) {
6341                 btrfs_set_log_full_commit(trans);
6342                 ret = 1;
6343         }
6344
6345         if (ret)
6346                 btrfs_remove_log_ctx(root, ctx);
6347         btrfs_end_log_trans(root);
6348 end_no_trans:
6349         return ret;
6350 }
6351
6352 /*
6353  * it is not safe to log dentry if the chunk root has added new
6354  * chunks.  This returns 0 if the dentry was logged, and 1 otherwise.
6355  * If this returns 1, you must commit the transaction to safely get your
6356  * data on disk.
6357  */
6358 int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
6359                           struct dentry *dentry,
6360                           struct btrfs_log_ctx *ctx)
6361 {
6362         struct dentry *parent = dget_parent(dentry);
6363         int ret;
6364
6365         ret = btrfs_log_inode_parent(trans, BTRFS_I(d_inode(dentry)), parent,
6366                                      LOG_INODE_ALL, ctx);
6367         dput(parent);
6368
6369         return ret;
6370 }
6371
6372 /*
6373  * should be called during mount to recover any replay any log trees
6374  * from the FS
6375  */
6376 int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
6377 {
6378         int ret;
6379         struct btrfs_path *path;
6380         struct btrfs_trans_handle *trans;
6381         struct btrfs_key key;
6382         struct btrfs_key found_key;
6383         struct btrfs_root *log;
6384         struct btrfs_fs_info *fs_info = log_root_tree->fs_info;
6385         struct walk_control wc = {
6386                 .process_func = process_one_buffer,
6387                 .stage = LOG_WALK_PIN_ONLY,
6388         };
6389
6390         path = btrfs_alloc_path();
6391         if (!path)
6392                 return -ENOMEM;
6393
6394         set_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6395
6396         trans = btrfs_start_transaction(fs_info->tree_root, 0);
6397         if (IS_ERR(trans)) {
6398                 ret = PTR_ERR(trans);
6399                 goto error;
6400         }
6401
6402         wc.trans = trans;
6403         wc.pin = 1;
6404
6405         ret = walk_log_tree(trans, log_root_tree, &wc);
6406         if (ret) {
6407                 btrfs_handle_fs_error(fs_info, ret,
6408                         "Failed to pin buffers while recovering log root tree.");
6409                 goto error;
6410         }
6411
6412 again:
6413         key.objectid = BTRFS_TREE_LOG_OBJECTID;
6414         key.offset = (u64)-1;
6415         key.type = BTRFS_ROOT_ITEM_KEY;
6416
6417         while (1) {
6418                 ret = btrfs_search_slot(NULL, log_root_tree, &key, path, 0, 0);
6419
6420                 if (ret < 0) {
6421                         btrfs_handle_fs_error(fs_info, ret,
6422                                     "Couldn't find tree log root.");
6423                         goto error;
6424                 }
6425                 if (ret > 0) {
6426                         if (path->slots[0] == 0)
6427                                 break;
6428                         path->slots[0]--;
6429                 }
6430                 btrfs_item_key_to_cpu(path->nodes[0], &found_key,
6431                                       path->slots[0]);
6432                 btrfs_release_path(path);
6433                 if (found_key.objectid != BTRFS_TREE_LOG_OBJECTID)
6434                         break;
6435
6436                 log = btrfs_read_tree_root(log_root_tree, &found_key);
6437                 if (IS_ERR(log)) {
6438                         ret = PTR_ERR(log);
6439                         btrfs_handle_fs_error(fs_info, ret,
6440                                     "Couldn't read tree log root.");
6441                         goto error;
6442                 }
6443
6444                 wc.replay_dest = btrfs_get_fs_root(fs_info, found_key.offset,
6445                                                    true);
6446                 if (IS_ERR(wc.replay_dest)) {
6447                         ret = PTR_ERR(wc.replay_dest);
6448
6449                         /*
6450                          * We didn't find the subvol, likely because it was
6451                          * deleted.  This is ok, simply skip this log and go to
6452                          * the next one.
6453                          *
6454                          * We need to exclude the root because we can't have
6455                          * other log replays overwriting this log as we'll read
6456                          * it back in a few more times.  This will keep our
6457                          * block from being modified, and we'll just bail for
6458                          * each subsequent pass.
6459                          */
6460                         if (ret == -ENOENT)
6461                                 ret = btrfs_pin_extent_for_log_replay(trans,
6462                                                         log->node->start,
6463                                                         log->node->len);
6464                         btrfs_put_root(log);
6465
6466                         if (!ret)
6467                                 goto next;
6468                         btrfs_handle_fs_error(fs_info, ret,
6469                                 "Couldn't read target root for tree log recovery.");
6470                         goto error;
6471                 }
6472
6473                 wc.replay_dest->log_root = log;
6474                 ret = btrfs_record_root_in_trans(trans, wc.replay_dest);
6475                 if (ret)
6476                         /* The loop needs to continue due to the root refs */
6477                         btrfs_handle_fs_error(fs_info, ret,
6478                                 "failed to record the log root in transaction");
6479                 else
6480                         ret = walk_log_tree(trans, log, &wc);
6481
6482                 if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
6483                         ret = fixup_inode_link_counts(trans, wc.replay_dest,
6484                                                       path);
6485                 }
6486
6487                 if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
6488                         struct btrfs_root *root = wc.replay_dest;
6489
6490                         btrfs_release_path(path);
6491
6492                         /*
6493                          * We have just replayed everything, and the highest
6494                          * objectid of fs roots probably has changed in case
6495                          * some inode_item's got replayed.
6496                          *
6497                          * root->objectid_mutex is not acquired as log replay
6498                          * could only happen during mount.
6499                          */
6500                         ret = btrfs_init_root_free_objectid(root);
6501                 }
6502
6503                 wc.replay_dest->log_root = NULL;
6504                 btrfs_put_root(wc.replay_dest);
6505                 btrfs_put_root(log);
6506
6507                 if (ret)
6508                         goto error;
6509 next:
6510                 if (found_key.offset == 0)
6511                         break;
6512                 key.offset = found_key.offset - 1;
6513         }
6514         btrfs_release_path(path);
6515
6516         /* step one is to pin it all, step two is to replay just inodes */
6517         if (wc.pin) {
6518                 wc.pin = 0;
6519                 wc.process_func = replay_one_buffer;
6520                 wc.stage = LOG_WALK_REPLAY_INODES;
6521                 goto again;
6522         }
6523         /* step three is to replay everything */
6524         if (wc.stage < LOG_WALK_REPLAY_ALL) {
6525                 wc.stage++;
6526                 goto again;
6527         }
6528
6529         btrfs_free_path(path);
6530
6531         /* step 4: commit the transaction, which also unpins the blocks */
6532         ret = btrfs_commit_transaction(trans);
6533         if (ret)
6534                 return ret;
6535
6536         log_root_tree->log_root = NULL;
6537         clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6538         btrfs_put_root(log_root_tree);
6539
6540         return 0;
6541 error:
6542         if (wc.trans)
6543                 btrfs_end_transaction(wc.trans);
6544         clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6545         btrfs_free_path(path);
6546         return ret;
6547 }
6548
6549 /*
6550  * there are some corner cases where we want to force a full
6551  * commit instead of allowing a directory to be logged.
6552  *
6553  * They revolve around files there were unlinked from the directory, and
6554  * this function updates the parent directory so that a full commit is
6555  * properly done if it is fsync'd later after the unlinks are done.
6556  *
6557  * Must be called before the unlink operations (updates to the subvolume tree,
6558  * inodes, etc) are done.
6559  */
6560 void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
6561                              struct btrfs_inode *dir, struct btrfs_inode *inode,
6562                              int for_rename)
6563 {
6564         /*
6565          * when we're logging a file, if it hasn't been renamed
6566          * or unlinked, and its inode is fully committed on disk,
6567          * we don't have to worry about walking up the directory chain
6568          * to log its parents.
6569          *
6570          * So, we use the last_unlink_trans field to put this transid
6571          * into the file.  When the file is logged we check it and
6572          * don't log the parents if the file is fully on disk.
6573          */
6574         mutex_lock(&inode->log_mutex);
6575         inode->last_unlink_trans = trans->transid;
6576         mutex_unlock(&inode->log_mutex);
6577
6578         /*
6579          * if this directory was already logged any new
6580          * names for this file/dir will get recorded
6581          */
6582         if (dir->logged_trans == trans->transid)
6583                 return;
6584
6585         /*
6586          * if the inode we're about to unlink was logged,
6587          * the log will be properly updated for any new names
6588          */
6589         if (inode->logged_trans == trans->transid)
6590                 return;
6591
6592         /*
6593          * when renaming files across directories, if the directory
6594          * there we're unlinking from gets fsync'd later on, there's
6595          * no way to find the destination directory later and fsync it
6596          * properly.  So, we have to be conservative and force commits
6597          * so the new name gets discovered.
6598          */
6599         if (for_rename)
6600                 goto record;
6601
6602         /* we can safely do the unlink without any special recording */
6603         return;
6604
6605 record:
6606         mutex_lock(&dir->log_mutex);
6607         dir->last_unlink_trans = trans->transid;
6608         mutex_unlock(&dir->log_mutex);
6609 }
6610
6611 /*
6612  * Make sure that if someone attempts to fsync the parent directory of a deleted
6613  * snapshot, it ends up triggering a transaction commit. This is to guarantee
6614  * that after replaying the log tree of the parent directory's root we will not
6615  * see the snapshot anymore and at log replay time we will not see any log tree
6616  * corresponding to the deleted snapshot's root, which could lead to replaying
6617  * it after replaying the log tree of the parent directory (which would replay
6618  * the snapshot delete operation).
6619  *
6620  * Must be called before the actual snapshot destroy operation (updates to the
6621  * parent root and tree of tree roots trees, etc) are done.
6622  */
6623 void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
6624                                    struct btrfs_inode *dir)
6625 {
6626         mutex_lock(&dir->log_mutex);
6627         dir->last_unlink_trans = trans->transid;
6628         mutex_unlock(&dir->log_mutex);
6629 }
6630
6631 /**
6632  * Update the log after adding a new name for an inode.
6633  *
6634  * @trans:              Transaction handle.
6635  * @old_dentry:         The dentry associated with the old name and the old
6636  *                      parent directory.
6637  * @old_dir:            The inode of the previous parent directory for the case
6638  *                      of a rename. For a link operation, it must be NULL.
6639  * @parent:             The dentry associated with the directory under which the
6640  *                      new name is located.
6641  *
6642  * Call this after adding a new name for an inode, as a result of a link or
6643  * rename operation, and it will properly update the log to reflect the new name.
6644  */
6645 void btrfs_log_new_name(struct btrfs_trans_handle *trans,
6646                         struct dentry *old_dentry, struct btrfs_inode *old_dir,
6647                         struct dentry *parent)
6648 {
6649         struct btrfs_inode *inode = BTRFS_I(d_inode(old_dentry));
6650         struct btrfs_log_ctx ctx;
6651
6652         /*
6653          * this will force the logging code to walk the dentry chain
6654          * up for the file
6655          */
6656         if (!S_ISDIR(inode->vfs_inode.i_mode))
6657                 inode->last_unlink_trans = trans->transid;
6658
6659         /*
6660          * if this inode hasn't been logged and directory we're renaming it
6661          * from hasn't been logged, we don't need to log it
6662          */
6663         if (!inode_logged(trans, inode) &&
6664             (!old_dir || !inode_logged(trans, old_dir)))
6665                 return;
6666
6667         /*
6668          * If we are doing a rename (old_dir is not NULL) from a directory that
6669          * was previously logged, make sure the next log attempt on the directory
6670          * is not skipped and logs the inode again. This is because the log may
6671          * not currently be authoritative for a range including the old
6672          * BTRFS_DIR_ITEM_KEY and BTRFS_DIR_INDEX_KEY keys, so we want to make
6673          * sure after a log replay we do not end up with both the new and old
6674          * dentries around (in case the inode is a directory we would have a
6675          * directory with two hard links and 2 inode references for different
6676          * parents). The next log attempt of old_dir will happen at
6677          * btrfs_log_all_parents(), called through btrfs_log_inode_parent()
6678          * below, because we have previously set inode->last_unlink_trans to the
6679          * current transaction ID, either here or at btrfs_record_unlink_dir() in
6680          * case inode is a directory.
6681          */
6682         if (old_dir)
6683                 old_dir->logged_trans = 0;
6684
6685         btrfs_init_log_ctx(&ctx, &inode->vfs_inode);
6686         ctx.logging_new_name = true;
6687         /*
6688          * We don't care about the return value. If we fail to log the new name
6689          * then we know the next attempt to sync the log will fallback to a full
6690          * transaction commit (due to a call to btrfs_set_log_full_commit()), so
6691          * we don't need to worry about getting a log committed that has an
6692          * inconsistent state after a rename operation.
6693          */
6694         btrfs_log_inode_parent(trans, inode, parent, LOG_INODE_EXISTS, &ctx);
6695 }
6696