btrfs: remove no longer needed logic for replaying directory deletes
[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, 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, 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,
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, 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, 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,
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,
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 = BTRFS_DIR_LOG_INDEX_KEY;
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 != BTRFS_DIR_LOG_INDEX_KEY || 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 != BTRFS_DIR_LOG_INDEX_KEY || 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         struct btrfs_dir_item *di;
2286         int name_len;
2287         char *name;
2288         struct inode *inode = NULL;
2289         struct btrfs_key location;
2290
2291         /*
2292          * Currenly we only log dir index keys. Even if we replay a log created
2293          * by an older kernel that logged both dir index and dir item keys, all
2294          * we need to do is process the dir index keys, we (and our caller) can
2295          * safely ignore dir item keys (key type BTRFS_DIR_ITEM_KEY).
2296          */
2297         ASSERT(dir_key->type == BTRFS_DIR_INDEX_KEY);
2298
2299         eb = path->nodes[0];
2300         slot = path->slots[0];
2301         di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item);
2302         name_len = btrfs_dir_name_len(eb, di);
2303         name = kmalloc(name_len, GFP_NOFS);
2304         if (!name) {
2305                 ret = -ENOMEM;
2306                 goto out;
2307         }
2308
2309         read_extent_buffer(eb, name, (unsigned long)(di + 1), name_len);
2310
2311         if (log) {
2312                 struct btrfs_dir_item *log_di;
2313
2314                 log_di = btrfs_lookup_dir_index_item(trans, log, log_path,
2315                                                      dir_key->objectid,
2316                                                      dir_key->offset,
2317                                                      name, name_len, 0);
2318                 if (IS_ERR(log_di)) {
2319                         ret = PTR_ERR(log_di);
2320                         goto out;
2321                 } else if (log_di) {
2322                         /* The dentry exists in the log, we have nothing to do. */
2323                         ret = 0;
2324                         goto out;
2325                 }
2326         }
2327
2328         btrfs_dir_item_key_to_cpu(eb, di, &location);
2329         btrfs_release_path(path);
2330         btrfs_release_path(log_path);
2331         inode = read_one_inode(root, location.objectid);
2332         if (!inode) {
2333                 ret = -EIO;
2334                 goto out;
2335         }
2336
2337         ret = link_to_fixup_dir(trans, root, path, location.objectid);
2338         if (ret)
2339                 goto out;
2340
2341         inc_nlink(inode);
2342         ret = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(inode), name,
2343                                  name_len);
2344         if (ret)
2345                 goto out;
2346
2347         ret = btrfs_run_delayed_items(trans);
2348         if (ret)
2349                 goto out;
2350
2351         /*
2352          * Unlike dir item keys, dir index keys can only have one name (entry) in
2353          * them, as there are no key collisions since each key has a unique offset
2354          * (an index number), so we're done.
2355          */
2356 out:
2357         btrfs_release_path(path);
2358         btrfs_release_path(log_path);
2359         kfree(name);
2360         iput(inode);
2361         return ret;
2362 }
2363
2364 static int replay_xattr_deletes(struct btrfs_trans_handle *trans,
2365                               struct btrfs_root *root,
2366                               struct btrfs_root *log,
2367                               struct btrfs_path *path,
2368                               const u64 ino)
2369 {
2370         struct btrfs_key search_key;
2371         struct btrfs_path *log_path;
2372         int i;
2373         int nritems;
2374         int ret;
2375
2376         log_path = btrfs_alloc_path();
2377         if (!log_path)
2378                 return -ENOMEM;
2379
2380         search_key.objectid = ino;
2381         search_key.type = BTRFS_XATTR_ITEM_KEY;
2382         search_key.offset = 0;
2383 again:
2384         ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
2385         if (ret < 0)
2386                 goto out;
2387 process_leaf:
2388         nritems = btrfs_header_nritems(path->nodes[0]);
2389         for (i = path->slots[0]; i < nritems; i++) {
2390                 struct btrfs_key key;
2391                 struct btrfs_dir_item *di;
2392                 struct btrfs_dir_item *log_di;
2393                 u32 total_size;
2394                 u32 cur;
2395
2396                 btrfs_item_key_to_cpu(path->nodes[0], &key, i);
2397                 if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY) {
2398                         ret = 0;
2399                         goto out;
2400                 }
2401
2402                 di = btrfs_item_ptr(path->nodes[0], i, struct btrfs_dir_item);
2403                 total_size = btrfs_item_size_nr(path->nodes[0], i);
2404                 cur = 0;
2405                 while (cur < total_size) {
2406                         u16 name_len = btrfs_dir_name_len(path->nodes[0], di);
2407                         u16 data_len = btrfs_dir_data_len(path->nodes[0], di);
2408                         u32 this_len = sizeof(*di) + name_len + data_len;
2409                         char *name;
2410
2411                         name = kmalloc(name_len, GFP_NOFS);
2412                         if (!name) {
2413                                 ret = -ENOMEM;
2414                                 goto out;
2415                         }
2416                         read_extent_buffer(path->nodes[0], name,
2417                                            (unsigned long)(di + 1), name_len);
2418
2419                         log_di = btrfs_lookup_xattr(NULL, log, log_path, ino,
2420                                                     name, name_len, 0);
2421                         btrfs_release_path(log_path);
2422                         if (!log_di) {
2423                                 /* Doesn't exist in log tree, so delete it. */
2424                                 btrfs_release_path(path);
2425                                 di = btrfs_lookup_xattr(trans, root, path, ino,
2426                                                         name, name_len, -1);
2427                                 kfree(name);
2428                                 if (IS_ERR(di)) {
2429                                         ret = PTR_ERR(di);
2430                                         goto out;
2431                                 }
2432                                 ASSERT(di);
2433                                 ret = btrfs_delete_one_dir_name(trans, root,
2434                                                                 path, di);
2435                                 if (ret)
2436                                         goto out;
2437                                 btrfs_release_path(path);
2438                                 search_key = key;
2439                                 goto again;
2440                         }
2441                         kfree(name);
2442                         if (IS_ERR(log_di)) {
2443                                 ret = PTR_ERR(log_di);
2444                                 goto out;
2445                         }
2446                         cur += this_len;
2447                         di = (struct btrfs_dir_item *)((char *)di + this_len);
2448                 }
2449         }
2450         ret = btrfs_next_leaf(root, path);
2451         if (ret > 0)
2452                 ret = 0;
2453         else if (ret == 0)
2454                 goto process_leaf;
2455 out:
2456         btrfs_free_path(log_path);
2457         btrfs_release_path(path);
2458         return ret;
2459 }
2460
2461
2462 /*
2463  * deletion replay happens before we copy any new directory items
2464  * out of the log or out of backreferences from inodes.  It
2465  * scans the log to find ranges of keys that log is authoritative for,
2466  * and then scans the directory to find items in those ranges that are
2467  * not present in the log.
2468  *
2469  * Anything we don't find in the log is unlinked and removed from the
2470  * directory.
2471  */
2472 static noinline int replay_dir_deletes(struct btrfs_trans_handle *trans,
2473                                        struct btrfs_root *root,
2474                                        struct btrfs_root *log,
2475                                        struct btrfs_path *path,
2476                                        u64 dirid, int del_all)
2477 {
2478         u64 range_start;
2479         u64 range_end;
2480         int ret = 0;
2481         struct btrfs_key dir_key;
2482         struct btrfs_key found_key;
2483         struct btrfs_path *log_path;
2484         struct inode *dir;
2485
2486         dir_key.objectid = dirid;
2487         dir_key.type = BTRFS_DIR_INDEX_KEY;
2488         log_path = btrfs_alloc_path();
2489         if (!log_path)
2490                 return -ENOMEM;
2491
2492         dir = read_one_inode(root, dirid);
2493         /* it isn't an error if the inode isn't there, that can happen
2494          * because we replay the deletes before we copy in the inode item
2495          * from the log
2496          */
2497         if (!dir) {
2498                 btrfs_free_path(log_path);
2499                 return 0;
2500         }
2501
2502         range_start = 0;
2503         range_end = 0;
2504         while (1) {
2505                 if (del_all)
2506                         range_end = (u64)-1;
2507                 else {
2508                         ret = find_dir_range(log, path, dirid,
2509                                              &range_start, &range_end);
2510                         if (ret < 0)
2511                                 goto out;
2512                         else if (ret > 0)
2513                                 break;
2514                 }
2515
2516                 dir_key.offset = range_start;
2517                 while (1) {
2518                         int nritems;
2519                         ret = btrfs_search_slot(NULL, root, &dir_key, path,
2520                                                 0, 0);
2521                         if (ret < 0)
2522                                 goto out;
2523
2524                         nritems = btrfs_header_nritems(path->nodes[0]);
2525                         if (path->slots[0] >= nritems) {
2526                                 ret = btrfs_next_leaf(root, path);
2527                                 if (ret == 1)
2528                                         break;
2529                                 else if (ret < 0)
2530                                         goto out;
2531                         }
2532                         btrfs_item_key_to_cpu(path->nodes[0], &found_key,
2533                                               path->slots[0]);
2534                         if (found_key.objectid != dirid ||
2535                             found_key.type != dir_key.type) {
2536                                 ret = 0;
2537                                 goto out;
2538                         }
2539
2540                         if (found_key.offset > range_end)
2541                                 break;
2542
2543                         ret = check_item_in_log(trans, root, log, path,
2544                                                 log_path, dir,
2545                                                 &found_key);
2546                         if (ret)
2547                                 goto out;
2548                         if (found_key.offset == (u64)-1)
2549                                 break;
2550                         dir_key.offset = found_key.offset + 1;
2551                 }
2552                 btrfs_release_path(path);
2553                 if (range_end == (u64)-1)
2554                         break;
2555                 range_start = range_end + 1;
2556         }
2557         ret = 0;
2558 out:
2559         btrfs_release_path(path);
2560         btrfs_free_path(log_path);
2561         iput(dir);
2562         return ret;
2563 }
2564
2565 /*
2566  * the process_func used to replay items from the log tree.  This
2567  * gets called in two different stages.  The first stage just looks
2568  * for inodes and makes sure they are all copied into the subvolume.
2569  *
2570  * The second stage copies all the other item types from the log into
2571  * the subvolume.  The two stage approach is slower, but gets rid of
2572  * lots of complexity around inodes referencing other inodes that exist
2573  * only in the log (references come from either directory items or inode
2574  * back refs).
2575  */
2576 static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
2577                              struct walk_control *wc, u64 gen, int level)
2578 {
2579         int nritems;
2580         struct btrfs_path *path;
2581         struct btrfs_root *root = wc->replay_dest;
2582         struct btrfs_key key;
2583         int i;
2584         int ret;
2585
2586         ret = btrfs_read_buffer(eb, gen, level, NULL);
2587         if (ret)
2588                 return ret;
2589
2590         level = btrfs_header_level(eb);
2591
2592         if (level != 0)
2593                 return 0;
2594
2595         path = btrfs_alloc_path();
2596         if (!path)
2597                 return -ENOMEM;
2598
2599         nritems = btrfs_header_nritems(eb);
2600         for (i = 0; i < nritems; i++) {
2601                 btrfs_item_key_to_cpu(eb, &key, i);
2602
2603                 /* inode keys are done during the first stage */
2604                 if (key.type == BTRFS_INODE_ITEM_KEY &&
2605                     wc->stage == LOG_WALK_REPLAY_INODES) {
2606                         struct btrfs_inode_item *inode_item;
2607                         u32 mode;
2608
2609                         inode_item = btrfs_item_ptr(eb, i,
2610                                             struct btrfs_inode_item);
2611                         /*
2612                          * If we have a tmpfile (O_TMPFILE) that got fsync'ed
2613                          * and never got linked before the fsync, skip it, as
2614                          * replaying it is pointless since it would be deleted
2615                          * later. We skip logging tmpfiles, but it's always
2616                          * possible we are replaying a log created with a kernel
2617                          * that used to log tmpfiles.
2618                          */
2619                         if (btrfs_inode_nlink(eb, inode_item) == 0) {
2620                                 wc->ignore_cur_inode = true;
2621                                 continue;
2622                         } else {
2623                                 wc->ignore_cur_inode = false;
2624                         }
2625                         ret = replay_xattr_deletes(wc->trans, root, log,
2626                                                    path, key.objectid);
2627                         if (ret)
2628                                 break;
2629                         mode = btrfs_inode_mode(eb, inode_item);
2630                         if (S_ISDIR(mode)) {
2631                                 ret = replay_dir_deletes(wc->trans,
2632                                          root, log, path, key.objectid, 0);
2633                                 if (ret)
2634                                         break;
2635                         }
2636                         ret = overwrite_item(wc->trans, root, path,
2637                                              eb, i, &key);
2638                         if (ret)
2639                                 break;
2640
2641                         /*
2642                          * Before replaying extents, truncate the inode to its
2643                          * size. We need to do it now and not after log replay
2644                          * because before an fsync we can have prealloc extents
2645                          * added beyond the inode's i_size. If we did it after,
2646                          * through orphan cleanup for example, we would drop
2647                          * those prealloc extents just after replaying them.
2648                          */
2649                         if (S_ISREG(mode)) {
2650                                 struct btrfs_drop_extents_args drop_args = { 0 };
2651                                 struct inode *inode;
2652                                 u64 from;
2653
2654                                 inode = read_one_inode(root, key.objectid);
2655                                 if (!inode) {
2656                                         ret = -EIO;
2657                                         break;
2658                                 }
2659                                 from = ALIGN(i_size_read(inode),
2660                                              root->fs_info->sectorsize);
2661                                 drop_args.start = from;
2662                                 drop_args.end = (u64)-1;
2663                                 drop_args.drop_cache = true;
2664                                 ret = btrfs_drop_extents(wc->trans, root,
2665                                                          BTRFS_I(inode),
2666                                                          &drop_args);
2667                                 if (!ret) {
2668                                         inode_sub_bytes(inode,
2669                                                         drop_args.bytes_found);
2670                                         /* Update the inode's nbytes. */
2671                                         ret = btrfs_update_inode(wc->trans,
2672                                                         root, BTRFS_I(inode));
2673                                 }
2674                                 iput(inode);
2675                                 if (ret)
2676                                         break;
2677                         }
2678
2679                         ret = link_to_fixup_dir(wc->trans, root,
2680                                                 path, key.objectid);
2681                         if (ret)
2682                                 break;
2683                 }
2684
2685                 if (wc->ignore_cur_inode)
2686                         continue;
2687
2688                 if (key.type == BTRFS_DIR_INDEX_KEY &&
2689                     wc->stage == LOG_WALK_REPLAY_DIR_INDEX) {
2690                         ret = replay_one_dir_item(wc->trans, root, path,
2691                                                   eb, i, &key);
2692                         if (ret)
2693                                 break;
2694                 }
2695
2696                 if (wc->stage < LOG_WALK_REPLAY_ALL)
2697                         continue;
2698
2699                 /* these keys are simply copied */
2700                 if (key.type == BTRFS_XATTR_ITEM_KEY) {
2701                         ret = overwrite_item(wc->trans, root, path,
2702                                              eb, i, &key);
2703                         if (ret)
2704                                 break;
2705                 } else if (key.type == BTRFS_INODE_REF_KEY ||
2706                            key.type == BTRFS_INODE_EXTREF_KEY) {
2707                         ret = add_inode_ref(wc->trans, root, log, path,
2708                                             eb, i, &key);
2709                         if (ret && ret != -ENOENT)
2710                                 break;
2711                         ret = 0;
2712                 } else if (key.type == BTRFS_EXTENT_DATA_KEY) {
2713                         ret = replay_one_extent(wc->trans, root, path,
2714                                                 eb, i, &key);
2715                         if (ret)
2716                                 break;
2717                 } else if (key.type == BTRFS_DIR_ITEM_KEY) {
2718                         ret = replay_one_dir_item(wc->trans, root, path,
2719                                                   eb, i, &key);
2720                         if (ret)
2721                                 break;
2722                 }
2723         }
2724         btrfs_free_path(path);
2725         return ret;
2726 }
2727
2728 /*
2729  * Correctly adjust the reserved bytes occupied by a log tree extent buffer
2730  */
2731 static void unaccount_log_buffer(struct btrfs_fs_info *fs_info, u64 start)
2732 {
2733         struct btrfs_block_group *cache;
2734
2735         cache = btrfs_lookup_block_group(fs_info, start);
2736         if (!cache) {
2737                 btrfs_err(fs_info, "unable to find block group for %llu", start);
2738                 return;
2739         }
2740
2741         spin_lock(&cache->space_info->lock);
2742         spin_lock(&cache->lock);
2743         cache->reserved -= fs_info->nodesize;
2744         cache->space_info->bytes_reserved -= fs_info->nodesize;
2745         spin_unlock(&cache->lock);
2746         spin_unlock(&cache->space_info->lock);
2747
2748         btrfs_put_block_group(cache);
2749 }
2750
2751 static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
2752                                    struct btrfs_root *root,
2753                                    struct btrfs_path *path, int *level,
2754                                    struct walk_control *wc)
2755 {
2756         struct btrfs_fs_info *fs_info = root->fs_info;
2757         u64 bytenr;
2758         u64 ptr_gen;
2759         struct extent_buffer *next;
2760         struct extent_buffer *cur;
2761         u32 blocksize;
2762         int ret = 0;
2763
2764         while (*level > 0) {
2765                 struct btrfs_key first_key;
2766
2767                 cur = path->nodes[*level];
2768
2769                 WARN_ON(btrfs_header_level(cur) != *level);
2770
2771                 if (path->slots[*level] >=
2772                     btrfs_header_nritems(cur))
2773                         break;
2774
2775                 bytenr = btrfs_node_blockptr(cur, path->slots[*level]);
2776                 ptr_gen = btrfs_node_ptr_generation(cur, path->slots[*level]);
2777                 btrfs_node_key_to_cpu(cur, &first_key, path->slots[*level]);
2778                 blocksize = fs_info->nodesize;
2779
2780                 next = btrfs_find_create_tree_block(fs_info, bytenr,
2781                                                     btrfs_header_owner(cur),
2782                                                     *level - 1);
2783                 if (IS_ERR(next))
2784                         return PTR_ERR(next);
2785
2786                 if (*level == 1) {
2787                         ret = wc->process_func(root, next, wc, ptr_gen,
2788                                                *level - 1);
2789                         if (ret) {
2790                                 free_extent_buffer(next);
2791                                 return ret;
2792                         }
2793
2794                         path->slots[*level]++;
2795                         if (wc->free) {
2796                                 ret = btrfs_read_buffer(next, ptr_gen,
2797                                                         *level - 1, &first_key);
2798                                 if (ret) {
2799                                         free_extent_buffer(next);
2800                                         return ret;
2801                                 }
2802
2803                                 if (trans) {
2804                                         btrfs_tree_lock(next);
2805                                         btrfs_clean_tree_block(next);
2806                                         btrfs_wait_tree_block_writeback(next);
2807                                         btrfs_tree_unlock(next);
2808                                         ret = btrfs_pin_reserved_extent(trans,
2809                                                         bytenr, blocksize);
2810                                         if (ret) {
2811                                                 free_extent_buffer(next);
2812                                                 return ret;
2813                                         }
2814                                         btrfs_redirty_list_add(
2815                                                 trans->transaction, next);
2816                                 } else {
2817                                         if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2818                                                 clear_extent_buffer_dirty(next);
2819                                         unaccount_log_buffer(fs_info, bytenr);
2820                                 }
2821                         }
2822                         free_extent_buffer(next);
2823                         continue;
2824                 }
2825                 ret = btrfs_read_buffer(next, ptr_gen, *level - 1, &first_key);
2826                 if (ret) {
2827                         free_extent_buffer(next);
2828                         return ret;
2829                 }
2830
2831                 if (path->nodes[*level-1])
2832                         free_extent_buffer(path->nodes[*level-1]);
2833                 path->nodes[*level-1] = next;
2834                 *level = btrfs_header_level(next);
2835                 path->slots[*level] = 0;
2836                 cond_resched();
2837         }
2838         path->slots[*level] = btrfs_header_nritems(path->nodes[*level]);
2839
2840         cond_resched();
2841         return 0;
2842 }
2843
2844 static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
2845                                  struct btrfs_root *root,
2846                                  struct btrfs_path *path, int *level,
2847                                  struct walk_control *wc)
2848 {
2849         struct btrfs_fs_info *fs_info = root->fs_info;
2850         int i;
2851         int slot;
2852         int ret;
2853
2854         for (i = *level; i < BTRFS_MAX_LEVEL - 1 && path->nodes[i]; i++) {
2855                 slot = path->slots[i];
2856                 if (slot + 1 < btrfs_header_nritems(path->nodes[i])) {
2857                         path->slots[i]++;
2858                         *level = i;
2859                         WARN_ON(*level == 0);
2860                         return 0;
2861                 } else {
2862                         ret = wc->process_func(root, path->nodes[*level], wc,
2863                                  btrfs_header_generation(path->nodes[*level]),
2864                                  *level);
2865                         if (ret)
2866                                 return ret;
2867
2868                         if (wc->free) {
2869                                 struct extent_buffer *next;
2870
2871                                 next = path->nodes[*level];
2872
2873                                 if (trans) {
2874                                         btrfs_tree_lock(next);
2875                                         btrfs_clean_tree_block(next);
2876                                         btrfs_wait_tree_block_writeback(next);
2877                                         btrfs_tree_unlock(next);
2878                                         ret = btrfs_pin_reserved_extent(trans,
2879                                                      path->nodes[*level]->start,
2880                                                      path->nodes[*level]->len);
2881                                         if (ret)
2882                                                 return ret;
2883                                         btrfs_redirty_list_add(trans->transaction,
2884                                                                next);
2885                                 } else {
2886                                         if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2887                                                 clear_extent_buffer_dirty(next);
2888
2889                                         unaccount_log_buffer(fs_info,
2890                                                 path->nodes[*level]->start);
2891                                 }
2892                         }
2893                         free_extent_buffer(path->nodes[*level]);
2894                         path->nodes[*level] = NULL;
2895                         *level = i + 1;
2896                 }
2897         }
2898         return 1;
2899 }
2900
2901 /*
2902  * drop the reference count on the tree rooted at 'snap'.  This traverses
2903  * the tree freeing any blocks that have a ref count of zero after being
2904  * decremented.
2905  */
2906 static int walk_log_tree(struct btrfs_trans_handle *trans,
2907                          struct btrfs_root *log, struct walk_control *wc)
2908 {
2909         struct btrfs_fs_info *fs_info = log->fs_info;
2910         int ret = 0;
2911         int wret;
2912         int level;
2913         struct btrfs_path *path;
2914         int orig_level;
2915
2916         path = btrfs_alloc_path();
2917         if (!path)
2918                 return -ENOMEM;
2919
2920         level = btrfs_header_level(log->node);
2921         orig_level = level;
2922         path->nodes[level] = log->node;
2923         atomic_inc(&log->node->refs);
2924         path->slots[level] = 0;
2925
2926         while (1) {
2927                 wret = walk_down_log_tree(trans, log, path, &level, wc);
2928                 if (wret > 0)
2929                         break;
2930                 if (wret < 0) {
2931                         ret = wret;
2932                         goto out;
2933                 }
2934
2935                 wret = walk_up_log_tree(trans, log, path, &level, wc);
2936                 if (wret > 0)
2937                         break;
2938                 if (wret < 0) {
2939                         ret = wret;
2940                         goto out;
2941                 }
2942         }
2943
2944         /* was the root node processed? if not, catch it here */
2945         if (path->nodes[orig_level]) {
2946                 ret = wc->process_func(log, path->nodes[orig_level], wc,
2947                          btrfs_header_generation(path->nodes[orig_level]),
2948                          orig_level);
2949                 if (ret)
2950                         goto out;
2951                 if (wc->free) {
2952                         struct extent_buffer *next;
2953
2954                         next = path->nodes[orig_level];
2955
2956                         if (trans) {
2957                                 btrfs_tree_lock(next);
2958                                 btrfs_clean_tree_block(next);
2959                                 btrfs_wait_tree_block_writeback(next);
2960                                 btrfs_tree_unlock(next);
2961                                 ret = btrfs_pin_reserved_extent(trans,
2962                                                 next->start, next->len);
2963                                 if (ret)
2964                                         goto out;
2965                                 btrfs_redirty_list_add(trans->transaction, next);
2966                         } else {
2967                                 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
2968                                         clear_extent_buffer_dirty(next);
2969                                 unaccount_log_buffer(fs_info, next->start);
2970                         }
2971                 }
2972         }
2973
2974 out:
2975         btrfs_free_path(path);
2976         return ret;
2977 }
2978
2979 /*
2980  * helper function to update the item for a given subvolumes log root
2981  * in the tree of log roots
2982  */
2983 static int update_log_root(struct btrfs_trans_handle *trans,
2984                            struct btrfs_root *log,
2985                            struct btrfs_root_item *root_item)
2986 {
2987         struct btrfs_fs_info *fs_info = log->fs_info;
2988         int ret;
2989
2990         if (log->log_transid == 1) {
2991                 /* insert root item on the first sync */
2992                 ret = btrfs_insert_root(trans, fs_info->log_root_tree,
2993                                 &log->root_key, root_item);
2994         } else {
2995                 ret = btrfs_update_root(trans, fs_info->log_root_tree,
2996                                 &log->root_key, root_item);
2997         }
2998         return ret;
2999 }
3000
3001 static void wait_log_commit(struct btrfs_root *root, int transid)
3002 {
3003         DEFINE_WAIT(wait);
3004         int index = transid % 2;
3005
3006         /*
3007          * we only allow two pending log transactions at a time,
3008          * so we know that if ours is more than 2 older than the
3009          * current transaction, we're done
3010          */
3011         for (;;) {
3012                 prepare_to_wait(&root->log_commit_wait[index],
3013                                 &wait, TASK_UNINTERRUPTIBLE);
3014
3015                 if (!(root->log_transid_committed < transid &&
3016                       atomic_read(&root->log_commit[index])))
3017                         break;
3018
3019                 mutex_unlock(&root->log_mutex);
3020                 schedule();
3021                 mutex_lock(&root->log_mutex);
3022         }
3023         finish_wait(&root->log_commit_wait[index], &wait);
3024 }
3025
3026 static void wait_for_writer(struct btrfs_root *root)
3027 {
3028         DEFINE_WAIT(wait);
3029
3030         for (;;) {
3031                 prepare_to_wait(&root->log_writer_wait, &wait,
3032                                 TASK_UNINTERRUPTIBLE);
3033                 if (!atomic_read(&root->log_writers))
3034                         break;
3035
3036                 mutex_unlock(&root->log_mutex);
3037                 schedule();
3038                 mutex_lock(&root->log_mutex);
3039         }
3040         finish_wait(&root->log_writer_wait, &wait);
3041 }
3042
3043 static inline void btrfs_remove_log_ctx(struct btrfs_root *root,
3044                                         struct btrfs_log_ctx *ctx)
3045 {
3046         if (!ctx)
3047                 return;
3048
3049         mutex_lock(&root->log_mutex);
3050         list_del_init(&ctx->list);
3051         mutex_unlock(&root->log_mutex);
3052 }
3053
3054 /* 
3055  * Invoked in log mutex context, or be sure there is no other task which
3056  * can access the list.
3057  */
3058 static inline void btrfs_remove_all_log_ctxs(struct btrfs_root *root,
3059                                              int index, int error)
3060 {
3061         struct btrfs_log_ctx *ctx;
3062         struct btrfs_log_ctx *safe;
3063
3064         list_for_each_entry_safe(ctx, safe, &root->log_ctxs[index], list) {
3065                 list_del_init(&ctx->list);
3066                 ctx->log_ret = error;
3067         }
3068 }
3069
3070 /*
3071  * btrfs_sync_log does sends a given tree log down to the disk and
3072  * updates the super blocks to record it.  When this call is done,
3073  * you know that any inodes previously logged are safely on disk only
3074  * if it returns 0.
3075  *
3076  * Any other return value means you need to call btrfs_commit_transaction.
3077  * Some of the edge cases for fsyncing directories that have had unlinks
3078  * or renames done in the past mean that sometimes the only safe
3079  * fsync is to commit the whole FS.  When btrfs_sync_log returns -EAGAIN,
3080  * that has happened.
3081  */
3082 int btrfs_sync_log(struct btrfs_trans_handle *trans,
3083                    struct btrfs_root *root, struct btrfs_log_ctx *ctx)
3084 {
3085         int index1;
3086         int index2;
3087         int mark;
3088         int ret;
3089         struct btrfs_fs_info *fs_info = root->fs_info;
3090         struct btrfs_root *log = root->log_root;
3091         struct btrfs_root *log_root_tree = fs_info->log_root_tree;
3092         struct btrfs_root_item new_root_item;
3093         int log_transid = 0;
3094         struct btrfs_log_ctx root_log_ctx;
3095         struct blk_plug plug;
3096         u64 log_root_start;
3097         u64 log_root_level;
3098
3099         mutex_lock(&root->log_mutex);
3100         log_transid = ctx->log_transid;
3101         if (root->log_transid_committed >= log_transid) {
3102                 mutex_unlock(&root->log_mutex);
3103                 return ctx->log_ret;
3104         }
3105
3106         index1 = log_transid % 2;
3107         if (atomic_read(&root->log_commit[index1])) {
3108                 wait_log_commit(root, log_transid);
3109                 mutex_unlock(&root->log_mutex);
3110                 return ctx->log_ret;
3111         }
3112         ASSERT(log_transid == root->log_transid);
3113         atomic_set(&root->log_commit[index1], 1);
3114
3115         /* wait for previous tree log sync to complete */
3116         if (atomic_read(&root->log_commit[(index1 + 1) % 2]))
3117                 wait_log_commit(root, log_transid - 1);
3118
3119         while (1) {
3120                 int batch = atomic_read(&root->log_batch);
3121                 /* when we're on an ssd, just kick the log commit out */
3122                 if (!btrfs_test_opt(fs_info, SSD) &&
3123                     test_bit(BTRFS_ROOT_MULTI_LOG_TASKS, &root->state)) {
3124                         mutex_unlock(&root->log_mutex);
3125                         schedule_timeout_uninterruptible(1);
3126                         mutex_lock(&root->log_mutex);
3127                 }
3128                 wait_for_writer(root);
3129                 if (batch == atomic_read(&root->log_batch))
3130                         break;
3131         }
3132
3133         /* bail out if we need to do a full commit */
3134         if (btrfs_need_log_full_commit(trans)) {
3135                 ret = -EAGAIN;
3136                 mutex_unlock(&root->log_mutex);
3137                 goto out;
3138         }
3139
3140         if (log_transid % 2 == 0)
3141                 mark = EXTENT_DIRTY;
3142         else
3143                 mark = EXTENT_NEW;
3144
3145         /* we start IO on  all the marked extents here, but we don't actually
3146          * wait for them until later.
3147          */
3148         blk_start_plug(&plug);
3149         ret = btrfs_write_marked_extents(fs_info, &log->dirty_log_pages, mark);
3150         /*
3151          * -EAGAIN happens when someone, e.g., a concurrent transaction
3152          *  commit, writes a dirty extent in this tree-log commit. This
3153          *  concurrent write will create a hole writing out the extents,
3154          *  and we cannot proceed on a zoned filesystem, requiring
3155          *  sequential writing. While we can bail out to a full commit
3156          *  here, but we can continue hoping the concurrent writing fills
3157          *  the hole.
3158          */
3159         if (ret == -EAGAIN && btrfs_is_zoned(fs_info))
3160                 ret = 0;
3161         if (ret) {
3162                 blk_finish_plug(&plug);
3163                 btrfs_abort_transaction(trans, ret);
3164                 btrfs_set_log_full_commit(trans);
3165                 mutex_unlock(&root->log_mutex);
3166                 goto out;
3167         }
3168
3169         /*
3170          * We _must_ update under the root->log_mutex in order to make sure we
3171          * have a consistent view of the log root we are trying to commit at
3172          * this moment.
3173          *
3174          * We _must_ copy this into a local copy, because we are not holding the
3175          * log_root_tree->log_mutex yet.  This is important because when we
3176          * commit the log_root_tree we must have a consistent view of the
3177          * log_root_tree when we update the super block to point at the
3178          * log_root_tree bytenr.  If we update the log_root_tree here we'll race
3179          * with the commit and possibly point at the new block which we may not
3180          * have written out.
3181          */
3182         btrfs_set_root_node(&log->root_item, log->node);
3183         memcpy(&new_root_item, &log->root_item, sizeof(new_root_item));
3184
3185         root->log_transid++;
3186         log->log_transid = root->log_transid;
3187         root->log_start_pid = 0;
3188         /*
3189          * IO has been started, blocks of the log tree have WRITTEN flag set
3190          * in their headers. new modifications of the log will be written to
3191          * new positions. so it's safe to allow log writers to go in.
3192          */
3193         mutex_unlock(&root->log_mutex);
3194
3195         if (btrfs_is_zoned(fs_info)) {
3196                 mutex_lock(&fs_info->tree_root->log_mutex);
3197                 if (!log_root_tree->node) {
3198                         ret = btrfs_alloc_log_tree_node(trans, log_root_tree);
3199                         if (ret) {
3200                                 mutex_unlock(&fs_info->tree_root->log_mutex);
3201                                 blk_finish_plug(&plug);
3202                                 goto out;
3203                         }
3204                 }
3205                 mutex_unlock(&fs_info->tree_root->log_mutex);
3206         }
3207
3208         btrfs_init_log_ctx(&root_log_ctx, NULL);
3209
3210         mutex_lock(&log_root_tree->log_mutex);
3211
3212         index2 = log_root_tree->log_transid % 2;
3213         list_add_tail(&root_log_ctx.list, &log_root_tree->log_ctxs[index2]);
3214         root_log_ctx.log_transid = log_root_tree->log_transid;
3215
3216         /*
3217          * Now we are safe to update the log_root_tree because we're under the
3218          * log_mutex, and we're a current writer so we're holding the commit
3219          * open until we drop the log_mutex.
3220          */
3221         ret = update_log_root(trans, log, &new_root_item);
3222         if (ret) {
3223                 if (!list_empty(&root_log_ctx.list))
3224                         list_del_init(&root_log_ctx.list);
3225
3226                 blk_finish_plug(&plug);
3227                 btrfs_set_log_full_commit(trans);
3228
3229                 if (ret != -ENOSPC) {
3230                         btrfs_abort_transaction(trans, ret);
3231                         mutex_unlock(&log_root_tree->log_mutex);
3232                         goto out;
3233                 }
3234                 btrfs_wait_tree_log_extents(log, mark);
3235                 mutex_unlock(&log_root_tree->log_mutex);
3236                 ret = -EAGAIN;
3237                 goto out;
3238         }
3239
3240         if (log_root_tree->log_transid_committed >= root_log_ctx.log_transid) {
3241                 blk_finish_plug(&plug);
3242                 list_del_init(&root_log_ctx.list);
3243                 mutex_unlock(&log_root_tree->log_mutex);
3244                 ret = root_log_ctx.log_ret;
3245                 goto out;
3246         }
3247
3248         index2 = root_log_ctx.log_transid % 2;
3249         if (atomic_read(&log_root_tree->log_commit[index2])) {
3250                 blk_finish_plug(&plug);
3251                 ret = btrfs_wait_tree_log_extents(log, mark);
3252                 wait_log_commit(log_root_tree,
3253                                 root_log_ctx.log_transid);
3254                 mutex_unlock(&log_root_tree->log_mutex);
3255                 if (!ret)
3256                         ret = root_log_ctx.log_ret;
3257                 goto out;
3258         }
3259         ASSERT(root_log_ctx.log_transid == log_root_tree->log_transid);
3260         atomic_set(&log_root_tree->log_commit[index2], 1);
3261
3262         if (atomic_read(&log_root_tree->log_commit[(index2 + 1) % 2])) {
3263                 wait_log_commit(log_root_tree,
3264                                 root_log_ctx.log_transid - 1);
3265         }
3266
3267         /*
3268          * now that we've moved on to the tree of log tree roots,
3269          * check the full commit flag again
3270          */
3271         if (btrfs_need_log_full_commit(trans)) {
3272                 blk_finish_plug(&plug);
3273                 btrfs_wait_tree_log_extents(log, mark);
3274                 mutex_unlock(&log_root_tree->log_mutex);
3275                 ret = -EAGAIN;
3276                 goto out_wake_log_root;
3277         }
3278
3279         ret = btrfs_write_marked_extents(fs_info,
3280                                          &log_root_tree->dirty_log_pages,
3281                                          EXTENT_DIRTY | EXTENT_NEW);
3282         blk_finish_plug(&plug);
3283         /*
3284          * As described above, -EAGAIN indicates a hole in the extents. We
3285          * cannot wait for these write outs since the waiting cause a
3286          * deadlock. Bail out to the full commit instead.
3287          */
3288         if (ret == -EAGAIN && btrfs_is_zoned(fs_info)) {
3289                 btrfs_set_log_full_commit(trans);
3290                 btrfs_wait_tree_log_extents(log, mark);
3291                 mutex_unlock(&log_root_tree->log_mutex);
3292                 goto out_wake_log_root;
3293         } else if (ret) {
3294                 btrfs_set_log_full_commit(trans);
3295                 btrfs_abort_transaction(trans, ret);
3296                 mutex_unlock(&log_root_tree->log_mutex);
3297                 goto out_wake_log_root;
3298         }
3299         ret = btrfs_wait_tree_log_extents(log, mark);
3300         if (!ret)
3301                 ret = btrfs_wait_tree_log_extents(log_root_tree,
3302                                                   EXTENT_NEW | EXTENT_DIRTY);
3303         if (ret) {
3304                 btrfs_set_log_full_commit(trans);
3305                 mutex_unlock(&log_root_tree->log_mutex);
3306                 goto out_wake_log_root;
3307         }
3308
3309         log_root_start = log_root_tree->node->start;
3310         log_root_level = btrfs_header_level(log_root_tree->node);
3311         log_root_tree->log_transid++;
3312         mutex_unlock(&log_root_tree->log_mutex);
3313
3314         /*
3315          * Here we are guaranteed that nobody is going to write the superblock
3316          * for the current transaction before us and that neither we do write
3317          * our superblock before the previous transaction finishes its commit
3318          * and writes its superblock, because:
3319          *
3320          * 1) We are holding a handle on the current transaction, so no body
3321          *    can commit it until we release the handle;
3322          *
3323          * 2) Before writing our superblock we acquire the tree_log_mutex, so
3324          *    if the previous transaction is still committing, and hasn't yet
3325          *    written its superblock, we wait for it to do it, because a
3326          *    transaction commit acquires the tree_log_mutex when the commit
3327          *    begins and releases it only after writing its superblock.
3328          */
3329         mutex_lock(&fs_info->tree_log_mutex);
3330
3331         /*
3332          * The previous transaction writeout phase could have failed, and thus
3333          * marked the fs in an error state.  We must not commit here, as we
3334          * could have updated our generation in the super_for_commit and
3335          * writing the super here would result in transid mismatches.  If there
3336          * is an error here just bail.
3337          */
3338         if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
3339                 ret = -EIO;
3340                 btrfs_set_log_full_commit(trans);
3341                 btrfs_abort_transaction(trans, ret);
3342                 mutex_unlock(&fs_info->tree_log_mutex);
3343                 goto out_wake_log_root;
3344         }
3345
3346         btrfs_set_super_log_root(fs_info->super_for_commit, log_root_start);
3347         btrfs_set_super_log_root_level(fs_info->super_for_commit, log_root_level);
3348         ret = write_all_supers(fs_info, 1);
3349         mutex_unlock(&fs_info->tree_log_mutex);
3350         if (ret) {
3351                 btrfs_set_log_full_commit(trans);
3352                 btrfs_abort_transaction(trans, ret);
3353                 goto out_wake_log_root;
3354         }
3355
3356         /*
3357          * We know there can only be one task here, since we have not yet set
3358          * root->log_commit[index1] to 0 and any task attempting to sync the
3359          * log must wait for the previous log transaction to commit if it's
3360          * still in progress or wait for the current log transaction commit if
3361          * someone else already started it. We use <= and not < because the
3362          * first log transaction has an ID of 0.
3363          */
3364         ASSERT(root->last_log_commit <= log_transid);
3365         root->last_log_commit = log_transid;
3366
3367 out_wake_log_root:
3368         mutex_lock(&log_root_tree->log_mutex);
3369         btrfs_remove_all_log_ctxs(log_root_tree, index2, ret);
3370
3371         log_root_tree->log_transid_committed++;
3372         atomic_set(&log_root_tree->log_commit[index2], 0);
3373         mutex_unlock(&log_root_tree->log_mutex);
3374
3375         /*
3376          * The barrier before waitqueue_active (in cond_wake_up) is needed so
3377          * all the updates above are seen by the woken threads. It might not be
3378          * necessary, but proving that seems to be hard.
3379          */
3380         cond_wake_up(&log_root_tree->log_commit_wait[index2]);
3381 out:
3382         mutex_lock(&root->log_mutex);
3383         btrfs_remove_all_log_ctxs(root, index1, ret);
3384         root->log_transid_committed++;
3385         atomic_set(&root->log_commit[index1], 0);
3386         mutex_unlock(&root->log_mutex);
3387
3388         /*
3389          * The barrier before waitqueue_active (in cond_wake_up) is needed so
3390          * all the updates above are seen by the woken threads. It might not be
3391          * necessary, but proving that seems to be hard.
3392          */
3393         cond_wake_up(&root->log_commit_wait[index1]);
3394         return ret;
3395 }
3396
3397 static void free_log_tree(struct btrfs_trans_handle *trans,
3398                           struct btrfs_root *log)
3399 {
3400         int ret;
3401         struct walk_control wc = {
3402                 .free = 1,
3403                 .process_func = process_one_buffer
3404         };
3405
3406         if (log->node) {
3407                 ret = walk_log_tree(trans, log, &wc);
3408                 if (ret) {
3409                         /*
3410                          * We weren't able to traverse the entire log tree, the
3411                          * typical scenario is getting an -EIO when reading an
3412                          * extent buffer of the tree, due to a previous writeback
3413                          * failure of it.
3414                          */
3415                         set_bit(BTRFS_FS_STATE_LOG_CLEANUP_ERROR,
3416                                 &log->fs_info->fs_state);
3417
3418                         /*
3419                          * Some extent buffers of the log tree may still be dirty
3420                          * and not yet written back to storage, because we may
3421                          * have updates to a log tree without syncing a log tree,
3422                          * such as during rename and link operations. So flush
3423                          * them out and wait for their writeback to complete, so
3424                          * that we properly cleanup their state and pages.
3425                          */
3426                         btrfs_write_marked_extents(log->fs_info,
3427                                                    &log->dirty_log_pages,
3428                                                    EXTENT_DIRTY | EXTENT_NEW);
3429                         btrfs_wait_tree_log_extents(log,
3430                                                     EXTENT_DIRTY | EXTENT_NEW);
3431
3432                         if (trans)
3433                                 btrfs_abort_transaction(trans, ret);
3434                         else
3435                                 btrfs_handle_fs_error(log->fs_info, ret, NULL);
3436                 }
3437         }
3438
3439         clear_extent_bits(&log->dirty_log_pages, 0, (u64)-1,
3440                           EXTENT_DIRTY | EXTENT_NEW | EXTENT_NEED_WAIT);
3441         extent_io_tree_release(&log->log_csum_range);
3442
3443         btrfs_put_root(log);
3444 }
3445
3446 /*
3447  * free all the extents used by the tree log.  This should be called
3448  * at commit time of the full transaction
3449  */
3450 int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root)
3451 {
3452         if (root->log_root) {
3453                 free_log_tree(trans, root->log_root);
3454                 root->log_root = NULL;
3455                 clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &root->state);
3456         }
3457         return 0;
3458 }
3459
3460 int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
3461                              struct btrfs_fs_info *fs_info)
3462 {
3463         if (fs_info->log_root_tree) {
3464                 free_log_tree(trans, fs_info->log_root_tree);
3465                 fs_info->log_root_tree = NULL;
3466                 clear_bit(BTRFS_ROOT_HAS_LOG_TREE, &fs_info->tree_root->state);
3467         }
3468         return 0;
3469 }
3470
3471 /*
3472  * Check if an inode was logged in the current transaction. This may often
3473  * return some false positives, because logged_trans is an in memory only field,
3474  * not persisted anywhere. This is meant to be used in contexts where a false
3475  * positive has no functional consequences.
3476  */
3477 static bool inode_logged(struct btrfs_trans_handle *trans,
3478                          struct btrfs_inode *inode)
3479 {
3480         if (inode->logged_trans == trans->transid)
3481                 return true;
3482
3483         /*
3484          * The inode's logged_trans is always 0 when we load it (because it is
3485          * not persisted in the inode item or elsewhere). So if it is 0, the
3486          * inode was last modified in the current transaction then the inode may
3487          * have been logged before in the current transaction, then evicted and
3488          * loaded again in the current transaction - or may have never been logged
3489          * in the current transaction, but since we can not be sure, we have to
3490          * assume it was, otherwise our callers can leave an inconsistent log.
3491          */
3492         if (inode->logged_trans == 0 &&
3493             inode->last_trans == trans->transid &&
3494             !test_bit(BTRFS_FS_LOG_RECOVERING, &trans->fs_info->flags))
3495                 return true;
3496
3497         return false;
3498 }
3499
3500 /*
3501  * If both a file and directory are logged, and unlinks or renames are
3502  * mixed in, we have a few interesting corners:
3503  *
3504  * create file X in dir Y
3505  * link file X to X.link in dir Y
3506  * fsync file X
3507  * unlink file X but leave X.link
3508  * fsync dir Y
3509  *
3510  * After a crash we would expect only X.link to exist.  But file X
3511  * didn't get fsync'd again so the log has back refs for X and X.link.
3512  *
3513  * We solve this by removing directory entries and inode backrefs from the
3514  * log when a file that was logged in the current transaction is
3515  * unlinked.  Any later fsync will include the updated log entries, and
3516  * we'll be able to reconstruct the proper directory items from backrefs.
3517  *
3518  * This optimizations allows us to avoid relogging the entire inode
3519  * or the entire directory.
3520  */
3521 int btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
3522                                  struct btrfs_root *root,
3523                                  const char *name, int name_len,
3524                                  struct btrfs_inode *dir, u64 index)
3525 {
3526         struct btrfs_root *log;
3527         struct btrfs_dir_item *di;
3528         struct btrfs_path *path;
3529         int ret;
3530         int err = 0;
3531         u64 dir_ino = btrfs_ino(dir);
3532
3533         if (!inode_logged(trans, dir))
3534                 return 0;
3535
3536         ret = join_running_log_trans(root);
3537         if (ret)
3538                 return 0;
3539
3540         mutex_lock(&dir->log_mutex);
3541
3542         log = root->log_root;
3543         path = btrfs_alloc_path();
3544         if (!path) {
3545                 err = -ENOMEM;
3546                 goto out_unlock;
3547         }
3548
3549         di = btrfs_lookup_dir_item(trans, log, path, dir_ino,
3550                                    name, name_len, -1);
3551         if (IS_ERR(di)) {
3552                 err = PTR_ERR(di);
3553                 goto fail;
3554         }
3555         if (di) {
3556                 ret = btrfs_delete_one_dir_name(trans, log, path, di);
3557                 if (ret) {
3558                         err = ret;
3559                         goto fail;
3560                 }
3561         }
3562         btrfs_release_path(path);
3563         di = btrfs_lookup_dir_index_item(trans, log, path, dir_ino,
3564                                          index, name, name_len, -1);
3565         if (IS_ERR(di)) {
3566                 err = PTR_ERR(di);
3567                 goto fail;
3568         }
3569         if (di) {
3570                 ret = btrfs_delete_one_dir_name(trans, log, path, di);
3571                 if (ret) {
3572                         err = ret;
3573                         goto fail;
3574                 }
3575         }
3576
3577         /*
3578          * We do not need to update the size field of the directory's inode item
3579          * because on log replay we update the field to reflect all existing
3580          * entries in the directory (see overwrite_item()).
3581          */
3582 fail:
3583         btrfs_free_path(path);
3584 out_unlock:
3585         mutex_unlock(&dir->log_mutex);
3586         if (err == -ENOSPC) {
3587                 btrfs_set_log_full_commit(trans);
3588                 err = 0;
3589         } else if (err < 0) {
3590                 btrfs_abort_transaction(trans, err);
3591         }
3592
3593         btrfs_end_log_trans(root);
3594
3595         return err;
3596 }
3597
3598 /* see comments for btrfs_del_dir_entries_in_log */
3599 int btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
3600                                struct btrfs_root *root,
3601                                const char *name, int name_len,
3602                                struct btrfs_inode *inode, u64 dirid)
3603 {
3604         struct btrfs_root *log;
3605         u64 index;
3606         int ret;
3607
3608         if (!inode_logged(trans, inode))
3609                 return 0;
3610
3611         ret = join_running_log_trans(root);
3612         if (ret)
3613                 return 0;
3614         log = root->log_root;
3615         mutex_lock(&inode->log_mutex);
3616
3617         ret = btrfs_del_inode_ref(trans, log, name, name_len, btrfs_ino(inode),
3618                                   dirid, &index);
3619         mutex_unlock(&inode->log_mutex);
3620         if (ret == -ENOSPC) {
3621                 btrfs_set_log_full_commit(trans);
3622                 ret = 0;
3623         } else if (ret < 0 && ret != -ENOENT)
3624                 btrfs_abort_transaction(trans, ret);
3625         btrfs_end_log_trans(root);
3626
3627         return ret;
3628 }
3629
3630 /*
3631  * creates a range item in the log for 'dirid'.  first_offset and
3632  * last_offset tell us which parts of the key space the log should
3633  * be considered authoritative for.
3634  */
3635 static noinline int insert_dir_log_key(struct btrfs_trans_handle *trans,
3636                                        struct btrfs_root *log,
3637                                        struct btrfs_path *path,
3638                                        int key_type, u64 dirid,
3639                                        u64 first_offset, u64 last_offset)
3640 {
3641         int ret;
3642         struct btrfs_key key;
3643         struct btrfs_dir_log_item *item;
3644
3645         key.objectid = dirid;
3646         key.offset = first_offset;
3647         if (key_type == BTRFS_DIR_ITEM_KEY)
3648                 key.type = BTRFS_DIR_LOG_ITEM_KEY;
3649         else
3650                 key.type = BTRFS_DIR_LOG_INDEX_KEY;
3651         ret = btrfs_insert_empty_item(trans, log, path, &key, sizeof(*item));
3652         if (ret)
3653                 return ret;
3654
3655         item = btrfs_item_ptr(path->nodes[0], path->slots[0],
3656                               struct btrfs_dir_log_item);
3657         btrfs_set_dir_log_end(path->nodes[0], item, last_offset);
3658         btrfs_mark_buffer_dirty(path->nodes[0]);
3659         btrfs_release_path(path);
3660         return 0;
3661 }
3662
3663 /*
3664  * log all the items included in the current transaction for a given
3665  * directory.  This also creates the range items in the log tree required
3666  * to replay anything deleted before the fsync
3667  */
3668 static noinline int log_dir_items(struct btrfs_trans_handle *trans,
3669                           struct btrfs_root *root, struct btrfs_inode *inode,
3670                           struct btrfs_path *path,
3671                           struct btrfs_path *dst_path, int key_type,
3672                           struct btrfs_log_ctx *ctx,
3673                           u64 min_offset, u64 *last_offset_ret)
3674 {
3675         struct btrfs_key min_key;
3676         struct btrfs_root *log = root->log_root;
3677         struct extent_buffer *src;
3678         int err = 0;
3679         int ret;
3680         int i;
3681         int nritems;
3682         u64 first_offset = min_offset;
3683         u64 last_offset = (u64)-1;
3684         u64 ino = btrfs_ino(inode);
3685
3686         log = root->log_root;
3687
3688         min_key.objectid = ino;
3689         min_key.type = key_type;
3690         min_key.offset = min_offset;
3691
3692         ret = btrfs_search_forward(root, &min_key, path, trans->transid);
3693
3694         /*
3695          * we didn't find anything from this transaction, see if there
3696          * is anything at all
3697          */
3698         if (ret != 0 || min_key.objectid != ino || min_key.type != key_type) {
3699                 min_key.objectid = ino;
3700                 min_key.type = key_type;
3701                 min_key.offset = (u64)-1;
3702                 btrfs_release_path(path);
3703                 ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);
3704                 if (ret < 0) {
3705                         btrfs_release_path(path);
3706                         return ret;
3707                 }
3708                 ret = btrfs_previous_item(root, path, ino, key_type);
3709
3710                 /* if ret == 0 there are items for this type,
3711                  * create a range to tell us the last key of this type.
3712                  * otherwise, there are no items in this directory after
3713                  * *min_offset, and we create a range to indicate that.
3714                  */
3715                 if (ret == 0) {
3716                         struct btrfs_key tmp;
3717                         btrfs_item_key_to_cpu(path->nodes[0], &tmp,
3718                                               path->slots[0]);
3719                         if (key_type == tmp.type)
3720                                 first_offset = max(min_offset, tmp.offset) + 1;
3721                 }
3722                 goto done;
3723         }
3724
3725         /* go backward to find any previous key */
3726         ret = btrfs_previous_item(root, path, ino, key_type);
3727         if (ret == 0) {
3728                 struct btrfs_key tmp;
3729                 btrfs_item_key_to_cpu(path->nodes[0], &tmp, path->slots[0]);
3730                 if (key_type == tmp.type) {
3731                         first_offset = tmp.offset;
3732                         ret = overwrite_item(trans, log, dst_path,
3733                                              path->nodes[0], path->slots[0],
3734                                              &tmp);
3735                         if (ret) {
3736                                 err = ret;
3737                                 goto done;
3738                         }
3739                 }
3740         }
3741         btrfs_release_path(path);
3742
3743         /*
3744          * Find the first key from this transaction again.  See the note for
3745          * log_new_dir_dentries, if we're logging a directory recursively we
3746          * won't be holding its i_mutex, which means we can modify the directory
3747          * while we're logging it.  If we remove an entry between our first
3748          * search and this search we'll not find the key again and can just
3749          * bail.
3750          */
3751 search:
3752         ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);
3753         if (ret != 0)
3754                 goto done;
3755
3756         /*
3757          * we have a block from this transaction, log every item in it
3758          * from our directory
3759          */
3760         while (1) {
3761                 struct btrfs_key tmp;
3762                 src = path->nodes[0];
3763                 nritems = btrfs_header_nritems(src);
3764                 for (i = path->slots[0]; i < nritems; i++) {
3765                         struct btrfs_dir_item *di;
3766
3767                         btrfs_item_key_to_cpu(src, &min_key, i);
3768
3769                         if (min_key.objectid != ino || min_key.type != key_type)
3770                                 goto done;
3771
3772                         if (need_resched()) {
3773                                 btrfs_release_path(path);
3774                                 cond_resched();
3775                                 goto search;
3776                         }
3777
3778                         ret = overwrite_item(trans, log, dst_path, src, i,
3779                                              &min_key);
3780                         if (ret) {
3781                                 err = ret;
3782                                 goto done;
3783                         }
3784
3785                         /*
3786                          * We must make sure that when we log a directory entry,
3787                          * the corresponding inode, after log replay, has a
3788                          * matching link count. For example:
3789                          *
3790                          * touch foo
3791                          * mkdir mydir
3792                          * sync
3793                          * ln foo mydir/bar
3794                          * xfs_io -c "fsync" mydir
3795                          * <crash>
3796                          * <mount fs and log replay>
3797                          *
3798                          * Would result in a fsync log that when replayed, our
3799                          * file inode would have a link count of 1, but we get
3800                          * two directory entries pointing to the same inode.
3801                          * After removing one of the names, it would not be
3802                          * possible to remove the other name, which resulted
3803                          * always in stale file handle errors, and would not
3804                          * be possible to rmdir the parent directory, since
3805                          * its i_size could never decrement to the value
3806                          * BTRFS_EMPTY_DIR_SIZE, resulting in -ENOTEMPTY errors.
3807                          */
3808                         di = btrfs_item_ptr(src, i, struct btrfs_dir_item);
3809                         btrfs_dir_item_key_to_cpu(src, di, &tmp);
3810                         if (ctx &&
3811                             (btrfs_dir_transid(src, di) == trans->transid ||
3812                              btrfs_dir_type(src, di) == BTRFS_FT_DIR) &&
3813                             tmp.type != BTRFS_ROOT_ITEM_KEY)
3814                                 ctx->log_new_dentries = true;
3815                 }
3816                 path->slots[0] = nritems;
3817
3818                 /*
3819                  * look ahead to the next item and see if it is also
3820                  * from this directory and from this transaction
3821                  */
3822                 ret = btrfs_next_leaf(root, path);
3823                 if (ret) {
3824                         if (ret == 1)
3825                                 last_offset = (u64)-1;
3826                         else
3827                                 err = ret;
3828                         goto done;
3829                 }
3830                 btrfs_item_key_to_cpu(path->nodes[0], &tmp, path->slots[0]);
3831                 if (tmp.objectid != ino || tmp.type != key_type) {
3832                         last_offset = (u64)-1;
3833                         goto done;
3834                 }
3835                 if (btrfs_header_generation(path->nodes[0]) != trans->transid) {
3836                         ret = overwrite_item(trans, log, dst_path,
3837                                              path->nodes[0], path->slots[0],
3838                                              &tmp);
3839                         if (ret)
3840                                 err = ret;
3841                         else
3842                                 last_offset = tmp.offset;
3843                         goto done;
3844                 }
3845         }
3846 done:
3847         btrfs_release_path(path);
3848         btrfs_release_path(dst_path);
3849
3850         if (err == 0) {
3851                 *last_offset_ret = last_offset;
3852                 /*
3853                  * insert the log range keys to indicate where the log
3854                  * is valid
3855                  */
3856                 ret = insert_dir_log_key(trans, log, path, key_type,
3857                                          ino, first_offset, last_offset);
3858                 if (ret)
3859                         err = ret;
3860         }
3861         return err;
3862 }
3863
3864 /*
3865  * logging directories is very similar to logging inodes, We find all the items
3866  * from the current transaction and write them to the log.
3867  *
3868  * The recovery code scans the directory in the subvolume, and if it finds a
3869  * key in the range logged that is not present in the log tree, then it means
3870  * that dir entry was unlinked during the transaction.
3871  *
3872  * In order for that scan to work, we must include one key smaller than
3873  * the smallest logged by this transaction and one key larger than the largest
3874  * key logged by this transaction.
3875  */
3876 static noinline int log_directory_changes(struct btrfs_trans_handle *trans,
3877                           struct btrfs_root *root, struct btrfs_inode *inode,
3878                           struct btrfs_path *path,
3879                           struct btrfs_path *dst_path,
3880                           struct btrfs_log_ctx *ctx)
3881 {
3882         u64 min_key;
3883         u64 max_key;
3884         int ret;
3885         int key_type = BTRFS_DIR_ITEM_KEY;
3886
3887 again:
3888         min_key = 0;
3889         max_key = 0;
3890         while (1) {
3891                 ret = log_dir_items(trans, root, inode, path, dst_path, key_type,
3892                                 ctx, min_key, &max_key);
3893                 if (ret)
3894                         return ret;
3895                 if (max_key == (u64)-1)
3896                         break;
3897                 min_key = max_key + 1;
3898         }
3899
3900         if (key_type == BTRFS_DIR_ITEM_KEY) {
3901                 key_type = BTRFS_DIR_INDEX_KEY;
3902                 goto again;
3903         }
3904         return 0;
3905 }
3906
3907 /*
3908  * a helper function to drop items from the log before we relog an
3909  * inode.  max_key_type indicates the highest item type to remove.
3910  * This cannot be run for file data extents because it does not
3911  * free the extents they point to.
3912  */
3913 static int drop_objectid_items(struct btrfs_trans_handle *trans,
3914                                   struct btrfs_root *log,
3915                                   struct btrfs_path *path,
3916                                   u64 objectid, int max_key_type)
3917 {
3918         int ret;
3919         struct btrfs_key key;
3920         struct btrfs_key found_key;
3921         int start_slot;
3922
3923         key.objectid = objectid;
3924         key.type = max_key_type;
3925         key.offset = (u64)-1;
3926
3927         while (1) {
3928                 ret = btrfs_search_slot(trans, log, &key, path, -1, 1);
3929                 BUG_ON(ret == 0); /* Logic error */
3930                 if (ret < 0)
3931                         break;
3932
3933                 if (path->slots[0] == 0)
3934                         break;
3935
3936                 path->slots[0]--;
3937                 btrfs_item_key_to_cpu(path->nodes[0], &found_key,
3938                                       path->slots[0]);
3939
3940                 if (found_key.objectid != objectid)
3941                         break;
3942
3943                 found_key.offset = 0;
3944                 found_key.type = 0;
3945                 ret = btrfs_bin_search(path->nodes[0], &found_key, &start_slot);
3946                 if (ret < 0)
3947                         break;
3948
3949                 ret = btrfs_del_items(trans, log, path, start_slot,
3950                                       path->slots[0] - start_slot + 1);
3951                 /*
3952                  * If start slot isn't 0 then we don't need to re-search, we've
3953                  * found the last guy with the objectid in this tree.
3954                  */
3955                 if (ret || start_slot != 0)
3956                         break;
3957                 btrfs_release_path(path);
3958         }
3959         btrfs_release_path(path);
3960         if (ret > 0)
3961                 ret = 0;
3962         return ret;
3963 }
3964
3965 static void fill_inode_item(struct btrfs_trans_handle *trans,
3966                             struct extent_buffer *leaf,
3967                             struct btrfs_inode_item *item,
3968                             struct inode *inode, int log_inode_only,
3969                             u64 logged_isize)
3970 {
3971         struct btrfs_map_token token;
3972         u64 flags;
3973
3974         btrfs_init_map_token(&token, leaf);
3975
3976         if (log_inode_only) {
3977                 /* set the generation to zero so the recover code
3978                  * can tell the difference between an logging
3979                  * just to say 'this inode exists' and a logging
3980                  * to say 'update this inode with these values'
3981                  */
3982                 btrfs_set_token_inode_generation(&token, item, 0);
3983                 btrfs_set_token_inode_size(&token, item, logged_isize);
3984         } else {
3985                 btrfs_set_token_inode_generation(&token, item,
3986                                                  BTRFS_I(inode)->generation);
3987                 btrfs_set_token_inode_size(&token, item, inode->i_size);
3988         }
3989
3990         btrfs_set_token_inode_uid(&token, item, i_uid_read(inode));
3991         btrfs_set_token_inode_gid(&token, item, i_gid_read(inode));
3992         btrfs_set_token_inode_mode(&token, item, inode->i_mode);
3993         btrfs_set_token_inode_nlink(&token, item, inode->i_nlink);
3994
3995         btrfs_set_token_timespec_sec(&token, &item->atime,
3996                                      inode->i_atime.tv_sec);
3997         btrfs_set_token_timespec_nsec(&token, &item->atime,
3998                                       inode->i_atime.tv_nsec);
3999
4000         btrfs_set_token_timespec_sec(&token, &item->mtime,
4001                                      inode->i_mtime.tv_sec);
4002         btrfs_set_token_timespec_nsec(&token, &item->mtime,
4003                                       inode->i_mtime.tv_nsec);
4004
4005         btrfs_set_token_timespec_sec(&token, &item->ctime,
4006                                      inode->i_ctime.tv_sec);
4007         btrfs_set_token_timespec_nsec(&token, &item->ctime,
4008                                       inode->i_ctime.tv_nsec);
4009
4010         /*
4011          * We do not need to set the nbytes field, in fact during a fast fsync
4012          * its value may not even be correct, since a fast fsync does not wait
4013          * for ordered extent completion, which is where we update nbytes, it
4014          * only waits for writeback to complete. During log replay as we find
4015          * file extent items and replay them, we adjust the nbytes field of the
4016          * inode item in subvolume tree as needed (see overwrite_item()).
4017          */
4018
4019         btrfs_set_token_inode_sequence(&token, item, inode_peek_iversion(inode));
4020         btrfs_set_token_inode_transid(&token, item, trans->transid);
4021         btrfs_set_token_inode_rdev(&token, item, inode->i_rdev);
4022         flags = btrfs_inode_combine_flags(BTRFS_I(inode)->flags,
4023                                           BTRFS_I(inode)->ro_flags);
4024         btrfs_set_token_inode_flags(&token, item, flags);
4025         btrfs_set_token_inode_block_group(&token, item, 0);
4026 }
4027
4028 static int log_inode_item(struct btrfs_trans_handle *trans,
4029                           struct btrfs_root *log, struct btrfs_path *path,
4030                           struct btrfs_inode *inode, bool inode_item_dropped)
4031 {
4032         struct btrfs_inode_item *inode_item;
4033         int ret;
4034
4035         /*
4036          * If we are doing a fast fsync and the inode was logged before in the
4037          * current transaction, then we know the inode was previously logged and
4038          * it exists in the log tree. For performance reasons, in this case use
4039          * btrfs_search_slot() directly with ins_len set to 0 so that we never
4040          * attempt a write lock on the leaf's parent, which adds unnecessary lock
4041          * contention in case there are concurrent fsyncs for other inodes of the
4042          * same subvolume. Using btrfs_insert_empty_item() when the inode item
4043          * already exists can also result in unnecessarily splitting a leaf.
4044          */
4045         if (!inode_item_dropped && inode->logged_trans == trans->transid) {
4046                 ret = btrfs_search_slot(trans, log, &inode->location, path, 0, 1);
4047                 ASSERT(ret <= 0);
4048                 if (ret > 0)
4049                         ret = -ENOENT;
4050         } else {
4051                 /*
4052                  * This means it is the first fsync in the current transaction,
4053                  * so the inode item is not in the log and we need to insert it.
4054                  * We can never get -EEXIST because we are only called for a fast
4055                  * fsync and in case an inode eviction happens after the inode was
4056                  * logged before in the current transaction, when we load again
4057                  * the inode, we set BTRFS_INODE_NEEDS_FULL_SYNC on its runtime
4058                  * flags and set ->logged_trans to 0.
4059                  */
4060                 ret = btrfs_insert_empty_item(trans, log, path, &inode->location,
4061                                               sizeof(*inode_item));
4062                 ASSERT(ret != -EEXIST);
4063         }
4064         if (ret)
4065                 return ret;
4066         inode_item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4067                                     struct btrfs_inode_item);
4068         fill_inode_item(trans, path->nodes[0], inode_item, &inode->vfs_inode,
4069                         0, 0);
4070         btrfs_release_path(path);
4071         return 0;
4072 }
4073
4074 static int log_csums(struct btrfs_trans_handle *trans,
4075                      struct btrfs_inode *inode,
4076                      struct btrfs_root *log_root,
4077                      struct btrfs_ordered_sum *sums)
4078 {
4079         const u64 lock_end = sums->bytenr + sums->len - 1;
4080         struct extent_state *cached_state = NULL;
4081         int ret;
4082
4083         /*
4084          * If this inode was not used for reflink operations in the current
4085          * transaction with new extents, then do the fast path, no need to
4086          * worry about logging checksum items with overlapping ranges.
4087          */
4088         if (inode->last_reflink_trans < trans->transid)
4089                 return btrfs_csum_file_blocks(trans, log_root, sums);
4090
4091         /*
4092          * Serialize logging for checksums. This is to avoid racing with the
4093          * same checksum being logged by another task that is logging another
4094          * file which happens to refer to the same extent as well. Such races
4095          * can leave checksum items in the log with overlapping ranges.
4096          */
4097         ret = lock_extent_bits(&log_root->log_csum_range, sums->bytenr,
4098                                lock_end, &cached_state);
4099         if (ret)
4100                 return ret;
4101         /*
4102          * Due to extent cloning, we might have logged a csum item that covers a
4103          * subrange of a cloned extent, and later we can end up logging a csum
4104          * item for a larger subrange of the same extent or the entire range.
4105          * This would leave csum items in the log tree that cover the same range
4106          * and break the searches for checksums in the log tree, resulting in
4107          * some checksums missing in the fs/subvolume tree. So just delete (or
4108          * trim and adjust) any existing csum items in the log for this range.
4109          */
4110         ret = btrfs_del_csums(trans, log_root, sums->bytenr, sums->len);
4111         if (!ret)
4112                 ret = btrfs_csum_file_blocks(trans, log_root, sums);
4113
4114         unlock_extent_cached(&log_root->log_csum_range, sums->bytenr, lock_end,
4115                              &cached_state);
4116
4117         return ret;
4118 }
4119
4120 static noinline int copy_items(struct btrfs_trans_handle *trans,
4121                                struct btrfs_inode *inode,
4122                                struct btrfs_path *dst_path,
4123                                struct btrfs_path *src_path,
4124                                int start_slot, int nr, int inode_only,
4125                                u64 logged_isize)
4126 {
4127         struct btrfs_fs_info *fs_info = trans->fs_info;
4128         unsigned long src_offset;
4129         unsigned long dst_offset;
4130         struct btrfs_root *log = inode->root->log_root;
4131         struct btrfs_file_extent_item *extent;
4132         struct btrfs_inode_item *inode_item;
4133         struct extent_buffer *src = src_path->nodes[0];
4134         int ret;
4135         struct btrfs_key *ins_keys;
4136         u32 *ins_sizes;
4137         char *ins_data;
4138         int i;
4139         struct list_head ordered_sums;
4140         int skip_csum = inode->flags & BTRFS_INODE_NODATASUM;
4141
4142         INIT_LIST_HEAD(&ordered_sums);
4143
4144         ins_data = kmalloc(nr * sizeof(struct btrfs_key) +
4145                            nr * sizeof(u32), GFP_NOFS);
4146         if (!ins_data)
4147                 return -ENOMEM;
4148
4149         ins_sizes = (u32 *)ins_data;
4150         ins_keys = (struct btrfs_key *)(ins_data + nr * sizeof(u32));
4151
4152         for (i = 0; i < nr; i++) {
4153                 ins_sizes[i] = btrfs_item_size_nr(src, i + start_slot);
4154                 btrfs_item_key_to_cpu(src, ins_keys + i, i + start_slot);
4155         }
4156         ret = btrfs_insert_empty_items(trans, log, dst_path,
4157                                        ins_keys, ins_sizes, nr);
4158         if (ret) {
4159                 kfree(ins_data);
4160                 return ret;
4161         }
4162
4163         for (i = 0; i < nr; i++, dst_path->slots[0]++) {
4164                 dst_offset = btrfs_item_ptr_offset(dst_path->nodes[0],
4165                                                    dst_path->slots[0]);
4166
4167                 src_offset = btrfs_item_ptr_offset(src, start_slot + i);
4168
4169                 if (ins_keys[i].type == BTRFS_INODE_ITEM_KEY) {
4170                         inode_item = btrfs_item_ptr(dst_path->nodes[0],
4171                                                     dst_path->slots[0],
4172                                                     struct btrfs_inode_item);
4173                         fill_inode_item(trans, dst_path->nodes[0], inode_item,
4174                                         &inode->vfs_inode,
4175                                         inode_only == LOG_INODE_EXISTS,
4176                                         logged_isize);
4177                 } else {
4178                         copy_extent_buffer(dst_path->nodes[0], src, dst_offset,
4179                                            src_offset, ins_sizes[i]);
4180                 }
4181
4182                 /* take a reference on file data extents so that truncates
4183                  * or deletes of this inode don't have to relog the inode
4184                  * again
4185                  */
4186                 if (ins_keys[i].type == BTRFS_EXTENT_DATA_KEY &&
4187                     !skip_csum) {
4188                         int found_type;
4189                         extent = btrfs_item_ptr(src, start_slot + i,
4190                                                 struct btrfs_file_extent_item);
4191
4192                         if (btrfs_file_extent_generation(src, extent) < trans->transid)
4193                                 continue;
4194
4195                         found_type = btrfs_file_extent_type(src, extent);
4196                         if (found_type == BTRFS_FILE_EXTENT_REG) {
4197                                 u64 ds, dl, cs, cl;
4198                                 ds = btrfs_file_extent_disk_bytenr(src,
4199                                                                 extent);
4200                                 /* ds == 0 is a hole */
4201                                 if (ds == 0)
4202                                         continue;
4203
4204                                 dl = btrfs_file_extent_disk_num_bytes(src,
4205                                                                 extent);
4206                                 cs = btrfs_file_extent_offset(src, extent);
4207                                 cl = btrfs_file_extent_num_bytes(src,
4208                                                                 extent);
4209                                 if (btrfs_file_extent_compression(src,
4210                                                                   extent)) {
4211                                         cs = 0;
4212                                         cl = dl;
4213                                 }
4214
4215                                 ret = btrfs_lookup_csums_range(
4216                                                 fs_info->csum_root,
4217                                                 ds + cs, ds + cs + cl - 1,
4218                                                 &ordered_sums, 0);
4219                                 if (ret)
4220                                         break;
4221                         }
4222                 }
4223         }
4224
4225         btrfs_mark_buffer_dirty(dst_path->nodes[0]);
4226         btrfs_release_path(dst_path);
4227         kfree(ins_data);
4228
4229         /*
4230          * we have to do this after the loop above to avoid changing the
4231          * log tree while trying to change the log tree.
4232          */
4233         while (!list_empty(&ordered_sums)) {
4234                 struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
4235                                                    struct btrfs_ordered_sum,
4236                                                    list);
4237                 if (!ret)
4238                         ret = log_csums(trans, inode, log, sums);
4239                 list_del(&sums->list);
4240                 kfree(sums);
4241         }
4242
4243         return ret;
4244 }
4245
4246 static int extent_cmp(void *priv, const struct list_head *a,
4247                       const struct list_head *b)
4248 {
4249         const struct extent_map *em1, *em2;
4250
4251         em1 = list_entry(a, struct extent_map, list);
4252         em2 = list_entry(b, struct extent_map, list);
4253
4254         if (em1->start < em2->start)
4255                 return -1;
4256         else if (em1->start > em2->start)
4257                 return 1;
4258         return 0;
4259 }
4260
4261 static int log_extent_csums(struct btrfs_trans_handle *trans,
4262                             struct btrfs_inode *inode,
4263                             struct btrfs_root *log_root,
4264                             const struct extent_map *em,
4265                             struct btrfs_log_ctx *ctx)
4266 {
4267         struct btrfs_ordered_extent *ordered;
4268         u64 csum_offset;
4269         u64 csum_len;
4270         u64 mod_start = em->mod_start;
4271         u64 mod_len = em->mod_len;
4272         LIST_HEAD(ordered_sums);
4273         int ret = 0;
4274
4275         if (inode->flags & BTRFS_INODE_NODATASUM ||
4276             test_bit(EXTENT_FLAG_PREALLOC, &em->flags) ||
4277             em->block_start == EXTENT_MAP_HOLE)
4278                 return 0;
4279
4280         list_for_each_entry(ordered, &ctx->ordered_extents, log_list) {
4281                 const u64 ordered_end = ordered->file_offset + ordered->num_bytes;
4282                 const u64 mod_end = mod_start + mod_len;
4283                 struct btrfs_ordered_sum *sums;
4284
4285                 if (mod_len == 0)
4286                         break;
4287
4288                 if (ordered_end <= mod_start)
4289                         continue;
4290                 if (mod_end <= ordered->file_offset)
4291                         break;
4292
4293                 /*
4294                  * We are going to copy all the csums on this ordered extent, so
4295                  * go ahead and adjust mod_start and mod_len in case this ordered
4296                  * extent has already been logged.
4297                  */
4298                 if (ordered->file_offset > mod_start) {
4299                         if (ordered_end >= mod_end)
4300                                 mod_len = ordered->file_offset - mod_start;
4301                         /*
4302                          * If we have this case
4303                          *
4304                          * |--------- logged extent ---------|
4305                          *       |----- ordered extent ----|
4306                          *
4307                          * Just don't mess with mod_start and mod_len, we'll
4308                          * just end up logging more csums than we need and it
4309                          * will be ok.
4310                          */
4311                 } else {
4312                         if (ordered_end < mod_end) {
4313                                 mod_len = mod_end - ordered_end;
4314                                 mod_start = ordered_end;
4315                         } else {
4316                                 mod_len = 0;
4317                         }
4318                 }
4319
4320                 /*
4321                  * To keep us from looping for the above case of an ordered
4322                  * extent that falls inside of the logged extent.
4323                  */
4324                 if (test_and_set_bit(BTRFS_ORDERED_LOGGED_CSUM, &ordered->flags))
4325                         continue;
4326
4327                 list_for_each_entry(sums, &ordered->list, list) {
4328                         ret = log_csums(trans, inode, log_root, sums);
4329                         if (ret)
4330                                 return ret;
4331                 }
4332         }
4333
4334         /* We're done, found all csums in the ordered extents. */
4335         if (mod_len == 0)
4336                 return 0;
4337
4338         /* If we're compressed we have to save the entire range of csums. */
4339         if (em->compress_type) {
4340                 csum_offset = 0;
4341                 csum_len = max(em->block_len, em->orig_block_len);
4342         } else {
4343                 csum_offset = mod_start - em->start;
4344                 csum_len = mod_len;
4345         }
4346
4347         /* block start is already adjusted for the file extent offset. */
4348         ret = btrfs_lookup_csums_range(trans->fs_info->csum_root,
4349                                        em->block_start + csum_offset,
4350                                        em->block_start + csum_offset +
4351                                        csum_len - 1, &ordered_sums, 0);
4352         if (ret)
4353                 return ret;
4354
4355         while (!list_empty(&ordered_sums)) {
4356                 struct btrfs_ordered_sum *sums = list_entry(ordered_sums.next,
4357                                                    struct btrfs_ordered_sum,
4358                                                    list);
4359                 if (!ret)
4360                         ret = log_csums(trans, inode, log_root, sums);
4361                 list_del(&sums->list);
4362                 kfree(sums);
4363         }
4364
4365         return ret;
4366 }
4367
4368 static int log_one_extent(struct btrfs_trans_handle *trans,
4369                           struct btrfs_inode *inode, struct btrfs_root *root,
4370                           const struct extent_map *em,
4371                           struct btrfs_path *path,
4372                           struct btrfs_log_ctx *ctx)
4373 {
4374         struct btrfs_drop_extents_args drop_args = { 0 };
4375         struct btrfs_root *log = root->log_root;
4376         struct btrfs_file_extent_item *fi;
4377         struct extent_buffer *leaf;
4378         struct btrfs_map_token token;
4379         struct btrfs_key key;
4380         u64 extent_offset = em->start - em->orig_start;
4381         u64 block_len;
4382         int ret;
4383
4384         ret = log_extent_csums(trans, inode, log, em, ctx);
4385         if (ret)
4386                 return ret;
4387
4388         drop_args.path = path;
4389         drop_args.start = em->start;
4390         drop_args.end = em->start + em->len;
4391         drop_args.replace_extent = true;
4392         drop_args.extent_item_size = sizeof(*fi);
4393         ret = btrfs_drop_extents(trans, log, inode, &drop_args);
4394         if (ret)
4395                 return ret;
4396
4397         if (!drop_args.extent_inserted) {
4398                 key.objectid = btrfs_ino(inode);
4399                 key.type = BTRFS_EXTENT_DATA_KEY;
4400                 key.offset = em->start;
4401
4402                 ret = btrfs_insert_empty_item(trans, log, path, &key,
4403                                               sizeof(*fi));
4404                 if (ret)
4405                         return ret;
4406         }
4407         leaf = path->nodes[0];
4408         btrfs_init_map_token(&token, leaf);
4409         fi = btrfs_item_ptr(leaf, path->slots[0],
4410                             struct btrfs_file_extent_item);
4411
4412         btrfs_set_token_file_extent_generation(&token, fi, trans->transid);
4413         if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
4414                 btrfs_set_token_file_extent_type(&token, fi,
4415                                                  BTRFS_FILE_EXTENT_PREALLOC);
4416         else
4417                 btrfs_set_token_file_extent_type(&token, fi,
4418                                                  BTRFS_FILE_EXTENT_REG);
4419
4420         block_len = max(em->block_len, em->orig_block_len);
4421         if (em->compress_type != BTRFS_COMPRESS_NONE) {
4422                 btrfs_set_token_file_extent_disk_bytenr(&token, fi,
4423                                                         em->block_start);
4424                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, block_len);
4425         } else if (em->block_start < EXTENT_MAP_LAST_BYTE) {
4426                 btrfs_set_token_file_extent_disk_bytenr(&token, fi,
4427                                                         em->block_start -
4428                                                         extent_offset);
4429                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, block_len);
4430         } else {
4431                 btrfs_set_token_file_extent_disk_bytenr(&token, fi, 0);
4432                 btrfs_set_token_file_extent_disk_num_bytes(&token, fi, 0);
4433         }
4434
4435         btrfs_set_token_file_extent_offset(&token, fi, extent_offset);
4436         btrfs_set_token_file_extent_num_bytes(&token, fi, em->len);
4437         btrfs_set_token_file_extent_ram_bytes(&token, fi, em->ram_bytes);
4438         btrfs_set_token_file_extent_compression(&token, fi, em->compress_type);
4439         btrfs_set_token_file_extent_encryption(&token, fi, 0);
4440         btrfs_set_token_file_extent_other_encoding(&token, fi, 0);
4441         btrfs_mark_buffer_dirty(leaf);
4442
4443         btrfs_release_path(path);
4444
4445         return ret;
4446 }
4447
4448 /*
4449  * Log all prealloc extents beyond the inode's i_size to make sure we do not
4450  * lose them after doing a full/fast fsync and replaying the log. We scan the
4451  * subvolume's root instead of iterating the inode's extent map tree because
4452  * otherwise we can log incorrect extent items based on extent map conversion.
4453  * That can happen due to the fact that extent maps are merged when they
4454  * are not in the extent map tree's list of modified extents.
4455  */
4456 static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans,
4457                                       struct btrfs_inode *inode,
4458                                       struct btrfs_path *path)
4459 {
4460         struct btrfs_root *root = inode->root;
4461         struct btrfs_key key;
4462         const u64 i_size = i_size_read(&inode->vfs_inode);
4463         const u64 ino = btrfs_ino(inode);
4464         struct btrfs_path *dst_path = NULL;
4465         bool dropped_extents = false;
4466         u64 truncate_offset = i_size;
4467         struct extent_buffer *leaf;
4468         int slot;
4469         int ins_nr = 0;
4470         int start_slot;
4471         int ret;
4472
4473         if (!(inode->flags & BTRFS_INODE_PREALLOC))
4474                 return 0;
4475
4476         key.objectid = ino;
4477         key.type = BTRFS_EXTENT_DATA_KEY;
4478         key.offset = i_size;
4479         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4480         if (ret < 0)
4481                 goto out;
4482
4483         /*
4484          * We must check if there is a prealloc extent that starts before the
4485          * i_size and crosses the i_size boundary. This is to ensure later we
4486          * truncate down to the end of that extent and not to the i_size, as
4487          * otherwise we end up losing part of the prealloc extent after a log
4488          * replay and with an implicit hole if there is another prealloc extent
4489          * that starts at an offset beyond i_size.
4490          */
4491         ret = btrfs_previous_item(root, path, ino, BTRFS_EXTENT_DATA_KEY);
4492         if (ret < 0)
4493                 goto out;
4494
4495         if (ret == 0) {
4496                 struct btrfs_file_extent_item *ei;
4497
4498                 leaf = path->nodes[0];
4499                 slot = path->slots[0];
4500                 ei = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item);
4501
4502                 if (btrfs_file_extent_type(leaf, ei) ==
4503                     BTRFS_FILE_EXTENT_PREALLOC) {
4504                         u64 extent_end;
4505
4506                         btrfs_item_key_to_cpu(leaf, &key, slot);
4507                         extent_end = key.offset +
4508                                 btrfs_file_extent_num_bytes(leaf, ei);
4509
4510                         if (extent_end > i_size)
4511                                 truncate_offset = extent_end;
4512                 }
4513         } else {
4514                 ret = 0;
4515         }
4516
4517         while (true) {
4518                 leaf = path->nodes[0];
4519                 slot = path->slots[0];
4520
4521                 if (slot >= btrfs_header_nritems(leaf)) {
4522                         if (ins_nr > 0) {
4523                                 ret = copy_items(trans, inode, dst_path, path,
4524                                                  start_slot, ins_nr, 1, 0);
4525                                 if (ret < 0)
4526                                         goto out;
4527                                 ins_nr = 0;
4528                         }
4529                         ret = btrfs_next_leaf(root, path);
4530                         if (ret < 0)
4531                                 goto out;
4532                         if (ret > 0) {
4533                                 ret = 0;
4534                                 break;
4535                         }
4536                         continue;
4537                 }
4538
4539                 btrfs_item_key_to_cpu(leaf, &key, slot);
4540                 if (key.objectid > ino)
4541                         break;
4542                 if (WARN_ON_ONCE(key.objectid < ino) ||
4543                     key.type < BTRFS_EXTENT_DATA_KEY ||
4544                     key.offset < i_size) {
4545                         path->slots[0]++;
4546                         continue;
4547                 }
4548                 if (!dropped_extents) {
4549                         /*
4550                          * Avoid logging extent items logged in past fsync calls
4551                          * and leading to duplicate keys in the log tree.
4552                          */
4553                         do {
4554                                 ret = btrfs_truncate_inode_items(trans,
4555                                                          root->log_root,
4556                                                          inode, truncate_offset,
4557                                                          BTRFS_EXTENT_DATA_KEY,
4558                                                          NULL);
4559                         } while (ret == -EAGAIN);
4560                         if (ret)
4561                                 goto out;
4562                         dropped_extents = true;
4563                 }
4564                 if (ins_nr == 0)
4565                         start_slot = slot;
4566                 ins_nr++;
4567                 path->slots[0]++;
4568                 if (!dst_path) {
4569                         dst_path = btrfs_alloc_path();
4570                         if (!dst_path) {
4571                                 ret = -ENOMEM;
4572                                 goto out;
4573                         }
4574                 }
4575         }
4576         if (ins_nr > 0)
4577                 ret = copy_items(trans, inode, dst_path, path,
4578                                  start_slot, ins_nr, 1, 0);
4579 out:
4580         btrfs_release_path(path);
4581         btrfs_free_path(dst_path);
4582         return ret;
4583 }
4584
4585 static int btrfs_log_changed_extents(struct btrfs_trans_handle *trans,
4586                                      struct btrfs_root *root,
4587                                      struct btrfs_inode *inode,
4588                                      struct btrfs_path *path,
4589                                      struct btrfs_log_ctx *ctx)
4590 {
4591         struct btrfs_ordered_extent *ordered;
4592         struct btrfs_ordered_extent *tmp;
4593         struct extent_map *em, *n;
4594         struct list_head extents;
4595         struct extent_map_tree *tree = &inode->extent_tree;
4596         int ret = 0;
4597         int num = 0;
4598
4599         INIT_LIST_HEAD(&extents);
4600
4601         write_lock(&tree->lock);
4602
4603         list_for_each_entry_safe(em, n, &tree->modified_extents, list) {
4604                 list_del_init(&em->list);
4605                 /*
4606                  * Just an arbitrary number, this can be really CPU intensive
4607                  * once we start getting a lot of extents, and really once we
4608                  * have a bunch of extents we just want to commit since it will
4609                  * be faster.
4610                  */
4611                 if (++num > 32768) {
4612                         list_del_init(&tree->modified_extents);
4613                         ret = -EFBIG;
4614                         goto process;
4615                 }
4616
4617                 if (em->generation < trans->transid)
4618                         continue;
4619
4620                 /* We log prealloc extents beyond eof later. */
4621                 if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags) &&
4622                     em->start >= i_size_read(&inode->vfs_inode))
4623                         continue;
4624
4625                 /* Need a ref to keep it from getting evicted from cache */
4626                 refcount_inc(&em->refs);
4627                 set_bit(EXTENT_FLAG_LOGGING, &em->flags);
4628                 list_add_tail(&em->list, &extents);
4629                 num++;
4630         }
4631
4632         list_sort(NULL, &extents, extent_cmp);
4633 process:
4634         while (!list_empty(&extents)) {
4635                 em = list_entry(extents.next, struct extent_map, list);
4636
4637                 list_del_init(&em->list);
4638
4639                 /*
4640                  * If we had an error we just need to delete everybody from our
4641                  * private list.
4642                  */
4643                 if (ret) {
4644                         clear_em_logging(tree, em);
4645                         free_extent_map(em);
4646                         continue;
4647                 }
4648
4649                 write_unlock(&tree->lock);
4650
4651                 ret = log_one_extent(trans, inode, root, em, path, ctx);
4652                 write_lock(&tree->lock);
4653                 clear_em_logging(tree, em);
4654                 free_extent_map(em);
4655         }
4656         WARN_ON(!list_empty(&extents));
4657         write_unlock(&tree->lock);
4658
4659         btrfs_release_path(path);
4660         if (!ret)
4661                 ret = btrfs_log_prealloc_extents(trans, inode, path);
4662         if (ret)
4663                 return ret;
4664
4665         /*
4666          * We have logged all extents successfully, now make sure the commit of
4667          * the current transaction waits for the ordered extents to complete
4668          * before it commits and wipes out the log trees, otherwise we would
4669          * lose data if an ordered extents completes after the transaction
4670          * commits and a power failure happens after the transaction commit.
4671          */
4672         list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {
4673                 list_del_init(&ordered->log_list);
4674                 set_bit(BTRFS_ORDERED_LOGGED, &ordered->flags);
4675
4676                 if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {
4677                         spin_lock_irq(&inode->ordered_tree.lock);
4678                         if (!test_bit(BTRFS_ORDERED_COMPLETE, &ordered->flags)) {
4679                                 set_bit(BTRFS_ORDERED_PENDING, &ordered->flags);
4680                                 atomic_inc(&trans->transaction->pending_ordered);
4681                         }
4682                         spin_unlock_irq(&inode->ordered_tree.lock);
4683                 }
4684                 btrfs_put_ordered_extent(ordered);
4685         }
4686
4687         return 0;
4688 }
4689
4690 static int logged_inode_size(struct btrfs_root *log, struct btrfs_inode *inode,
4691                              struct btrfs_path *path, u64 *size_ret)
4692 {
4693         struct btrfs_key key;
4694         int ret;
4695
4696         key.objectid = btrfs_ino(inode);
4697         key.type = BTRFS_INODE_ITEM_KEY;
4698         key.offset = 0;
4699
4700         ret = btrfs_search_slot(NULL, log, &key, path, 0, 0);
4701         if (ret < 0) {
4702                 return ret;
4703         } else if (ret > 0) {
4704                 *size_ret = 0;
4705         } else {
4706                 struct btrfs_inode_item *item;
4707
4708                 item = btrfs_item_ptr(path->nodes[0], path->slots[0],
4709                                       struct btrfs_inode_item);
4710                 *size_ret = btrfs_inode_size(path->nodes[0], item);
4711                 /*
4712                  * If the in-memory inode's i_size is smaller then the inode
4713                  * size stored in the btree, return the inode's i_size, so
4714                  * that we get a correct inode size after replaying the log
4715                  * when before a power failure we had a shrinking truncate
4716                  * followed by addition of a new name (rename / new hard link).
4717                  * Otherwise return the inode size from the btree, to avoid
4718                  * data loss when replaying a log due to previously doing a
4719                  * write that expands the inode's size and logging a new name
4720                  * immediately after.
4721                  */
4722                 if (*size_ret > inode->vfs_inode.i_size)
4723                         *size_ret = inode->vfs_inode.i_size;
4724         }
4725
4726         btrfs_release_path(path);
4727         return 0;
4728 }
4729
4730 /*
4731  * At the moment we always log all xattrs. This is to figure out at log replay
4732  * time which xattrs must have their deletion replayed. If a xattr is missing
4733  * in the log tree and exists in the fs/subvol tree, we delete it. This is
4734  * because if a xattr is deleted, the inode is fsynced and a power failure
4735  * happens, causing the log to be replayed the next time the fs is mounted,
4736  * we want the xattr to not exist anymore (same behaviour as other filesystems
4737  * with a journal, ext3/4, xfs, f2fs, etc).
4738  */
4739 static int btrfs_log_all_xattrs(struct btrfs_trans_handle *trans,
4740                                 struct btrfs_root *root,
4741                                 struct btrfs_inode *inode,
4742                                 struct btrfs_path *path,
4743                                 struct btrfs_path *dst_path)
4744 {
4745         int ret;
4746         struct btrfs_key key;
4747         const u64 ino = btrfs_ino(inode);
4748         int ins_nr = 0;
4749         int start_slot = 0;
4750         bool found_xattrs = false;
4751
4752         if (test_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags))
4753                 return 0;
4754
4755         key.objectid = ino;
4756         key.type = BTRFS_XATTR_ITEM_KEY;
4757         key.offset = 0;
4758
4759         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4760         if (ret < 0)
4761                 return ret;
4762
4763         while (true) {
4764                 int slot = path->slots[0];
4765                 struct extent_buffer *leaf = path->nodes[0];
4766                 int nritems = btrfs_header_nritems(leaf);
4767
4768                 if (slot >= nritems) {
4769                         if (ins_nr > 0) {
4770                                 ret = copy_items(trans, inode, dst_path, path,
4771                                                  start_slot, ins_nr, 1, 0);
4772                                 if (ret < 0)
4773                                         return ret;
4774                                 ins_nr = 0;
4775                         }
4776                         ret = btrfs_next_leaf(root, path);
4777                         if (ret < 0)
4778                                 return ret;
4779                         else if (ret > 0)
4780                                 break;
4781                         continue;
4782                 }
4783
4784                 btrfs_item_key_to_cpu(leaf, &key, slot);
4785                 if (key.objectid != ino || key.type != BTRFS_XATTR_ITEM_KEY)
4786                         break;
4787
4788                 if (ins_nr == 0)
4789                         start_slot = slot;
4790                 ins_nr++;
4791                 path->slots[0]++;
4792                 found_xattrs = true;
4793                 cond_resched();
4794         }
4795         if (ins_nr > 0) {
4796                 ret = copy_items(trans, inode, dst_path, path,
4797                                  start_slot, ins_nr, 1, 0);
4798                 if (ret < 0)
4799                         return ret;
4800         }
4801
4802         if (!found_xattrs)
4803                 set_bit(BTRFS_INODE_NO_XATTRS, &inode->runtime_flags);
4804
4805         return 0;
4806 }
4807
4808 /*
4809  * When using the NO_HOLES feature if we punched a hole that causes the
4810  * deletion of entire leafs or all the extent items of the first leaf (the one
4811  * that contains the inode item and references) we may end up not processing
4812  * any extents, because there are no leafs with a generation matching the
4813  * current transaction that have extent items for our inode. So we need to find
4814  * if any holes exist and then log them. We also need to log holes after any
4815  * truncate operation that changes the inode's size.
4816  */
4817 static int btrfs_log_holes(struct btrfs_trans_handle *trans,
4818                            struct btrfs_root *root,
4819                            struct btrfs_inode *inode,
4820                            struct btrfs_path *path)
4821 {
4822         struct btrfs_fs_info *fs_info = root->fs_info;
4823         struct btrfs_key key;
4824         const u64 ino = btrfs_ino(inode);
4825         const u64 i_size = i_size_read(&inode->vfs_inode);
4826         u64 prev_extent_end = 0;
4827         int ret;
4828
4829         if (!btrfs_fs_incompat(fs_info, NO_HOLES) || i_size == 0)
4830                 return 0;
4831
4832         key.objectid = ino;
4833         key.type = BTRFS_EXTENT_DATA_KEY;
4834         key.offset = 0;
4835
4836         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4837         if (ret < 0)
4838                 return ret;
4839
4840         while (true) {
4841                 struct extent_buffer *leaf = path->nodes[0];
4842
4843                 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) {
4844                         ret = btrfs_next_leaf(root, path);
4845                         if (ret < 0)
4846                                 return ret;
4847                         if (ret > 0) {
4848                                 ret = 0;
4849                                 break;
4850                         }
4851                         leaf = path->nodes[0];
4852                 }
4853
4854                 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
4855                 if (key.objectid != ino || key.type != BTRFS_EXTENT_DATA_KEY)
4856                         break;
4857
4858                 /* We have a hole, log it. */
4859                 if (prev_extent_end < key.offset) {
4860                         const u64 hole_len = key.offset - prev_extent_end;
4861
4862                         /*
4863                          * Release the path to avoid deadlocks with other code
4864                          * paths that search the root while holding locks on
4865                          * leafs from the log root.
4866                          */
4867                         btrfs_release_path(path);
4868                         ret = btrfs_insert_file_extent(trans, root->log_root,
4869                                                        ino, prev_extent_end, 0,
4870                                                        0, hole_len, 0, hole_len,
4871                                                        0, 0, 0);
4872                         if (ret < 0)
4873                                 return ret;
4874
4875                         /*
4876                          * Search for the same key again in the root. Since it's
4877                          * an extent item and we are holding the inode lock, the
4878                          * key must still exist. If it doesn't just emit warning
4879                          * and return an error to fall back to a transaction
4880                          * commit.
4881                          */
4882                         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
4883                         if (ret < 0)
4884                                 return ret;
4885                         if (WARN_ON(ret > 0))
4886                                 return -ENOENT;
4887                         leaf = path->nodes[0];
4888                 }
4889
4890                 prev_extent_end = btrfs_file_extent_end(path);
4891                 path->slots[0]++;
4892                 cond_resched();
4893         }
4894
4895         if (prev_extent_end < i_size) {
4896                 u64 hole_len;
4897
4898                 btrfs_release_path(path);
4899                 hole_len = ALIGN(i_size - prev_extent_end, fs_info->sectorsize);
4900                 ret = btrfs_insert_file_extent(trans, root->log_root,
4901                                                ino, prev_extent_end, 0, 0,
4902                                                hole_len, 0, hole_len,
4903                                                0, 0, 0);
4904                 if (ret < 0)
4905                         return ret;
4906         }
4907
4908         return 0;
4909 }
4910
4911 /*
4912  * When we are logging a new inode X, check if it doesn't have a reference that
4913  * matches the reference from some other inode Y created in a past transaction
4914  * and that was renamed in the current transaction. If we don't do this, then at
4915  * log replay time we can lose inode Y (and all its files if it's a directory):
4916  *
4917  * mkdir /mnt/x
4918  * echo "hello world" > /mnt/x/foobar
4919  * sync
4920  * mv /mnt/x /mnt/y
4921  * mkdir /mnt/x                 # or touch /mnt/x
4922  * xfs_io -c fsync /mnt/x
4923  * <power fail>
4924  * mount fs, trigger log replay
4925  *
4926  * After the log replay procedure, we would lose the first directory and all its
4927  * files (file foobar).
4928  * For the case where inode Y is not a directory we simply end up losing it:
4929  *
4930  * echo "123" > /mnt/foo
4931  * sync
4932  * mv /mnt/foo /mnt/bar
4933  * echo "abc" > /mnt/foo
4934  * xfs_io -c fsync /mnt/foo
4935  * <power fail>
4936  *
4937  * We also need this for cases where a snapshot entry is replaced by some other
4938  * entry (file or directory) otherwise we end up with an unreplayable log due to
4939  * attempts to delete the snapshot entry (entry of type BTRFS_ROOT_ITEM_KEY) as
4940  * if it were a regular entry:
4941  *
4942  * mkdir /mnt/x
4943  * btrfs subvolume snapshot /mnt /mnt/x/snap
4944  * btrfs subvolume delete /mnt/x/snap
4945  * rmdir /mnt/x
4946  * mkdir /mnt/x
4947  * fsync /mnt/x or fsync some new file inside it
4948  * <power fail>
4949  *
4950  * The snapshot delete, rmdir of x, mkdir of a new x and the fsync all happen in
4951  * the same transaction.
4952  */
4953 static int btrfs_check_ref_name_override(struct extent_buffer *eb,
4954                                          const int slot,
4955                                          const struct btrfs_key *key,
4956                                          struct btrfs_inode *inode,
4957                                          u64 *other_ino, u64 *other_parent)
4958 {
4959         int ret;
4960         struct btrfs_path *search_path;
4961         char *name = NULL;
4962         u32 name_len = 0;
4963         u32 item_size = btrfs_item_size_nr(eb, slot);
4964         u32 cur_offset = 0;
4965         unsigned long ptr = btrfs_item_ptr_offset(eb, slot);
4966
4967         search_path = btrfs_alloc_path();
4968         if (!search_path)
4969                 return -ENOMEM;
4970         search_path->search_commit_root = 1;
4971         search_path->skip_locking = 1;
4972
4973         while (cur_offset < item_size) {
4974                 u64 parent;
4975                 u32 this_name_len;
4976                 u32 this_len;
4977                 unsigned long name_ptr;
4978                 struct btrfs_dir_item *di;
4979
4980                 if (key->type == BTRFS_INODE_REF_KEY) {
4981                         struct btrfs_inode_ref *iref;
4982
4983                         iref = (struct btrfs_inode_ref *)(ptr + cur_offset);
4984                         parent = key->offset;
4985                         this_name_len = btrfs_inode_ref_name_len(eb, iref);
4986                         name_ptr = (unsigned long)(iref + 1);
4987                         this_len = sizeof(*iref) + this_name_len;
4988                 } else {
4989                         struct btrfs_inode_extref *extref;
4990
4991                         extref = (struct btrfs_inode_extref *)(ptr +
4992                                                                cur_offset);
4993                         parent = btrfs_inode_extref_parent(eb, extref);
4994                         this_name_len = btrfs_inode_extref_name_len(eb, extref);
4995                         name_ptr = (unsigned long)&extref->name;
4996                         this_len = sizeof(*extref) + this_name_len;
4997                 }
4998
4999                 if (this_name_len > name_len) {
5000                         char *new_name;
5001
5002                         new_name = krealloc(name, this_name_len, GFP_NOFS);
5003                         if (!new_name) {
5004                                 ret = -ENOMEM;
5005                                 goto out;
5006                         }
5007                         name_len = this_name_len;
5008                         name = new_name;
5009                 }
5010
5011                 read_extent_buffer(eb, name, name_ptr, this_name_len);
5012                 di = btrfs_lookup_dir_item(NULL, inode->root, search_path,
5013                                 parent, name, this_name_len, 0);
5014                 if (di && !IS_ERR(di)) {
5015                         struct btrfs_key di_key;
5016
5017                         btrfs_dir_item_key_to_cpu(search_path->nodes[0],
5018                                                   di, &di_key);
5019                         if (di_key.type == BTRFS_INODE_ITEM_KEY) {
5020                                 if (di_key.objectid != key->objectid) {
5021                                         ret = 1;
5022                                         *other_ino = di_key.objectid;
5023                                         *other_parent = parent;
5024                                 } else {
5025                                         ret = 0;
5026                                 }
5027                         } else {
5028                                 ret = -EAGAIN;
5029                         }
5030                         goto out;
5031                 } else if (IS_ERR(di)) {
5032                         ret = PTR_ERR(di);
5033                         goto out;
5034                 }
5035                 btrfs_release_path(search_path);
5036
5037                 cur_offset += this_len;
5038         }
5039         ret = 0;
5040 out:
5041         btrfs_free_path(search_path);
5042         kfree(name);
5043         return ret;
5044 }
5045
5046 struct btrfs_ino_list {
5047         u64 ino;
5048         u64 parent;
5049         struct list_head list;
5050 };
5051
5052 static int log_conflicting_inodes(struct btrfs_trans_handle *trans,
5053                                   struct btrfs_root *root,
5054                                   struct btrfs_path *path,
5055                                   struct btrfs_log_ctx *ctx,
5056                                   u64 ino, u64 parent)
5057 {
5058         struct btrfs_ino_list *ino_elem;
5059         LIST_HEAD(inode_list);
5060         int ret = 0;
5061
5062         ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
5063         if (!ino_elem)
5064                 return -ENOMEM;
5065         ino_elem->ino = ino;
5066         ino_elem->parent = parent;
5067         list_add_tail(&ino_elem->list, &inode_list);
5068
5069         while (!list_empty(&inode_list)) {
5070                 struct btrfs_fs_info *fs_info = root->fs_info;
5071                 struct btrfs_key key;
5072                 struct inode *inode;
5073
5074                 ino_elem = list_first_entry(&inode_list, struct btrfs_ino_list,
5075                                             list);
5076                 ino = ino_elem->ino;
5077                 parent = ino_elem->parent;
5078                 list_del(&ino_elem->list);
5079                 kfree(ino_elem);
5080                 if (ret)
5081                         continue;
5082
5083                 btrfs_release_path(path);
5084
5085                 inode = btrfs_iget(fs_info->sb, ino, root);
5086                 /*
5087                  * If the other inode that had a conflicting dir entry was
5088                  * deleted in the current transaction, we need to log its parent
5089                  * directory.
5090                  */
5091                 if (IS_ERR(inode)) {
5092                         ret = PTR_ERR(inode);
5093                         if (ret == -ENOENT) {
5094                                 inode = btrfs_iget(fs_info->sb, parent, root);
5095                                 if (IS_ERR(inode)) {
5096                                         ret = PTR_ERR(inode);
5097                                 } else {
5098                                         ret = btrfs_log_inode(trans, root,
5099                                                       BTRFS_I(inode),
5100                                                       LOG_OTHER_INODE_ALL,
5101                                                       ctx);
5102                                         btrfs_add_delayed_iput(inode);
5103                                 }
5104                         }
5105                         continue;
5106                 }
5107                 /*
5108                  * If the inode was already logged skip it - otherwise we can
5109                  * hit an infinite loop. Example:
5110                  *
5111                  * From the commit root (previous transaction) we have the
5112                  * following inodes:
5113                  *
5114                  * inode 257 a directory
5115                  * inode 258 with references "zz" and "zz_link" on inode 257
5116                  * inode 259 with reference "a" on inode 257
5117                  *
5118                  * And in the current (uncommitted) transaction we have:
5119                  *
5120                  * inode 257 a directory, unchanged
5121                  * inode 258 with references "a" and "a2" on inode 257
5122                  * inode 259 with reference "zz_link" on inode 257
5123                  * inode 261 with reference "zz" on inode 257
5124                  *
5125                  * When logging inode 261 the following infinite loop could
5126                  * happen if we don't skip already logged inodes:
5127                  *
5128                  * - we detect inode 258 as a conflicting inode, with inode 261
5129                  *   on reference "zz", and log it;
5130                  *
5131                  * - we detect inode 259 as a conflicting inode, with inode 258
5132                  *   on reference "a", and log it;
5133                  *
5134                  * - we detect inode 258 as a conflicting inode, with inode 259
5135                  *   on reference "zz_link", and log it - again! After this we
5136                  *   repeat the above steps forever.
5137                  */
5138                 spin_lock(&BTRFS_I(inode)->lock);
5139                 /*
5140                  * Check the inode's logged_trans only instead of
5141                  * btrfs_inode_in_log(). This is because the last_log_commit of
5142                  * the inode is not updated when we only log that it exists (see
5143                  * btrfs_log_inode()).
5144                  */
5145                 if (BTRFS_I(inode)->logged_trans == trans->transid) {
5146                         spin_unlock(&BTRFS_I(inode)->lock);
5147                         btrfs_add_delayed_iput(inode);
5148                         continue;
5149                 }
5150                 spin_unlock(&BTRFS_I(inode)->lock);
5151                 /*
5152                  * We are safe logging the other inode without acquiring its
5153                  * lock as long as we log with the LOG_INODE_EXISTS mode. We
5154                  * are safe against concurrent renames of the other inode as
5155                  * well because during a rename we pin the log and update the
5156                  * log with the new name before we unpin it.
5157                  */
5158                 ret = btrfs_log_inode(trans, root, BTRFS_I(inode),
5159                                       LOG_OTHER_INODE, ctx);
5160                 if (ret) {
5161                         btrfs_add_delayed_iput(inode);
5162                         continue;
5163                 }
5164
5165                 key.objectid = ino;
5166                 key.type = BTRFS_INODE_REF_KEY;
5167                 key.offset = 0;
5168                 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5169                 if (ret < 0) {
5170                         btrfs_add_delayed_iput(inode);
5171                         continue;
5172                 }
5173
5174                 while (true) {
5175                         struct extent_buffer *leaf = path->nodes[0];
5176                         int slot = path->slots[0];
5177                         u64 other_ino = 0;
5178                         u64 other_parent = 0;
5179
5180                         if (slot >= btrfs_header_nritems(leaf)) {
5181                                 ret = btrfs_next_leaf(root, path);
5182                                 if (ret < 0) {
5183                                         break;
5184                                 } else if (ret > 0) {
5185                                         ret = 0;
5186                                         break;
5187                                 }
5188                                 continue;
5189                         }
5190
5191                         btrfs_item_key_to_cpu(leaf, &key, slot);
5192                         if (key.objectid != ino ||
5193                             (key.type != BTRFS_INODE_REF_KEY &&
5194                              key.type != BTRFS_INODE_EXTREF_KEY)) {
5195                                 ret = 0;
5196                                 break;
5197                         }
5198
5199                         ret = btrfs_check_ref_name_override(leaf, slot, &key,
5200                                         BTRFS_I(inode), &other_ino,
5201                                         &other_parent);
5202                         if (ret < 0)
5203                                 break;
5204                         if (ret > 0) {
5205                                 ino_elem = kmalloc(sizeof(*ino_elem), GFP_NOFS);
5206                                 if (!ino_elem) {
5207                                         ret = -ENOMEM;
5208                                         break;
5209                                 }
5210                                 ino_elem->ino = other_ino;
5211                                 ino_elem->parent = other_parent;
5212                                 list_add_tail(&ino_elem->list, &inode_list);
5213                                 ret = 0;
5214                         }
5215                         path->slots[0]++;
5216                 }
5217                 btrfs_add_delayed_iput(inode);
5218         }
5219
5220         return ret;
5221 }
5222
5223 static int copy_inode_items_to_log(struct btrfs_trans_handle *trans,
5224                                    struct btrfs_inode *inode,
5225                                    struct btrfs_key *min_key,
5226                                    const struct btrfs_key *max_key,
5227                                    struct btrfs_path *path,
5228                                    struct btrfs_path *dst_path,
5229                                    const u64 logged_isize,
5230                                    const bool recursive_logging,
5231                                    const int inode_only,
5232                                    struct btrfs_log_ctx *ctx,
5233                                    bool *need_log_inode_item)
5234 {
5235         const u64 i_size = i_size_read(&inode->vfs_inode);
5236         struct btrfs_root *root = inode->root;
5237         int ins_start_slot = 0;
5238         int ins_nr = 0;
5239         int ret;
5240
5241         while (1) {
5242                 ret = btrfs_search_forward(root, min_key, path, trans->transid);
5243                 if (ret < 0)
5244                         return ret;
5245                 if (ret > 0) {
5246                         ret = 0;
5247                         break;
5248                 }
5249 again:
5250                 /* Note, ins_nr might be > 0 here, cleanup outside the loop */
5251                 if (min_key->objectid != max_key->objectid)
5252                         break;
5253                 if (min_key->type > max_key->type)
5254                         break;
5255
5256                 if (min_key->type == BTRFS_INODE_ITEM_KEY) {
5257                         *need_log_inode_item = false;
5258                 } else if (min_key->type == BTRFS_EXTENT_DATA_KEY &&
5259                            min_key->offset >= i_size) {
5260                         /*
5261                          * Extents at and beyond eof are logged with
5262                          * btrfs_log_prealloc_extents().
5263                          * Only regular files have BTRFS_EXTENT_DATA_KEY keys,
5264                          * and no keys greater than that, so bail out.
5265                          */
5266                         break;
5267                 } else if ((min_key->type == BTRFS_INODE_REF_KEY ||
5268                             min_key->type == BTRFS_INODE_EXTREF_KEY) &&
5269                            inode->generation == trans->transid &&
5270                            !recursive_logging) {
5271                         u64 other_ino = 0;
5272                         u64 other_parent = 0;
5273
5274                         ret = btrfs_check_ref_name_override(path->nodes[0],
5275                                         path->slots[0], min_key, inode,
5276                                         &other_ino, &other_parent);
5277                         if (ret < 0) {
5278                                 return ret;
5279                         } else if (ret > 0 && ctx &&
5280                                    other_ino != btrfs_ino(BTRFS_I(ctx->inode))) {
5281                                 if (ins_nr > 0) {
5282                                         ins_nr++;
5283                                 } else {
5284                                         ins_nr = 1;
5285                                         ins_start_slot = path->slots[0];
5286                                 }
5287                                 ret = copy_items(trans, inode, dst_path, path,
5288                                                  ins_start_slot, ins_nr,
5289                                                  inode_only, logged_isize);
5290                                 if (ret < 0)
5291                                         return ret;
5292                                 ins_nr = 0;
5293
5294                                 ret = log_conflicting_inodes(trans, root, path,
5295                                                 ctx, other_ino, other_parent);
5296                                 if (ret)
5297                                         return ret;
5298                                 btrfs_release_path(path);
5299                                 goto next_key;
5300                         }
5301                 } else if (min_key->type == BTRFS_XATTR_ITEM_KEY) {
5302                         /* Skip xattrs, logged later with btrfs_log_all_xattrs() */
5303                         if (ins_nr == 0)
5304                                 goto next_slot;
5305                         ret = copy_items(trans, inode, dst_path, path,
5306                                          ins_start_slot,
5307                                          ins_nr, inode_only, logged_isize);
5308                         if (ret < 0)
5309                                 return ret;
5310                         ins_nr = 0;
5311                         goto next_slot;
5312                 }
5313
5314                 if (ins_nr && ins_start_slot + ins_nr == path->slots[0]) {
5315                         ins_nr++;
5316                         goto next_slot;
5317                 } else if (!ins_nr) {
5318                         ins_start_slot = path->slots[0];
5319                         ins_nr = 1;
5320                         goto next_slot;
5321                 }
5322
5323                 ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
5324                                  ins_nr, inode_only, logged_isize);
5325                 if (ret < 0)
5326                         return ret;
5327                 ins_nr = 1;
5328                 ins_start_slot = path->slots[0];
5329 next_slot:
5330                 path->slots[0]++;
5331                 if (path->slots[0] < btrfs_header_nritems(path->nodes[0])) {
5332                         btrfs_item_key_to_cpu(path->nodes[0], min_key,
5333                                               path->slots[0]);
5334                         goto again;
5335                 }
5336                 if (ins_nr) {
5337                         ret = copy_items(trans, inode, dst_path, path,
5338                                          ins_start_slot, ins_nr, inode_only,
5339                                          logged_isize);
5340                         if (ret < 0)
5341                                 return ret;
5342                         ins_nr = 0;
5343                 }
5344                 btrfs_release_path(path);
5345 next_key:
5346                 if (min_key->offset < (u64)-1) {
5347                         min_key->offset++;
5348                 } else if (min_key->type < max_key->type) {
5349                         min_key->type++;
5350                         min_key->offset = 0;
5351                 } else {
5352                         break;
5353                 }
5354         }
5355         if (ins_nr) {
5356                 ret = copy_items(trans, inode, dst_path, path, ins_start_slot,
5357                                  ins_nr, inode_only, logged_isize);
5358                 if (ret)
5359                         return ret;
5360         }
5361
5362         if (inode_only == LOG_INODE_ALL && S_ISREG(inode->vfs_inode.i_mode)) {
5363                 /*
5364                  * Release the path because otherwise we might attempt to double
5365                  * lock the same leaf with btrfs_log_prealloc_extents() below.
5366                  */
5367                 btrfs_release_path(path);
5368                 ret = btrfs_log_prealloc_extents(trans, inode, dst_path);
5369         }
5370
5371         return ret;
5372 }
5373
5374 /* log a single inode in the tree log.
5375  * At least one parent directory for this inode must exist in the tree
5376  * or be logged already.
5377  *
5378  * Any items from this inode changed by the current transaction are copied
5379  * to the log tree.  An extra reference is taken on any extents in this
5380  * file, allowing us to avoid a whole pile of corner cases around logging
5381  * blocks that have been removed from the tree.
5382  *
5383  * See LOG_INODE_ALL and related defines for a description of what inode_only
5384  * does.
5385  *
5386  * This handles both files and directories.
5387  */
5388 static int btrfs_log_inode(struct btrfs_trans_handle *trans,
5389                            struct btrfs_root *root, struct btrfs_inode *inode,
5390                            int inode_only,
5391                            struct btrfs_log_ctx *ctx)
5392 {
5393         struct btrfs_path *path;
5394         struct btrfs_path *dst_path;
5395         struct btrfs_key min_key;
5396         struct btrfs_key max_key;
5397         struct btrfs_root *log = root->log_root;
5398         int err = 0;
5399         int ret = 0;
5400         bool fast_search = false;
5401         u64 ino = btrfs_ino(inode);
5402         struct extent_map_tree *em_tree = &inode->extent_tree;
5403         u64 logged_isize = 0;
5404         bool need_log_inode_item = true;
5405         bool xattrs_logged = false;
5406         bool recursive_logging = false;
5407         bool inode_item_dropped = true;
5408
5409         path = btrfs_alloc_path();
5410         if (!path)
5411                 return -ENOMEM;
5412         dst_path = btrfs_alloc_path();
5413         if (!dst_path) {
5414                 btrfs_free_path(path);
5415                 return -ENOMEM;
5416         }
5417
5418         min_key.objectid = ino;
5419         min_key.type = BTRFS_INODE_ITEM_KEY;
5420         min_key.offset = 0;
5421
5422         max_key.objectid = ino;
5423
5424
5425         /* today the code can only do partial logging of directories */
5426         if (S_ISDIR(inode->vfs_inode.i_mode) ||
5427             (!test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5428                        &inode->runtime_flags) &&
5429              inode_only >= LOG_INODE_EXISTS))
5430                 max_key.type = BTRFS_XATTR_ITEM_KEY;
5431         else
5432                 max_key.type = (u8)-1;
5433         max_key.offset = (u64)-1;
5434
5435         /*
5436          * Only run delayed items if we are a directory. We want to make sure
5437          * all directory indexes hit the fs/subvolume tree so we can find them
5438          * and figure out which index ranges have to be logged.
5439          *
5440          * Otherwise commit the delayed inode only if the full sync flag is set,
5441          * as we want to make sure an up to date version is in the subvolume
5442          * tree so copy_inode_items_to_log() / copy_items() can find it and copy
5443          * it to the log tree. For a non full sync, we always log the inode item
5444          * based on the in-memory struct btrfs_inode which is always up to date.
5445          */
5446         if (S_ISDIR(inode->vfs_inode.i_mode))
5447                 ret = btrfs_commit_inode_delayed_items(trans, inode);
5448         else if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags))
5449                 ret = btrfs_commit_inode_delayed_inode(inode);
5450
5451         if (ret) {
5452                 btrfs_free_path(path);
5453                 btrfs_free_path(dst_path);
5454                 return ret;
5455         }
5456
5457         if (inode_only == LOG_OTHER_INODE || inode_only == LOG_OTHER_INODE_ALL) {
5458                 recursive_logging = true;
5459                 if (inode_only == LOG_OTHER_INODE)
5460                         inode_only = LOG_INODE_EXISTS;
5461                 else
5462                         inode_only = LOG_INODE_ALL;
5463                 mutex_lock_nested(&inode->log_mutex, SINGLE_DEPTH_NESTING);
5464         } else {
5465                 mutex_lock(&inode->log_mutex);
5466         }
5467
5468         /*
5469          * For symlinks, we must always log their content, which is stored in an
5470          * inline extent, otherwise we could end up with an empty symlink after
5471          * log replay, which is invalid on linux (symlink(2) returns -ENOENT if
5472          * one attempts to create an empty symlink).
5473          * We don't need to worry about flushing delalloc, because when we create
5474          * the inline extent when the symlink is created (we never have delalloc
5475          * for symlinks).
5476          */
5477         if (S_ISLNK(inode->vfs_inode.i_mode))
5478                 inode_only = LOG_INODE_ALL;
5479
5480         /*
5481          * This is for cases where logging a directory could result in losing a
5482          * a file after replaying the log. For example, if we move a file from a
5483          * directory A to a directory B, then fsync directory A, we have no way
5484          * to known the file was moved from A to B, so logging just A would
5485          * result in losing the file after a log replay.
5486          */
5487         if (S_ISDIR(inode->vfs_inode.i_mode) &&
5488             inode_only == LOG_INODE_ALL &&
5489             inode->last_unlink_trans >= trans->transid) {
5490                 btrfs_set_log_full_commit(trans);
5491                 err = 1;
5492                 goto out_unlock;
5493         }
5494
5495         /*
5496          * a brute force approach to making sure we get the most uptodate
5497          * copies of everything.
5498          */
5499         if (S_ISDIR(inode->vfs_inode.i_mode)) {
5500                 int max_key_type = BTRFS_DIR_LOG_INDEX_KEY;
5501
5502                 clear_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags);
5503                 if (inode_only == LOG_INODE_EXISTS)
5504                         max_key_type = BTRFS_XATTR_ITEM_KEY;
5505                 ret = drop_objectid_items(trans, log, path, ino, max_key_type);
5506         } else {
5507                 if (inode_only == LOG_INODE_EXISTS) {
5508                         /*
5509                          * Make sure the new inode item we write to the log has
5510                          * the same isize as the current one (if it exists).
5511                          * This is necessary to prevent data loss after log
5512                          * replay, and also to prevent doing a wrong expanding
5513                          * truncate - for e.g. create file, write 4K into offset
5514                          * 0, fsync, write 4K into offset 4096, add hard link,
5515                          * fsync some other file (to sync log), power fail - if
5516                          * we use the inode's current i_size, after log replay
5517                          * we get a 8Kb file, with the last 4Kb extent as a hole
5518                          * (zeroes), as if an expanding truncate happened,
5519                          * instead of getting a file of 4Kb only.
5520                          */
5521                         err = logged_inode_size(log, inode, path, &logged_isize);
5522                         if (err)
5523                                 goto out_unlock;
5524                 }
5525                 if (test_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5526                              &inode->runtime_flags)) {
5527                         if (inode_only == LOG_INODE_EXISTS) {
5528                                 max_key.type = BTRFS_XATTR_ITEM_KEY;
5529                                 ret = drop_objectid_items(trans, log, path, ino,
5530                                                           max_key.type);
5531                         } else {
5532                                 clear_bit(BTRFS_INODE_NEEDS_FULL_SYNC,
5533                                           &inode->runtime_flags);
5534                                 clear_bit(BTRFS_INODE_COPY_EVERYTHING,
5535                                           &inode->runtime_flags);
5536                                 while(1) {
5537                                         ret = btrfs_truncate_inode_items(trans,
5538                                                 log, inode, 0, 0, NULL);
5539                                         if (ret != -EAGAIN)
5540                                                 break;
5541                                 }
5542                         }
5543                 } else if (test_and_clear_bit(BTRFS_INODE_COPY_EVERYTHING,
5544                                               &inode->runtime_flags) ||
5545                            inode_only == LOG_INODE_EXISTS) {
5546                         if (inode_only == LOG_INODE_ALL)
5547                                 fast_search = true;
5548                         max_key.type = BTRFS_XATTR_ITEM_KEY;
5549                         ret = drop_objectid_items(trans, log, path, ino,
5550                                                   max_key.type);
5551                 } else {
5552                         if (inode_only == LOG_INODE_ALL)
5553                                 fast_search = true;
5554                         inode_item_dropped = false;
5555                         goto log_extents;
5556                 }
5557
5558         }
5559         if (ret) {
5560                 err = ret;
5561                 goto out_unlock;
5562         }
5563
5564         err = copy_inode_items_to_log(trans, inode, &min_key, &max_key,
5565                                       path, dst_path, logged_isize,
5566                                       recursive_logging, inode_only, ctx,
5567                                       &need_log_inode_item);
5568         if (err)
5569                 goto out_unlock;
5570
5571         btrfs_release_path(path);
5572         btrfs_release_path(dst_path);
5573         err = btrfs_log_all_xattrs(trans, root, inode, path, dst_path);
5574         if (err)
5575                 goto out_unlock;
5576         xattrs_logged = true;
5577         if (max_key.type >= BTRFS_EXTENT_DATA_KEY && !fast_search) {
5578                 btrfs_release_path(path);
5579                 btrfs_release_path(dst_path);
5580                 err = btrfs_log_holes(trans, root, inode, path);
5581                 if (err)
5582                         goto out_unlock;
5583         }
5584 log_extents:
5585         btrfs_release_path(path);
5586         btrfs_release_path(dst_path);
5587         if (need_log_inode_item) {
5588                 err = log_inode_item(trans, log, dst_path, inode, inode_item_dropped);
5589                 if (err)
5590                         goto out_unlock;
5591                 /*
5592                  * If we are doing a fast fsync and the inode was logged before
5593                  * in this transaction, we don't need to log the xattrs because
5594                  * they were logged before. If xattrs were added, changed or
5595                  * deleted since the last time we logged the inode, then we have
5596                  * already logged them because the inode had the runtime flag
5597                  * BTRFS_INODE_COPY_EVERYTHING set.
5598                  */
5599                 if (!xattrs_logged && inode->logged_trans < trans->transid) {
5600                         err = btrfs_log_all_xattrs(trans, root, inode, path,
5601                                                    dst_path);
5602                         if (err)
5603                                 goto out_unlock;
5604                         btrfs_release_path(path);
5605                 }
5606         }
5607         if (fast_search) {
5608                 ret = btrfs_log_changed_extents(trans, root, inode, dst_path,
5609                                                 ctx);
5610                 if (ret) {
5611                         err = ret;
5612                         goto out_unlock;
5613                 }
5614         } else if (inode_only == LOG_INODE_ALL) {
5615                 struct extent_map *em, *n;
5616
5617                 write_lock(&em_tree->lock);
5618                 list_for_each_entry_safe(em, n, &em_tree->modified_extents, list)
5619                         list_del_init(&em->list);
5620                 write_unlock(&em_tree->lock);
5621         }
5622
5623         if (inode_only == LOG_INODE_ALL && S_ISDIR(inode->vfs_inode.i_mode)) {
5624                 ret = log_directory_changes(trans, root, inode, path, dst_path,
5625                                         ctx);
5626                 if (ret) {
5627                         err = ret;
5628                         goto out_unlock;
5629                 }
5630         }
5631
5632         /*
5633          * If we are logging that an ancestor inode exists as part of logging a
5634          * new name from a link or rename operation, don't mark the inode as
5635          * logged - otherwise if an explicit fsync is made against an ancestor,
5636          * the fsync considers the inode in the log and doesn't sync the log,
5637          * resulting in the ancestor missing after a power failure unless the
5638          * log was synced as part of an fsync against any other unrelated inode.
5639          * So keep it simple for this case and just don't flag the ancestors as
5640          * logged.
5641          */
5642         if (!ctx ||
5643             !(S_ISDIR(inode->vfs_inode.i_mode) && ctx->logging_new_name &&
5644               &inode->vfs_inode != ctx->inode)) {
5645                 spin_lock(&inode->lock);
5646                 inode->logged_trans = trans->transid;
5647                 /*
5648                  * Don't update last_log_commit if we logged that an inode exists.
5649                  * We do this for two reasons:
5650                  *
5651                  * 1) We might have had buffered writes to this inode that were
5652                  *    flushed and had their ordered extents completed in this
5653                  *    transaction, but we did not previously log the inode with
5654                  *    LOG_INODE_ALL. Later the inode was evicted and after that
5655                  *    it was loaded again and this LOG_INODE_EXISTS log operation
5656                  *    happened. We must make sure that if an explicit fsync against
5657                  *    the inode is performed later, it logs the new extents, an
5658                  *    updated inode item, etc, and syncs the log. The same logic
5659                  *    applies to direct IO writes instead of buffered writes.
5660                  *
5661                  * 2) When we log the inode with LOG_INODE_EXISTS, its inode item
5662                  *    is logged with an i_size of 0 or whatever value was logged
5663                  *    before. If later the i_size of the inode is increased by a
5664                  *    truncate operation, the log is synced through an fsync of
5665                  *    some other inode and then finally an explicit fsync against
5666                  *    this inode is made, we must make sure this fsync logs the
5667                  *    inode with the new i_size, the hole between old i_size and
5668                  *    the new i_size, and syncs the log.
5669                  */
5670                 if (inode_only != LOG_INODE_EXISTS)
5671                         inode->last_log_commit = inode->last_sub_trans;
5672                 spin_unlock(&inode->lock);
5673         }
5674 out_unlock:
5675         mutex_unlock(&inode->log_mutex);
5676
5677         btrfs_free_path(path);
5678         btrfs_free_path(dst_path);
5679         return err;
5680 }
5681
5682 /*
5683  * Check if we need to log an inode. This is used in contexts where while
5684  * logging an inode we need to log another inode (either that it exists or in
5685  * full mode). This is used instead of btrfs_inode_in_log() because the later
5686  * requires the inode to be in the log and have the log transaction committed,
5687  * while here we do not care if the log transaction was already committed - our
5688  * caller will commit the log later - and we want to avoid logging an inode
5689  * multiple times when multiple tasks have joined the same log transaction.
5690  */
5691 static bool need_log_inode(struct btrfs_trans_handle *trans,
5692                            struct btrfs_inode *inode)
5693 {
5694         /*
5695          * If a directory was not modified, no dentries added or removed, we can
5696          * and should avoid logging it.
5697          */
5698         if (S_ISDIR(inode->vfs_inode.i_mode) && inode->last_trans < trans->transid)
5699                 return false;
5700
5701         /*
5702          * If this inode does not have new/updated/deleted xattrs since the last
5703          * time it was logged and is flagged as logged in the current transaction,
5704          * we can skip logging it. As for new/deleted names, those are updated in
5705          * the log by link/unlink/rename operations.
5706          * In case the inode was logged and then evicted and reloaded, its
5707          * logged_trans will be 0, in which case we have to fully log it since
5708          * logged_trans is a transient field, not persisted.
5709          */
5710         if (inode->logged_trans == trans->transid &&
5711             !test_bit(BTRFS_INODE_COPY_EVERYTHING, &inode->runtime_flags))
5712                 return false;
5713
5714         return true;
5715 }
5716
5717 struct btrfs_dir_list {
5718         u64 ino;
5719         struct list_head list;
5720 };
5721
5722 /*
5723  * Log the inodes of the new dentries of a directory. See log_dir_items() for
5724  * details about the why it is needed.
5725  * This is a recursive operation - if an existing dentry corresponds to a
5726  * directory, that directory's new entries are logged too (same behaviour as
5727  * ext3/4, xfs, f2fs, reiserfs, nilfs2). Note that when logging the inodes
5728  * the dentries point to we do not lock their i_mutex, otherwise lockdep
5729  * complains about the following circular lock dependency / possible deadlock:
5730  *
5731  *        CPU0                                        CPU1
5732  *        ----                                        ----
5733  * lock(&type->i_mutex_dir_key#3/2);
5734  *                                            lock(sb_internal#2);
5735  *                                            lock(&type->i_mutex_dir_key#3/2);
5736  * lock(&sb->s_type->i_mutex_key#14);
5737  *
5738  * Where sb_internal is the lock (a counter that works as a lock) acquired by
5739  * sb_start_intwrite() in btrfs_start_transaction().
5740  * Not locking i_mutex of the inodes is still safe because:
5741  *
5742  * 1) For regular files we log with a mode of LOG_INODE_EXISTS. It's possible
5743  *    that while logging the inode new references (names) are added or removed
5744  *    from the inode, leaving the logged inode item with a link count that does
5745  *    not match the number of logged inode reference items. This is fine because
5746  *    at log replay time we compute the real number of links and correct the
5747  *    link count in the inode item (see replay_one_buffer() and
5748  *    link_to_fixup_dir());
5749  *
5750  * 2) For directories we log with a mode of LOG_INODE_ALL. It's possible that
5751  *    while logging the inode's items new items with keys BTRFS_DIR_ITEM_KEY and
5752  *    BTRFS_DIR_INDEX_KEY are added to fs/subvol tree and the logged inode item
5753  *    has a size that doesn't match the sum of the lengths of all the logged
5754  *    names. This does not result in a problem because if a dir_item key is
5755  *    logged but its matching dir_index key is not logged, at log replay time we
5756  *    don't use it to replay the respective name (see replay_one_name()). On the
5757  *    other hand if only the dir_index key ends up being logged, the respective
5758  *    name is added to the fs/subvol tree with both the dir_item and dir_index
5759  *    keys created (see replay_one_name()).
5760  *    The directory's inode item with a wrong i_size is not a problem as well,
5761  *    since we don't use it at log replay time to set the i_size in the inode
5762  *    item of the fs/subvol tree (see overwrite_item()).
5763  */
5764 static int log_new_dir_dentries(struct btrfs_trans_handle *trans,
5765                                 struct btrfs_root *root,
5766                                 struct btrfs_inode *start_inode,
5767                                 struct btrfs_log_ctx *ctx)
5768 {
5769         struct btrfs_fs_info *fs_info = root->fs_info;
5770         struct btrfs_root *log = root->log_root;
5771         struct btrfs_path *path;
5772         LIST_HEAD(dir_list);
5773         struct btrfs_dir_list *dir_elem;
5774         int ret = 0;
5775
5776         path = btrfs_alloc_path();
5777         if (!path)
5778                 return -ENOMEM;
5779
5780         dir_elem = kmalloc(sizeof(*dir_elem), GFP_NOFS);
5781         if (!dir_elem) {
5782                 btrfs_free_path(path);
5783                 return -ENOMEM;
5784         }
5785         dir_elem->ino = btrfs_ino(start_inode);
5786         list_add_tail(&dir_elem->list, &dir_list);
5787
5788         while (!list_empty(&dir_list)) {
5789                 struct extent_buffer *leaf;
5790                 struct btrfs_key min_key;
5791                 int nritems;
5792                 int i;
5793
5794                 dir_elem = list_first_entry(&dir_list, struct btrfs_dir_list,
5795                                             list);
5796                 if (ret)
5797                         goto next_dir_inode;
5798
5799                 min_key.objectid = dir_elem->ino;
5800                 min_key.type = BTRFS_DIR_ITEM_KEY;
5801                 min_key.offset = 0;
5802 again:
5803                 btrfs_release_path(path);
5804                 ret = btrfs_search_forward(log, &min_key, path, trans->transid);
5805                 if (ret < 0) {
5806                         goto next_dir_inode;
5807                 } else if (ret > 0) {
5808                         ret = 0;
5809                         goto next_dir_inode;
5810                 }
5811
5812 process_leaf:
5813                 leaf = path->nodes[0];
5814                 nritems = btrfs_header_nritems(leaf);
5815                 for (i = path->slots[0]; i < nritems; i++) {
5816                         struct btrfs_dir_item *di;
5817                         struct btrfs_key di_key;
5818                         struct inode *di_inode;
5819                         struct btrfs_dir_list *new_dir_elem;
5820                         int log_mode = LOG_INODE_EXISTS;
5821                         int type;
5822
5823                         btrfs_item_key_to_cpu(leaf, &min_key, i);
5824                         if (min_key.objectid != dir_elem->ino ||
5825                             min_key.type != BTRFS_DIR_ITEM_KEY)
5826                                 goto next_dir_inode;
5827
5828                         di = btrfs_item_ptr(leaf, i, struct btrfs_dir_item);
5829                         type = btrfs_dir_type(leaf, di);
5830                         if (btrfs_dir_transid(leaf, di) < trans->transid &&
5831                             type != BTRFS_FT_DIR)
5832                                 continue;
5833                         btrfs_dir_item_key_to_cpu(leaf, di, &di_key);
5834                         if (di_key.type == BTRFS_ROOT_ITEM_KEY)
5835                                 continue;
5836
5837                         btrfs_release_path(path);
5838                         di_inode = btrfs_iget(fs_info->sb, di_key.objectid, root);
5839                         if (IS_ERR(di_inode)) {
5840                                 ret = PTR_ERR(di_inode);
5841                                 goto next_dir_inode;
5842                         }
5843
5844                         if (!need_log_inode(trans, BTRFS_I(di_inode))) {
5845                                 btrfs_add_delayed_iput(di_inode);
5846                                 break;
5847                         }
5848
5849                         ctx->log_new_dentries = false;
5850                         if (type == BTRFS_FT_DIR)
5851                                 log_mode = LOG_INODE_ALL;
5852                         ret = btrfs_log_inode(trans, root, BTRFS_I(di_inode),
5853                                               log_mode, ctx);
5854                         btrfs_add_delayed_iput(di_inode);
5855                         if (ret)
5856                                 goto next_dir_inode;
5857                         if (ctx->log_new_dentries) {
5858                                 new_dir_elem = kmalloc(sizeof(*new_dir_elem),
5859                                                        GFP_NOFS);
5860                                 if (!new_dir_elem) {
5861                                         ret = -ENOMEM;
5862                                         goto next_dir_inode;
5863                                 }
5864                                 new_dir_elem->ino = di_key.objectid;
5865                                 list_add_tail(&new_dir_elem->list, &dir_list);
5866                         }
5867                         break;
5868                 }
5869                 if (i == nritems) {
5870                         ret = btrfs_next_leaf(log, path);
5871                         if (ret < 0) {
5872                                 goto next_dir_inode;
5873                         } else if (ret > 0) {
5874                                 ret = 0;
5875                                 goto next_dir_inode;
5876                         }
5877                         goto process_leaf;
5878                 }
5879                 if (min_key.offset < (u64)-1) {
5880                         min_key.offset++;
5881                         goto again;
5882                 }
5883 next_dir_inode:
5884                 list_del(&dir_elem->list);
5885                 kfree(dir_elem);
5886         }
5887
5888         btrfs_free_path(path);
5889         return ret;
5890 }
5891
5892 static int btrfs_log_all_parents(struct btrfs_trans_handle *trans,
5893                                  struct btrfs_inode *inode,
5894                                  struct btrfs_log_ctx *ctx)
5895 {
5896         struct btrfs_fs_info *fs_info = trans->fs_info;
5897         int ret;
5898         struct btrfs_path *path;
5899         struct btrfs_key key;
5900         struct btrfs_root *root = inode->root;
5901         const u64 ino = btrfs_ino(inode);
5902
5903         path = btrfs_alloc_path();
5904         if (!path)
5905                 return -ENOMEM;
5906         path->skip_locking = 1;
5907         path->search_commit_root = 1;
5908
5909         key.objectid = ino;
5910         key.type = BTRFS_INODE_REF_KEY;
5911         key.offset = 0;
5912         ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
5913         if (ret < 0)
5914                 goto out;
5915
5916         while (true) {
5917                 struct extent_buffer *leaf = path->nodes[0];
5918                 int slot = path->slots[0];
5919                 u32 cur_offset = 0;
5920                 u32 item_size;
5921                 unsigned long ptr;
5922
5923                 if (slot >= btrfs_header_nritems(leaf)) {
5924                         ret = btrfs_next_leaf(root, path);
5925                         if (ret < 0)
5926                                 goto out;
5927                         else if (ret > 0)
5928                                 break;
5929                         continue;
5930                 }
5931
5932                 btrfs_item_key_to_cpu(leaf, &key, slot);
5933                 /* BTRFS_INODE_EXTREF_KEY is BTRFS_INODE_REF_KEY + 1 */
5934                 if (key.objectid != ino || key.type > BTRFS_INODE_EXTREF_KEY)
5935                         break;
5936
5937                 item_size = btrfs_item_size_nr(leaf, slot);
5938                 ptr = btrfs_item_ptr_offset(leaf, slot);
5939                 while (cur_offset < item_size) {
5940                         struct btrfs_key inode_key;
5941                         struct inode *dir_inode;
5942
5943                         inode_key.type = BTRFS_INODE_ITEM_KEY;
5944                         inode_key.offset = 0;
5945
5946                         if (key.type == BTRFS_INODE_EXTREF_KEY) {
5947                                 struct btrfs_inode_extref *extref;
5948
5949                                 extref = (struct btrfs_inode_extref *)
5950                                         (ptr + cur_offset);
5951                                 inode_key.objectid = btrfs_inode_extref_parent(
5952                                         leaf, extref);
5953                                 cur_offset += sizeof(*extref);
5954                                 cur_offset += btrfs_inode_extref_name_len(leaf,
5955                                         extref);
5956                         } else {
5957                                 inode_key.objectid = key.offset;
5958                                 cur_offset = item_size;
5959                         }
5960
5961                         dir_inode = btrfs_iget(fs_info->sb, inode_key.objectid,
5962                                                root);
5963                         /*
5964                          * If the parent inode was deleted, return an error to
5965                          * fallback to a transaction commit. This is to prevent
5966                          * getting an inode that was moved from one parent A to
5967                          * a parent B, got its former parent A deleted and then
5968                          * it got fsync'ed, from existing at both parents after
5969                          * a log replay (and the old parent still existing).
5970                          * Example:
5971                          *
5972                          * mkdir /mnt/A
5973                          * mkdir /mnt/B
5974                          * touch /mnt/B/bar
5975                          * sync
5976                          * mv /mnt/B/bar /mnt/A/bar
5977                          * mv -T /mnt/A /mnt/B
5978                          * fsync /mnt/B/bar
5979                          * <power fail>
5980                          *
5981                          * If we ignore the old parent B which got deleted,
5982                          * after a log replay we would have file bar linked
5983                          * at both parents and the old parent B would still
5984                          * exist.
5985                          */
5986                         if (IS_ERR(dir_inode)) {
5987                                 ret = PTR_ERR(dir_inode);
5988                                 goto out;
5989                         }
5990
5991                         if (!need_log_inode(trans, BTRFS_I(dir_inode))) {
5992                                 btrfs_add_delayed_iput(dir_inode);
5993                                 continue;
5994                         }
5995
5996                         if (ctx)
5997                                 ctx->log_new_dentries = false;
5998                         ret = btrfs_log_inode(trans, root, BTRFS_I(dir_inode),
5999                                               LOG_INODE_ALL, ctx);
6000                         if (!ret && ctx && ctx->log_new_dentries)
6001                                 ret = log_new_dir_dentries(trans, root,
6002                                                    BTRFS_I(dir_inode), ctx);
6003                         btrfs_add_delayed_iput(dir_inode);
6004                         if (ret)
6005                                 goto out;
6006                 }
6007                 path->slots[0]++;
6008         }
6009         ret = 0;
6010 out:
6011         btrfs_free_path(path);
6012         return ret;
6013 }
6014
6015 static int log_new_ancestors(struct btrfs_trans_handle *trans,
6016                              struct btrfs_root *root,
6017                              struct btrfs_path *path,
6018                              struct btrfs_log_ctx *ctx)
6019 {
6020         struct btrfs_key found_key;
6021
6022         btrfs_item_key_to_cpu(path->nodes[0], &found_key, path->slots[0]);
6023
6024         while (true) {
6025                 struct btrfs_fs_info *fs_info = root->fs_info;
6026                 struct extent_buffer *leaf = path->nodes[0];
6027                 int slot = path->slots[0];
6028                 struct btrfs_key search_key;
6029                 struct inode *inode;
6030                 u64 ino;
6031                 int ret = 0;
6032
6033                 btrfs_release_path(path);
6034
6035                 ino = found_key.offset;
6036
6037                 search_key.objectid = found_key.offset;
6038                 search_key.type = BTRFS_INODE_ITEM_KEY;
6039                 search_key.offset = 0;
6040                 inode = btrfs_iget(fs_info->sb, ino, root);
6041                 if (IS_ERR(inode))
6042                         return PTR_ERR(inode);
6043
6044                 if (BTRFS_I(inode)->generation >= trans->transid &&
6045                     need_log_inode(trans, BTRFS_I(inode)))
6046                         ret = btrfs_log_inode(trans, root, BTRFS_I(inode),
6047                                               LOG_INODE_EXISTS, ctx);
6048                 btrfs_add_delayed_iput(inode);
6049                 if (ret)
6050                         return ret;
6051
6052                 if (search_key.objectid == BTRFS_FIRST_FREE_OBJECTID)
6053                         break;
6054
6055                 search_key.type = BTRFS_INODE_REF_KEY;
6056                 ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
6057                 if (ret < 0)
6058                         return ret;
6059
6060                 leaf = path->nodes[0];
6061                 slot = path->slots[0];
6062                 if (slot >= btrfs_header_nritems(leaf)) {
6063                         ret = btrfs_next_leaf(root, path);
6064                         if (ret < 0)
6065                                 return ret;
6066                         else if (ret > 0)
6067                                 return -ENOENT;
6068                         leaf = path->nodes[0];
6069                         slot = path->slots[0];
6070                 }
6071
6072                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
6073                 if (found_key.objectid != search_key.objectid ||
6074                     found_key.type != BTRFS_INODE_REF_KEY)
6075                         return -ENOENT;
6076         }
6077         return 0;
6078 }
6079
6080 static int log_new_ancestors_fast(struct btrfs_trans_handle *trans,
6081                                   struct btrfs_inode *inode,
6082                                   struct dentry *parent,
6083                                   struct btrfs_log_ctx *ctx)
6084 {
6085         struct btrfs_root *root = inode->root;
6086         struct dentry *old_parent = NULL;
6087         struct super_block *sb = inode->vfs_inode.i_sb;
6088         int ret = 0;
6089
6090         while (true) {
6091                 if (!parent || d_really_is_negative(parent) ||
6092                     sb != parent->d_sb)
6093                         break;
6094
6095                 inode = BTRFS_I(d_inode(parent));
6096                 if (root != inode->root)
6097                         break;
6098
6099                 if (inode->generation >= trans->transid &&
6100                     need_log_inode(trans, inode)) {
6101                         ret = btrfs_log_inode(trans, root, inode,
6102                                               LOG_INODE_EXISTS, ctx);
6103                         if (ret)
6104                                 break;
6105                 }
6106                 if (IS_ROOT(parent))
6107                         break;
6108
6109                 parent = dget_parent(parent);
6110                 dput(old_parent);
6111                 old_parent = parent;
6112         }
6113         dput(old_parent);
6114
6115         return ret;
6116 }
6117
6118 static int log_all_new_ancestors(struct btrfs_trans_handle *trans,
6119                                  struct btrfs_inode *inode,
6120                                  struct dentry *parent,
6121                                  struct btrfs_log_ctx *ctx)
6122 {
6123         struct btrfs_root *root = inode->root;
6124         const u64 ino = btrfs_ino(inode);
6125         struct btrfs_path *path;
6126         struct btrfs_key search_key;
6127         int ret;
6128
6129         /*
6130          * For a single hard link case, go through a fast path that does not
6131          * need to iterate the fs/subvolume tree.
6132          */
6133         if (inode->vfs_inode.i_nlink < 2)
6134                 return log_new_ancestors_fast(trans, inode, parent, ctx);
6135
6136         path = btrfs_alloc_path();
6137         if (!path)
6138                 return -ENOMEM;
6139
6140         search_key.objectid = ino;
6141         search_key.type = BTRFS_INODE_REF_KEY;
6142         search_key.offset = 0;
6143 again:
6144         ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0);
6145         if (ret < 0)
6146                 goto out;
6147         if (ret == 0)
6148                 path->slots[0]++;
6149
6150         while (true) {
6151                 struct extent_buffer *leaf = path->nodes[0];
6152                 int slot = path->slots[0];
6153                 struct btrfs_key found_key;
6154
6155                 if (slot >= btrfs_header_nritems(leaf)) {
6156                         ret = btrfs_next_leaf(root, path);
6157                         if (ret < 0)
6158                                 goto out;
6159                         else if (ret > 0)
6160                                 break;
6161                         continue;
6162                 }
6163
6164                 btrfs_item_key_to_cpu(leaf, &found_key, slot);
6165                 if (found_key.objectid != ino ||
6166                     found_key.type > BTRFS_INODE_EXTREF_KEY)
6167                         break;
6168
6169                 /*
6170                  * Don't deal with extended references because they are rare
6171                  * cases and too complex to deal with (we would need to keep
6172                  * track of which subitem we are processing for each item in
6173                  * this loop, etc). So just return some error to fallback to
6174                  * a transaction commit.
6175                  */
6176                 if (found_key.type == BTRFS_INODE_EXTREF_KEY) {
6177                         ret = -EMLINK;
6178                         goto out;
6179                 }
6180
6181                 /*
6182                  * Logging ancestors needs to do more searches on the fs/subvol
6183                  * tree, so it releases the path as needed to avoid deadlocks.
6184                  * Keep track of the last inode ref key and resume from that key
6185                  * after logging all new ancestors for the current hard link.
6186                  */
6187                 memcpy(&search_key, &found_key, sizeof(search_key));
6188
6189                 ret = log_new_ancestors(trans, root, path, ctx);
6190                 if (ret)
6191                         goto out;
6192                 btrfs_release_path(path);
6193                 goto again;
6194         }
6195         ret = 0;
6196 out:
6197         btrfs_free_path(path);
6198         return ret;
6199 }
6200
6201 /*
6202  * helper function around btrfs_log_inode to make sure newly created
6203  * parent directories also end up in the log.  A minimal inode and backref
6204  * only logging is done of any parent directories that are older than
6205  * the last committed transaction
6206  */
6207 static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
6208                                   struct btrfs_inode *inode,
6209                                   struct dentry *parent,
6210                                   int inode_only,
6211                                   struct btrfs_log_ctx *ctx)
6212 {
6213         struct btrfs_root *root = inode->root;
6214         struct btrfs_fs_info *fs_info = root->fs_info;
6215         int ret = 0;
6216         bool log_dentries = false;
6217
6218         if (btrfs_test_opt(fs_info, NOTREELOG)) {
6219                 ret = 1;
6220                 goto end_no_trans;
6221         }
6222
6223         if (btrfs_root_refs(&root->root_item) == 0) {
6224                 ret = 1;
6225                 goto end_no_trans;
6226         }
6227
6228         /*
6229          * Skip already logged inodes or inodes corresponding to tmpfiles
6230          * (since logging them is pointless, a link count of 0 means they
6231          * will never be accessible).
6232          */
6233         if ((btrfs_inode_in_log(inode, trans->transid) &&
6234              list_empty(&ctx->ordered_extents)) ||
6235             inode->vfs_inode.i_nlink == 0) {
6236                 ret = BTRFS_NO_LOG_SYNC;
6237                 goto end_no_trans;
6238         }
6239
6240         ret = start_log_trans(trans, root, ctx);
6241         if (ret)
6242                 goto end_no_trans;
6243
6244         ret = btrfs_log_inode(trans, root, inode, inode_only, ctx);
6245         if (ret)
6246                 goto end_trans;
6247
6248         /*
6249          * for regular files, if its inode is already on disk, we don't
6250          * have to worry about the parents at all.  This is because
6251          * we can use the last_unlink_trans field to record renames
6252          * and other fun in this file.
6253          */
6254         if (S_ISREG(inode->vfs_inode.i_mode) &&
6255             inode->generation < trans->transid &&
6256             inode->last_unlink_trans < trans->transid) {
6257                 ret = 0;
6258                 goto end_trans;
6259         }
6260
6261         if (S_ISDIR(inode->vfs_inode.i_mode) && ctx && ctx->log_new_dentries)
6262                 log_dentries = true;
6263
6264         /*
6265          * On unlink we must make sure all our current and old parent directory
6266          * inodes are fully logged. This is to prevent leaving dangling
6267          * directory index entries in directories that were our parents but are
6268          * not anymore. Not doing this results in old parent directory being
6269          * impossible to delete after log replay (rmdir will always fail with
6270          * error -ENOTEMPTY).
6271          *
6272          * Example 1:
6273          *
6274          * mkdir testdir
6275          * touch testdir/foo
6276          * ln testdir/foo testdir/bar
6277          * sync
6278          * unlink testdir/bar
6279          * xfs_io -c fsync testdir/foo
6280          * <power failure>
6281          * mount fs, triggers log replay
6282          *
6283          * If we don't log the parent directory (testdir), after log replay the
6284          * directory still has an entry pointing to the file inode using the bar
6285          * name, but a matching BTRFS_INODE_[REF|EXTREF]_KEY does not exist and
6286          * the file inode has a link count of 1.
6287          *
6288          * Example 2:
6289          *
6290          * mkdir testdir
6291          * touch foo
6292          * ln foo testdir/foo2
6293          * ln foo testdir/foo3
6294          * sync
6295          * unlink testdir/foo3
6296          * xfs_io -c fsync foo
6297          * <power failure>
6298          * mount fs, triggers log replay
6299          *
6300          * Similar as the first example, after log replay the parent directory
6301          * testdir still has an entry pointing to the inode file with name foo3
6302          * but the file inode does not have a matching BTRFS_INODE_REF_KEY item
6303          * and has a link count of 2.
6304          */
6305         if (inode->last_unlink_trans >= trans->transid) {
6306                 ret = btrfs_log_all_parents(trans, inode, ctx);
6307                 if (ret)
6308                         goto end_trans;
6309         }
6310
6311         ret = log_all_new_ancestors(trans, inode, parent, ctx);
6312         if (ret)
6313                 goto end_trans;
6314
6315         if (log_dentries)
6316                 ret = log_new_dir_dentries(trans, root, inode, ctx);
6317         else
6318                 ret = 0;
6319 end_trans:
6320         if (ret < 0) {
6321                 btrfs_set_log_full_commit(trans);
6322                 ret = 1;
6323         }
6324
6325         if (ret)
6326                 btrfs_remove_log_ctx(root, ctx);
6327         btrfs_end_log_trans(root);
6328 end_no_trans:
6329         return ret;
6330 }
6331
6332 /*
6333  * it is not safe to log dentry if the chunk root has added new
6334  * chunks.  This returns 0 if the dentry was logged, and 1 otherwise.
6335  * If this returns 1, you must commit the transaction to safely get your
6336  * data on disk.
6337  */
6338 int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
6339                           struct dentry *dentry,
6340                           struct btrfs_log_ctx *ctx)
6341 {
6342         struct dentry *parent = dget_parent(dentry);
6343         int ret;
6344
6345         ret = btrfs_log_inode_parent(trans, BTRFS_I(d_inode(dentry)), parent,
6346                                      LOG_INODE_ALL, ctx);
6347         dput(parent);
6348
6349         return ret;
6350 }
6351
6352 /*
6353  * should be called during mount to recover any replay any log trees
6354  * from the FS
6355  */
6356 int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
6357 {
6358         int ret;
6359         struct btrfs_path *path;
6360         struct btrfs_trans_handle *trans;
6361         struct btrfs_key key;
6362         struct btrfs_key found_key;
6363         struct btrfs_root *log;
6364         struct btrfs_fs_info *fs_info = log_root_tree->fs_info;
6365         struct walk_control wc = {
6366                 .process_func = process_one_buffer,
6367                 .stage = LOG_WALK_PIN_ONLY,
6368         };
6369
6370         path = btrfs_alloc_path();
6371         if (!path)
6372                 return -ENOMEM;
6373
6374         set_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6375
6376         trans = btrfs_start_transaction(fs_info->tree_root, 0);
6377         if (IS_ERR(trans)) {
6378                 ret = PTR_ERR(trans);
6379                 goto error;
6380         }
6381
6382         wc.trans = trans;
6383         wc.pin = 1;
6384
6385         ret = walk_log_tree(trans, log_root_tree, &wc);
6386         if (ret) {
6387                 btrfs_handle_fs_error(fs_info, ret,
6388                         "Failed to pin buffers while recovering log root tree.");
6389                 goto error;
6390         }
6391
6392 again:
6393         key.objectid = BTRFS_TREE_LOG_OBJECTID;
6394         key.offset = (u64)-1;
6395         key.type = BTRFS_ROOT_ITEM_KEY;
6396
6397         while (1) {
6398                 ret = btrfs_search_slot(NULL, log_root_tree, &key, path, 0, 0);
6399
6400                 if (ret < 0) {
6401                         btrfs_handle_fs_error(fs_info, ret,
6402                                     "Couldn't find tree log root.");
6403                         goto error;
6404                 }
6405                 if (ret > 0) {
6406                         if (path->slots[0] == 0)
6407                                 break;
6408                         path->slots[0]--;
6409                 }
6410                 btrfs_item_key_to_cpu(path->nodes[0], &found_key,
6411                                       path->slots[0]);
6412                 btrfs_release_path(path);
6413                 if (found_key.objectid != BTRFS_TREE_LOG_OBJECTID)
6414                         break;
6415
6416                 log = btrfs_read_tree_root(log_root_tree, &found_key);
6417                 if (IS_ERR(log)) {
6418                         ret = PTR_ERR(log);
6419                         btrfs_handle_fs_error(fs_info, ret,
6420                                     "Couldn't read tree log root.");
6421                         goto error;
6422                 }
6423
6424                 wc.replay_dest = btrfs_get_fs_root(fs_info, found_key.offset,
6425                                                    true);
6426                 if (IS_ERR(wc.replay_dest)) {
6427                         ret = PTR_ERR(wc.replay_dest);
6428
6429                         /*
6430                          * We didn't find the subvol, likely because it was
6431                          * deleted.  This is ok, simply skip this log and go to
6432                          * the next one.
6433                          *
6434                          * We need to exclude the root because we can't have
6435                          * other log replays overwriting this log as we'll read
6436                          * it back in a few more times.  This will keep our
6437                          * block from being modified, and we'll just bail for
6438                          * each subsequent pass.
6439                          */
6440                         if (ret == -ENOENT)
6441                                 ret = btrfs_pin_extent_for_log_replay(trans,
6442                                                         log->node->start,
6443                                                         log->node->len);
6444                         btrfs_put_root(log);
6445
6446                         if (!ret)
6447                                 goto next;
6448                         btrfs_handle_fs_error(fs_info, ret,
6449                                 "Couldn't read target root for tree log recovery.");
6450                         goto error;
6451                 }
6452
6453                 wc.replay_dest->log_root = log;
6454                 ret = btrfs_record_root_in_trans(trans, wc.replay_dest);
6455                 if (ret)
6456                         /* The loop needs to continue due to the root refs */
6457                         btrfs_handle_fs_error(fs_info, ret,
6458                                 "failed to record the log root in transaction");
6459                 else
6460                         ret = walk_log_tree(trans, log, &wc);
6461
6462                 if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
6463                         ret = fixup_inode_link_counts(trans, wc.replay_dest,
6464                                                       path);
6465                 }
6466
6467                 if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
6468                         struct btrfs_root *root = wc.replay_dest;
6469
6470                         btrfs_release_path(path);
6471
6472                         /*
6473                          * We have just replayed everything, and the highest
6474                          * objectid of fs roots probably has changed in case
6475                          * some inode_item's got replayed.
6476                          *
6477                          * root->objectid_mutex is not acquired as log replay
6478                          * could only happen during mount.
6479                          */
6480                         ret = btrfs_init_root_free_objectid(root);
6481                 }
6482
6483                 wc.replay_dest->log_root = NULL;
6484                 btrfs_put_root(wc.replay_dest);
6485                 btrfs_put_root(log);
6486
6487                 if (ret)
6488                         goto error;
6489 next:
6490                 if (found_key.offset == 0)
6491                         break;
6492                 key.offset = found_key.offset - 1;
6493         }
6494         btrfs_release_path(path);
6495
6496         /* step one is to pin it all, step two is to replay just inodes */
6497         if (wc.pin) {
6498                 wc.pin = 0;
6499                 wc.process_func = replay_one_buffer;
6500                 wc.stage = LOG_WALK_REPLAY_INODES;
6501                 goto again;
6502         }
6503         /* step three is to replay everything */
6504         if (wc.stage < LOG_WALK_REPLAY_ALL) {
6505                 wc.stage++;
6506                 goto again;
6507         }
6508
6509         btrfs_free_path(path);
6510
6511         /* step 4: commit the transaction, which also unpins the blocks */
6512         ret = btrfs_commit_transaction(trans);
6513         if (ret)
6514                 return ret;
6515
6516         log_root_tree->log_root = NULL;
6517         clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6518         btrfs_put_root(log_root_tree);
6519
6520         return 0;
6521 error:
6522         if (wc.trans)
6523                 btrfs_end_transaction(wc.trans);
6524         clear_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags);
6525         btrfs_free_path(path);
6526         return ret;
6527 }
6528
6529 /*
6530  * there are some corner cases where we want to force a full
6531  * commit instead of allowing a directory to be logged.
6532  *
6533  * They revolve around files there were unlinked from the directory, and
6534  * this function updates the parent directory so that a full commit is
6535  * properly done if it is fsync'd later after the unlinks are done.
6536  *
6537  * Must be called before the unlink operations (updates to the subvolume tree,
6538  * inodes, etc) are done.
6539  */
6540 void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
6541                              struct btrfs_inode *dir, struct btrfs_inode *inode,
6542                              int for_rename)
6543 {
6544         /*
6545          * when we're logging a file, if it hasn't been renamed
6546          * or unlinked, and its inode is fully committed on disk,
6547          * we don't have to worry about walking up the directory chain
6548          * to log its parents.
6549          *
6550          * So, we use the last_unlink_trans field to put this transid
6551          * into the file.  When the file is logged we check it and
6552          * don't log the parents if the file is fully on disk.
6553          */
6554         mutex_lock(&inode->log_mutex);
6555         inode->last_unlink_trans = trans->transid;
6556         mutex_unlock(&inode->log_mutex);
6557
6558         /*
6559          * if this directory was already logged any new
6560          * names for this file/dir will get recorded
6561          */
6562         if (dir->logged_trans == trans->transid)
6563                 return;
6564
6565         /*
6566          * if the inode we're about to unlink was logged,
6567          * the log will be properly updated for any new names
6568          */
6569         if (inode->logged_trans == trans->transid)
6570                 return;
6571
6572         /*
6573          * when renaming files across directories, if the directory
6574          * there we're unlinking from gets fsync'd later on, there's
6575          * no way to find the destination directory later and fsync it
6576          * properly.  So, we have to be conservative and force commits
6577          * so the new name gets discovered.
6578          */
6579         if (for_rename)
6580                 goto record;
6581
6582         /* we can safely do the unlink without any special recording */
6583         return;
6584
6585 record:
6586         mutex_lock(&dir->log_mutex);
6587         dir->last_unlink_trans = trans->transid;
6588         mutex_unlock(&dir->log_mutex);
6589 }
6590
6591 /*
6592  * Make sure that if someone attempts to fsync the parent directory of a deleted
6593  * snapshot, it ends up triggering a transaction commit. This is to guarantee
6594  * that after replaying the log tree of the parent directory's root we will not
6595  * see the snapshot anymore and at log replay time we will not see any log tree
6596  * corresponding to the deleted snapshot's root, which could lead to replaying
6597  * it after replaying the log tree of the parent directory (which would replay
6598  * the snapshot delete operation).
6599  *
6600  * Must be called before the actual snapshot destroy operation (updates to the
6601  * parent root and tree of tree roots trees, etc) are done.
6602  */
6603 void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
6604                                    struct btrfs_inode *dir)
6605 {
6606         mutex_lock(&dir->log_mutex);
6607         dir->last_unlink_trans = trans->transid;
6608         mutex_unlock(&dir->log_mutex);
6609 }
6610
6611 /**
6612  * Update the log after adding a new name for an inode.
6613  *
6614  * @trans:              Transaction handle.
6615  * @old_dentry:         The dentry associated with the old name and the old
6616  *                      parent directory.
6617  * @old_dir:            The inode of the previous parent directory for the case
6618  *                      of a rename. For a link operation, it must be NULL.
6619  * @parent:             The dentry associated with the directory under which the
6620  *                      new name is located.
6621  *
6622  * Call this after adding a new name for an inode, as a result of a link or
6623  * rename operation, and it will properly update the log to reflect the new name.
6624  */
6625 void btrfs_log_new_name(struct btrfs_trans_handle *trans,
6626                         struct dentry *old_dentry, struct btrfs_inode *old_dir,
6627                         struct dentry *parent)
6628 {
6629         struct btrfs_inode *inode = BTRFS_I(d_inode(old_dentry));
6630         struct btrfs_log_ctx ctx;
6631
6632         /*
6633          * this will force the logging code to walk the dentry chain
6634          * up for the file
6635          */
6636         if (!S_ISDIR(inode->vfs_inode.i_mode))
6637                 inode->last_unlink_trans = trans->transid;
6638
6639         /*
6640          * if this inode hasn't been logged and directory we're renaming it
6641          * from hasn't been logged, we don't need to log it
6642          */
6643         if (!inode_logged(trans, inode) &&
6644             (!old_dir || !inode_logged(trans, old_dir)))
6645                 return;
6646
6647         /*
6648          * If we are doing a rename (old_dir is not NULL) from a directory that
6649          * was previously logged, make sure the next log attempt on the directory
6650          * is not skipped and logs the inode again. This is because the log may
6651          * not currently be authoritative for a range including the old
6652          * BTRFS_DIR_ITEM_KEY and BTRFS_DIR_INDEX_KEY keys, so we want to make
6653          * sure after a log replay we do not end up with both the new and old
6654          * dentries around (in case the inode is a directory we would have a
6655          * directory with two hard links and 2 inode references for different
6656          * parents). The next log attempt of old_dir will happen at
6657          * btrfs_log_all_parents(), called through btrfs_log_inode_parent()
6658          * below, because we have previously set inode->last_unlink_trans to the
6659          * current transaction ID, either here or at btrfs_record_unlink_dir() in
6660          * case inode is a directory.
6661          */
6662         if (old_dir)
6663                 old_dir->logged_trans = 0;
6664
6665         btrfs_init_log_ctx(&ctx, &inode->vfs_inode);
6666         ctx.logging_new_name = true;
6667         /*
6668          * We don't care about the return value. If we fail to log the new name
6669          * then we know the next attempt to sync the log will fallback to a full
6670          * transaction commit (due to a call to btrfs_set_log_full_commit()), so
6671          * we don't need to worry about getting a log committed that has an
6672          * inconsistent state after a rename operation.
6673          */
6674         btrfs_log_inode_parent(trans, inode, parent, LOG_INODE_EXISTS, &ctx);
6675 }
6676