Merge tag 'random-5.18-rc1-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / fs / ext4 / fast_commit.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 /*
4  * fs/ext4/fast_commit.c
5  *
6  * Written by Harshad Shirwadkar <harshadshirwadkar@gmail.com>
7  *
8  * Ext4 fast commits routines.
9  */
10 #include "ext4.h"
11 #include "ext4_jbd2.h"
12 #include "ext4_extents.h"
13 #include "mballoc.h"
14
15 /*
16  * Ext4 Fast Commits
17  * -----------------
18  *
19  * Ext4 fast commits implement fine grained journalling for Ext4.
20  *
21  * Fast commits are organized as a log of tag-length-value (TLV) structs. (See
22  * struct ext4_fc_tl). Each TLV contains some delta that is replayed TLV by
23  * TLV during the recovery phase. For the scenarios for which we currently
24  * don't have replay code, fast commit falls back to full commits.
25  * Fast commits record delta in one of the following three categories.
26  *
27  * (A) Directory entry updates:
28  *
29  * - EXT4_FC_TAG_UNLINK         - records directory entry unlink
30  * - EXT4_FC_TAG_LINK           - records directory entry link
31  * - EXT4_FC_TAG_CREAT          - records inode and directory entry creation
32  *
33  * (B) File specific data range updates:
34  *
35  * - EXT4_FC_TAG_ADD_RANGE      - records addition of new blocks to an inode
36  * - EXT4_FC_TAG_DEL_RANGE      - records deletion of blocks from an inode
37  *
38  * (C) Inode metadata (mtime / ctime etc):
39  *
40  * - EXT4_FC_TAG_INODE          - record the inode that should be replayed
41  *                                during recovery. Note that iblocks field is
42  *                                not replayed and instead derived during
43  *                                replay.
44  * Commit Operation
45  * ----------------
46  * With fast commits, we maintain all the directory entry operations in the
47  * order in which they are issued in an in-memory queue. This queue is flushed
48  * to disk during the commit operation. We also maintain a list of inodes
49  * that need to be committed during a fast commit in another in memory queue of
50  * inodes. During the commit operation, we commit in the following order:
51  *
52  * [1] Lock inodes for any further data updates by setting COMMITTING state
53  * [2] Submit data buffers of all the inodes
54  * [3] Wait for [2] to complete
55  * [4] Commit all the directory entry updates in the fast commit space
56  * [5] Commit all the changed inode structures
57  * [6] Write tail tag (this tag ensures the atomicity, please read the following
58  *     section for more details).
59  * [7] Wait for [4], [5] and [6] to complete.
60  *
61  * All the inode updates must call ext4_fc_start_update() before starting an
62  * update. If such an ongoing update is present, fast commit waits for it to
63  * complete. The completion of such an update is marked by
64  * ext4_fc_stop_update().
65  *
66  * Fast Commit Ineligibility
67  * -------------------------
68  *
69  * Not all operations are supported by fast commits today (e.g extended
70  * attributes). Fast commit ineligibility is marked by calling
71  * ext4_fc_mark_ineligible(): This makes next fast commit operation to fall back
72  * to full commit.
73  *
74  * Atomicity of commits
75  * --------------------
76  * In order to guarantee atomicity during the commit operation, fast commit
77  * uses "EXT4_FC_TAG_TAIL" tag that marks a fast commit as complete. Tail
78  * tag contains CRC of the contents and TID of the transaction after which
79  * this fast commit should be applied. Recovery code replays fast commit
80  * logs only if there's at least 1 valid tail present. For every fast commit
81  * operation, there is 1 tail. This means, we may end up with multiple tails
82  * in the fast commit space. Here's an example:
83  *
84  * - Create a new file A and remove existing file B
85  * - fsync()
86  * - Append contents to file A
87  * - Truncate file A
88  * - fsync()
89  *
90  * The fast commit space at the end of above operations would look like this:
91  *      [HEAD] [CREAT A] [UNLINK B] [TAIL] [ADD_RANGE A] [DEL_RANGE A] [TAIL]
92  *             |<---  Fast Commit 1   --->|<---      Fast Commit 2     ---->|
93  *
94  * Replay code should thus check for all the valid tails in the FC area.
95  *
96  * Fast Commit Replay Idempotence
97  * ------------------------------
98  *
99  * Fast commits tags are idempotent in nature provided the recovery code follows
100  * certain rules. The guiding principle that the commit path follows while
101  * committing is that it stores the result of a particular operation instead of
102  * storing the procedure.
103  *
104  * Let's consider this rename operation: 'mv /a /b'. Let's assume dirent '/a'
105  * was associated with inode 10. During fast commit, instead of storing this
106  * operation as a procedure "rename a to b", we store the resulting file system
107  * state as a "series" of outcomes:
108  *
109  * - Link dirent b to inode 10
110  * - Unlink dirent a
111  * - Inode <10> with valid refcount
112  *
113  * Now when recovery code runs, it needs "enforce" this state on the file
114  * system. This is what guarantees idempotence of fast commit replay.
115  *
116  * Let's take an example of a procedure that is not idempotent and see how fast
117  * commits make it idempotent. Consider following sequence of operations:
118  *
119  *     rm A;    mv B A;    read A
120  *  (x)     (y)        (z)
121  *
122  * (x), (y) and (z) are the points at which we can crash. If we store this
123  * sequence of operations as is then the replay is not idempotent. Let's say
124  * while in replay, we crash at (z). During the second replay, file A (which was
125  * actually created as a result of "mv B A" operation) would get deleted. Thus,
126  * file named A would be absent when we try to read A. So, this sequence of
127  * operations is not idempotent. However, as mentioned above, instead of storing
128  * the procedure fast commits store the outcome of each procedure. Thus the fast
129  * commit log for above procedure would be as follows:
130  *
131  * (Let's assume dirent A was linked to inode 10 and dirent B was linked to
132  * inode 11 before the replay)
133  *
134  *    [Unlink A]   [Link A to inode 11]   [Unlink B]   [Inode 11]
135  * (w)          (x)                    (y)          (z)
136  *
137  * If we crash at (z), we will have file A linked to inode 11. During the second
138  * replay, we will remove file A (inode 11). But we will create it back and make
139  * it point to inode 11. We won't find B, so we'll just skip that step. At this
140  * point, the refcount for inode 11 is not reliable, but that gets fixed by the
141  * replay of last inode 11 tag. Crashes at points (w), (x) and (y) get handled
142  * similarly. Thus, by converting a non-idempotent procedure into a series of
143  * idempotent outcomes, fast commits ensured idempotence during the replay.
144  *
145  * TODOs
146  * -----
147  *
148  * 0) Fast commit replay path hardening: Fast commit replay code should use
149  *    journal handles to make sure all the updates it does during the replay
150  *    path are atomic. With that if we crash during fast commit replay, after
151  *    trying to do recovery again, we will find a file system where fast commit
152  *    area is invalid (because new full commit would be found). In order to deal
153  *    with that, fast commit replay code should ensure that the "FC_REPLAY"
154  *    superblock state is persisted before starting the replay, so that after
155  *    the crash, fast commit recovery code can look at that flag and perform
156  *    fast commit recovery even if that area is invalidated by later full
157  *    commits.
158  *
159  * 1) Fast commit's commit path locks the entire file system during fast
160  *    commit. This has significant performance penalty. Instead of that, we
161  *    should use ext4_fc_start/stop_update functions to start inode level
162  *    updates from ext4_journal_start/stop. Once we do that we can drop file
163  *    system locking during commit path.
164  *
165  * 2) Handle more ineligible cases.
166  */
167
168 #include <trace/events/ext4.h>
169 static struct kmem_cache *ext4_fc_dentry_cachep;
170
171 static void ext4_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
172 {
173         BUFFER_TRACE(bh, "");
174         if (uptodate) {
175                 ext4_debug("%s: Block %lld up-to-date",
176                            __func__, bh->b_blocknr);
177                 set_buffer_uptodate(bh);
178         } else {
179                 ext4_debug("%s: Block %lld not up-to-date",
180                            __func__, bh->b_blocknr);
181                 clear_buffer_uptodate(bh);
182         }
183
184         unlock_buffer(bh);
185 }
186
187 static inline void ext4_fc_reset_inode(struct inode *inode)
188 {
189         struct ext4_inode_info *ei = EXT4_I(inode);
190
191         ei->i_fc_lblk_start = 0;
192         ei->i_fc_lblk_len = 0;
193 }
194
195 void ext4_fc_init_inode(struct inode *inode)
196 {
197         struct ext4_inode_info *ei = EXT4_I(inode);
198
199         ext4_fc_reset_inode(inode);
200         ext4_clear_inode_state(inode, EXT4_STATE_FC_COMMITTING);
201         INIT_LIST_HEAD(&ei->i_fc_list);
202         INIT_LIST_HEAD(&ei->i_fc_dilist);
203         init_waitqueue_head(&ei->i_fc_wait);
204         atomic_set(&ei->i_fc_updates, 0);
205 }
206
207 /* This function must be called with sbi->s_fc_lock held. */
208 static void ext4_fc_wait_committing_inode(struct inode *inode)
209 __releases(&EXT4_SB(inode->i_sb)->s_fc_lock)
210 {
211         wait_queue_head_t *wq;
212         struct ext4_inode_info *ei = EXT4_I(inode);
213
214 #if (BITS_PER_LONG < 64)
215         DEFINE_WAIT_BIT(wait, &ei->i_state_flags,
216                         EXT4_STATE_FC_COMMITTING);
217         wq = bit_waitqueue(&ei->i_state_flags,
218                                 EXT4_STATE_FC_COMMITTING);
219 #else
220         DEFINE_WAIT_BIT(wait, &ei->i_flags,
221                         EXT4_STATE_FC_COMMITTING);
222         wq = bit_waitqueue(&ei->i_flags,
223                                 EXT4_STATE_FC_COMMITTING);
224 #endif
225         lockdep_assert_held(&EXT4_SB(inode->i_sb)->s_fc_lock);
226         prepare_to_wait(wq, &wait.wq_entry, TASK_UNINTERRUPTIBLE);
227         spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock);
228         schedule();
229         finish_wait(wq, &wait.wq_entry);
230 }
231
232 /*
233  * Inform Ext4's fast about start of an inode update
234  *
235  * This function is called by the high level call VFS callbacks before
236  * performing any inode update. This function blocks if there's an ongoing
237  * fast commit on the inode in question.
238  */
239 void ext4_fc_start_update(struct inode *inode)
240 {
241         struct ext4_inode_info *ei = EXT4_I(inode);
242
243         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
244             (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY))
245                 return;
246
247 restart:
248         spin_lock(&EXT4_SB(inode->i_sb)->s_fc_lock);
249         if (list_empty(&ei->i_fc_list))
250                 goto out;
251
252         if (ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING)) {
253                 ext4_fc_wait_committing_inode(inode);
254                 goto restart;
255         }
256 out:
257         atomic_inc(&ei->i_fc_updates);
258         spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock);
259 }
260
261 /*
262  * Stop inode update and wake up waiting fast commits if any.
263  */
264 void ext4_fc_stop_update(struct inode *inode)
265 {
266         struct ext4_inode_info *ei = EXT4_I(inode);
267
268         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
269             (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY))
270                 return;
271
272         if (atomic_dec_and_test(&ei->i_fc_updates))
273                 wake_up_all(&ei->i_fc_wait);
274 }
275
276 /*
277  * Remove inode from fast commit list. If the inode is being committed
278  * we wait until inode commit is done.
279  */
280 void ext4_fc_del(struct inode *inode)
281 {
282         struct ext4_inode_info *ei = EXT4_I(inode);
283         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
284         struct ext4_fc_dentry_update *fc_dentry;
285
286         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
287             (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY))
288                 return;
289
290 restart:
291         spin_lock(&EXT4_SB(inode->i_sb)->s_fc_lock);
292         if (list_empty(&ei->i_fc_list) && list_empty(&ei->i_fc_dilist)) {
293                 spin_unlock(&EXT4_SB(inode->i_sb)->s_fc_lock);
294                 return;
295         }
296
297         if (ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING)) {
298                 ext4_fc_wait_committing_inode(inode);
299                 goto restart;
300         }
301
302         if (!list_empty(&ei->i_fc_list))
303                 list_del_init(&ei->i_fc_list);
304
305         /*
306          * Since this inode is getting removed, let's also remove all FC
307          * dentry create references, since it is not needed to log it anyways.
308          */
309         if (list_empty(&ei->i_fc_dilist)) {
310                 spin_unlock(&sbi->s_fc_lock);
311                 return;
312         }
313
314         fc_dentry = list_first_entry(&ei->i_fc_dilist, struct ext4_fc_dentry_update, fcd_dilist);
315         WARN_ON(fc_dentry->fcd_op != EXT4_FC_TAG_CREAT);
316         list_del_init(&fc_dentry->fcd_list);
317         list_del_init(&fc_dentry->fcd_dilist);
318
319         WARN_ON(!list_empty(&ei->i_fc_dilist));
320         spin_unlock(&sbi->s_fc_lock);
321
322         if (fc_dentry->fcd_name.name &&
323                 fc_dentry->fcd_name.len > DNAME_INLINE_LEN)
324                 kfree(fc_dentry->fcd_name.name);
325         kmem_cache_free(ext4_fc_dentry_cachep, fc_dentry);
326
327         return;
328 }
329
330 /*
331  * Mark file system as fast commit ineligible, and record latest
332  * ineligible transaction tid. This means until the recorded
333  * transaction, commit operation would result in a full jbd2 commit.
334  */
335 void ext4_fc_mark_ineligible(struct super_block *sb, int reason, handle_t *handle)
336 {
337         struct ext4_sb_info *sbi = EXT4_SB(sb);
338         tid_t tid;
339
340         if (!test_opt2(sb, JOURNAL_FAST_COMMIT) ||
341             (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY))
342                 return;
343
344         ext4_set_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
345         if (handle && !IS_ERR(handle))
346                 tid = handle->h_transaction->t_tid;
347         else {
348                 read_lock(&sbi->s_journal->j_state_lock);
349                 tid = sbi->s_journal->j_running_transaction ?
350                                 sbi->s_journal->j_running_transaction->t_tid : 0;
351                 read_unlock(&sbi->s_journal->j_state_lock);
352         }
353         spin_lock(&sbi->s_fc_lock);
354         if (sbi->s_fc_ineligible_tid < tid)
355                 sbi->s_fc_ineligible_tid = tid;
356         spin_unlock(&sbi->s_fc_lock);
357         WARN_ON(reason >= EXT4_FC_REASON_MAX);
358         sbi->s_fc_stats.fc_ineligible_reason_count[reason]++;
359 }
360
361 /*
362  * Generic fast commit tracking function. If this is the first time this we are
363  * called after a full commit, we initialize fast commit fields and then call
364  * __fc_track_fn() with update = 0. If we have already been called after a full
365  * commit, we pass update = 1. Based on that, the track function can determine
366  * if it needs to track a field for the first time or if it needs to just
367  * update the previously tracked value.
368  *
369  * If enqueue is set, this function enqueues the inode in fast commit list.
370  */
371 static int ext4_fc_track_template(
372         handle_t *handle, struct inode *inode,
373         int (*__fc_track_fn)(struct inode *, void *, bool),
374         void *args, int enqueue)
375 {
376         bool update = false;
377         struct ext4_inode_info *ei = EXT4_I(inode);
378         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
379         tid_t tid = 0;
380         int ret;
381
382         tid = handle->h_transaction->t_tid;
383         mutex_lock(&ei->i_fc_lock);
384         if (tid == ei->i_sync_tid) {
385                 update = true;
386         } else {
387                 ext4_fc_reset_inode(inode);
388                 ei->i_sync_tid = tid;
389         }
390         ret = __fc_track_fn(inode, args, update);
391         mutex_unlock(&ei->i_fc_lock);
392
393         if (!enqueue)
394                 return ret;
395
396         spin_lock(&sbi->s_fc_lock);
397         if (list_empty(&EXT4_I(inode)->i_fc_list))
398                 list_add_tail(&EXT4_I(inode)->i_fc_list,
399                                 (sbi->s_journal->j_flags & JBD2_FULL_COMMIT_ONGOING ||
400                                  sbi->s_journal->j_flags & JBD2_FAST_COMMIT_ONGOING) ?
401                                 &sbi->s_fc_q[FC_Q_STAGING] :
402                                 &sbi->s_fc_q[FC_Q_MAIN]);
403         spin_unlock(&sbi->s_fc_lock);
404
405         return ret;
406 }
407
408 struct __track_dentry_update_args {
409         struct dentry *dentry;
410         int op;
411 };
412
413 /* __track_fn for directory entry updates. Called with ei->i_fc_lock. */
414 static int __track_dentry_update(struct inode *inode, void *arg, bool update)
415 {
416         struct ext4_fc_dentry_update *node;
417         struct ext4_inode_info *ei = EXT4_I(inode);
418         struct __track_dentry_update_args *dentry_update =
419                 (struct __track_dentry_update_args *)arg;
420         struct dentry *dentry = dentry_update->dentry;
421         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
422
423         mutex_unlock(&ei->i_fc_lock);
424         node = kmem_cache_alloc(ext4_fc_dentry_cachep, GFP_NOFS);
425         if (!node) {
426                 ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM, NULL);
427                 mutex_lock(&ei->i_fc_lock);
428                 return -ENOMEM;
429         }
430
431         node->fcd_op = dentry_update->op;
432         node->fcd_parent = dentry->d_parent->d_inode->i_ino;
433         node->fcd_ino = inode->i_ino;
434         if (dentry->d_name.len > DNAME_INLINE_LEN) {
435                 node->fcd_name.name = kmalloc(dentry->d_name.len, GFP_NOFS);
436                 if (!node->fcd_name.name) {
437                         kmem_cache_free(ext4_fc_dentry_cachep, node);
438                         ext4_fc_mark_ineligible(inode->i_sb,
439                                 EXT4_FC_REASON_NOMEM, NULL);
440                         mutex_lock(&ei->i_fc_lock);
441                         return -ENOMEM;
442                 }
443                 memcpy((u8 *)node->fcd_name.name, dentry->d_name.name,
444                         dentry->d_name.len);
445         } else {
446                 memcpy(node->fcd_iname, dentry->d_name.name,
447                         dentry->d_name.len);
448                 node->fcd_name.name = node->fcd_iname;
449         }
450         node->fcd_name.len = dentry->d_name.len;
451         INIT_LIST_HEAD(&node->fcd_dilist);
452         spin_lock(&sbi->s_fc_lock);
453         if (sbi->s_journal->j_flags & JBD2_FULL_COMMIT_ONGOING ||
454                 sbi->s_journal->j_flags & JBD2_FAST_COMMIT_ONGOING)
455                 list_add_tail(&node->fcd_list,
456                                 &sbi->s_fc_dentry_q[FC_Q_STAGING]);
457         else
458                 list_add_tail(&node->fcd_list, &sbi->s_fc_dentry_q[FC_Q_MAIN]);
459
460         /*
461          * This helps us keep a track of all fc_dentry updates which is part of
462          * this ext4 inode. So in case the inode is getting unlinked, before
463          * even we get a chance to fsync, we could remove all fc_dentry
464          * references while evicting the inode in ext4_fc_del().
465          * Also with this, we don't need to loop over all the inodes in
466          * sbi->s_fc_q to get the corresponding inode in
467          * ext4_fc_commit_dentry_updates().
468          */
469         if (dentry_update->op == EXT4_FC_TAG_CREAT) {
470                 WARN_ON(!list_empty(&ei->i_fc_dilist));
471                 list_add_tail(&node->fcd_dilist, &ei->i_fc_dilist);
472         }
473         spin_unlock(&sbi->s_fc_lock);
474         mutex_lock(&ei->i_fc_lock);
475
476         return 0;
477 }
478
479 void __ext4_fc_track_unlink(handle_t *handle,
480                 struct inode *inode, struct dentry *dentry)
481 {
482         struct __track_dentry_update_args args;
483         int ret;
484
485         args.dentry = dentry;
486         args.op = EXT4_FC_TAG_UNLINK;
487
488         ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
489                                         (void *)&args, 0);
490         trace_ext4_fc_track_unlink(handle, inode, dentry, ret);
491 }
492
493 void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry)
494 {
495         struct inode *inode = d_inode(dentry);
496         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
497
498         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
499             (sbi->s_mount_state & EXT4_FC_REPLAY))
500                 return;
501
502         if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
503                 return;
504
505         __ext4_fc_track_unlink(handle, inode, dentry);
506 }
507
508 void __ext4_fc_track_link(handle_t *handle,
509         struct inode *inode, struct dentry *dentry)
510 {
511         struct __track_dentry_update_args args;
512         int ret;
513
514         args.dentry = dentry;
515         args.op = EXT4_FC_TAG_LINK;
516
517         ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
518                                         (void *)&args, 0);
519         trace_ext4_fc_track_link(handle, inode, dentry, ret);
520 }
521
522 void ext4_fc_track_link(handle_t *handle, struct dentry *dentry)
523 {
524         struct inode *inode = d_inode(dentry);
525         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
526
527         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
528             (sbi->s_mount_state & EXT4_FC_REPLAY))
529                 return;
530
531         if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
532                 return;
533
534         __ext4_fc_track_link(handle, inode, dentry);
535 }
536
537 void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
538                           struct dentry *dentry)
539 {
540         struct __track_dentry_update_args args;
541         int ret;
542
543         args.dentry = dentry;
544         args.op = EXT4_FC_TAG_CREAT;
545
546         ret = ext4_fc_track_template(handle, inode, __track_dentry_update,
547                                         (void *)&args, 0);
548         trace_ext4_fc_track_create(handle, inode, dentry, ret);
549 }
550
551 void ext4_fc_track_create(handle_t *handle, struct dentry *dentry)
552 {
553         struct inode *inode = d_inode(dentry);
554         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
555
556         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
557             (sbi->s_mount_state & EXT4_FC_REPLAY))
558                 return;
559
560         if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
561                 return;
562
563         __ext4_fc_track_create(handle, inode, dentry);
564 }
565
566 /* __track_fn for inode tracking */
567 static int __track_inode(struct inode *inode, void *arg, bool update)
568 {
569         if (update)
570                 return -EEXIST;
571
572         EXT4_I(inode)->i_fc_lblk_len = 0;
573
574         return 0;
575 }
576
577 void ext4_fc_track_inode(handle_t *handle, struct inode *inode)
578 {
579         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
580         int ret;
581
582         if (S_ISDIR(inode->i_mode))
583                 return;
584
585         if (ext4_should_journal_data(inode)) {
586                 ext4_fc_mark_ineligible(inode->i_sb,
587                                         EXT4_FC_REASON_INODE_JOURNAL_DATA, handle);
588                 return;
589         }
590
591         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
592             (sbi->s_mount_state & EXT4_FC_REPLAY))
593                 return;
594
595         if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
596                 return;
597
598         ret = ext4_fc_track_template(handle, inode, __track_inode, NULL, 1);
599         trace_ext4_fc_track_inode(handle, inode, ret);
600 }
601
602 struct __track_range_args {
603         ext4_lblk_t start, end;
604 };
605
606 /* __track_fn for tracking data updates */
607 static int __track_range(struct inode *inode, void *arg, bool update)
608 {
609         struct ext4_inode_info *ei = EXT4_I(inode);
610         ext4_lblk_t oldstart;
611         struct __track_range_args *__arg =
612                 (struct __track_range_args *)arg;
613
614         if (inode->i_ino < EXT4_FIRST_INO(inode->i_sb)) {
615                 ext4_debug("Special inode %ld being modified\n", inode->i_ino);
616                 return -ECANCELED;
617         }
618
619         oldstart = ei->i_fc_lblk_start;
620
621         if (update && ei->i_fc_lblk_len > 0) {
622                 ei->i_fc_lblk_start = min(ei->i_fc_lblk_start, __arg->start);
623                 ei->i_fc_lblk_len =
624                         max(oldstart + ei->i_fc_lblk_len - 1, __arg->end) -
625                                 ei->i_fc_lblk_start + 1;
626         } else {
627                 ei->i_fc_lblk_start = __arg->start;
628                 ei->i_fc_lblk_len = __arg->end - __arg->start + 1;
629         }
630
631         return 0;
632 }
633
634 void ext4_fc_track_range(handle_t *handle, struct inode *inode, ext4_lblk_t start,
635                          ext4_lblk_t end)
636 {
637         struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
638         struct __track_range_args args;
639         int ret;
640
641         if (S_ISDIR(inode->i_mode))
642                 return;
643
644         if (!test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT) ||
645             (sbi->s_mount_state & EXT4_FC_REPLAY))
646                 return;
647
648         if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
649                 return;
650
651         args.start = start;
652         args.end = end;
653
654         ret = ext4_fc_track_template(handle, inode,  __track_range, &args, 1);
655
656         trace_ext4_fc_track_range(handle, inode, start, end, ret);
657 }
658
659 static void ext4_fc_submit_bh(struct super_block *sb, bool is_tail)
660 {
661         int write_flags = REQ_SYNC;
662         struct buffer_head *bh = EXT4_SB(sb)->s_fc_bh;
663
664         /* Add REQ_FUA | REQ_PREFLUSH only its tail */
665         if (test_opt(sb, BARRIER) && is_tail)
666                 write_flags |= REQ_FUA | REQ_PREFLUSH;
667         lock_buffer(bh);
668         set_buffer_dirty(bh);
669         set_buffer_uptodate(bh);
670         bh->b_end_io = ext4_end_buffer_io_sync;
671         submit_bh(REQ_OP_WRITE, write_flags, bh);
672         EXT4_SB(sb)->s_fc_bh = NULL;
673 }
674
675 /* Ext4 commit path routines */
676
677 /* memzero and update CRC */
678 static void *ext4_fc_memzero(struct super_block *sb, void *dst, int len,
679                                 u32 *crc)
680 {
681         void *ret;
682
683         ret = memset(dst, 0, len);
684         if (crc)
685                 *crc = ext4_chksum(EXT4_SB(sb), *crc, dst, len);
686         return ret;
687 }
688
689 /*
690  * Allocate len bytes on a fast commit buffer.
691  *
692  * During the commit time this function is used to manage fast commit
693  * block space. We don't split a fast commit log onto different
694  * blocks. So this function makes sure that if there's not enough space
695  * on the current block, the remaining space in the current block is
696  * marked as unused by adding EXT4_FC_TAG_PAD tag. In that case,
697  * new block is from jbd2 and CRC is updated to reflect the padding
698  * we added.
699  */
700 static u8 *ext4_fc_reserve_space(struct super_block *sb, int len, u32 *crc)
701 {
702         struct ext4_fc_tl *tl;
703         struct ext4_sb_info *sbi = EXT4_SB(sb);
704         struct buffer_head *bh;
705         int bsize = sbi->s_journal->j_blocksize;
706         int ret, off = sbi->s_fc_bytes % bsize;
707         int pad_len;
708
709         /*
710          * After allocating len, we should have space at least for a 0 byte
711          * padding.
712          */
713         if (len + sizeof(struct ext4_fc_tl) > bsize)
714                 return NULL;
715
716         if (bsize - off - 1 > len + sizeof(struct ext4_fc_tl)) {
717                 /*
718                  * Only allocate from current buffer if we have enough space for
719                  * this request AND we have space to add a zero byte padding.
720                  */
721                 if (!sbi->s_fc_bh) {
722                         ret = jbd2_fc_get_buf(EXT4_SB(sb)->s_journal, &bh);
723                         if (ret)
724                                 return NULL;
725                         sbi->s_fc_bh = bh;
726                 }
727                 sbi->s_fc_bytes += len;
728                 return sbi->s_fc_bh->b_data + off;
729         }
730         /* Need to add PAD tag */
731         tl = (struct ext4_fc_tl *)(sbi->s_fc_bh->b_data + off);
732         tl->fc_tag = cpu_to_le16(EXT4_FC_TAG_PAD);
733         pad_len = bsize - off - 1 - sizeof(struct ext4_fc_tl);
734         tl->fc_len = cpu_to_le16(pad_len);
735         if (crc)
736                 *crc = ext4_chksum(sbi, *crc, tl, sizeof(*tl));
737         if (pad_len > 0)
738                 ext4_fc_memzero(sb, tl + 1, pad_len, crc);
739         ext4_fc_submit_bh(sb, false);
740
741         ret = jbd2_fc_get_buf(EXT4_SB(sb)->s_journal, &bh);
742         if (ret)
743                 return NULL;
744         sbi->s_fc_bh = bh;
745         sbi->s_fc_bytes = (sbi->s_fc_bytes / bsize + 1) * bsize + len;
746         return sbi->s_fc_bh->b_data;
747 }
748
749 /* memcpy to fc reserved space and update CRC */
750 static void *ext4_fc_memcpy(struct super_block *sb, void *dst, const void *src,
751                                 int len, u32 *crc)
752 {
753         if (crc)
754                 *crc = ext4_chksum(EXT4_SB(sb), *crc, src, len);
755         return memcpy(dst, src, len);
756 }
757
758 /*
759  * Complete a fast commit by writing tail tag.
760  *
761  * Writing tail tag marks the end of a fast commit. In order to guarantee
762  * atomicity, after writing tail tag, even if there's space remaining
763  * in the block, next commit shouldn't use it. That's why tail tag
764  * has the length as that of the remaining space on the block.
765  */
766 static int ext4_fc_write_tail(struct super_block *sb, u32 crc)
767 {
768         struct ext4_sb_info *sbi = EXT4_SB(sb);
769         struct ext4_fc_tl tl;
770         struct ext4_fc_tail tail;
771         int off, bsize = sbi->s_journal->j_blocksize;
772         u8 *dst;
773
774         /*
775          * ext4_fc_reserve_space takes care of allocating an extra block if
776          * there's no enough space on this block for accommodating this tail.
777          */
778         dst = ext4_fc_reserve_space(sb, sizeof(tl) + sizeof(tail), &crc);
779         if (!dst)
780                 return -ENOSPC;
781
782         off = sbi->s_fc_bytes % bsize;
783
784         tl.fc_tag = cpu_to_le16(EXT4_FC_TAG_TAIL);
785         tl.fc_len = cpu_to_le16(bsize - off - 1 + sizeof(struct ext4_fc_tail));
786         sbi->s_fc_bytes = round_up(sbi->s_fc_bytes, bsize);
787
788         ext4_fc_memcpy(sb, dst, &tl, sizeof(tl), &crc);
789         dst += sizeof(tl);
790         tail.fc_tid = cpu_to_le32(sbi->s_journal->j_running_transaction->t_tid);
791         ext4_fc_memcpy(sb, dst, &tail.fc_tid, sizeof(tail.fc_tid), &crc);
792         dst += sizeof(tail.fc_tid);
793         tail.fc_crc = cpu_to_le32(crc);
794         ext4_fc_memcpy(sb, dst, &tail.fc_crc, sizeof(tail.fc_crc), NULL);
795
796         ext4_fc_submit_bh(sb, true);
797
798         return 0;
799 }
800
801 /*
802  * Adds tag, length, value and updates CRC. Returns true if tlv was added.
803  * Returns false if there's not enough space.
804  */
805 static bool ext4_fc_add_tlv(struct super_block *sb, u16 tag, u16 len, u8 *val,
806                            u32 *crc)
807 {
808         struct ext4_fc_tl tl;
809         u8 *dst;
810
811         dst = ext4_fc_reserve_space(sb, sizeof(tl) + len, crc);
812         if (!dst)
813                 return false;
814
815         tl.fc_tag = cpu_to_le16(tag);
816         tl.fc_len = cpu_to_le16(len);
817
818         ext4_fc_memcpy(sb, dst, &tl, sizeof(tl), crc);
819         ext4_fc_memcpy(sb, dst + sizeof(tl), val, len, crc);
820
821         return true;
822 }
823
824 /* Same as above, but adds dentry tlv. */
825 static bool ext4_fc_add_dentry_tlv(struct super_block *sb, u32 *crc,
826                                    struct ext4_fc_dentry_update *fc_dentry)
827 {
828         struct ext4_fc_dentry_info fcd;
829         struct ext4_fc_tl tl;
830         int dlen = fc_dentry->fcd_name.len;
831         u8 *dst = ext4_fc_reserve_space(sb, sizeof(tl) + sizeof(fcd) + dlen,
832                                         crc);
833
834         if (!dst)
835                 return false;
836
837         fcd.fc_parent_ino = cpu_to_le32(fc_dentry->fcd_parent);
838         fcd.fc_ino = cpu_to_le32(fc_dentry->fcd_ino);
839         tl.fc_tag = cpu_to_le16(fc_dentry->fcd_op);
840         tl.fc_len = cpu_to_le16(sizeof(fcd) + dlen);
841         ext4_fc_memcpy(sb, dst, &tl, sizeof(tl), crc);
842         dst += sizeof(tl);
843         ext4_fc_memcpy(sb, dst, &fcd, sizeof(fcd), crc);
844         dst += sizeof(fcd);
845         ext4_fc_memcpy(sb, dst, fc_dentry->fcd_name.name, dlen, crc);
846
847         return true;
848 }
849
850 /*
851  * Writes inode in the fast commit space under TLV with tag @tag.
852  * Returns 0 on success, error on failure.
853  */
854 static int ext4_fc_write_inode(struct inode *inode, u32 *crc)
855 {
856         struct ext4_inode_info *ei = EXT4_I(inode);
857         int inode_len = EXT4_GOOD_OLD_INODE_SIZE;
858         int ret;
859         struct ext4_iloc iloc;
860         struct ext4_fc_inode fc_inode;
861         struct ext4_fc_tl tl;
862         u8 *dst;
863
864         ret = ext4_get_inode_loc(inode, &iloc);
865         if (ret)
866                 return ret;
867
868         if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA))
869                 inode_len = EXT4_INODE_SIZE(inode->i_sb);
870         else if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE)
871                 inode_len += ei->i_extra_isize;
872
873         fc_inode.fc_ino = cpu_to_le32(inode->i_ino);
874         tl.fc_tag = cpu_to_le16(EXT4_FC_TAG_INODE);
875         tl.fc_len = cpu_to_le16(inode_len + sizeof(fc_inode.fc_ino));
876
877         dst = ext4_fc_reserve_space(inode->i_sb,
878                         sizeof(tl) + inode_len + sizeof(fc_inode.fc_ino), crc);
879         if (!dst)
880                 return -ECANCELED;
881
882         if (!ext4_fc_memcpy(inode->i_sb, dst, &tl, sizeof(tl), crc))
883                 return -ECANCELED;
884         dst += sizeof(tl);
885         if (!ext4_fc_memcpy(inode->i_sb, dst, &fc_inode, sizeof(fc_inode), crc))
886                 return -ECANCELED;
887         dst += sizeof(fc_inode);
888         if (!ext4_fc_memcpy(inode->i_sb, dst, (u8 *)ext4_raw_inode(&iloc),
889                                         inode_len, crc))
890                 return -ECANCELED;
891
892         return 0;
893 }
894
895 /*
896  * Writes updated data ranges for the inode in question. Updates CRC.
897  * Returns 0 on success, error otherwise.
898  */
899 static int ext4_fc_write_inode_data(struct inode *inode, u32 *crc)
900 {
901         ext4_lblk_t old_blk_size, cur_lblk_off, new_blk_size;
902         struct ext4_inode_info *ei = EXT4_I(inode);
903         struct ext4_map_blocks map;
904         struct ext4_fc_add_range fc_ext;
905         struct ext4_fc_del_range lrange;
906         struct ext4_extent *ex;
907         int ret;
908
909         mutex_lock(&ei->i_fc_lock);
910         if (ei->i_fc_lblk_len == 0) {
911                 mutex_unlock(&ei->i_fc_lock);
912                 return 0;
913         }
914         old_blk_size = ei->i_fc_lblk_start;
915         new_blk_size = ei->i_fc_lblk_start + ei->i_fc_lblk_len - 1;
916         ei->i_fc_lblk_len = 0;
917         mutex_unlock(&ei->i_fc_lock);
918
919         cur_lblk_off = old_blk_size;
920         jbd_debug(1, "%s: will try writing %d to %d for inode %ld\n",
921                   __func__, cur_lblk_off, new_blk_size, inode->i_ino);
922
923         while (cur_lblk_off <= new_blk_size) {
924                 map.m_lblk = cur_lblk_off;
925                 map.m_len = new_blk_size - cur_lblk_off + 1;
926                 ret = ext4_map_blocks(NULL, inode, &map, 0);
927                 if (ret < 0)
928                         return -ECANCELED;
929
930                 if (map.m_len == 0) {
931                         cur_lblk_off++;
932                         continue;
933                 }
934
935                 if (ret == 0) {
936                         lrange.fc_ino = cpu_to_le32(inode->i_ino);
937                         lrange.fc_lblk = cpu_to_le32(map.m_lblk);
938                         lrange.fc_len = cpu_to_le32(map.m_len);
939                         if (!ext4_fc_add_tlv(inode->i_sb, EXT4_FC_TAG_DEL_RANGE,
940                                             sizeof(lrange), (u8 *)&lrange, crc))
941                                 return -ENOSPC;
942                 } else {
943                         unsigned int max = (map.m_flags & EXT4_MAP_UNWRITTEN) ?
944                                 EXT_UNWRITTEN_MAX_LEN : EXT_INIT_MAX_LEN;
945
946                         /* Limit the number of blocks in one extent */
947                         map.m_len = min(max, map.m_len);
948
949                         fc_ext.fc_ino = cpu_to_le32(inode->i_ino);
950                         ex = (struct ext4_extent *)&fc_ext.fc_ex;
951                         ex->ee_block = cpu_to_le32(map.m_lblk);
952                         ex->ee_len = cpu_to_le16(map.m_len);
953                         ext4_ext_store_pblock(ex, map.m_pblk);
954                         if (map.m_flags & EXT4_MAP_UNWRITTEN)
955                                 ext4_ext_mark_unwritten(ex);
956                         else
957                                 ext4_ext_mark_initialized(ex);
958                         if (!ext4_fc_add_tlv(inode->i_sb, EXT4_FC_TAG_ADD_RANGE,
959                                             sizeof(fc_ext), (u8 *)&fc_ext, crc))
960                                 return -ENOSPC;
961                 }
962
963                 cur_lblk_off += map.m_len;
964         }
965
966         return 0;
967 }
968
969
970 /* Submit data for all the fast commit inodes */
971 static int ext4_fc_submit_inode_data_all(journal_t *journal)
972 {
973         struct super_block *sb = (struct super_block *)(journal->j_private);
974         struct ext4_sb_info *sbi = EXT4_SB(sb);
975         struct ext4_inode_info *ei;
976         int ret = 0;
977
978         spin_lock(&sbi->s_fc_lock);
979         list_for_each_entry(ei, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
980                 ext4_set_inode_state(&ei->vfs_inode, EXT4_STATE_FC_COMMITTING);
981                 while (atomic_read(&ei->i_fc_updates)) {
982                         DEFINE_WAIT(wait);
983
984                         prepare_to_wait(&ei->i_fc_wait, &wait,
985                                                 TASK_UNINTERRUPTIBLE);
986                         if (atomic_read(&ei->i_fc_updates)) {
987                                 spin_unlock(&sbi->s_fc_lock);
988                                 schedule();
989                                 spin_lock(&sbi->s_fc_lock);
990                         }
991                         finish_wait(&ei->i_fc_wait, &wait);
992                 }
993                 spin_unlock(&sbi->s_fc_lock);
994                 ret = jbd2_submit_inode_data(ei->jinode);
995                 if (ret)
996                         return ret;
997                 spin_lock(&sbi->s_fc_lock);
998         }
999         spin_unlock(&sbi->s_fc_lock);
1000
1001         return ret;
1002 }
1003
1004 /* Wait for completion of data for all the fast commit inodes */
1005 static int ext4_fc_wait_inode_data_all(journal_t *journal)
1006 {
1007         struct super_block *sb = (struct super_block *)(journal->j_private);
1008         struct ext4_sb_info *sbi = EXT4_SB(sb);
1009         struct ext4_inode_info *pos, *n;
1010         int ret = 0;
1011
1012         spin_lock(&sbi->s_fc_lock);
1013         list_for_each_entry_safe(pos, n, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
1014                 if (!ext4_test_inode_state(&pos->vfs_inode,
1015                                            EXT4_STATE_FC_COMMITTING))
1016                         continue;
1017                 spin_unlock(&sbi->s_fc_lock);
1018
1019                 ret = jbd2_wait_inode_data(journal, pos->jinode);
1020                 if (ret)
1021                         return ret;
1022                 spin_lock(&sbi->s_fc_lock);
1023         }
1024         spin_unlock(&sbi->s_fc_lock);
1025
1026         return 0;
1027 }
1028
1029 /* Commit all the directory entry updates */
1030 static int ext4_fc_commit_dentry_updates(journal_t *journal, u32 *crc)
1031 __acquires(&sbi->s_fc_lock)
1032 __releases(&sbi->s_fc_lock)
1033 {
1034         struct super_block *sb = (struct super_block *)(journal->j_private);
1035         struct ext4_sb_info *sbi = EXT4_SB(sb);
1036         struct ext4_fc_dentry_update *fc_dentry, *fc_dentry_n;
1037         struct inode *inode;
1038         struct ext4_inode_info *ei;
1039         int ret;
1040
1041         if (list_empty(&sbi->s_fc_dentry_q[FC_Q_MAIN]))
1042                 return 0;
1043         list_for_each_entry_safe(fc_dentry, fc_dentry_n,
1044                                  &sbi->s_fc_dentry_q[FC_Q_MAIN], fcd_list) {
1045                 if (fc_dentry->fcd_op != EXT4_FC_TAG_CREAT) {
1046                         spin_unlock(&sbi->s_fc_lock);
1047                         if (!ext4_fc_add_dentry_tlv(sb, crc, fc_dentry)) {
1048                                 ret = -ENOSPC;
1049                                 goto lock_and_exit;
1050                         }
1051                         spin_lock(&sbi->s_fc_lock);
1052                         continue;
1053                 }
1054                 /*
1055                  * With fcd_dilist we need not loop in sbi->s_fc_q to get the
1056                  * corresponding inode pointer
1057                  */
1058                 WARN_ON(list_empty(&fc_dentry->fcd_dilist));
1059                 ei = list_first_entry(&fc_dentry->fcd_dilist,
1060                                 struct ext4_inode_info, i_fc_dilist);
1061                 inode = &ei->vfs_inode;
1062                 WARN_ON(inode->i_ino != fc_dentry->fcd_ino);
1063
1064                 spin_unlock(&sbi->s_fc_lock);
1065
1066                 /*
1067                  * We first write the inode and then the create dirent. This
1068                  * allows the recovery code to create an unnamed inode first
1069                  * and then link it to a directory entry. This allows us
1070                  * to use namei.c routines almost as is and simplifies
1071                  * the recovery code.
1072                  */
1073                 ret = ext4_fc_write_inode(inode, crc);
1074                 if (ret)
1075                         goto lock_and_exit;
1076
1077                 ret = ext4_fc_write_inode_data(inode, crc);
1078                 if (ret)
1079                         goto lock_and_exit;
1080
1081                 if (!ext4_fc_add_dentry_tlv(sb, crc, fc_dentry)) {
1082                         ret = -ENOSPC;
1083                         goto lock_and_exit;
1084                 }
1085
1086                 spin_lock(&sbi->s_fc_lock);
1087         }
1088         return 0;
1089 lock_and_exit:
1090         spin_lock(&sbi->s_fc_lock);
1091         return ret;
1092 }
1093
1094 static int ext4_fc_perform_commit(journal_t *journal)
1095 {
1096         struct super_block *sb = (struct super_block *)(journal->j_private);
1097         struct ext4_sb_info *sbi = EXT4_SB(sb);
1098         struct ext4_inode_info *iter;
1099         struct ext4_fc_head head;
1100         struct inode *inode;
1101         struct blk_plug plug;
1102         int ret = 0;
1103         u32 crc = 0;
1104
1105         ret = ext4_fc_submit_inode_data_all(journal);
1106         if (ret)
1107                 return ret;
1108
1109         ret = ext4_fc_wait_inode_data_all(journal);
1110         if (ret)
1111                 return ret;
1112
1113         /*
1114          * If file system device is different from journal device, issue a cache
1115          * flush before we start writing fast commit blocks.
1116          */
1117         if (journal->j_fs_dev != journal->j_dev)
1118                 blkdev_issue_flush(journal->j_fs_dev);
1119
1120         blk_start_plug(&plug);
1121         if (sbi->s_fc_bytes == 0) {
1122                 /*
1123                  * Add a head tag only if this is the first fast commit
1124                  * in this TID.
1125                  */
1126                 head.fc_features = cpu_to_le32(EXT4_FC_SUPPORTED_FEATURES);
1127                 head.fc_tid = cpu_to_le32(
1128                         sbi->s_journal->j_running_transaction->t_tid);
1129                 if (!ext4_fc_add_tlv(sb, EXT4_FC_TAG_HEAD, sizeof(head),
1130                         (u8 *)&head, &crc)) {
1131                         ret = -ENOSPC;
1132                         goto out;
1133                 }
1134         }
1135
1136         spin_lock(&sbi->s_fc_lock);
1137         ret = ext4_fc_commit_dentry_updates(journal, &crc);
1138         if (ret) {
1139                 spin_unlock(&sbi->s_fc_lock);
1140                 goto out;
1141         }
1142
1143         list_for_each_entry(iter, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
1144                 inode = &iter->vfs_inode;
1145                 if (!ext4_test_inode_state(inode, EXT4_STATE_FC_COMMITTING))
1146                         continue;
1147
1148                 spin_unlock(&sbi->s_fc_lock);
1149                 ret = ext4_fc_write_inode_data(inode, &crc);
1150                 if (ret)
1151                         goto out;
1152                 ret = ext4_fc_write_inode(inode, &crc);
1153                 if (ret)
1154                         goto out;
1155                 spin_lock(&sbi->s_fc_lock);
1156         }
1157         spin_unlock(&sbi->s_fc_lock);
1158
1159         ret = ext4_fc_write_tail(sb, crc);
1160
1161 out:
1162         blk_finish_plug(&plug);
1163         return ret;
1164 }
1165
1166 static void ext4_fc_update_stats(struct super_block *sb, int status,
1167                                  u64 commit_time, int nblks, tid_t commit_tid)
1168 {
1169         struct ext4_fc_stats *stats = &EXT4_SB(sb)->s_fc_stats;
1170
1171         jbd_debug(1, "Fast commit ended with status = %d for tid %u",
1172                         status, commit_tid);
1173         if (status == EXT4_FC_STATUS_OK) {
1174                 stats->fc_num_commits++;
1175                 stats->fc_numblks += nblks;
1176                 if (likely(stats->s_fc_avg_commit_time))
1177                         stats->s_fc_avg_commit_time =
1178                                 (commit_time +
1179                                  stats->s_fc_avg_commit_time * 3) / 4;
1180                 else
1181                         stats->s_fc_avg_commit_time = commit_time;
1182         } else if (status == EXT4_FC_STATUS_FAILED ||
1183                    status == EXT4_FC_STATUS_INELIGIBLE) {
1184                 if (status == EXT4_FC_STATUS_FAILED)
1185                         stats->fc_failed_commits++;
1186                 stats->fc_ineligible_commits++;
1187         } else {
1188                 stats->fc_skipped_commits++;
1189         }
1190         trace_ext4_fc_commit_stop(sb, nblks, status, commit_tid);
1191 }
1192
1193 /*
1194  * The main commit entry point. Performs a fast commit for transaction
1195  * commit_tid if needed. If it's not possible to perform a fast commit
1196  * due to various reasons, we fall back to full commit. Returns 0
1197  * on success, error otherwise.
1198  */
1199 int ext4_fc_commit(journal_t *journal, tid_t commit_tid)
1200 {
1201         struct super_block *sb = (struct super_block *)(journal->j_private);
1202         struct ext4_sb_info *sbi = EXT4_SB(sb);
1203         int nblks = 0, ret, bsize = journal->j_blocksize;
1204         int subtid = atomic_read(&sbi->s_fc_subtid);
1205         int status = EXT4_FC_STATUS_OK, fc_bufs_before = 0;
1206         ktime_t start_time, commit_time;
1207
1208         if (!test_opt2(sb, JOURNAL_FAST_COMMIT))
1209                 return jbd2_complete_transaction(journal, commit_tid);
1210
1211         trace_ext4_fc_commit_start(sb, commit_tid);
1212
1213         start_time = ktime_get();
1214
1215 restart_fc:
1216         ret = jbd2_fc_begin_commit(journal, commit_tid);
1217         if (ret == -EALREADY) {
1218                 /* There was an ongoing commit, check if we need to restart */
1219                 if (atomic_read(&sbi->s_fc_subtid) <= subtid &&
1220                         commit_tid > journal->j_commit_sequence)
1221                         goto restart_fc;
1222                 ext4_fc_update_stats(sb, EXT4_FC_STATUS_SKIPPED, 0, 0,
1223                                 commit_tid);
1224                 return 0;
1225         } else if (ret) {
1226                 /*
1227                  * Commit couldn't start. Just update stats and perform a
1228                  * full commit.
1229                  */
1230                 ext4_fc_update_stats(sb, EXT4_FC_STATUS_FAILED, 0, 0,
1231                                 commit_tid);
1232                 return jbd2_complete_transaction(journal, commit_tid);
1233         }
1234
1235         /*
1236          * After establishing journal barrier via jbd2_fc_begin_commit(), check
1237          * if we are fast commit ineligible.
1238          */
1239         if (ext4_test_mount_flag(sb, EXT4_MF_FC_INELIGIBLE)) {
1240                 status = EXT4_FC_STATUS_INELIGIBLE;
1241                 goto fallback;
1242         }
1243
1244         fc_bufs_before = (sbi->s_fc_bytes + bsize - 1) / bsize;
1245         ret = ext4_fc_perform_commit(journal);
1246         if (ret < 0) {
1247                 status = EXT4_FC_STATUS_FAILED;
1248                 goto fallback;
1249         }
1250         nblks = (sbi->s_fc_bytes + bsize - 1) / bsize - fc_bufs_before;
1251         ret = jbd2_fc_wait_bufs(journal, nblks);
1252         if (ret < 0) {
1253                 status = EXT4_FC_STATUS_FAILED;
1254                 goto fallback;
1255         }
1256         atomic_inc(&sbi->s_fc_subtid);
1257         ret = jbd2_fc_end_commit(journal);
1258         /*
1259          * weight the commit time higher than the average time so we
1260          * don't react too strongly to vast changes in the commit time
1261          */
1262         commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
1263         ext4_fc_update_stats(sb, status, commit_time, nblks, commit_tid);
1264         return ret;
1265
1266 fallback:
1267         ret = jbd2_fc_end_commit_fallback(journal);
1268         ext4_fc_update_stats(sb, status, 0, 0, commit_tid);
1269         return ret;
1270 }
1271
1272 /*
1273  * Fast commit cleanup routine. This is called after every fast commit and
1274  * full commit. full is true if we are called after a full commit.
1275  */
1276 static void ext4_fc_cleanup(journal_t *journal, int full, tid_t tid)
1277 {
1278         struct super_block *sb = journal->j_private;
1279         struct ext4_sb_info *sbi = EXT4_SB(sb);
1280         struct ext4_inode_info *iter, *iter_n;
1281         struct ext4_fc_dentry_update *fc_dentry;
1282
1283         if (full && sbi->s_fc_bh)
1284                 sbi->s_fc_bh = NULL;
1285
1286         trace_ext4_fc_cleanup(journal, full, tid);
1287         jbd2_fc_release_bufs(journal);
1288
1289         spin_lock(&sbi->s_fc_lock);
1290         list_for_each_entry_safe(iter, iter_n, &sbi->s_fc_q[FC_Q_MAIN],
1291                                  i_fc_list) {
1292                 list_del_init(&iter->i_fc_list);
1293                 ext4_clear_inode_state(&iter->vfs_inode,
1294                                        EXT4_STATE_FC_COMMITTING);
1295                 if (iter->i_sync_tid <= tid)
1296                         ext4_fc_reset_inode(&iter->vfs_inode);
1297                 /* Make sure EXT4_STATE_FC_COMMITTING bit is clear */
1298                 smp_mb();
1299 #if (BITS_PER_LONG < 64)
1300                 wake_up_bit(&iter->i_state_flags, EXT4_STATE_FC_COMMITTING);
1301 #else
1302                 wake_up_bit(&iter->i_flags, EXT4_STATE_FC_COMMITTING);
1303 #endif
1304         }
1305
1306         while (!list_empty(&sbi->s_fc_dentry_q[FC_Q_MAIN])) {
1307                 fc_dentry = list_first_entry(&sbi->s_fc_dentry_q[FC_Q_MAIN],
1308                                              struct ext4_fc_dentry_update,
1309                                              fcd_list);
1310                 list_del_init(&fc_dentry->fcd_list);
1311                 list_del_init(&fc_dentry->fcd_dilist);
1312                 spin_unlock(&sbi->s_fc_lock);
1313
1314                 if (fc_dentry->fcd_name.name &&
1315                         fc_dentry->fcd_name.len > DNAME_INLINE_LEN)
1316                         kfree(fc_dentry->fcd_name.name);
1317                 kmem_cache_free(ext4_fc_dentry_cachep, fc_dentry);
1318                 spin_lock(&sbi->s_fc_lock);
1319         }
1320
1321         list_splice_init(&sbi->s_fc_dentry_q[FC_Q_STAGING],
1322                                 &sbi->s_fc_dentry_q[FC_Q_MAIN]);
1323         list_splice_init(&sbi->s_fc_q[FC_Q_STAGING],
1324                                 &sbi->s_fc_q[FC_Q_MAIN]);
1325
1326         if (tid >= sbi->s_fc_ineligible_tid) {
1327                 sbi->s_fc_ineligible_tid = 0;
1328                 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
1329         }
1330
1331         if (full)
1332                 sbi->s_fc_bytes = 0;
1333         spin_unlock(&sbi->s_fc_lock);
1334         trace_ext4_fc_stats(sb);
1335 }
1336
1337 /* Ext4 Replay Path Routines */
1338
1339 /* Helper struct for dentry replay routines */
1340 struct dentry_info_args {
1341         int parent_ino, dname_len, ino, inode_len;
1342         char *dname;
1343 };
1344
1345 static inline void tl_to_darg(struct dentry_info_args *darg,
1346                               struct  ext4_fc_tl *tl, u8 *val)
1347 {
1348         struct ext4_fc_dentry_info fcd;
1349
1350         memcpy(&fcd, val, sizeof(fcd));
1351
1352         darg->parent_ino = le32_to_cpu(fcd.fc_parent_ino);
1353         darg->ino = le32_to_cpu(fcd.fc_ino);
1354         darg->dname = val + offsetof(struct ext4_fc_dentry_info, fc_dname);
1355         darg->dname_len = le16_to_cpu(tl->fc_len) -
1356                 sizeof(struct ext4_fc_dentry_info);
1357 }
1358
1359 /* Unlink replay function */
1360 static int ext4_fc_replay_unlink(struct super_block *sb, struct ext4_fc_tl *tl,
1361                                  u8 *val)
1362 {
1363         struct inode *inode, *old_parent;
1364         struct qstr entry;
1365         struct dentry_info_args darg;
1366         int ret = 0;
1367
1368         tl_to_darg(&darg, tl, val);
1369
1370         trace_ext4_fc_replay(sb, EXT4_FC_TAG_UNLINK, darg.ino,
1371                         darg.parent_ino, darg.dname_len);
1372
1373         entry.name = darg.dname;
1374         entry.len = darg.dname_len;
1375         inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL);
1376
1377         if (IS_ERR(inode)) {
1378                 jbd_debug(1, "Inode %d not found", darg.ino);
1379                 return 0;
1380         }
1381
1382         old_parent = ext4_iget(sb, darg.parent_ino,
1383                                 EXT4_IGET_NORMAL);
1384         if (IS_ERR(old_parent)) {
1385                 jbd_debug(1, "Dir with inode  %d not found", darg.parent_ino);
1386                 iput(inode);
1387                 return 0;
1388         }
1389
1390         ret = __ext4_unlink(NULL, old_parent, &entry, inode);
1391         /* -ENOENT ok coz it might not exist anymore. */
1392         if (ret == -ENOENT)
1393                 ret = 0;
1394         iput(old_parent);
1395         iput(inode);
1396         return ret;
1397 }
1398
1399 static int ext4_fc_replay_link_internal(struct super_block *sb,
1400                                 struct dentry_info_args *darg,
1401                                 struct inode *inode)
1402 {
1403         struct inode *dir = NULL;
1404         struct dentry *dentry_dir = NULL, *dentry_inode = NULL;
1405         struct qstr qstr_dname = QSTR_INIT(darg->dname, darg->dname_len);
1406         int ret = 0;
1407
1408         dir = ext4_iget(sb, darg->parent_ino, EXT4_IGET_NORMAL);
1409         if (IS_ERR(dir)) {
1410                 jbd_debug(1, "Dir with inode %d not found.", darg->parent_ino);
1411                 dir = NULL;
1412                 goto out;
1413         }
1414
1415         dentry_dir = d_obtain_alias(dir);
1416         if (IS_ERR(dentry_dir)) {
1417                 jbd_debug(1, "Failed to obtain dentry");
1418                 dentry_dir = NULL;
1419                 goto out;
1420         }
1421
1422         dentry_inode = d_alloc(dentry_dir, &qstr_dname);
1423         if (!dentry_inode) {
1424                 jbd_debug(1, "Inode dentry not created.");
1425                 ret = -ENOMEM;
1426                 goto out;
1427         }
1428
1429         ret = __ext4_link(dir, inode, dentry_inode);
1430         /*
1431          * It's possible that link already existed since data blocks
1432          * for the dir in question got persisted before we crashed OR
1433          * we replayed this tag and crashed before the entire replay
1434          * could complete.
1435          */
1436         if (ret && ret != -EEXIST) {
1437                 jbd_debug(1, "Failed to link\n");
1438                 goto out;
1439         }
1440
1441         ret = 0;
1442 out:
1443         if (dentry_dir) {
1444                 d_drop(dentry_dir);
1445                 dput(dentry_dir);
1446         } else if (dir) {
1447                 iput(dir);
1448         }
1449         if (dentry_inode) {
1450                 d_drop(dentry_inode);
1451                 dput(dentry_inode);
1452         }
1453
1454         return ret;
1455 }
1456
1457 /* Link replay function */
1458 static int ext4_fc_replay_link(struct super_block *sb, struct ext4_fc_tl *tl,
1459                                u8 *val)
1460 {
1461         struct inode *inode;
1462         struct dentry_info_args darg;
1463         int ret = 0;
1464
1465         tl_to_darg(&darg, tl, val);
1466         trace_ext4_fc_replay(sb, EXT4_FC_TAG_LINK, darg.ino,
1467                         darg.parent_ino, darg.dname_len);
1468
1469         inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL);
1470         if (IS_ERR(inode)) {
1471                 jbd_debug(1, "Inode not found.");
1472                 return 0;
1473         }
1474
1475         ret = ext4_fc_replay_link_internal(sb, &darg, inode);
1476         iput(inode);
1477         return ret;
1478 }
1479
1480 /*
1481  * Record all the modified inodes during replay. We use this later to setup
1482  * block bitmaps correctly.
1483  */
1484 static int ext4_fc_record_modified_inode(struct super_block *sb, int ino)
1485 {
1486         struct ext4_fc_replay_state *state;
1487         int i;
1488
1489         state = &EXT4_SB(sb)->s_fc_replay_state;
1490         for (i = 0; i < state->fc_modified_inodes_used; i++)
1491                 if (state->fc_modified_inodes[i] == ino)
1492                         return 0;
1493         if (state->fc_modified_inodes_used == state->fc_modified_inodes_size) {
1494                 state->fc_modified_inodes = krealloc(
1495                                 state->fc_modified_inodes,
1496                                 sizeof(int) * (state->fc_modified_inodes_size +
1497                                 EXT4_FC_REPLAY_REALLOC_INCREMENT),
1498                                 GFP_KERNEL);
1499                 if (!state->fc_modified_inodes)
1500                         return -ENOMEM;
1501                 state->fc_modified_inodes_size +=
1502                         EXT4_FC_REPLAY_REALLOC_INCREMENT;
1503         }
1504         state->fc_modified_inodes[state->fc_modified_inodes_used++] = ino;
1505         return 0;
1506 }
1507
1508 /*
1509  * Inode replay function
1510  */
1511 static int ext4_fc_replay_inode(struct super_block *sb, struct ext4_fc_tl *tl,
1512                                 u8 *val)
1513 {
1514         struct ext4_fc_inode fc_inode;
1515         struct ext4_inode *raw_inode;
1516         struct ext4_inode *raw_fc_inode;
1517         struct inode *inode = NULL;
1518         struct ext4_iloc iloc;
1519         int inode_len, ino, ret, tag = le16_to_cpu(tl->fc_tag);
1520         struct ext4_extent_header *eh;
1521
1522         memcpy(&fc_inode, val, sizeof(fc_inode));
1523
1524         ino = le32_to_cpu(fc_inode.fc_ino);
1525         trace_ext4_fc_replay(sb, tag, ino, 0, 0);
1526
1527         inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL);
1528         if (!IS_ERR(inode)) {
1529                 ext4_ext_clear_bb(inode);
1530                 iput(inode);
1531         }
1532         inode = NULL;
1533
1534         ret = ext4_fc_record_modified_inode(sb, ino);
1535         if (ret)
1536                 goto out;
1537
1538         raw_fc_inode = (struct ext4_inode *)
1539                 (val + offsetof(struct ext4_fc_inode, fc_raw_inode));
1540         ret = ext4_get_fc_inode_loc(sb, ino, &iloc);
1541         if (ret)
1542                 goto out;
1543
1544         inode_len = le16_to_cpu(tl->fc_len) - sizeof(struct ext4_fc_inode);
1545         raw_inode = ext4_raw_inode(&iloc);
1546
1547         memcpy(raw_inode, raw_fc_inode, offsetof(struct ext4_inode, i_block));
1548         memcpy(&raw_inode->i_generation, &raw_fc_inode->i_generation,
1549                 inode_len - offsetof(struct ext4_inode, i_generation));
1550         if (le32_to_cpu(raw_inode->i_flags) & EXT4_EXTENTS_FL) {
1551                 eh = (struct ext4_extent_header *)(&raw_inode->i_block[0]);
1552                 if (eh->eh_magic != EXT4_EXT_MAGIC) {
1553                         memset(eh, 0, sizeof(*eh));
1554                         eh->eh_magic = EXT4_EXT_MAGIC;
1555                         eh->eh_max = cpu_to_le16(
1556                                 (sizeof(raw_inode->i_block) -
1557                                  sizeof(struct ext4_extent_header))
1558                                  / sizeof(struct ext4_extent));
1559                 }
1560         } else if (le32_to_cpu(raw_inode->i_flags) & EXT4_INLINE_DATA_FL) {
1561                 memcpy(raw_inode->i_block, raw_fc_inode->i_block,
1562                         sizeof(raw_inode->i_block));
1563         }
1564
1565         /* Immediately update the inode on disk. */
1566         ret = ext4_handle_dirty_metadata(NULL, NULL, iloc.bh);
1567         if (ret)
1568                 goto out;
1569         ret = sync_dirty_buffer(iloc.bh);
1570         if (ret)
1571                 goto out;
1572         ret = ext4_mark_inode_used(sb, ino);
1573         if (ret)
1574                 goto out;
1575
1576         /* Given that we just wrote the inode on disk, this SHOULD succeed. */
1577         inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL);
1578         if (IS_ERR(inode)) {
1579                 jbd_debug(1, "Inode not found.");
1580                 return -EFSCORRUPTED;
1581         }
1582
1583         /*
1584          * Our allocator could have made different decisions than before
1585          * crashing. This should be fixed but until then, we calculate
1586          * the number of blocks the inode.
1587          */
1588         if (!ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA))
1589                 ext4_ext_replay_set_iblocks(inode);
1590
1591         inode->i_generation = le32_to_cpu(ext4_raw_inode(&iloc)->i_generation);
1592         ext4_reset_inode_seed(inode);
1593
1594         ext4_inode_csum_set(inode, ext4_raw_inode(&iloc), EXT4_I(inode));
1595         ret = ext4_handle_dirty_metadata(NULL, NULL, iloc.bh);
1596         sync_dirty_buffer(iloc.bh);
1597         brelse(iloc.bh);
1598 out:
1599         iput(inode);
1600         if (!ret)
1601                 blkdev_issue_flush(sb->s_bdev);
1602
1603         return 0;
1604 }
1605
1606 /*
1607  * Dentry create replay function.
1608  *
1609  * EXT4_FC_TAG_CREAT is preceded by EXT4_FC_TAG_INODE_FULL. Which means, the
1610  * inode for which we are trying to create a dentry here, should already have
1611  * been replayed before we start here.
1612  */
1613 static int ext4_fc_replay_create(struct super_block *sb, struct ext4_fc_tl *tl,
1614                                  u8 *val)
1615 {
1616         int ret = 0;
1617         struct inode *inode = NULL;
1618         struct inode *dir = NULL;
1619         struct dentry_info_args darg;
1620
1621         tl_to_darg(&darg, tl, val);
1622
1623         trace_ext4_fc_replay(sb, EXT4_FC_TAG_CREAT, darg.ino,
1624                         darg.parent_ino, darg.dname_len);
1625
1626         /* This takes care of update group descriptor and other metadata */
1627         ret = ext4_mark_inode_used(sb, darg.ino);
1628         if (ret)
1629                 goto out;
1630
1631         inode = ext4_iget(sb, darg.ino, EXT4_IGET_NORMAL);
1632         if (IS_ERR(inode)) {
1633                 jbd_debug(1, "inode %d not found.", darg.ino);
1634                 inode = NULL;
1635                 ret = -EINVAL;
1636                 goto out;
1637         }
1638
1639         if (S_ISDIR(inode->i_mode)) {
1640                 /*
1641                  * If we are creating a directory, we need to make sure that the
1642                  * dot and dot dot dirents are setup properly.
1643                  */
1644                 dir = ext4_iget(sb, darg.parent_ino, EXT4_IGET_NORMAL);
1645                 if (IS_ERR(dir)) {
1646                         jbd_debug(1, "Dir %d not found.", darg.ino);
1647                         goto out;
1648                 }
1649                 ret = ext4_init_new_dir(NULL, dir, inode);
1650                 iput(dir);
1651                 if (ret) {
1652                         ret = 0;
1653                         goto out;
1654                 }
1655         }
1656         ret = ext4_fc_replay_link_internal(sb, &darg, inode);
1657         if (ret)
1658                 goto out;
1659         set_nlink(inode, 1);
1660         ext4_mark_inode_dirty(NULL, inode);
1661 out:
1662         if (inode)
1663                 iput(inode);
1664         return ret;
1665 }
1666
1667 /*
1668  * Record physical disk regions which are in use as per fast commit area,
1669  * and used by inodes during replay phase. Our simple replay phase
1670  * allocator excludes these regions from allocation.
1671  */
1672 int ext4_fc_record_regions(struct super_block *sb, int ino,
1673                 ext4_lblk_t lblk, ext4_fsblk_t pblk, int len, int replay)
1674 {
1675         struct ext4_fc_replay_state *state;
1676         struct ext4_fc_alloc_region *region;
1677
1678         state = &EXT4_SB(sb)->s_fc_replay_state;
1679         /*
1680          * during replay phase, the fc_regions_valid may not same as
1681          * fc_regions_used, update it when do new additions.
1682          */
1683         if (replay && state->fc_regions_used != state->fc_regions_valid)
1684                 state->fc_regions_used = state->fc_regions_valid;
1685         if (state->fc_regions_used == state->fc_regions_size) {
1686                 state->fc_regions_size +=
1687                         EXT4_FC_REPLAY_REALLOC_INCREMENT;
1688                 state->fc_regions = krealloc(
1689                                         state->fc_regions,
1690                                         state->fc_regions_size *
1691                                         sizeof(struct ext4_fc_alloc_region),
1692                                         GFP_KERNEL);
1693                 if (!state->fc_regions)
1694                         return -ENOMEM;
1695         }
1696         region = &state->fc_regions[state->fc_regions_used++];
1697         region->ino = ino;
1698         region->lblk = lblk;
1699         region->pblk = pblk;
1700         region->len = len;
1701
1702         if (replay)
1703                 state->fc_regions_valid++;
1704
1705         return 0;
1706 }
1707
1708 /* Replay add range tag */
1709 static int ext4_fc_replay_add_range(struct super_block *sb,
1710                                     struct ext4_fc_tl *tl, u8 *val)
1711 {
1712         struct ext4_fc_add_range fc_add_ex;
1713         struct ext4_extent newex, *ex;
1714         struct inode *inode;
1715         ext4_lblk_t start, cur;
1716         int remaining, len;
1717         ext4_fsblk_t start_pblk;
1718         struct ext4_map_blocks map;
1719         struct ext4_ext_path *path = NULL;
1720         int ret;
1721
1722         memcpy(&fc_add_ex, val, sizeof(fc_add_ex));
1723         ex = (struct ext4_extent *)&fc_add_ex.fc_ex;
1724
1725         trace_ext4_fc_replay(sb, EXT4_FC_TAG_ADD_RANGE,
1726                 le32_to_cpu(fc_add_ex.fc_ino), le32_to_cpu(ex->ee_block),
1727                 ext4_ext_get_actual_len(ex));
1728
1729         inode = ext4_iget(sb, le32_to_cpu(fc_add_ex.fc_ino), EXT4_IGET_NORMAL);
1730         if (IS_ERR(inode)) {
1731                 jbd_debug(1, "Inode not found.");
1732                 return 0;
1733         }
1734
1735         ret = ext4_fc_record_modified_inode(sb, inode->i_ino);
1736         if (ret)
1737                 goto out;
1738
1739         start = le32_to_cpu(ex->ee_block);
1740         start_pblk = ext4_ext_pblock(ex);
1741         len = ext4_ext_get_actual_len(ex);
1742
1743         cur = start;
1744         remaining = len;
1745         jbd_debug(1, "ADD_RANGE, lblk %d, pblk %lld, len %d, unwritten %d, inode %ld\n",
1746                   start, start_pblk, len, ext4_ext_is_unwritten(ex),
1747                   inode->i_ino);
1748
1749         while (remaining > 0) {
1750                 map.m_lblk = cur;
1751                 map.m_len = remaining;
1752                 map.m_pblk = 0;
1753                 ret = ext4_map_blocks(NULL, inode, &map, 0);
1754
1755                 if (ret < 0)
1756                         goto out;
1757
1758                 if (ret == 0) {
1759                         /* Range is not mapped */
1760                         path = ext4_find_extent(inode, cur, NULL, 0);
1761                         if (IS_ERR(path))
1762                                 goto out;
1763                         memset(&newex, 0, sizeof(newex));
1764                         newex.ee_block = cpu_to_le32(cur);
1765                         ext4_ext_store_pblock(
1766                                 &newex, start_pblk + cur - start);
1767                         newex.ee_len = cpu_to_le16(map.m_len);
1768                         if (ext4_ext_is_unwritten(ex))
1769                                 ext4_ext_mark_unwritten(&newex);
1770                         down_write(&EXT4_I(inode)->i_data_sem);
1771                         ret = ext4_ext_insert_extent(
1772                                 NULL, inode, &path, &newex, 0);
1773                         up_write((&EXT4_I(inode)->i_data_sem));
1774                         ext4_ext_drop_refs(path);
1775                         kfree(path);
1776                         if (ret)
1777                                 goto out;
1778                         goto next;
1779                 }
1780
1781                 if (start_pblk + cur - start != map.m_pblk) {
1782                         /*
1783                          * Logical to physical mapping changed. This can happen
1784                          * if this range was removed and then reallocated to
1785                          * map to new physical blocks during a fast commit.
1786                          */
1787                         ret = ext4_ext_replay_update_ex(inode, cur, map.m_len,
1788                                         ext4_ext_is_unwritten(ex),
1789                                         start_pblk + cur - start);
1790                         if (ret)
1791                                 goto out;
1792                         /*
1793                          * Mark the old blocks as free since they aren't used
1794                          * anymore. We maintain an array of all the modified
1795                          * inodes. In case these blocks are still used at either
1796                          * a different logical range in the same inode or in
1797                          * some different inode, we will mark them as allocated
1798                          * at the end of the FC replay using our array of
1799                          * modified inodes.
1800                          */
1801                         ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0);
1802                         goto next;
1803                 }
1804
1805                 /* Range is mapped and needs a state change */
1806                 jbd_debug(1, "Converting from %ld to %d %lld",
1807                                 map.m_flags & EXT4_MAP_UNWRITTEN,
1808                         ext4_ext_is_unwritten(ex), map.m_pblk);
1809                 ret = ext4_ext_replay_update_ex(inode, cur, map.m_len,
1810                                         ext4_ext_is_unwritten(ex), map.m_pblk);
1811                 if (ret)
1812                         goto out;
1813                 /*
1814                  * We may have split the extent tree while toggling the state.
1815                  * Try to shrink the extent tree now.
1816                  */
1817                 ext4_ext_replay_shrink_inode(inode, start + len);
1818 next:
1819                 cur += map.m_len;
1820                 remaining -= map.m_len;
1821         }
1822         ext4_ext_replay_shrink_inode(inode, i_size_read(inode) >>
1823                                         sb->s_blocksize_bits);
1824 out:
1825         iput(inode);
1826         return 0;
1827 }
1828
1829 /* Replay DEL_RANGE tag */
1830 static int
1831 ext4_fc_replay_del_range(struct super_block *sb, struct ext4_fc_tl *tl,
1832                          u8 *val)
1833 {
1834         struct inode *inode;
1835         struct ext4_fc_del_range lrange;
1836         struct ext4_map_blocks map;
1837         ext4_lblk_t cur, remaining;
1838         int ret;
1839
1840         memcpy(&lrange, val, sizeof(lrange));
1841         cur = le32_to_cpu(lrange.fc_lblk);
1842         remaining = le32_to_cpu(lrange.fc_len);
1843
1844         trace_ext4_fc_replay(sb, EXT4_FC_TAG_DEL_RANGE,
1845                 le32_to_cpu(lrange.fc_ino), cur, remaining);
1846
1847         inode = ext4_iget(sb, le32_to_cpu(lrange.fc_ino), EXT4_IGET_NORMAL);
1848         if (IS_ERR(inode)) {
1849                 jbd_debug(1, "Inode %d not found", le32_to_cpu(lrange.fc_ino));
1850                 return 0;
1851         }
1852
1853         ret = ext4_fc_record_modified_inode(sb, inode->i_ino);
1854         if (ret)
1855                 goto out;
1856
1857         jbd_debug(1, "DEL_RANGE, inode %ld, lblk %d, len %d\n",
1858                         inode->i_ino, le32_to_cpu(lrange.fc_lblk),
1859                         le32_to_cpu(lrange.fc_len));
1860         while (remaining > 0) {
1861                 map.m_lblk = cur;
1862                 map.m_len = remaining;
1863
1864                 ret = ext4_map_blocks(NULL, inode, &map, 0);
1865                 if (ret < 0)
1866                         goto out;
1867                 if (ret > 0) {
1868                         remaining -= ret;
1869                         cur += ret;
1870                         ext4_mb_mark_bb(inode->i_sb, map.m_pblk, map.m_len, 0);
1871                 } else {
1872                         remaining -= map.m_len;
1873                         cur += map.m_len;
1874                 }
1875         }
1876
1877         down_write(&EXT4_I(inode)->i_data_sem);
1878         ret = ext4_ext_remove_space(inode, le32_to_cpu(lrange.fc_lblk),
1879                                 le32_to_cpu(lrange.fc_lblk) +
1880                                 le32_to_cpu(lrange.fc_len) - 1);
1881         up_write(&EXT4_I(inode)->i_data_sem);
1882         if (ret)
1883                 goto out;
1884         ext4_ext_replay_shrink_inode(inode,
1885                 i_size_read(inode) >> sb->s_blocksize_bits);
1886         ext4_mark_inode_dirty(NULL, inode);
1887 out:
1888         iput(inode);
1889         return 0;
1890 }
1891
1892 static void ext4_fc_set_bitmaps_and_counters(struct super_block *sb)
1893 {
1894         struct ext4_fc_replay_state *state;
1895         struct inode *inode;
1896         struct ext4_ext_path *path = NULL;
1897         struct ext4_map_blocks map;
1898         int i, ret, j;
1899         ext4_lblk_t cur, end;
1900
1901         state = &EXT4_SB(sb)->s_fc_replay_state;
1902         for (i = 0; i < state->fc_modified_inodes_used; i++) {
1903                 inode = ext4_iget(sb, state->fc_modified_inodes[i],
1904                         EXT4_IGET_NORMAL);
1905                 if (IS_ERR(inode)) {
1906                         jbd_debug(1, "Inode %d not found.",
1907                                 state->fc_modified_inodes[i]);
1908                         continue;
1909                 }
1910                 cur = 0;
1911                 end = EXT_MAX_BLOCKS;
1912                 if (ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA)) {
1913                         iput(inode);
1914                         continue;
1915                 }
1916                 while (cur < end) {
1917                         map.m_lblk = cur;
1918                         map.m_len = end - cur;
1919
1920                         ret = ext4_map_blocks(NULL, inode, &map, 0);
1921                         if (ret < 0)
1922                                 break;
1923
1924                         if (ret > 0) {
1925                                 path = ext4_find_extent(inode, map.m_lblk, NULL, 0);
1926                                 if (!IS_ERR(path)) {
1927                                         for (j = 0; j < path->p_depth; j++)
1928                                                 ext4_mb_mark_bb(inode->i_sb,
1929                                                         path[j].p_block, 1, 1);
1930                                         ext4_ext_drop_refs(path);
1931                                         kfree(path);
1932                                 }
1933                                 cur += ret;
1934                                 ext4_mb_mark_bb(inode->i_sb, map.m_pblk,
1935                                                         map.m_len, 1);
1936                         } else {
1937                                 cur = cur + (map.m_len ? map.m_len : 1);
1938                         }
1939                 }
1940                 iput(inode);
1941         }
1942 }
1943
1944 /*
1945  * Check if block is in excluded regions for block allocation. The simple
1946  * allocator that runs during replay phase is calls this function to see
1947  * if it is okay to use a block.
1948  */
1949 bool ext4_fc_replay_check_excluded(struct super_block *sb, ext4_fsblk_t blk)
1950 {
1951         int i;
1952         struct ext4_fc_replay_state *state;
1953
1954         state = &EXT4_SB(sb)->s_fc_replay_state;
1955         for (i = 0; i < state->fc_regions_valid; i++) {
1956                 if (state->fc_regions[i].ino == 0 ||
1957                         state->fc_regions[i].len == 0)
1958                         continue;
1959                 if (in_range(blk, state->fc_regions[i].pblk,
1960                                         state->fc_regions[i].len))
1961                         return true;
1962         }
1963         return false;
1964 }
1965
1966 /* Cleanup function called after replay */
1967 void ext4_fc_replay_cleanup(struct super_block *sb)
1968 {
1969         struct ext4_sb_info *sbi = EXT4_SB(sb);
1970
1971         sbi->s_mount_state &= ~EXT4_FC_REPLAY;
1972         kfree(sbi->s_fc_replay_state.fc_regions);
1973         kfree(sbi->s_fc_replay_state.fc_modified_inodes);
1974 }
1975
1976 /*
1977  * Recovery Scan phase handler
1978  *
1979  * This function is called during the scan phase and is responsible
1980  * for doing following things:
1981  * - Make sure the fast commit area has valid tags for replay
1982  * - Count number of tags that need to be replayed by the replay handler
1983  * - Verify CRC
1984  * - Create a list of excluded blocks for allocation during replay phase
1985  *
1986  * This function returns JBD2_FC_REPLAY_CONTINUE to indicate that SCAN is
1987  * incomplete and JBD2 should send more blocks. It returns JBD2_FC_REPLAY_STOP
1988  * to indicate that scan has finished and JBD2 can now start replay phase.
1989  * It returns a negative error to indicate that there was an error. At the end
1990  * of a successful scan phase, sbi->s_fc_replay_state.fc_replay_num_tags is set
1991  * to indicate the number of tags that need to replayed during the replay phase.
1992  */
1993 static int ext4_fc_replay_scan(journal_t *journal,
1994                                 struct buffer_head *bh, int off,
1995                                 tid_t expected_tid)
1996 {
1997         struct super_block *sb = journal->j_private;
1998         struct ext4_sb_info *sbi = EXT4_SB(sb);
1999         struct ext4_fc_replay_state *state;
2000         int ret = JBD2_FC_REPLAY_CONTINUE;
2001         struct ext4_fc_add_range ext;
2002         struct ext4_fc_tl tl;
2003         struct ext4_fc_tail tail;
2004         __u8 *start, *end, *cur, *val;
2005         struct ext4_fc_head head;
2006         struct ext4_extent *ex;
2007
2008         state = &sbi->s_fc_replay_state;
2009
2010         start = (u8 *)bh->b_data;
2011         end = (__u8 *)bh->b_data + journal->j_blocksize - 1;
2012
2013         if (state->fc_replay_expected_off == 0) {
2014                 state->fc_cur_tag = 0;
2015                 state->fc_replay_num_tags = 0;
2016                 state->fc_crc = 0;
2017                 state->fc_regions = NULL;
2018                 state->fc_regions_valid = state->fc_regions_used =
2019                         state->fc_regions_size = 0;
2020                 /* Check if we can stop early */
2021                 if (le16_to_cpu(((struct ext4_fc_tl *)start)->fc_tag)
2022                         != EXT4_FC_TAG_HEAD)
2023                         return 0;
2024         }
2025
2026         if (off != state->fc_replay_expected_off) {
2027                 ret = -EFSCORRUPTED;
2028                 goto out_err;
2029         }
2030
2031         state->fc_replay_expected_off++;
2032         for (cur = start; cur < end; cur = cur + sizeof(tl) + le16_to_cpu(tl.fc_len)) {
2033                 memcpy(&tl, cur, sizeof(tl));
2034                 val = cur + sizeof(tl);
2035                 jbd_debug(3, "Scan phase, tag:%s, blk %lld\n",
2036                           tag2str(le16_to_cpu(tl.fc_tag)), bh->b_blocknr);
2037                 switch (le16_to_cpu(tl.fc_tag)) {
2038                 case EXT4_FC_TAG_ADD_RANGE:
2039                         memcpy(&ext, val, sizeof(ext));
2040                         ex = (struct ext4_extent *)&ext.fc_ex;
2041                         ret = ext4_fc_record_regions(sb,
2042                                 le32_to_cpu(ext.fc_ino),
2043                                 le32_to_cpu(ex->ee_block), ext4_ext_pblock(ex),
2044                                 ext4_ext_get_actual_len(ex), 0);
2045                         if (ret < 0)
2046                                 break;
2047                         ret = JBD2_FC_REPLAY_CONTINUE;
2048                         fallthrough;
2049                 case EXT4_FC_TAG_DEL_RANGE:
2050                 case EXT4_FC_TAG_LINK:
2051                 case EXT4_FC_TAG_UNLINK:
2052                 case EXT4_FC_TAG_CREAT:
2053                 case EXT4_FC_TAG_INODE:
2054                 case EXT4_FC_TAG_PAD:
2055                         state->fc_cur_tag++;
2056                         state->fc_crc = ext4_chksum(sbi, state->fc_crc, cur,
2057                                         sizeof(tl) + le16_to_cpu(tl.fc_len));
2058                         break;
2059                 case EXT4_FC_TAG_TAIL:
2060                         state->fc_cur_tag++;
2061                         memcpy(&tail, val, sizeof(tail));
2062                         state->fc_crc = ext4_chksum(sbi, state->fc_crc, cur,
2063                                                 sizeof(tl) +
2064                                                 offsetof(struct ext4_fc_tail,
2065                                                 fc_crc));
2066                         if (le32_to_cpu(tail.fc_tid) == expected_tid &&
2067                                 le32_to_cpu(tail.fc_crc) == state->fc_crc) {
2068                                 state->fc_replay_num_tags = state->fc_cur_tag;
2069                                 state->fc_regions_valid =
2070                                         state->fc_regions_used;
2071                         } else {
2072                                 ret = state->fc_replay_num_tags ?
2073                                         JBD2_FC_REPLAY_STOP : -EFSBADCRC;
2074                         }
2075                         state->fc_crc = 0;
2076                         break;
2077                 case EXT4_FC_TAG_HEAD:
2078                         memcpy(&head, val, sizeof(head));
2079                         if (le32_to_cpu(head.fc_features) &
2080                                 ~EXT4_FC_SUPPORTED_FEATURES) {
2081                                 ret = -EOPNOTSUPP;
2082                                 break;
2083                         }
2084                         if (le32_to_cpu(head.fc_tid) != expected_tid) {
2085                                 ret = JBD2_FC_REPLAY_STOP;
2086                                 break;
2087                         }
2088                         state->fc_cur_tag++;
2089                         state->fc_crc = ext4_chksum(sbi, state->fc_crc, cur,
2090                                             sizeof(tl) + le16_to_cpu(tl.fc_len));
2091                         break;
2092                 default:
2093                         ret = state->fc_replay_num_tags ?
2094                                 JBD2_FC_REPLAY_STOP : -ECANCELED;
2095                 }
2096                 if (ret < 0 || ret == JBD2_FC_REPLAY_STOP)
2097                         break;
2098         }
2099
2100 out_err:
2101         trace_ext4_fc_replay_scan(sb, ret, off);
2102         return ret;
2103 }
2104
2105 /*
2106  * Main recovery path entry point.
2107  * The meaning of return codes is similar as above.
2108  */
2109 static int ext4_fc_replay(journal_t *journal, struct buffer_head *bh,
2110                                 enum passtype pass, int off, tid_t expected_tid)
2111 {
2112         struct super_block *sb = journal->j_private;
2113         struct ext4_sb_info *sbi = EXT4_SB(sb);
2114         struct ext4_fc_tl tl;
2115         __u8 *start, *end, *cur, *val;
2116         int ret = JBD2_FC_REPLAY_CONTINUE;
2117         struct ext4_fc_replay_state *state = &sbi->s_fc_replay_state;
2118         struct ext4_fc_tail tail;
2119
2120         if (pass == PASS_SCAN) {
2121                 state->fc_current_pass = PASS_SCAN;
2122                 return ext4_fc_replay_scan(journal, bh, off, expected_tid);
2123         }
2124
2125         if (state->fc_current_pass != pass) {
2126                 state->fc_current_pass = pass;
2127                 sbi->s_mount_state |= EXT4_FC_REPLAY;
2128         }
2129         if (!sbi->s_fc_replay_state.fc_replay_num_tags) {
2130                 jbd_debug(1, "Replay stops\n");
2131                 ext4_fc_set_bitmaps_and_counters(sb);
2132                 return 0;
2133         }
2134
2135 #ifdef CONFIG_EXT4_DEBUG
2136         if (sbi->s_fc_debug_max_replay && off >= sbi->s_fc_debug_max_replay) {
2137                 pr_warn("Dropping fc block %d because max_replay set\n", off);
2138                 return JBD2_FC_REPLAY_STOP;
2139         }
2140 #endif
2141
2142         start = (u8 *)bh->b_data;
2143         end = (__u8 *)bh->b_data + journal->j_blocksize - 1;
2144
2145         for (cur = start; cur < end; cur = cur + sizeof(tl) + le16_to_cpu(tl.fc_len)) {
2146                 memcpy(&tl, cur, sizeof(tl));
2147                 val = cur + sizeof(tl);
2148
2149                 if (state->fc_replay_num_tags == 0) {
2150                         ret = JBD2_FC_REPLAY_STOP;
2151                         ext4_fc_set_bitmaps_and_counters(sb);
2152                         break;
2153                 }
2154                 jbd_debug(3, "Replay phase, tag:%s\n",
2155                                 tag2str(le16_to_cpu(tl.fc_tag)));
2156                 state->fc_replay_num_tags--;
2157                 switch (le16_to_cpu(tl.fc_tag)) {
2158                 case EXT4_FC_TAG_LINK:
2159                         ret = ext4_fc_replay_link(sb, &tl, val);
2160                         break;
2161                 case EXT4_FC_TAG_UNLINK:
2162                         ret = ext4_fc_replay_unlink(sb, &tl, val);
2163                         break;
2164                 case EXT4_FC_TAG_ADD_RANGE:
2165                         ret = ext4_fc_replay_add_range(sb, &tl, val);
2166                         break;
2167                 case EXT4_FC_TAG_CREAT:
2168                         ret = ext4_fc_replay_create(sb, &tl, val);
2169                         break;
2170                 case EXT4_FC_TAG_DEL_RANGE:
2171                         ret = ext4_fc_replay_del_range(sb, &tl, val);
2172                         break;
2173                 case EXT4_FC_TAG_INODE:
2174                         ret = ext4_fc_replay_inode(sb, &tl, val);
2175                         break;
2176                 case EXT4_FC_TAG_PAD:
2177                         trace_ext4_fc_replay(sb, EXT4_FC_TAG_PAD, 0,
2178                                              le16_to_cpu(tl.fc_len), 0);
2179                         break;
2180                 case EXT4_FC_TAG_TAIL:
2181                         trace_ext4_fc_replay(sb, EXT4_FC_TAG_TAIL, 0,
2182                                              le16_to_cpu(tl.fc_len), 0);
2183                         memcpy(&tail, val, sizeof(tail));
2184                         WARN_ON(le32_to_cpu(tail.fc_tid) != expected_tid);
2185                         break;
2186                 case EXT4_FC_TAG_HEAD:
2187                         break;
2188                 default:
2189                         trace_ext4_fc_replay(sb, le16_to_cpu(tl.fc_tag), 0,
2190                                              le16_to_cpu(tl.fc_len), 0);
2191                         ret = -ECANCELED;
2192                         break;
2193                 }
2194                 if (ret < 0)
2195                         break;
2196                 ret = JBD2_FC_REPLAY_CONTINUE;
2197         }
2198         return ret;
2199 }
2200
2201 void ext4_fc_init(struct super_block *sb, journal_t *journal)
2202 {
2203         /*
2204          * We set replay callback even if fast commit disabled because we may
2205          * could still have fast commit blocks that need to be replayed even if
2206          * fast commit has now been turned off.
2207          */
2208         journal->j_fc_replay_callback = ext4_fc_replay;
2209         if (!test_opt2(sb, JOURNAL_FAST_COMMIT))
2210                 return;
2211         journal->j_fc_cleanup_callback = ext4_fc_cleanup;
2212 }
2213
2214 static const char *fc_ineligible_reasons[] = {
2215         "Extended attributes changed",
2216         "Cross rename",
2217         "Journal flag changed",
2218         "Insufficient memory",
2219         "Swap boot",
2220         "Resize",
2221         "Dir renamed",
2222         "Falloc range op",
2223         "Data journalling",
2224         "FC Commit Failed"
2225 };
2226
2227 int ext4_fc_info_show(struct seq_file *seq, void *v)
2228 {
2229         struct ext4_sb_info *sbi = EXT4_SB((struct super_block *)seq->private);
2230         struct ext4_fc_stats *stats = &sbi->s_fc_stats;
2231         int i;
2232
2233         if (v != SEQ_START_TOKEN)
2234                 return 0;
2235
2236         seq_printf(seq,
2237                 "fc stats:\n%ld commits\n%ld ineligible\n%ld numblks\n%lluus avg_commit_time\n",
2238                    stats->fc_num_commits, stats->fc_ineligible_commits,
2239                    stats->fc_numblks,
2240                    div_u64(stats->s_fc_avg_commit_time, 1000));
2241         seq_puts(seq, "Ineligible reasons:\n");
2242         for (i = 0; i < EXT4_FC_REASON_MAX; i++)
2243                 seq_printf(seq, "\"%s\":\t%d\n", fc_ineligible_reasons[i],
2244                         stats->fc_ineligible_reason_count[i]);
2245
2246         return 0;
2247 }
2248
2249 int __init ext4_fc_init_dentry_cache(void)
2250 {
2251         ext4_fc_dentry_cachep = KMEM_CACHE(ext4_fc_dentry_update,
2252                                            SLAB_RECLAIM_ACCOUNT);
2253
2254         if (ext4_fc_dentry_cachep == NULL)
2255                 return -ENOMEM;
2256
2257         return 0;
2258 }
2259
2260 void ext4_fc_destroy_dentry_cache(void)
2261 {
2262         kmem_cache_destroy(ext4_fc_dentry_cachep);
2263 }