0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include <linux/module.h>
0023 #include <linux/time.h>
0024 #include <linux/fs.h>
0025 #include <linux/jbd2.h>
0026 #include <linux/errno.h>
0027 #include <linux/slab.h>
0028 #include <linux/init.h>
0029 #include <linux/mm.h>
0030 #include <linux/freezer.h>
0031 #include <linux/pagemap.h>
0032 #include <linux/kthread.h>
0033 #include <linux/poison.h>
0034 #include <linux/proc_fs.h>
0035 #include <linux/seq_file.h>
0036 #include <linux/math64.h>
0037 #include <linux/hash.h>
0038 #include <linux/log2.h>
0039 #include <linux/vmalloc.h>
0040 #include <linux/backing-dev.h>
0041 #include <linux/bitops.h>
0042 #include <linux/ratelimit.h>
0043 #include <linux/sched/mm.h>
0044
0045 #define CREATE_TRACE_POINTS
0046 #include <trace/events/jbd2.h>
0047
0048 #include <linux/uaccess.h>
0049 #include <asm/page.h>
0050
0051 #ifdef CONFIG_JBD2_DEBUG
0052 static ushort jbd2_journal_enable_debug __read_mostly;
0053
0054 module_param_named(jbd2_debug, jbd2_journal_enable_debug, ushort, 0644);
0055 MODULE_PARM_DESC(jbd2_debug, "Debugging level for jbd2");
0056 #endif
0057
0058 EXPORT_SYMBOL(jbd2_journal_extend);
0059 EXPORT_SYMBOL(jbd2_journal_stop);
0060 EXPORT_SYMBOL(jbd2_journal_lock_updates);
0061 EXPORT_SYMBOL(jbd2_journal_unlock_updates);
0062 EXPORT_SYMBOL(jbd2_journal_get_write_access);
0063 EXPORT_SYMBOL(jbd2_journal_get_create_access);
0064 EXPORT_SYMBOL(jbd2_journal_get_undo_access);
0065 EXPORT_SYMBOL(jbd2_journal_set_triggers);
0066 EXPORT_SYMBOL(jbd2_journal_dirty_metadata);
0067 EXPORT_SYMBOL(jbd2_journal_forget);
0068 EXPORT_SYMBOL(jbd2_journal_flush);
0069 EXPORT_SYMBOL(jbd2_journal_revoke);
0070
0071 EXPORT_SYMBOL(jbd2_journal_init_dev);
0072 EXPORT_SYMBOL(jbd2_journal_init_inode);
0073 EXPORT_SYMBOL(jbd2_journal_check_used_features);
0074 EXPORT_SYMBOL(jbd2_journal_check_available_features);
0075 EXPORT_SYMBOL(jbd2_journal_set_features);
0076 EXPORT_SYMBOL(jbd2_journal_load);
0077 EXPORT_SYMBOL(jbd2_journal_destroy);
0078 EXPORT_SYMBOL(jbd2_journal_abort);
0079 EXPORT_SYMBOL(jbd2_journal_errno);
0080 EXPORT_SYMBOL(jbd2_journal_ack_err);
0081 EXPORT_SYMBOL(jbd2_journal_clear_err);
0082 EXPORT_SYMBOL(jbd2_log_wait_commit);
0083 EXPORT_SYMBOL(jbd2_journal_start_commit);
0084 EXPORT_SYMBOL(jbd2_journal_force_commit_nested);
0085 EXPORT_SYMBOL(jbd2_journal_wipe);
0086 EXPORT_SYMBOL(jbd2_journal_blocks_per_page);
0087 EXPORT_SYMBOL(jbd2_journal_invalidate_folio);
0088 EXPORT_SYMBOL(jbd2_journal_try_to_free_buffers);
0089 EXPORT_SYMBOL(jbd2_journal_force_commit);
0090 EXPORT_SYMBOL(jbd2_journal_inode_ranged_write);
0091 EXPORT_SYMBOL(jbd2_journal_inode_ranged_wait);
0092 EXPORT_SYMBOL(jbd2_journal_submit_inode_data_buffers);
0093 EXPORT_SYMBOL(jbd2_journal_finish_inode_data_buffers);
0094 EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
0095 EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
0096 EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
0097 EXPORT_SYMBOL(jbd2_inode_cache);
0098
0099 static int jbd2_journal_create_slab(size_t slab_size);
0100
0101 #ifdef CONFIG_JBD2_DEBUG
0102 void __jbd2_debug(int level, const char *file, const char *func,
0103 unsigned int line, const char *fmt, ...)
0104 {
0105 struct va_format vaf;
0106 va_list args;
0107
0108 if (level > jbd2_journal_enable_debug)
0109 return;
0110 va_start(args, fmt);
0111 vaf.fmt = fmt;
0112 vaf.va = &args;
0113 printk(KERN_DEBUG "%s: (%s, %u): %pV", file, func, line, &vaf);
0114 va_end(args);
0115 }
0116 #endif
0117
0118
0119 static int jbd2_verify_csum_type(journal_t *j, journal_superblock_t *sb)
0120 {
0121 if (!jbd2_journal_has_csum_v2or3_feature(j))
0122 return 1;
0123
0124 return sb->s_checksum_type == JBD2_CRC32C_CHKSUM;
0125 }
0126
0127 static __be32 jbd2_superblock_csum(journal_t *j, journal_superblock_t *sb)
0128 {
0129 __u32 csum;
0130 __be32 old_csum;
0131
0132 old_csum = sb->s_checksum;
0133 sb->s_checksum = 0;
0134 csum = jbd2_chksum(j, ~0, (char *)sb, sizeof(journal_superblock_t));
0135 sb->s_checksum = old_csum;
0136
0137 return cpu_to_be32(csum);
0138 }
0139
0140
0141
0142
0143
0144 static void commit_timeout(struct timer_list *t)
0145 {
0146 journal_t *journal = from_timer(journal, t, j_commit_timer);
0147
0148 wake_up_process(journal->j_task);
0149 }
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169 static int kjournald2(void *arg)
0170 {
0171 journal_t *journal = arg;
0172 transaction_t *transaction;
0173
0174
0175
0176
0177
0178 timer_setup(&journal->j_commit_timer, commit_timeout, 0);
0179
0180 set_freezable();
0181
0182
0183 journal->j_task = current;
0184 wake_up(&journal->j_wait_done_commit);
0185
0186
0187
0188
0189
0190
0191
0192 memalloc_nofs_save();
0193
0194
0195
0196
0197 write_lock(&journal->j_state_lock);
0198
0199 loop:
0200 if (journal->j_flags & JBD2_UNMOUNT)
0201 goto end_loop;
0202
0203 jbd2_debug(1, "commit_sequence=%u, commit_request=%u\n",
0204 journal->j_commit_sequence, journal->j_commit_request);
0205
0206 if (journal->j_commit_sequence != journal->j_commit_request) {
0207 jbd2_debug(1, "OK, requests differ\n");
0208 write_unlock(&journal->j_state_lock);
0209 del_timer_sync(&journal->j_commit_timer);
0210 jbd2_journal_commit_transaction(journal);
0211 write_lock(&journal->j_state_lock);
0212 goto loop;
0213 }
0214
0215 wake_up(&journal->j_wait_done_commit);
0216 if (freezing(current)) {
0217
0218
0219
0220
0221
0222 jbd2_debug(1, "Now suspending kjournald2\n");
0223 write_unlock(&journal->j_state_lock);
0224 try_to_freeze();
0225 write_lock(&journal->j_state_lock);
0226 } else {
0227
0228
0229
0230
0231 DEFINE_WAIT(wait);
0232 int should_sleep = 1;
0233
0234 prepare_to_wait(&journal->j_wait_commit, &wait,
0235 TASK_INTERRUPTIBLE);
0236 if (journal->j_commit_sequence != journal->j_commit_request)
0237 should_sleep = 0;
0238 transaction = journal->j_running_transaction;
0239 if (transaction && time_after_eq(jiffies,
0240 transaction->t_expires))
0241 should_sleep = 0;
0242 if (journal->j_flags & JBD2_UNMOUNT)
0243 should_sleep = 0;
0244 if (should_sleep) {
0245 write_unlock(&journal->j_state_lock);
0246 schedule();
0247 write_lock(&journal->j_state_lock);
0248 }
0249 finish_wait(&journal->j_wait_commit, &wait);
0250 }
0251
0252 jbd2_debug(1, "kjournald2 wakes\n");
0253
0254
0255
0256
0257 transaction = journal->j_running_transaction;
0258 if (transaction && time_after_eq(jiffies, transaction->t_expires)) {
0259 journal->j_commit_request = transaction->t_tid;
0260 jbd2_debug(1, "woke because of timeout\n");
0261 }
0262 goto loop;
0263
0264 end_loop:
0265 del_timer_sync(&journal->j_commit_timer);
0266 journal->j_task = NULL;
0267 wake_up(&journal->j_wait_done_commit);
0268 jbd2_debug(1, "Journal thread exiting.\n");
0269 write_unlock(&journal->j_state_lock);
0270 return 0;
0271 }
0272
0273 static int jbd2_journal_start_thread(journal_t *journal)
0274 {
0275 struct task_struct *t;
0276
0277 t = kthread_run(kjournald2, journal, "jbd2/%s",
0278 journal->j_devname);
0279 if (IS_ERR(t))
0280 return PTR_ERR(t);
0281
0282 wait_event(journal->j_wait_done_commit, journal->j_task != NULL);
0283 return 0;
0284 }
0285
0286 static void journal_kill_thread(journal_t *journal)
0287 {
0288 write_lock(&journal->j_state_lock);
0289 journal->j_flags |= JBD2_UNMOUNT;
0290
0291 while (journal->j_task) {
0292 write_unlock(&journal->j_state_lock);
0293 wake_up(&journal->j_wait_commit);
0294 wait_event(journal->j_wait_done_commit, journal->j_task == NULL);
0295 write_lock(&journal->j_state_lock);
0296 }
0297 write_unlock(&journal->j_state_lock);
0298 }
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335 int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
0336 struct journal_head *jh_in,
0337 struct buffer_head **bh_out,
0338 sector_t blocknr)
0339 {
0340 int need_copy_out = 0;
0341 int done_copy_out = 0;
0342 int do_escape = 0;
0343 char *mapped_data;
0344 struct buffer_head *new_bh;
0345 struct page *new_page;
0346 unsigned int new_offset;
0347 struct buffer_head *bh_in = jh2bh(jh_in);
0348 journal_t *journal = transaction->t_journal;
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359 J_ASSERT_BH(bh_in, buffer_jbddirty(bh_in));
0360
0361 new_bh = alloc_buffer_head(GFP_NOFS|__GFP_NOFAIL);
0362
0363
0364 atomic_set(&new_bh->b_count, 1);
0365
0366 spin_lock(&jh_in->b_state_lock);
0367 repeat:
0368
0369
0370
0371
0372 if (jh_in->b_frozen_data) {
0373 done_copy_out = 1;
0374 new_page = virt_to_page(jh_in->b_frozen_data);
0375 new_offset = offset_in_page(jh_in->b_frozen_data);
0376 } else {
0377 new_page = jh2bh(jh_in)->b_page;
0378 new_offset = offset_in_page(jh2bh(jh_in)->b_data);
0379 }
0380
0381 mapped_data = kmap_atomic(new_page);
0382
0383
0384
0385
0386
0387
0388 if (!done_copy_out)
0389 jbd2_buffer_frozen_trigger(jh_in, mapped_data + new_offset,
0390 jh_in->b_triggers);
0391
0392
0393
0394
0395 if (*((__be32 *)(mapped_data + new_offset)) ==
0396 cpu_to_be32(JBD2_MAGIC_NUMBER)) {
0397 need_copy_out = 1;
0398 do_escape = 1;
0399 }
0400 kunmap_atomic(mapped_data);
0401
0402
0403
0404
0405 if (need_copy_out && !done_copy_out) {
0406 char *tmp;
0407
0408 spin_unlock(&jh_in->b_state_lock);
0409 tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
0410 if (!tmp) {
0411 brelse(new_bh);
0412 return -ENOMEM;
0413 }
0414 spin_lock(&jh_in->b_state_lock);
0415 if (jh_in->b_frozen_data) {
0416 jbd2_free(tmp, bh_in->b_size);
0417 goto repeat;
0418 }
0419
0420 jh_in->b_frozen_data = tmp;
0421 mapped_data = kmap_atomic(new_page);
0422 memcpy(tmp, mapped_data + new_offset, bh_in->b_size);
0423 kunmap_atomic(mapped_data);
0424
0425 new_page = virt_to_page(tmp);
0426 new_offset = offset_in_page(tmp);
0427 done_copy_out = 1;
0428
0429
0430
0431
0432
0433
0434 jh_in->b_frozen_triggers = jh_in->b_triggers;
0435 }
0436
0437
0438
0439
0440
0441 if (do_escape) {
0442 mapped_data = kmap_atomic(new_page);
0443 *((unsigned int *)(mapped_data + new_offset)) = 0;
0444 kunmap_atomic(mapped_data);
0445 }
0446
0447 set_bh_page(new_bh, new_page, new_offset);
0448 new_bh->b_size = bh_in->b_size;
0449 new_bh->b_bdev = journal->j_dev;
0450 new_bh->b_blocknr = blocknr;
0451 new_bh->b_private = bh_in;
0452 set_buffer_mapped(new_bh);
0453 set_buffer_dirty(new_bh);
0454
0455 *bh_out = new_bh;
0456
0457
0458
0459
0460
0461
0462 JBUFFER_TRACE(jh_in, "file as BJ_Shadow");
0463 spin_lock(&journal->j_list_lock);
0464 __jbd2_journal_file_buffer(jh_in, transaction, BJ_Shadow);
0465 spin_unlock(&journal->j_list_lock);
0466 set_buffer_shadow(bh_in);
0467 spin_unlock(&jh_in->b_state_lock);
0468
0469 return do_escape | (done_copy_out << 1);
0470 }
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481 static int __jbd2_log_start_commit(journal_t *journal, tid_t target)
0482 {
0483
0484 if (journal->j_commit_request == target)
0485 return 0;
0486
0487
0488
0489
0490
0491
0492 if (journal->j_running_transaction &&
0493 journal->j_running_transaction->t_tid == target) {
0494
0495
0496
0497
0498
0499 journal->j_commit_request = target;
0500 jbd2_debug(1, "JBD2: requesting commit %u/%u\n",
0501 journal->j_commit_request,
0502 journal->j_commit_sequence);
0503 journal->j_running_transaction->t_requested = jiffies;
0504 wake_up(&journal->j_wait_commit);
0505 return 1;
0506 } else if (!tid_geq(journal->j_commit_request, target))
0507
0508
0509
0510 WARN_ONCE(1, "JBD2: bad log_start_commit: %u %u %u %u\n",
0511 journal->j_commit_request,
0512 journal->j_commit_sequence,
0513 target, journal->j_running_transaction ?
0514 journal->j_running_transaction->t_tid : 0);
0515 return 0;
0516 }
0517
0518 int jbd2_log_start_commit(journal_t *journal, tid_t tid)
0519 {
0520 int ret;
0521
0522 write_lock(&journal->j_state_lock);
0523 ret = __jbd2_log_start_commit(journal, tid);
0524 write_unlock(&journal->j_state_lock);
0525 return ret;
0526 }
0527
0528
0529
0530
0531
0532
0533
0534
0535 static int __jbd2_journal_force_commit(journal_t *journal)
0536 {
0537 transaction_t *transaction = NULL;
0538 tid_t tid;
0539 int need_to_start = 0, ret = 0;
0540
0541 read_lock(&journal->j_state_lock);
0542 if (journal->j_running_transaction && !current->journal_info) {
0543 transaction = journal->j_running_transaction;
0544 if (!tid_geq(journal->j_commit_request, transaction->t_tid))
0545 need_to_start = 1;
0546 } else if (journal->j_committing_transaction)
0547 transaction = journal->j_committing_transaction;
0548
0549 if (!transaction) {
0550
0551 read_unlock(&journal->j_state_lock);
0552 return 0;
0553 }
0554 tid = transaction->t_tid;
0555 read_unlock(&journal->j_state_lock);
0556 if (need_to_start)
0557 jbd2_log_start_commit(journal, tid);
0558 ret = jbd2_log_wait_commit(journal, tid);
0559 if (!ret)
0560 ret = 1;
0561
0562 return ret;
0563 }
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575 int jbd2_journal_force_commit_nested(journal_t *journal)
0576 {
0577 int ret;
0578
0579 ret = __jbd2_journal_force_commit(journal);
0580 return ret > 0;
0581 }
0582
0583
0584
0585
0586
0587
0588
0589
0590 int jbd2_journal_force_commit(journal_t *journal)
0591 {
0592 int ret;
0593
0594 J_ASSERT(!current->journal_info);
0595 ret = __jbd2_journal_force_commit(journal);
0596 if (ret > 0)
0597 ret = 0;
0598 return ret;
0599 }
0600
0601
0602
0603
0604
0605
0606 int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid)
0607 {
0608 int ret = 0;
0609
0610 write_lock(&journal->j_state_lock);
0611 if (journal->j_running_transaction) {
0612 tid_t tid = journal->j_running_transaction->t_tid;
0613
0614 __jbd2_log_start_commit(journal, tid);
0615
0616
0617 if (ptid)
0618 *ptid = tid;
0619 ret = 1;
0620 } else if (journal->j_committing_transaction) {
0621
0622
0623
0624
0625 if (ptid)
0626 *ptid = journal->j_committing_transaction->t_tid;
0627 ret = 1;
0628 }
0629 write_unlock(&journal->j_state_lock);
0630 return ret;
0631 }
0632
0633
0634
0635
0636
0637
0638
0639 int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid)
0640 {
0641 int ret = 0;
0642 transaction_t *commit_trans;
0643
0644 if (!(journal->j_flags & JBD2_BARRIER))
0645 return 0;
0646 read_lock(&journal->j_state_lock);
0647
0648 if (tid_geq(journal->j_commit_sequence, tid))
0649 goto out;
0650 commit_trans = journal->j_committing_transaction;
0651 if (!commit_trans || commit_trans->t_tid != tid) {
0652 ret = 1;
0653 goto out;
0654 }
0655
0656
0657
0658
0659 if (journal->j_fs_dev != journal->j_dev) {
0660 if (!commit_trans->t_need_data_flush ||
0661 commit_trans->t_state >= T_COMMIT_DFLUSH)
0662 goto out;
0663 } else {
0664 if (commit_trans->t_state >= T_COMMIT_JFLUSH)
0665 goto out;
0666 }
0667 ret = 1;
0668 out:
0669 read_unlock(&journal->j_state_lock);
0670 return ret;
0671 }
0672 EXPORT_SYMBOL(jbd2_trans_will_send_data_barrier);
0673
0674
0675
0676
0677
0678 int jbd2_log_wait_commit(journal_t *journal, tid_t tid)
0679 {
0680 int err = 0;
0681
0682 read_lock(&journal->j_state_lock);
0683 #ifdef CONFIG_PROVE_LOCKING
0684
0685
0686
0687
0688
0689 if (tid_gt(tid, journal->j_commit_sequence) &&
0690 (!journal->j_committing_transaction ||
0691 journal->j_committing_transaction->t_tid != tid)) {
0692 read_unlock(&journal->j_state_lock);
0693 jbd2_might_wait_for_commit(journal);
0694 read_lock(&journal->j_state_lock);
0695 }
0696 #endif
0697 #ifdef CONFIG_JBD2_DEBUG
0698 if (!tid_geq(journal->j_commit_request, tid)) {
0699 printk(KERN_ERR
0700 "%s: error: j_commit_request=%u, tid=%u\n",
0701 __func__, journal->j_commit_request, tid);
0702 }
0703 #endif
0704 while (tid_gt(tid, journal->j_commit_sequence)) {
0705 jbd2_debug(1, "JBD2: want %u, j_commit_sequence=%u\n",
0706 tid, journal->j_commit_sequence);
0707 read_unlock(&journal->j_state_lock);
0708 wake_up(&journal->j_wait_commit);
0709 wait_event(journal->j_wait_done_commit,
0710 !tid_gt(tid, journal->j_commit_sequence));
0711 read_lock(&journal->j_state_lock);
0712 }
0713 read_unlock(&journal->j_state_lock);
0714
0715 if (unlikely(is_journal_aborted(journal)))
0716 err = -EIO;
0717 return err;
0718 }
0719
0720
0721
0722
0723
0724
0725
0726
0727 int jbd2_fc_begin_commit(journal_t *journal, tid_t tid)
0728 {
0729 if (unlikely(is_journal_aborted(journal)))
0730 return -EIO;
0731
0732
0733
0734
0735 if (!journal->j_stats.ts_tid)
0736 return -EINVAL;
0737
0738 write_lock(&journal->j_state_lock);
0739 if (tid <= journal->j_commit_sequence) {
0740 write_unlock(&journal->j_state_lock);
0741 return -EALREADY;
0742 }
0743
0744 if (journal->j_flags & JBD2_FULL_COMMIT_ONGOING ||
0745 (journal->j_flags & JBD2_FAST_COMMIT_ONGOING)) {
0746 DEFINE_WAIT(wait);
0747
0748 prepare_to_wait(&journal->j_fc_wait, &wait,
0749 TASK_UNINTERRUPTIBLE);
0750 write_unlock(&journal->j_state_lock);
0751 schedule();
0752 finish_wait(&journal->j_fc_wait, &wait);
0753 return -EALREADY;
0754 }
0755 journal->j_flags |= JBD2_FAST_COMMIT_ONGOING;
0756 write_unlock(&journal->j_state_lock);
0757 jbd2_journal_lock_updates(journal);
0758
0759 return 0;
0760 }
0761 EXPORT_SYMBOL(jbd2_fc_begin_commit);
0762
0763
0764
0765
0766
0767 static int __jbd2_fc_end_commit(journal_t *journal, tid_t tid, bool fallback)
0768 {
0769 jbd2_journal_unlock_updates(journal);
0770 if (journal->j_fc_cleanup_callback)
0771 journal->j_fc_cleanup_callback(journal, 0, tid);
0772 write_lock(&journal->j_state_lock);
0773 journal->j_flags &= ~JBD2_FAST_COMMIT_ONGOING;
0774 if (fallback)
0775 journal->j_flags |= JBD2_FULL_COMMIT_ONGOING;
0776 write_unlock(&journal->j_state_lock);
0777 wake_up(&journal->j_fc_wait);
0778 if (fallback)
0779 return jbd2_complete_transaction(journal, tid);
0780 return 0;
0781 }
0782
0783 int jbd2_fc_end_commit(journal_t *journal)
0784 {
0785 return __jbd2_fc_end_commit(journal, 0, false);
0786 }
0787 EXPORT_SYMBOL(jbd2_fc_end_commit);
0788
0789 int jbd2_fc_end_commit_fallback(journal_t *journal)
0790 {
0791 tid_t tid;
0792
0793 read_lock(&journal->j_state_lock);
0794 tid = journal->j_running_transaction ?
0795 journal->j_running_transaction->t_tid : 0;
0796 read_unlock(&journal->j_state_lock);
0797 return __jbd2_fc_end_commit(journal, tid, true);
0798 }
0799 EXPORT_SYMBOL(jbd2_fc_end_commit_fallback);
0800
0801
0802 int jbd2_transaction_committed(journal_t *journal, tid_t tid)
0803 {
0804 int ret = 1;
0805
0806 read_lock(&journal->j_state_lock);
0807 if (journal->j_running_transaction &&
0808 journal->j_running_transaction->t_tid == tid)
0809 ret = 0;
0810 if (journal->j_committing_transaction &&
0811 journal->j_committing_transaction->t_tid == tid)
0812 ret = 0;
0813 read_unlock(&journal->j_state_lock);
0814 return ret;
0815 }
0816 EXPORT_SYMBOL(jbd2_transaction_committed);
0817
0818
0819
0820
0821
0822
0823
0824
0825 int jbd2_complete_transaction(journal_t *journal, tid_t tid)
0826 {
0827 int need_to_wait = 1;
0828
0829 read_lock(&journal->j_state_lock);
0830 if (journal->j_running_transaction &&
0831 journal->j_running_transaction->t_tid == tid) {
0832 if (journal->j_commit_request != tid) {
0833
0834 read_unlock(&journal->j_state_lock);
0835 jbd2_log_start_commit(journal, tid);
0836 goto wait_commit;
0837 }
0838 } else if (!(journal->j_committing_transaction &&
0839 journal->j_committing_transaction->t_tid == tid))
0840 need_to_wait = 0;
0841 read_unlock(&journal->j_state_lock);
0842 if (!need_to_wait)
0843 return 0;
0844 wait_commit:
0845 return jbd2_log_wait_commit(journal, tid);
0846 }
0847 EXPORT_SYMBOL(jbd2_complete_transaction);
0848
0849
0850
0851
0852
0853 int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp)
0854 {
0855 unsigned long blocknr;
0856
0857 write_lock(&journal->j_state_lock);
0858 J_ASSERT(journal->j_free > 1);
0859
0860 blocknr = journal->j_head;
0861 journal->j_head++;
0862 journal->j_free--;
0863 if (journal->j_head == journal->j_last)
0864 journal->j_head = journal->j_first;
0865 write_unlock(&journal->j_state_lock);
0866 return jbd2_journal_bmap(journal, blocknr, retp);
0867 }
0868
0869
0870 int jbd2_fc_get_buf(journal_t *journal, struct buffer_head **bh_out)
0871 {
0872 unsigned long long pblock;
0873 unsigned long blocknr;
0874 int ret = 0;
0875 struct buffer_head *bh;
0876 int fc_off;
0877
0878 *bh_out = NULL;
0879
0880 if (journal->j_fc_off + journal->j_fc_first < journal->j_fc_last) {
0881 fc_off = journal->j_fc_off;
0882 blocknr = journal->j_fc_first + fc_off;
0883 journal->j_fc_off++;
0884 } else {
0885 ret = -EINVAL;
0886 }
0887
0888 if (ret)
0889 return ret;
0890
0891 ret = jbd2_journal_bmap(journal, blocknr, &pblock);
0892 if (ret)
0893 return ret;
0894
0895 bh = __getblk(journal->j_dev, pblock, journal->j_blocksize);
0896 if (!bh)
0897 return -ENOMEM;
0898
0899
0900 journal->j_fc_wbuf[fc_off] = bh;
0901
0902 *bh_out = bh;
0903
0904 return 0;
0905 }
0906 EXPORT_SYMBOL(jbd2_fc_get_buf);
0907
0908
0909
0910
0911
0912 int jbd2_fc_wait_bufs(journal_t *journal, int num_blks)
0913 {
0914 struct buffer_head *bh;
0915 int i, j_fc_off;
0916
0917 j_fc_off = journal->j_fc_off;
0918
0919
0920
0921
0922
0923 for (i = j_fc_off - 1; i >= j_fc_off - num_blks; i--) {
0924 bh = journal->j_fc_wbuf[i];
0925 wait_on_buffer(bh);
0926 put_bh(bh);
0927 journal->j_fc_wbuf[i] = NULL;
0928 if (unlikely(!buffer_uptodate(bh)))
0929 return -EIO;
0930 }
0931
0932 return 0;
0933 }
0934 EXPORT_SYMBOL(jbd2_fc_wait_bufs);
0935
0936 int jbd2_fc_release_bufs(journal_t *journal)
0937 {
0938 struct buffer_head *bh;
0939 int i, j_fc_off;
0940
0941 j_fc_off = journal->j_fc_off;
0942
0943 for (i = j_fc_off - 1; i >= 0; i--) {
0944 bh = journal->j_fc_wbuf[i];
0945 if (!bh)
0946 break;
0947 put_bh(bh);
0948 journal->j_fc_wbuf[i] = NULL;
0949 }
0950
0951 return 0;
0952 }
0953 EXPORT_SYMBOL(jbd2_fc_release_bufs);
0954
0955
0956
0957
0958
0959
0960
0961
0962 int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
0963 unsigned long long *retp)
0964 {
0965 int err = 0;
0966 unsigned long long ret;
0967 sector_t block = 0;
0968
0969 if (journal->j_inode) {
0970 block = blocknr;
0971 ret = bmap(journal->j_inode, &block);
0972
0973 if (ret || !block) {
0974 printk(KERN_ALERT "%s: journal block not found "
0975 "at offset %lu on %s\n",
0976 __func__, blocknr, journal->j_devname);
0977 err = -EIO;
0978 jbd2_journal_abort(journal, err);
0979 } else {
0980 *retp = block;
0981 }
0982
0983 } else {
0984 *retp = blocknr;
0985 }
0986 return err;
0987 }
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999 struct buffer_head *
1000 jbd2_journal_get_descriptor_buffer(transaction_t *transaction, int type)
1001 {
1002 journal_t *journal = transaction->t_journal;
1003 struct buffer_head *bh;
1004 unsigned long long blocknr;
1005 journal_header_t *header;
1006 int err;
1007
1008 err = jbd2_journal_next_log_block(journal, &blocknr);
1009
1010 if (err)
1011 return NULL;
1012
1013 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
1014 if (!bh)
1015 return NULL;
1016 atomic_dec(&transaction->t_outstanding_credits);
1017 lock_buffer(bh);
1018 memset(bh->b_data, 0, journal->j_blocksize);
1019 header = (journal_header_t *)bh->b_data;
1020 header->h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
1021 header->h_blocktype = cpu_to_be32(type);
1022 header->h_sequence = cpu_to_be32(transaction->t_tid);
1023 set_buffer_uptodate(bh);
1024 unlock_buffer(bh);
1025 BUFFER_TRACE(bh, "return this buffer");
1026 return bh;
1027 }
1028
1029 void jbd2_descriptor_block_csum_set(journal_t *j, struct buffer_head *bh)
1030 {
1031 struct jbd2_journal_block_tail *tail;
1032 __u32 csum;
1033
1034 if (!jbd2_journal_has_csum_v2or3(j))
1035 return;
1036
1037 tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize -
1038 sizeof(struct jbd2_journal_block_tail));
1039 tail->t_checksum = 0;
1040 csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
1041 tail->t_checksum = cpu_to_be32(csum);
1042 }
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054 int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
1055 unsigned long *block)
1056 {
1057 transaction_t *transaction;
1058 int ret;
1059
1060 read_lock(&journal->j_state_lock);
1061 spin_lock(&journal->j_list_lock);
1062 transaction = journal->j_checkpoint_transactions;
1063 if (transaction) {
1064 *tid = transaction->t_tid;
1065 *block = transaction->t_log_start;
1066 } else if ((transaction = journal->j_committing_transaction) != NULL) {
1067 *tid = transaction->t_tid;
1068 *block = transaction->t_log_start;
1069 } else if ((transaction = journal->j_running_transaction) != NULL) {
1070 *tid = transaction->t_tid;
1071 *block = journal->j_head;
1072 } else {
1073 *tid = journal->j_transaction_sequence;
1074 *block = journal->j_head;
1075 }
1076 ret = tid_gt(*tid, journal->j_tail_sequence);
1077 spin_unlock(&journal->j_list_lock);
1078 read_unlock(&journal->j_state_lock);
1079
1080 return ret;
1081 }
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093 int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
1094 {
1095 unsigned long freed;
1096 int ret;
1097
1098 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1099
1100
1101
1102
1103
1104
1105
1106 ret = jbd2_journal_update_sb_log_tail(journal, tid, block,
1107 REQ_SYNC | REQ_FUA);
1108 if (ret)
1109 goto out;
1110
1111 write_lock(&journal->j_state_lock);
1112 freed = block - journal->j_tail;
1113 if (block < journal->j_tail)
1114 freed += journal->j_last - journal->j_first;
1115
1116 trace_jbd2_update_log_tail(journal, tid, block, freed);
1117 jbd2_debug(1,
1118 "Cleaning journal tail from %u to %u (offset %lu), "
1119 "freeing %lu\n",
1120 journal->j_tail_sequence, tid, block, freed);
1121
1122 journal->j_free += freed;
1123 journal->j_tail_sequence = tid;
1124 journal->j_tail = block;
1125 write_unlock(&journal->j_state_lock);
1126
1127 out:
1128 return ret;
1129 }
1130
1131
1132
1133
1134
1135
1136 void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
1137 {
1138 mutex_lock_io(&journal->j_checkpoint_mutex);
1139 if (tid_gt(tid, journal->j_tail_sequence))
1140 __jbd2_update_log_tail(journal, tid, block);
1141 mutex_unlock(&journal->j_checkpoint_mutex);
1142 }
1143
1144 struct jbd2_stats_proc_session {
1145 journal_t *journal;
1146 struct transaction_stats_s *stats;
1147 int start;
1148 int max;
1149 };
1150
1151 static void *jbd2_seq_info_start(struct seq_file *seq, loff_t *pos)
1152 {
1153 return *pos ? NULL : SEQ_START_TOKEN;
1154 }
1155
1156 static void *jbd2_seq_info_next(struct seq_file *seq, void *v, loff_t *pos)
1157 {
1158 (*pos)++;
1159 return NULL;
1160 }
1161
1162 static int jbd2_seq_info_show(struct seq_file *seq, void *v)
1163 {
1164 struct jbd2_stats_proc_session *s = seq->private;
1165
1166 if (v != SEQ_START_TOKEN)
1167 return 0;
1168 seq_printf(seq, "%lu transactions (%lu requested), "
1169 "each up to %u blocks\n",
1170 s->stats->ts_tid, s->stats->ts_requested,
1171 s->journal->j_max_transaction_buffers);
1172 if (s->stats->ts_tid == 0)
1173 return 0;
1174 seq_printf(seq, "average: \n %ums waiting for transaction\n",
1175 jiffies_to_msecs(s->stats->run.rs_wait / s->stats->ts_tid));
1176 seq_printf(seq, " %ums request delay\n",
1177 (s->stats->ts_requested == 0) ? 0 :
1178 jiffies_to_msecs(s->stats->run.rs_request_delay /
1179 s->stats->ts_requested));
1180 seq_printf(seq, " %ums running transaction\n",
1181 jiffies_to_msecs(s->stats->run.rs_running / s->stats->ts_tid));
1182 seq_printf(seq, " %ums transaction was being locked\n",
1183 jiffies_to_msecs(s->stats->run.rs_locked / s->stats->ts_tid));
1184 seq_printf(seq, " %ums flushing data (in ordered mode)\n",
1185 jiffies_to_msecs(s->stats->run.rs_flushing / s->stats->ts_tid));
1186 seq_printf(seq, " %ums logging transaction\n",
1187 jiffies_to_msecs(s->stats->run.rs_logging / s->stats->ts_tid));
1188 seq_printf(seq, " %lluus average transaction commit time\n",
1189 div_u64(s->journal->j_average_commit_time, 1000));
1190 seq_printf(seq, " %lu handles per transaction\n",
1191 s->stats->run.rs_handle_count / s->stats->ts_tid);
1192 seq_printf(seq, " %lu blocks per transaction\n",
1193 s->stats->run.rs_blocks / s->stats->ts_tid);
1194 seq_printf(seq, " %lu logged blocks per transaction\n",
1195 s->stats->run.rs_blocks_logged / s->stats->ts_tid);
1196 return 0;
1197 }
1198
1199 static void jbd2_seq_info_stop(struct seq_file *seq, void *v)
1200 {
1201 }
1202
1203 static const struct seq_operations jbd2_seq_info_ops = {
1204 .start = jbd2_seq_info_start,
1205 .next = jbd2_seq_info_next,
1206 .stop = jbd2_seq_info_stop,
1207 .show = jbd2_seq_info_show,
1208 };
1209
1210 static int jbd2_seq_info_open(struct inode *inode, struct file *file)
1211 {
1212 journal_t *journal = pde_data(inode);
1213 struct jbd2_stats_proc_session *s;
1214 int rc, size;
1215
1216 s = kmalloc(sizeof(*s), GFP_KERNEL);
1217 if (s == NULL)
1218 return -ENOMEM;
1219 size = sizeof(struct transaction_stats_s);
1220 s->stats = kmalloc(size, GFP_KERNEL);
1221 if (s->stats == NULL) {
1222 kfree(s);
1223 return -ENOMEM;
1224 }
1225 spin_lock(&journal->j_history_lock);
1226 memcpy(s->stats, &journal->j_stats, size);
1227 s->journal = journal;
1228 spin_unlock(&journal->j_history_lock);
1229
1230 rc = seq_open(file, &jbd2_seq_info_ops);
1231 if (rc == 0) {
1232 struct seq_file *m = file->private_data;
1233 m->private = s;
1234 } else {
1235 kfree(s->stats);
1236 kfree(s);
1237 }
1238 return rc;
1239
1240 }
1241
1242 static int jbd2_seq_info_release(struct inode *inode, struct file *file)
1243 {
1244 struct seq_file *seq = file->private_data;
1245 struct jbd2_stats_proc_session *s = seq->private;
1246 kfree(s->stats);
1247 kfree(s);
1248 return seq_release(inode, file);
1249 }
1250
1251 static const struct proc_ops jbd2_info_proc_ops = {
1252 .proc_open = jbd2_seq_info_open,
1253 .proc_read = seq_read,
1254 .proc_lseek = seq_lseek,
1255 .proc_release = jbd2_seq_info_release,
1256 };
1257
1258 static struct proc_dir_entry *proc_jbd2_stats;
1259
1260 static void jbd2_stats_proc_init(journal_t *journal)
1261 {
1262 journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats);
1263 if (journal->j_proc_entry) {
1264 proc_create_data("info", S_IRUGO, journal->j_proc_entry,
1265 &jbd2_info_proc_ops, journal);
1266 }
1267 }
1268
1269 static void jbd2_stats_proc_exit(journal_t *journal)
1270 {
1271 remove_proc_entry("info", journal->j_proc_entry);
1272 remove_proc_entry(journal->j_devname, proc_jbd2_stats);
1273 }
1274
1275
1276 static int jbd2_min_tag_size(void)
1277 {
1278
1279
1280
1281
1282 return sizeof(journal_block_tag_t) - 4;
1283 }
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293 static unsigned long jbd2_journal_shrink_scan(struct shrinker *shrink,
1294 struct shrink_control *sc)
1295 {
1296 journal_t *journal = container_of(shrink, journal_t, j_shrinker);
1297 unsigned long nr_to_scan = sc->nr_to_scan;
1298 unsigned long nr_shrunk;
1299 unsigned long count;
1300
1301 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count);
1302 trace_jbd2_shrink_scan_enter(journal, sc->nr_to_scan, count);
1303
1304 nr_shrunk = jbd2_journal_shrink_checkpoint_list(journal, &nr_to_scan);
1305
1306 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count);
1307 trace_jbd2_shrink_scan_exit(journal, nr_to_scan, nr_shrunk, count);
1308
1309 return nr_shrunk;
1310 }
1311
1312
1313
1314
1315
1316
1317
1318
1319 static unsigned long jbd2_journal_shrink_count(struct shrinker *shrink,
1320 struct shrink_control *sc)
1321 {
1322 journal_t *journal = container_of(shrink, journal_t, j_shrinker);
1323 unsigned long count;
1324
1325 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count);
1326 trace_jbd2_shrink_count(journal, sc->nr_to_scan, count);
1327
1328 return count;
1329 }
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340 static journal_t *journal_init_common(struct block_device *bdev,
1341 struct block_device *fs_dev,
1342 unsigned long long start, int len, int blocksize)
1343 {
1344 static struct lock_class_key jbd2_trans_commit_key;
1345 journal_t *journal;
1346 int err;
1347 struct buffer_head *bh;
1348 int n;
1349
1350 journal = kzalloc(sizeof(*journal), GFP_KERNEL);
1351 if (!journal)
1352 return NULL;
1353
1354 init_waitqueue_head(&journal->j_wait_transaction_locked);
1355 init_waitqueue_head(&journal->j_wait_done_commit);
1356 init_waitqueue_head(&journal->j_wait_commit);
1357 init_waitqueue_head(&journal->j_wait_updates);
1358 init_waitqueue_head(&journal->j_wait_reserved);
1359 init_waitqueue_head(&journal->j_fc_wait);
1360 mutex_init(&journal->j_abort_mutex);
1361 mutex_init(&journal->j_barrier);
1362 mutex_init(&journal->j_checkpoint_mutex);
1363 spin_lock_init(&journal->j_revoke_lock);
1364 spin_lock_init(&journal->j_list_lock);
1365 rwlock_init(&journal->j_state_lock);
1366
1367 journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE);
1368 journal->j_min_batch_time = 0;
1369 journal->j_max_batch_time = 15000;
1370 atomic_set(&journal->j_reserved_credits, 0);
1371
1372
1373 journal->j_flags = JBD2_ABORT;
1374
1375
1376 err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
1377 if (err)
1378 goto err_cleanup;
1379
1380 spin_lock_init(&journal->j_history_lock);
1381
1382 lockdep_init_map(&journal->j_trans_commit_map, "jbd2_handle",
1383 &jbd2_trans_commit_key, 0);
1384
1385
1386 journal->j_blocksize = blocksize;
1387 journal->j_dev = bdev;
1388 journal->j_fs_dev = fs_dev;
1389 journal->j_blk_offset = start;
1390 journal->j_total_len = len;
1391
1392 n = journal->j_blocksize / jbd2_min_tag_size();
1393 journal->j_wbufsize = n;
1394 journal->j_fc_wbuf = NULL;
1395 journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *),
1396 GFP_KERNEL);
1397 if (!journal->j_wbuf)
1398 goto err_cleanup;
1399
1400 bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize);
1401 if (!bh) {
1402 pr_err("%s: Cannot get buffer for journal superblock\n",
1403 __func__);
1404 goto err_cleanup;
1405 }
1406 journal->j_sb_buffer = bh;
1407 journal->j_superblock = (journal_superblock_t *)bh->b_data;
1408
1409 journal->j_shrink_transaction = NULL;
1410 journal->j_shrinker.scan_objects = jbd2_journal_shrink_scan;
1411 journal->j_shrinker.count_objects = jbd2_journal_shrink_count;
1412 journal->j_shrinker.seeks = DEFAULT_SEEKS;
1413 journal->j_shrinker.batch = journal->j_max_transaction_buffers;
1414
1415 if (percpu_counter_init(&journal->j_checkpoint_jh_count, 0, GFP_KERNEL))
1416 goto err_cleanup;
1417
1418 if (register_shrinker(&journal->j_shrinker, "jbd2-journal:(%u:%u)",
1419 MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev))) {
1420 percpu_counter_destroy(&journal->j_checkpoint_jh_count);
1421 goto err_cleanup;
1422 }
1423 return journal;
1424
1425 err_cleanup:
1426 brelse(journal->j_sb_buffer);
1427 kfree(journal->j_wbuf);
1428 jbd2_journal_destroy_revoke(journal);
1429 kfree(journal);
1430 return NULL;
1431 }
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456 journal_t *jbd2_journal_init_dev(struct block_device *bdev,
1457 struct block_device *fs_dev,
1458 unsigned long long start, int len, int blocksize)
1459 {
1460 journal_t *journal;
1461
1462 journal = journal_init_common(bdev, fs_dev, start, len, blocksize);
1463 if (!journal)
1464 return NULL;
1465
1466 snprintf(journal->j_devname, sizeof(journal->j_devname),
1467 "%pg", journal->j_dev);
1468 strreplace(journal->j_devname, '/', '!');
1469 jbd2_stats_proc_init(journal);
1470
1471 return journal;
1472 }
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482 journal_t *jbd2_journal_init_inode(struct inode *inode)
1483 {
1484 journal_t *journal;
1485 sector_t blocknr;
1486 char *p;
1487 int err = 0;
1488
1489 blocknr = 0;
1490 err = bmap(inode, &blocknr);
1491
1492 if (err || !blocknr) {
1493 pr_err("%s: Cannot locate journal superblock\n",
1494 __func__);
1495 return NULL;
1496 }
1497
1498 jbd2_debug(1, "JBD2: inode %s/%ld, size %lld, bits %d, blksize %ld\n",
1499 inode->i_sb->s_id, inode->i_ino, (long long) inode->i_size,
1500 inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
1501
1502 journal = journal_init_common(inode->i_sb->s_bdev, inode->i_sb->s_bdev,
1503 blocknr, inode->i_size >> inode->i_sb->s_blocksize_bits,
1504 inode->i_sb->s_blocksize);
1505 if (!journal)
1506 return NULL;
1507
1508 journal->j_inode = inode;
1509 snprintf(journal->j_devname, sizeof(journal->j_devname),
1510 "%pg", journal->j_dev);
1511 p = strreplace(journal->j_devname, '/', '!');
1512 sprintf(p, "-%lu", journal->j_inode->i_ino);
1513 jbd2_stats_proc_init(journal);
1514
1515 return journal;
1516 }
1517
1518
1519
1520
1521
1522
1523 static void journal_fail_superblock(journal_t *journal)
1524 {
1525 struct buffer_head *bh = journal->j_sb_buffer;
1526 brelse(bh);
1527 journal->j_sb_buffer = NULL;
1528 }
1529
1530
1531
1532
1533
1534
1535
1536
1537 static int journal_reset(journal_t *journal)
1538 {
1539 journal_superblock_t *sb = journal->j_superblock;
1540 unsigned long long first, last;
1541
1542 first = be32_to_cpu(sb->s_first);
1543 last = be32_to_cpu(sb->s_maxlen);
1544 if (first + JBD2_MIN_JOURNAL_BLOCKS > last + 1) {
1545 printk(KERN_ERR "JBD2: Journal too short (blocks %llu-%llu).\n",
1546 first, last);
1547 journal_fail_superblock(journal);
1548 return -EINVAL;
1549 }
1550
1551 journal->j_first = first;
1552 journal->j_last = last;
1553
1554 journal->j_head = journal->j_first;
1555 journal->j_tail = journal->j_first;
1556 journal->j_free = journal->j_last - journal->j_first;
1557
1558 journal->j_tail_sequence = journal->j_transaction_sequence;
1559 journal->j_commit_sequence = journal->j_transaction_sequence - 1;
1560 journal->j_commit_request = journal->j_commit_sequence;
1561
1562 journal->j_max_transaction_buffers = jbd2_journal_get_max_txn_bufs(journal);
1563
1564
1565
1566
1567
1568
1569 jbd2_clear_feature_fast_commit(journal);
1570
1571
1572
1573
1574
1575
1576
1577 if (sb->s_start == 0) {
1578 jbd2_debug(1, "JBD2: Skipping superblock update on recovered sb "
1579 "(start %ld, seq %u, errno %d)\n",
1580 journal->j_tail, journal->j_tail_sequence,
1581 journal->j_errno);
1582 journal->j_flags |= JBD2_FLUSHED;
1583 } else {
1584
1585 mutex_lock_io(&journal->j_checkpoint_mutex);
1586
1587
1588
1589
1590
1591
1592 jbd2_journal_update_sb_log_tail(journal,
1593 journal->j_tail_sequence,
1594 journal->j_tail,
1595 REQ_SYNC | REQ_FUA);
1596 mutex_unlock(&journal->j_checkpoint_mutex);
1597 }
1598 return jbd2_journal_start_thread(journal);
1599 }
1600
1601
1602
1603
1604
1605 static int jbd2_write_superblock(journal_t *journal, blk_opf_t write_flags)
1606 {
1607 struct buffer_head *bh = journal->j_sb_buffer;
1608 journal_superblock_t *sb = journal->j_superblock;
1609 int ret;
1610
1611
1612 if (!buffer_mapped(bh)) {
1613 unlock_buffer(bh);
1614 return -EIO;
1615 }
1616
1617 trace_jbd2_write_superblock(journal, write_flags);
1618 if (!(journal->j_flags & JBD2_BARRIER))
1619 write_flags &= ~(REQ_FUA | REQ_PREFLUSH);
1620 if (buffer_write_io_error(bh)) {
1621
1622
1623
1624
1625
1626
1627
1628
1629 printk(KERN_ERR "JBD2: previous I/O error detected "
1630 "for journal superblock update for %s.\n",
1631 journal->j_devname);
1632 clear_buffer_write_io_error(bh);
1633 set_buffer_uptodate(bh);
1634 }
1635 if (jbd2_journal_has_csum_v2or3(journal))
1636 sb->s_checksum = jbd2_superblock_csum(journal, sb);
1637 get_bh(bh);
1638 bh->b_end_io = end_buffer_write_sync;
1639 ret = submit_bh(REQ_OP_WRITE | write_flags, bh);
1640 wait_on_buffer(bh);
1641 if (buffer_write_io_error(bh)) {
1642 clear_buffer_write_io_error(bh);
1643 set_buffer_uptodate(bh);
1644 ret = -EIO;
1645 }
1646 if (ret) {
1647 printk(KERN_ERR "JBD2: Error %d detected when updating "
1648 "journal superblock for %s.\n", ret,
1649 journal->j_devname);
1650 if (!is_journal_aborted(journal))
1651 jbd2_journal_abort(journal, ret);
1652 }
1653
1654 return ret;
1655 }
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667 int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
1668 unsigned long tail_block,
1669 blk_opf_t write_flags)
1670 {
1671 journal_superblock_t *sb = journal->j_superblock;
1672 int ret;
1673
1674 if (is_journal_aborted(journal))
1675 return -EIO;
1676 if (test_bit(JBD2_CHECKPOINT_IO_ERROR, &journal->j_atomic_flags)) {
1677 jbd2_journal_abort(journal, -EIO);
1678 return -EIO;
1679 }
1680
1681 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1682 jbd2_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
1683 tail_block, tail_tid);
1684
1685 lock_buffer(journal->j_sb_buffer);
1686 sb->s_sequence = cpu_to_be32(tail_tid);
1687 sb->s_start = cpu_to_be32(tail_block);
1688
1689 ret = jbd2_write_superblock(journal, write_flags);
1690 if (ret)
1691 goto out;
1692
1693
1694 write_lock(&journal->j_state_lock);
1695 WARN_ON(!sb->s_sequence);
1696 journal->j_flags &= ~JBD2_FLUSHED;
1697 write_unlock(&journal->j_state_lock);
1698
1699 out:
1700 return ret;
1701 }
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711 static void jbd2_mark_journal_empty(journal_t *journal, blk_opf_t write_flags)
1712 {
1713 journal_superblock_t *sb = journal->j_superblock;
1714 bool had_fast_commit = false;
1715
1716 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1717 lock_buffer(journal->j_sb_buffer);
1718 if (sb->s_start == 0) {
1719 unlock_buffer(journal->j_sb_buffer);
1720 return;
1721 }
1722
1723 jbd2_debug(1, "JBD2: Marking journal as empty (seq %u)\n",
1724 journal->j_tail_sequence);
1725
1726 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
1727 sb->s_start = cpu_to_be32(0);
1728 if (jbd2_has_feature_fast_commit(journal)) {
1729
1730
1731
1732
1733 jbd2_clear_feature_fast_commit(journal);
1734 had_fast_commit = true;
1735 }
1736
1737 jbd2_write_superblock(journal, write_flags);
1738
1739 if (had_fast_commit)
1740 jbd2_set_feature_fast_commit(journal);
1741
1742
1743 write_lock(&journal->j_state_lock);
1744 journal->j_flags |= JBD2_FLUSHED;
1745 write_unlock(&journal->j_state_lock);
1746 }
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760 static int __jbd2_journal_erase(journal_t *journal, unsigned int flags)
1761 {
1762 int err = 0;
1763 unsigned long block, log_offset;
1764 unsigned long long phys_block, block_start, block_stop;
1765 loff_t byte_start, byte_stop, byte_count;
1766
1767
1768 if ((flags & ~JBD2_JOURNAL_FLUSH_VALID) || !flags ||
1769 ((flags & JBD2_JOURNAL_FLUSH_DISCARD) &&
1770 (flags & JBD2_JOURNAL_FLUSH_ZEROOUT)))
1771 return -EINVAL;
1772
1773 if ((flags & JBD2_JOURNAL_FLUSH_DISCARD) &&
1774 !bdev_max_discard_sectors(journal->j_dev))
1775 return -EOPNOTSUPP;
1776
1777
1778
1779
1780
1781 log_offset = be32_to_cpu(journal->j_superblock->s_first);
1782 block_start = ~0ULL;
1783 for (block = log_offset; block < journal->j_total_len; block++) {
1784 err = jbd2_journal_bmap(journal, block, &phys_block);
1785 if (err) {
1786 pr_err("JBD2: bad block at offset %lu", block);
1787 return err;
1788 }
1789
1790 if (block_start == ~0ULL) {
1791 block_start = phys_block;
1792 block_stop = block_start - 1;
1793 }
1794
1795
1796
1797
1798
1799
1800 if (phys_block != block_stop + 1) {
1801 block--;
1802 } else {
1803 block_stop++;
1804
1805
1806
1807
1808
1809 if (block != journal->j_total_len - 1)
1810 continue;
1811 }
1812
1813
1814
1815
1816
1817 byte_start = block_start * journal->j_blocksize;
1818 byte_stop = block_stop * journal->j_blocksize;
1819 byte_count = (block_stop - block_start + 1) *
1820 journal->j_blocksize;
1821
1822 truncate_inode_pages_range(journal->j_dev->bd_inode->i_mapping,
1823 byte_start, byte_stop);
1824
1825 if (flags & JBD2_JOURNAL_FLUSH_DISCARD) {
1826 err = blkdev_issue_discard(journal->j_dev,
1827 byte_start >> SECTOR_SHIFT,
1828 byte_count >> SECTOR_SHIFT,
1829 GFP_NOFS);
1830 } else if (flags & JBD2_JOURNAL_FLUSH_ZEROOUT) {
1831 err = blkdev_issue_zeroout(journal->j_dev,
1832 byte_start >> SECTOR_SHIFT,
1833 byte_count >> SECTOR_SHIFT,
1834 GFP_NOFS, 0);
1835 }
1836
1837 if (unlikely(err != 0)) {
1838 pr_err("JBD2: (error %d) unable to wipe journal at physical blocks %llu - %llu",
1839 err, block_start, block_stop);
1840 return err;
1841 }
1842
1843
1844 block_start = ~0ULL;
1845 }
1846
1847 return blkdev_issue_flush(journal->j_dev);
1848 }
1849
1850
1851
1852
1853
1854
1855
1856
1857 void jbd2_journal_update_sb_errno(journal_t *journal)
1858 {
1859 journal_superblock_t *sb = journal->j_superblock;
1860 int errcode;
1861
1862 lock_buffer(journal->j_sb_buffer);
1863 errcode = journal->j_errno;
1864 if (errcode == -ESHUTDOWN)
1865 errcode = 0;
1866 jbd2_debug(1, "JBD2: updating superblock error (errno %d)\n", errcode);
1867 sb->s_errno = cpu_to_be32(errcode);
1868
1869 jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA);
1870 }
1871 EXPORT_SYMBOL(jbd2_journal_update_sb_errno);
1872
1873 static int journal_revoke_records_per_block(journal_t *journal)
1874 {
1875 int record_size;
1876 int space = journal->j_blocksize - sizeof(jbd2_journal_revoke_header_t);
1877
1878 if (jbd2_has_feature_64bit(journal))
1879 record_size = 8;
1880 else
1881 record_size = 4;
1882
1883 if (jbd2_journal_has_csum_v2or3(journal))
1884 space -= sizeof(struct jbd2_journal_block_tail);
1885 return space / record_size;
1886 }
1887
1888
1889
1890
1891
1892 static int journal_get_superblock(journal_t *journal)
1893 {
1894 struct buffer_head *bh;
1895 journal_superblock_t *sb;
1896 int err = -EIO;
1897
1898 bh = journal->j_sb_buffer;
1899
1900 J_ASSERT(bh != NULL);
1901 if (!buffer_uptodate(bh)) {
1902 ll_rw_block(REQ_OP_READ, 1, &bh);
1903 wait_on_buffer(bh);
1904 if (!buffer_uptodate(bh)) {
1905 printk(KERN_ERR
1906 "JBD2: IO error reading journal superblock\n");
1907 goto out;
1908 }
1909 }
1910
1911 if (buffer_verified(bh))
1912 return 0;
1913
1914 sb = journal->j_superblock;
1915
1916 err = -EINVAL;
1917
1918 if (sb->s_header.h_magic != cpu_to_be32(JBD2_MAGIC_NUMBER) ||
1919 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) {
1920 printk(KERN_WARNING "JBD2: no valid journal superblock found\n");
1921 goto out;
1922 }
1923
1924 switch(be32_to_cpu(sb->s_header.h_blocktype)) {
1925 case JBD2_SUPERBLOCK_V1:
1926 journal->j_format_version = 1;
1927 break;
1928 case JBD2_SUPERBLOCK_V2:
1929 journal->j_format_version = 2;
1930 break;
1931 default:
1932 printk(KERN_WARNING "JBD2: unrecognised superblock format ID\n");
1933 goto out;
1934 }
1935
1936 if (be32_to_cpu(sb->s_maxlen) < journal->j_total_len)
1937 journal->j_total_len = be32_to_cpu(sb->s_maxlen);
1938 else if (be32_to_cpu(sb->s_maxlen) > journal->j_total_len) {
1939 printk(KERN_WARNING "JBD2: journal file too short\n");
1940 goto out;
1941 }
1942
1943 if (be32_to_cpu(sb->s_first) == 0 ||
1944 be32_to_cpu(sb->s_first) >= journal->j_total_len) {
1945 printk(KERN_WARNING
1946 "JBD2: Invalid start block of journal: %u\n",
1947 be32_to_cpu(sb->s_first));
1948 goto out;
1949 }
1950
1951 if (jbd2_has_feature_csum2(journal) &&
1952 jbd2_has_feature_csum3(journal)) {
1953
1954 printk(KERN_ERR "JBD2: Can't enable checksumming v2 and v3 "
1955 "at the same time!\n");
1956 goto out;
1957 }
1958
1959 if (jbd2_journal_has_csum_v2or3_feature(journal) &&
1960 jbd2_has_feature_checksum(journal)) {
1961
1962 printk(KERN_ERR "JBD2: Can't enable checksumming v1 and v2/3 "
1963 "at the same time!\n");
1964 goto out;
1965 }
1966
1967 if (!jbd2_verify_csum_type(journal, sb)) {
1968 printk(KERN_ERR "JBD2: Unknown checksum type\n");
1969 goto out;
1970 }
1971
1972
1973 if (jbd2_journal_has_csum_v2or3_feature(journal)) {
1974 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
1975 if (IS_ERR(journal->j_chksum_driver)) {
1976 printk(KERN_ERR "JBD2: Cannot load crc32c driver.\n");
1977 err = PTR_ERR(journal->j_chksum_driver);
1978 journal->j_chksum_driver = NULL;
1979 goto out;
1980 }
1981 }
1982
1983 if (jbd2_journal_has_csum_v2or3(journal)) {
1984
1985 if (sb->s_checksum != jbd2_superblock_csum(journal, sb)) {
1986 printk(KERN_ERR "JBD2: journal checksum error\n");
1987 err = -EFSBADCRC;
1988 goto out;
1989 }
1990
1991
1992 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid,
1993 sizeof(sb->s_uuid));
1994 }
1995
1996 journal->j_revoke_records_per_block =
1997 journal_revoke_records_per_block(journal);
1998 set_buffer_verified(bh);
1999
2000 return 0;
2001
2002 out:
2003 journal_fail_superblock(journal);
2004 return err;
2005 }
2006
2007
2008
2009
2010
2011
2012 static int load_superblock(journal_t *journal)
2013 {
2014 int err;
2015 journal_superblock_t *sb;
2016 int num_fc_blocks;
2017
2018 err = journal_get_superblock(journal);
2019 if (err)
2020 return err;
2021
2022 sb = journal->j_superblock;
2023
2024 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence);
2025 journal->j_tail = be32_to_cpu(sb->s_start);
2026 journal->j_first = be32_to_cpu(sb->s_first);
2027 journal->j_errno = be32_to_cpu(sb->s_errno);
2028 journal->j_last = be32_to_cpu(sb->s_maxlen);
2029
2030 if (jbd2_has_feature_fast_commit(journal)) {
2031 journal->j_fc_last = be32_to_cpu(sb->s_maxlen);
2032 num_fc_blocks = jbd2_journal_get_num_fc_blks(sb);
2033 if (journal->j_last - num_fc_blocks >= JBD2_MIN_JOURNAL_BLOCKS)
2034 journal->j_last = journal->j_fc_last - num_fc_blocks;
2035 journal->j_fc_first = journal->j_last + 1;
2036 journal->j_fc_off = 0;
2037 }
2038
2039 return 0;
2040 }
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051 int jbd2_journal_load(journal_t *journal)
2052 {
2053 int err;
2054 journal_superblock_t *sb;
2055
2056 err = load_superblock(journal);
2057 if (err)
2058 return err;
2059
2060 sb = journal->j_superblock;
2061
2062
2063
2064 if (journal->j_format_version >= 2) {
2065 if ((sb->s_feature_ro_compat &
2066 ~cpu_to_be32(JBD2_KNOWN_ROCOMPAT_FEATURES)) ||
2067 (sb->s_feature_incompat &
2068 ~cpu_to_be32(JBD2_KNOWN_INCOMPAT_FEATURES))) {
2069 printk(KERN_WARNING
2070 "JBD2: Unrecognised features on journal\n");
2071 return -EINVAL;
2072 }
2073 }
2074
2075
2076
2077
2078 err = jbd2_journal_create_slab(be32_to_cpu(sb->s_blocksize));
2079 if (err)
2080 return err;
2081
2082
2083
2084 if (jbd2_journal_recover(journal))
2085 goto recovery_error;
2086
2087 if (journal->j_failed_commit) {
2088 printk(KERN_ERR "JBD2: journal transaction %u on %s "
2089 "is corrupt.\n", journal->j_failed_commit,
2090 journal->j_devname);
2091 return -EFSCORRUPTED;
2092 }
2093
2094
2095
2096
2097 journal->j_flags &= ~JBD2_ABORT;
2098
2099
2100
2101
2102 if (journal_reset(journal))
2103 goto recovery_error;
2104
2105 journal->j_flags |= JBD2_LOADED;
2106 return 0;
2107
2108 recovery_error:
2109 printk(KERN_WARNING "JBD2: recovery failed\n");
2110 return -EIO;
2111 }
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121 int jbd2_journal_destroy(journal_t *journal)
2122 {
2123 int err = 0;
2124
2125
2126 journal_kill_thread(journal);
2127
2128
2129 if (journal->j_running_transaction)
2130 jbd2_journal_commit_transaction(journal);
2131
2132
2133
2134
2135 spin_lock(&journal->j_list_lock);
2136 while (journal->j_checkpoint_transactions != NULL) {
2137 spin_unlock(&journal->j_list_lock);
2138 mutex_lock_io(&journal->j_checkpoint_mutex);
2139 err = jbd2_log_do_checkpoint(journal);
2140 mutex_unlock(&journal->j_checkpoint_mutex);
2141
2142
2143
2144
2145 if (err) {
2146 jbd2_journal_destroy_checkpoint(journal);
2147 spin_lock(&journal->j_list_lock);
2148 break;
2149 }
2150 spin_lock(&journal->j_list_lock);
2151 }
2152
2153 J_ASSERT(journal->j_running_transaction == NULL);
2154 J_ASSERT(journal->j_committing_transaction == NULL);
2155 J_ASSERT(journal->j_checkpoint_transactions == NULL);
2156 spin_unlock(&journal->j_list_lock);
2157
2158
2159
2160
2161
2162
2163
2164 if (!is_journal_aborted(journal) &&
2165 test_bit(JBD2_CHECKPOINT_IO_ERROR, &journal->j_atomic_flags))
2166 jbd2_journal_abort(journal, -EIO);
2167
2168 if (journal->j_sb_buffer) {
2169 if (!is_journal_aborted(journal)) {
2170 mutex_lock_io(&journal->j_checkpoint_mutex);
2171
2172 write_lock(&journal->j_state_lock);
2173 journal->j_tail_sequence =
2174 ++journal->j_transaction_sequence;
2175 write_unlock(&journal->j_state_lock);
2176
2177 jbd2_mark_journal_empty(journal,
2178 REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
2179 mutex_unlock(&journal->j_checkpoint_mutex);
2180 } else
2181 err = -EIO;
2182 brelse(journal->j_sb_buffer);
2183 }
2184
2185 if (journal->j_shrinker.flags & SHRINKER_REGISTERED) {
2186 percpu_counter_destroy(&journal->j_checkpoint_jh_count);
2187 unregister_shrinker(&journal->j_shrinker);
2188 }
2189 if (journal->j_proc_entry)
2190 jbd2_stats_proc_exit(journal);
2191 iput(journal->j_inode);
2192 if (journal->j_revoke)
2193 jbd2_journal_destroy_revoke(journal);
2194 if (journal->j_chksum_driver)
2195 crypto_free_shash(journal->j_chksum_driver);
2196 kfree(journal->j_fc_wbuf);
2197 kfree(journal->j_wbuf);
2198 kfree(journal);
2199
2200 return err;
2201 }
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215 int jbd2_journal_check_used_features(journal_t *journal, unsigned long compat,
2216 unsigned long ro, unsigned long incompat)
2217 {
2218 journal_superblock_t *sb;
2219
2220 if (!compat && !ro && !incompat)
2221 return 1;
2222
2223 if (journal->j_format_version == 0 &&
2224 journal_get_superblock(journal) != 0)
2225 return 0;
2226 if (journal->j_format_version == 1)
2227 return 0;
2228
2229 sb = journal->j_superblock;
2230
2231 if (((be32_to_cpu(sb->s_feature_compat) & compat) == compat) &&
2232 ((be32_to_cpu(sb->s_feature_ro_compat) & ro) == ro) &&
2233 ((be32_to_cpu(sb->s_feature_incompat) & incompat) == incompat))
2234 return 1;
2235
2236 return 0;
2237 }
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250 int jbd2_journal_check_available_features(journal_t *journal, unsigned long compat,
2251 unsigned long ro, unsigned long incompat)
2252 {
2253 if (!compat && !ro && !incompat)
2254 return 1;
2255
2256
2257
2258
2259
2260 if (journal->j_format_version != 2)
2261 return 0;
2262
2263 if ((compat & JBD2_KNOWN_COMPAT_FEATURES) == compat &&
2264 (ro & JBD2_KNOWN_ROCOMPAT_FEATURES) == ro &&
2265 (incompat & JBD2_KNOWN_INCOMPAT_FEATURES) == incompat)
2266 return 1;
2267
2268 return 0;
2269 }
2270
2271 static int
2272 jbd2_journal_initialize_fast_commit(journal_t *journal)
2273 {
2274 journal_superblock_t *sb = journal->j_superblock;
2275 unsigned long long num_fc_blks;
2276
2277 num_fc_blks = jbd2_journal_get_num_fc_blks(sb);
2278 if (journal->j_last - num_fc_blks < JBD2_MIN_JOURNAL_BLOCKS)
2279 return -ENOSPC;
2280
2281
2282 WARN_ON(journal->j_fc_wbuf != NULL);
2283 journal->j_fc_wbuf = kmalloc_array(num_fc_blks,
2284 sizeof(struct buffer_head *), GFP_KERNEL);
2285 if (!journal->j_fc_wbuf)
2286 return -ENOMEM;
2287
2288 journal->j_fc_wbufsize = num_fc_blks;
2289 journal->j_fc_last = journal->j_last;
2290 journal->j_last = journal->j_fc_last - num_fc_blks;
2291 journal->j_fc_first = journal->j_last + 1;
2292 journal->j_fc_off = 0;
2293 journal->j_free = journal->j_last - journal->j_first;
2294 journal->j_max_transaction_buffers =
2295 jbd2_journal_get_max_txn_bufs(journal);
2296
2297 return 0;
2298 }
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312 int jbd2_journal_set_features(journal_t *journal, unsigned long compat,
2313 unsigned long ro, unsigned long incompat)
2314 {
2315 #define INCOMPAT_FEATURE_ON(f) \
2316 ((incompat & (f)) && !(sb->s_feature_incompat & cpu_to_be32(f)))
2317 #define COMPAT_FEATURE_ON(f) \
2318 ((compat & (f)) && !(sb->s_feature_compat & cpu_to_be32(f)))
2319 journal_superblock_t *sb;
2320
2321 if (jbd2_journal_check_used_features(journal, compat, ro, incompat))
2322 return 1;
2323
2324 if (!jbd2_journal_check_available_features(journal, compat, ro, incompat))
2325 return 0;
2326
2327
2328 if (incompat & JBD2_FEATURE_INCOMPAT_CSUM_V2) {
2329 incompat &= ~JBD2_FEATURE_INCOMPAT_CSUM_V2;
2330 incompat |= JBD2_FEATURE_INCOMPAT_CSUM_V3;
2331 }
2332
2333
2334 if (incompat & JBD2_FEATURE_INCOMPAT_CSUM_V3 &&
2335 compat & JBD2_FEATURE_COMPAT_CHECKSUM)
2336 compat &= ~JBD2_FEATURE_COMPAT_CHECKSUM;
2337
2338 jbd2_debug(1, "Setting new features 0x%lx/0x%lx/0x%lx\n",
2339 compat, ro, incompat);
2340
2341 sb = journal->j_superblock;
2342
2343 if (incompat & JBD2_FEATURE_INCOMPAT_FAST_COMMIT) {
2344 if (jbd2_journal_initialize_fast_commit(journal)) {
2345 pr_err("JBD2: Cannot enable fast commits.\n");
2346 return 0;
2347 }
2348 }
2349
2350
2351 if ((journal->j_chksum_driver == NULL) &&
2352 INCOMPAT_FEATURE_ON(JBD2_FEATURE_INCOMPAT_CSUM_V3)) {
2353 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
2354 if (IS_ERR(journal->j_chksum_driver)) {
2355 printk(KERN_ERR "JBD2: Cannot load crc32c driver.\n");
2356 journal->j_chksum_driver = NULL;
2357 return 0;
2358 }
2359
2360 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid,
2361 sizeof(sb->s_uuid));
2362 }
2363
2364 lock_buffer(journal->j_sb_buffer);
2365
2366
2367 if (INCOMPAT_FEATURE_ON(JBD2_FEATURE_INCOMPAT_CSUM_V3)) {
2368 sb->s_checksum_type = JBD2_CRC32C_CHKSUM;
2369 sb->s_feature_compat &=
2370 ~cpu_to_be32(JBD2_FEATURE_COMPAT_CHECKSUM);
2371 }
2372
2373
2374 if (COMPAT_FEATURE_ON(JBD2_FEATURE_COMPAT_CHECKSUM))
2375 sb->s_feature_incompat &=
2376 ~cpu_to_be32(JBD2_FEATURE_INCOMPAT_CSUM_V2 |
2377 JBD2_FEATURE_INCOMPAT_CSUM_V3);
2378
2379 sb->s_feature_compat |= cpu_to_be32(compat);
2380 sb->s_feature_ro_compat |= cpu_to_be32(ro);
2381 sb->s_feature_incompat |= cpu_to_be32(incompat);
2382 unlock_buffer(journal->j_sb_buffer);
2383 journal->j_revoke_records_per_block =
2384 journal_revoke_records_per_block(journal);
2385
2386 return 1;
2387 #undef COMPAT_FEATURE_ON
2388 #undef INCOMPAT_FEATURE_ON
2389 }
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402 void jbd2_journal_clear_features(journal_t *journal, unsigned long compat,
2403 unsigned long ro, unsigned long incompat)
2404 {
2405 journal_superblock_t *sb;
2406
2407 jbd2_debug(1, "Clear features 0x%lx/0x%lx/0x%lx\n",
2408 compat, ro, incompat);
2409
2410 sb = journal->j_superblock;
2411
2412 sb->s_feature_compat &= ~cpu_to_be32(compat);
2413 sb->s_feature_ro_compat &= ~cpu_to_be32(ro);
2414 sb->s_feature_incompat &= ~cpu_to_be32(incompat);
2415 journal->j_revoke_records_per_block =
2416 journal_revoke_records_per_block(journal);
2417 }
2418 EXPORT_SYMBOL(jbd2_journal_clear_features);
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434 int jbd2_journal_flush(journal_t *journal, unsigned int flags)
2435 {
2436 int err = 0;
2437 transaction_t *transaction = NULL;
2438
2439 write_lock(&journal->j_state_lock);
2440
2441
2442 if (journal->j_running_transaction) {
2443 transaction = journal->j_running_transaction;
2444 __jbd2_log_start_commit(journal, transaction->t_tid);
2445 } else if (journal->j_committing_transaction)
2446 transaction = journal->j_committing_transaction;
2447
2448
2449 if (transaction) {
2450 tid_t tid = transaction->t_tid;
2451
2452 write_unlock(&journal->j_state_lock);
2453 jbd2_log_wait_commit(journal, tid);
2454 } else {
2455 write_unlock(&journal->j_state_lock);
2456 }
2457
2458
2459 spin_lock(&journal->j_list_lock);
2460 while (!err && journal->j_checkpoint_transactions != NULL) {
2461 spin_unlock(&journal->j_list_lock);
2462 mutex_lock_io(&journal->j_checkpoint_mutex);
2463 err = jbd2_log_do_checkpoint(journal);
2464 mutex_unlock(&journal->j_checkpoint_mutex);
2465 spin_lock(&journal->j_list_lock);
2466 }
2467 spin_unlock(&journal->j_list_lock);
2468
2469 if (is_journal_aborted(journal))
2470 return -EIO;
2471
2472 mutex_lock_io(&journal->j_checkpoint_mutex);
2473 if (!err) {
2474 err = jbd2_cleanup_journal_tail(journal);
2475 if (err < 0) {
2476 mutex_unlock(&journal->j_checkpoint_mutex);
2477 goto out;
2478 }
2479 err = 0;
2480 }
2481
2482
2483
2484
2485
2486
2487 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
2488
2489 if (flags)
2490 err = __jbd2_journal_erase(journal, flags);
2491
2492 mutex_unlock(&journal->j_checkpoint_mutex);
2493 write_lock(&journal->j_state_lock);
2494 J_ASSERT(!journal->j_running_transaction);
2495 J_ASSERT(!journal->j_committing_transaction);
2496 J_ASSERT(!journal->j_checkpoint_transactions);
2497 J_ASSERT(journal->j_head == journal->j_tail);
2498 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
2499 write_unlock(&journal->j_state_lock);
2500 out:
2501 return err;
2502 }
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517 int jbd2_journal_wipe(journal_t *journal, int write)
2518 {
2519 int err = 0;
2520
2521 J_ASSERT (!(journal->j_flags & JBD2_LOADED));
2522
2523 err = load_superblock(journal);
2524 if (err)
2525 return err;
2526
2527 if (!journal->j_tail)
2528 goto no_recovery;
2529
2530 printk(KERN_WARNING "JBD2: %s recovery information on journal\n",
2531 write ? "Clearing" : "Ignoring");
2532
2533 err = jbd2_journal_skip_recovery(journal);
2534 if (write) {
2535
2536 mutex_lock_io(&journal->j_checkpoint_mutex);
2537 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
2538 mutex_unlock(&journal->j_checkpoint_mutex);
2539 }
2540
2541 no_recovery:
2542 return err;
2543 }
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586 void jbd2_journal_abort(journal_t *journal, int errno)
2587 {
2588 transaction_t *transaction;
2589
2590
2591
2592
2593
2594
2595
2596 mutex_lock(&journal->j_abort_mutex);
2597
2598
2599
2600
2601
2602 write_lock(&journal->j_state_lock);
2603 if (journal->j_flags & JBD2_ABORT) {
2604 int old_errno = journal->j_errno;
2605
2606 write_unlock(&journal->j_state_lock);
2607 if (old_errno != -ESHUTDOWN && errno == -ESHUTDOWN) {
2608 journal->j_errno = errno;
2609 jbd2_journal_update_sb_errno(journal);
2610 }
2611 mutex_unlock(&journal->j_abort_mutex);
2612 return;
2613 }
2614
2615
2616
2617
2618
2619 pr_err("Aborting journal on device %s.\n", journal->j_devname);
2620
2621 journal->j_flags |= JBD2_ABORT;
2622 journal->j_errno = errno;
2623 transaction = journal->j_running_transaction;
2624 if (transaction)
2625 __jbd2_log_start_commit(journal, transaction->t_tid);
2626 write_unlock(&journal->j_state_lock);
2627
2628
2629
2630
2631
2632 jbd2_journal_update_sb_errno(journal);
2633 mutex_unlock(&journal->j_abort_mutex);
2634 }
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647 int jbd2_journal_errno(journal_t *journal)
2648 {
2649 int err;
2650
2651 read_lock(&journal->j_state_lock);
2652 if (journal->j_flags & JBD2_ABORT)
2653 err = -EROFS;
2654 else
2655 err = journal->j_errno;
2656 read_unlock(&journal->j_state_lock);
2657 return err;
2658 }
2659
2660
2661
2662
2663
2664
2665
2666
2667 int jbd2_journal_clear_err(journal_t *journal)
2668 {
2669 int err = 0;
2670
2671 write_lock(&journal->j_state_lock);
2672 if (journal->j_flags & JBD2_ABORT)
2673 err = -EROFS;
2674 else
2675 journal->j_errno = 0;
2676 write_unlock(&journal->j_state_lock);
2677 return err;
2678 }
2679
2680
2681
2682
2683
2684
2685
2686
2687 void jbd2_journal_ack_err(journal_t *journal)
2688 {
2689 write_lock(&journal->j_state_lock);
2690 if (journal->j_errno)
2691 journal->j_flags |= JBD2_ACK_ERR;
2692 write_unlock(&journal->j_state_lock);
2693 }
2694
2695 int jbd2_journal_blocks_per_page(struct inode *inode)
2696 {
2697 return 1 << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
2698 }
2699
2700
2701
2702
2703 size_t journal_tag_bytes(journal_t *journal)
2704 {
2705 size_t sz;
2706
2707 if (jbd2_has_feature_csum3(journal))
2708 return sizeof(journal_block_tag3_t);
2709
2710 sz = sizeof(journal_block_tag_t);
2711
2712 if (jbd2_has_feature_csum2(journal))
2713 sz += sizeof(__u16);
2714
2715 if (jbd2_has_feature_64bit(journal))
2716 return sz;
2717 else
2718 return sz - sizeof(__u32);
2719 }
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736 #define JBD2_MAX_SLABS 8
2737 static struct kmem_cache *jbd2_slab[JBD2_MAX_SLABS];
2738
2739 static const char *jbd2_slab_names[JBD2_MAX_SLABS] = {
2740 "jbd2_1k", "jbd2_2k", "jbd2_4k", "jbd2_8k",
2741 "jbd2_16k", "jbd2_32k", "jbd2_64k", "jbd2_128k"
2742 };
2743
2744
2745 static void jbd2_journal_destroy_slabs(void)
2746 {
2747 int i;
2748
2749 for (i = 0; i < JBD2_MAX_SLABS; i++) {
2750 kmem_cache_destroy(jbd2_slab[i]);
2751 jbd2_slab[i] = NULL;
2752 }
2753 }
2754
2755 static int jbd2_journal_create_slab(size_t size)
2756 {
2757 static DEFINE_MUTEX(jbd2_slab_create_mutex);
2758 int i = order_base_2(size) - 10;
2759 size_t slab_size;
2760
2761 if (size == PAGE_SIZE)
2762 return 0;
2763
2764 if (i >= JBD2_MAX_SLABS)
2765 return -EINVAL;
2766
2767 if (unlikely(i < 0))
2768 i = 0;
2769 mutex_lock(&jbd2_slab_create_mutex);
2770 if (jbd2_slab[i]) {
2771 mutex_unlock(&jbd2_slab_create_mutex);
2772 return 0;
2773 }
2774
2775 slab_size = 1 << (i+10);
2776 jbd2_slab[i] = kmem_cache_create(jbd2_slab_names[i], slab_size,
2777 slab_size, 0, NULL);
2778 mutex_unlock(&jbd2_slab_create_mutex);
2779 if (!jbd2_slab[i]) {
2780 printk(KERN_EMERG "JBD2: no memory for jbd2_slab cache\n");
2781 return -ENOMEM;
2782 }
2783 return 0;
2784 }
2785
2786 static struct kmem_cache *get_slab(size_t size)
2787 {
2788 int i = order_base_2(size) - 10;
2789
2790 BUG_ON(i >= JBD2_MAX_SLABS);
2791 if (unlikely(i < 0))
2792 i = 0;
2793 BUG_ON(jbd2_slab[i] == NULL);
2794 return jbd2_slab[i];
2795 }
2796
2797 void *jbd2_alloc(size_t size, gfp_t flags)
2798 {
2799 void *ptr;
2800
2801 BUG_ON(size & (size-1));
2802
2803 if (size < PAGE_SIZE)
2804 ptr = kmem_cache_alloc(get_slab(size), flags);
2805 else
2806 ptr = (void *)__get_free_pages(flags, get_order(size));
2807
2808
2809
2810 BUG_ON(((unsigned long) ptr) & (size-1));
2811
2812 return ptr;
2813 }
2814
2815 void jbd2_free(void *ptr, size_t size)
2816 {
2817 if (size < PAGE_SIZE)
2818 kmem_cache_free(get_slab(size), ptr);
2819 else
2820 free_pages((unsigned long)ptr, get_order(size));
2821 };
2822
2823
2824
2825
2826 static struct kmem_cache *jbd2_journal_head_cache;
2827 #ifdef CONFIG_JBD2_DEBUG
2828 static atomic_t nr_journal_heads = ATOMIC_INIT(0);
2829 #endif
2830
2831 static int __init jbd2_journal_init_journal_head_cache(void)
2832 {
2833 J_ASSERT(!jbd2_journal_head_cache);
2834 jbd2_journal_head_cache = kmem_cache_create("jbd2_journal_head",
2835 sizeof(struct journal_head),
2836 0,
2837 SLAB_TEMPORARY | SLAB_TYPESAFE_BY_RCU,
2838 NULL);
2839 if (!jbd2_journal_head_cache) {
2840 printk(KERN_EMERG "JBD2: no memory for journal_head cache\n");
2841 return -ENOMEM;
2842 }
2843 return 0;
2844 }
2845
2846 static void jbd2_journal_destroy_journal_head_cache(void)
2847 {
2848 kmem_cache_destroy(jbd2_journal_head_cache);
2849 jbd2_journal_head_cache = NULL;
2850 }
2851
2852
2853
2854
2855 static struct journal_head *journal_alloc_journal_head(void)
2856 {
2857 struct journal_head *ret;
2858
2859 #ifdef CONFIG_JBD2_DEBUG
2860 atomic_inc(&nr_journal_heads);
2861 #endif
2862 ret = kmem_cache_zalloc(jbd2_journal_head_cache, GFP_NOFS);
2863 if (!ret) {
2864 jbd2_debug(1, "out of memory for journal_head\n");
2865 pr_notice_ratelimited("ENOMEM in %s, retrying.\n", __func__);
2866 ret = kmem_cache_zalloc(jbd2_journal_head_cache,
2867 GFP_NOFS | __GFP_NOFAIL);
2868 }
2869 if (ret)
2870 spin_lock_init(&ret->b_state_lock);
2871 return ret;
2872 }
2873
2874 static void journal_free_journal_head(struct journal_head *jh)
2875 {
2876 #ifdef CONFIG_JBD2_DEBUG
2877 atomic_dec(&nr_journal_heads);
2878 memset(jh, JBD2_POISON_FREE, sizeof(*jh));
2879 #endif
2880 kmem_cache_free(jbd2_journal_head_cache, jh);
2881 }
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924 struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh)
2925 {
2926 struct journal_head *jh;
2927 struct journal_head *new_jh = NULL;
2928
2929 repeat:
2930 if (!buffer_jbd(bh))
2931 new_jh = journal_alloc_journal_head();
2932
2933 jbd_lock_bh_journal_head(bh);
2934 if (buffer_jbd(bh)) {
2935 jh = bh2jh(bh);
2936 } else {
2937 J_ASSERT_BH(bh,
2938 (atomic_read(&bh->b_count) > 0) ||
2939 (bh->b_page && bh->b_page->mapping));
2940
2941 if (!new_jh) {
2942 jbd_unlock_bh_journal_head(bh);
2943 goto repeat;
2944 }
2945
2946 jh = new_jh;
2947 new_jh = NULL;
2948 set_buffer_jbd(bh);
2949 bh->b_private = jh;
2950 jh->b_bh = bh;
2951 get_bh(bh);
2952 BUFFER_TRACE(bh, "added journal_head");
2953 }
2954 jh->b_jcount++;
2955 jbd_unlock_bh_journal_head(bh);
2956 if (new_jh)
2957 journal_free_journal_head(new_jh);
2958 return bh->b_private;
2959 }
2960
2961
2962
2963
2964
2965 struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh)
2966 {
2967 struct journal_head *jh = NULL;
2968
2969 jbd_lock_bh_journal_head(bh);
2970 if (buffer_jbd(bh)) {
2971 jh = bh2jh(bh);
2972 jh->b_jcount++;
2973 }
2974 jbd_unlock_bh_journal_head(bh);
2975 return jh;
2976 }
2977 EXPORT_SYMBOL(jbd2_journal_grab_journal_head);
2978
2979 static void __journal_remove_journal_head(struct buffer_head *bh)
2980 {
2981 struct journal_head *jh = bh2jh(bh);
2982
2983 J_ASSERT_JH(jh, jh->b_transaction == NULL);
2984 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
2985 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
2986 J_ASSERT_JH(jh, jh->b_jlist == BJ_None);
2987 J_ASSERT_BH(bh, buffer_jbd(bh));
2988 J_ASSERT_BH(bh, jh2bh(jh) == bh);
2989 BUFFER_TRACE(bh, "remove journal_head");
2990
2991
2992 bh->b_private = NULL;
2993 jh->b_bh = NULL;
2994 clear_buffer_jbd(bh);
2995 }
2996
2997 static void journal_release_journal_head(struct journal_head *jh, size_t b_size)
2998 {
2999 if (jh->b_frozen_data) {
3000 printk(KERN_WARNING "%s: freeing b_frozen_data\n", __func__);
3001 jbd2_free(jh->b_frozen_data, b_size);
3002 }
3003 if (jh->b_committed_data) {
3004 printk(KERN_WARNING "%s: freeing b_committed_data\n", __func__);
3005 jbd2_free(jh->b_committed_data, b_size);
3006 }
3007 journal_free_journal_head(jh);
3008 }
3009
3010
3011
3012
3013
3014 void jbd2_journal_put_journal_head(struct journal_head *jh)
3015 {
3016 struct buffer_head *bh = jh2bh(jh);
3017
3018 jbd_lock_bh_journal_head(bh);
3019 J_ASSERT_JH(jh, jh->b_jcount > 0);
3020 --jh->b_jcount;
3021 if (!jh->b_jcount) {
3022 __journal_remove_journal_head(bh);
3023 jbd_unlock_bh_journal_head(bh);
3024 journal_release_journal_head(jh, bh->b_size);
3025 __brelse(bh);
3026 } else {
3027 jbd_unlock_bh_journal_head(bh);
3028 }
3029 }
3030 EXPORT_SYMBOL(jbd2_journal_put_journal_head);
3031
3032
3033
3034
3035 void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode)
3036 {
3037 jinode->i_transaction = NULL;
3038 jinode->i_next_transaction = NULL;
3039 jinode->i_vfs_inode = inode;
3040 jinode->i_flags = 0;
3041 jinode->i_dirty_start = 0;
3042 jinode->i_dirty_end = 0;
3043 INIT_LIST_HEAD(&jinode->i_list);
3044 }
3045
3046
3047
3048
3049
3050
3051 void jbd2_journal_release_jbd_inode(journal_t *journal,
3052 struct jbd2_inode *jinode)
3053 {
3054 if (!journal)
3055 return;
3056 restart:
3057 spin_lock(&journal->j_list_lock);
3058
3059 if (jinode->i_flags & JI_COMMIT_RUNNING) {
3060 wait_queue_head_t *wq;
3061 DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING);
3062 wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING);
3063 prepare_to_wait(wq, &wait.wq_entry, TASK_UNINTERRUPTIBLE);
3064 spin_unlock(&journal->j_list_lock);
3065 schedule();
3066 finish_wait(wq, &wait.wq_entry);
3067 goto restart;
3068 }
3069
3070 if (jinode->i_transaction) {
3071 list_del(&jinode->i_list);
3072 jinode->i_transaction = NULL;
3073 }
3074 spin_unlock(&journal->j_list_lock);
3075 }
3076
3077
3078 #ifdef CONFIG_PROC_FS
3079
3080 #define JBD2_STATS_PROC_NAME "fs/jbd2"
3081
3082 static void __init jbd2_create_jbd_stats_proc_entry(void)
3083 {
3084 proc_jbd2_stats = proc_mkdir(JBD2_STATS_PROC_NAME, NULL);
3085 }
3086
3087 static void __exit jbd2_remove_jbd_stats_proc_entry(void)
3088 {
3089 if (proc_jbd2_stats)
3090 remove_proc_entry(JBD2_STATS_PROC_NAME, NULL);
3091 }
3092
3093 #else
3094
3095 #define jbd2_create_jbd_stats_proc_entry() do {} while (0)
3096 #define jbd2_remove_jbd_stats_proc_entry() do {} while (0)
3097
3098 #endif
3099
3100 struct kmem_cache *jbd2_handle_cache, *jbd2_inode_cache;
3101
3102 static int __init jbd2_journal_init_inode_cache(void)
3103 {
3104 J_ASSERT(!jbd2_inode_cache);
3105 jbd2_inode_cache = KMEM_CACHE(jbd2_inode, 0);
3106 if (!jbd2_inode_cache) {
3107 pr_emerg("JBD2: failed to create inode cache\n");
3108 return -ENOMEM;
3109 }
3110 return 0;
3111 }
3112
3113 static int __init jbd2_journal_init_handle_cache(void)
3114 {
3115 J_ASSERT(!jbd2_handle_cache);
3116 jbd2_handle_cache = KMEM_CACHE(jbd2_journal_handle, SLAB_TEMPORARY);
3117 if (!jbd2_handle_cache) {
3118 printk(KERN_EMERG "JBD2: failed to create handle cache\n");
3119 return -ENOMEM;
3120 }
3121 return 0;
3122 }
3123
3124 static void jbd2_journal_destroy_inode_cache(void)
3125 {
3126 kmem_cache_destroy(jbd2_inode_cache);
3127 jbd2_inode_cache = NULL;
3128 }
3129
3130 static void jbd2_journal_destroy_handle_cache(void)
3131 {
3132 kmem_cache_destroy(jbd2_handle_cache);
3133 jbd2_handle_cache = NULL;
3134 }
3135
3136
3137
3138
3139
3140 static int __init journal_init_caches(void)
3141 {
3142 int ret;
3143
3144 ret = jbd2_journal_init_revoke_record_cache();
3145 if (ret == 0)
3146 ret = jbd2_journal_init_revoke_table_cache();
3147 if (ret == 0)
3148 ret = jbd2_journal_init_journal_head_cache();
3149 if (ret == 0)
3150 ret = jbd2_journal_init_handle_cache();
3151 if (ret == 0)
3152 ret = jbd2_journal_init_inode_cache();
3153 if (ret == 0)
3154 ret = jbd2_journal_init_transaction_cache();
3155 return ret;
3156 }
3157
3158 static void jbd2_journal_destroy_caches(void)
3159 {
3160 jbd2_journal_destroy_revoke_record_cache();
3161 jbd2_journal_destroy_revoke_table_cache();
3162 jbd2_journal_destroy_journal_head_cache();
3163 jbd2_journal_destroy_handle_cache();
3164 jbd2_journal_destroy_inode_cache();
3165 jbd2_journal_destroy_transaction_cache();
3166 jbd2_journal_destroy_slabs();
3167 }
3168
3169 static int __init journal_init(void)
3170 {
3171 int ret;
3172
3173 BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024);
3174
3175 ret = journal_init_caches();
3176 if (ret == 0) {
3177 jbd2_create_jbd_stats_proc_entry();
3178 } else {
3179 jbd2_journal_destroy_caches();
3180 }
3181 return ret;
3182 }
3183
3184 static void __exit journal_exit(void)
3185 {
3186 #ifdef CONFIG_JBD2_DEBUG
3187 int n = atomic_read(&nr_journal_heads);
3188 if (n)
3189 printk(KERN_ERR "JBD2: leaked %d journal_heads!\n", n);
3190 #endif
3191 jbd2_remove_jbd_stats_proc_entry();
3192 jbd2_journal_destroy_caches();
3193 }
3194
3195 MODULE_LICENSE("GPL");
3196 module_init(journal_init);
3197 module_exit(journal_exit);
3198