1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/module.h>
26#include <linux/time.h>
27#include <linux/fs.h>
28#include <linux/jbd2.h>
29#include <linux/errno.h>
30#include <linux/slab.h>
31#include <linux/init.h>
32#include <linux/mm.h>
33#include <linux/freezer.h>
34#include <linux/pagemap.h>
35#include <linux/kthread.h>
36#include <linux/poison.h>
37#include <linux/proc_fs.h>
38#include <linux/seq_file.h>
39#include <linux/math64.h>
40#include <linux/hash.h>
41#include <linux/log2.h>
42#include <linux/vmalloc.h>
43#include <linux/backing-dev.h>
44#include <linux/bitops.h>
45#include <linux/ratelimit.h>
46#include <linux/sched/mm.h>
47
48#define CREATE_TRACE_POINTS
49#include <trace/events/jbd2.h>
50
51#include <linux/uaccess.h>
52#include <asm/page.h>
53
54#ifdef CONFIG_JBD2_DEBUG
55ushort jbd2_journal_enable_debug __read_mostly;
56EXPORT_SYMBOL(jbd2_journal_enable_debug);
57
58module_param_named(jbd2_debug, jbd2_journal_enable_debug, ushort, 0644);
59MODULE_PARM_DESC(jbd2_debug, "Debugging level for jbd2");
60#endif
61
62EXPORT_SYMBOL(jbd2_journal_extend);
63EXPORT_SYMBOL(jbd2_journal_stop);
64EXPORT_SYMBOL(jbd2_journal_lock_updates);
65EXPORT_SYMBOL(jbd2_journal_unlock_updates);
66EXPORT_SYMBOL(jbd2_journal_get_write_access);
67EXPORT_SYMBOL(jbd2_journal_get_create_access);
68EXPORT_SYMBOL(jbd2_journal_get_undo_access);
69EXPORT_SYMBOL(jbd2_journal_set_triggers);
70EXPORT_SYMBOL(jbd2_journal_dirty_metadata);
71EXPORT_SYMBOL(jbd2_journal_forget);
72#if 0
73EXPORT_SYMBOL(journal_sync_buffer);
74#endif
75EXPORT_SYMBOL(jbd2_journal_flush);
76EXPORT_SYMBOL(jbd2_journal_revoke);
77
78EXPORT_SYMBOL(jbd2_journal_init_dev);
79EXPORT_SYMBOL(jbd2_journal_init_inode);
80EXPORT_SYMBOL(jbd2_journal_check_used_features);
81EXPORT_SYMBOL(jbd2_journal_check_available_features);
82EXPORT_SYMBOL(jbd2_journal_set_features);
83EXPORT_SYMBOL(jbd2_journal_load);
84EXPORT_SYMBOL(jbd2_journal_destroy);
85EXPORT_SYMBOL(jbd2_journal_abort);
86EXPORT_SYMBOL(jbd2_journal_errno);
87EXPORT_SYMBOL(jbd2_journal_ack_err);
88EXPORT_SYMBOL(jbd2_journal_clear_err);
89EXPORT_SYMBOL(jbd2_log_wait_commit);
90EXPORT_SYMBOL(jbd2_log_start_commit);
91EXPORT_SYMBOL(jbd2_journal_start_commit);
92EXPORT_SYMBOL(jbd2_journal_force_commit_nested);
93EXPORT_SYMBOL(jbd2_journal_wipe);
94EXPORT_SYMBOL(jbd2_journal_blocks_per_page);
95EXPORT_SYMBOL(jbd2_journal_invalidatepage);
96EXPORT_SYMBOL(jbd2_journal_try_to_free_buffers);
97EXPORT_SYMBOL(jbd2_journal_force_commit);
98EXPORT_SYMBOL(jbd2_journal_inode_add_write);
99EXPORT_SYMBOL(jbd2_journal_inode_add_wait);
100EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
101EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
102EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
103EXPORT_SYMBOL(jbd2_inode_cache);
104
105static void __journal_abort_soft (journal_t *journal, int errno);
106static int jbd2_journal_create_slab(size_t slab_size);
107
108#ifdef CONFIG_JBD2_DEBUG
109void __jbd2_debug(int level, const char *file, const char *func,
110 unsigned int line, const char *fmt, ...)
111{
112 struct va_format vaf;
113 va_list args;
114
115 if (level > jbd2_journal_enable_debug)
116 return;
117 va_start(args, fmt);
118 vaf.fmt = fmt;
119 vaf.va = &args;
120 printk(KERN_DEBUG "%s: (%s, %u): %pV\n", file, func, line, &vaf);
121 va_end(args);
122}
123EXPORT_SYMBOL(__jbd2_debug);
124#endif
125
126
127static int jbd2_verify_csum_type(journal_t *j, journal_superblock_t *sb)
128{
129 if (!jbd2_journal_has_csum_v2or3_feature(j))
130 return 1;
131
132 return sb->s_checksum_type == JBD2_CRC32C_CHKSUM;
133}
134
135static __be32 jbd2_superblock_csum(journal_t *j, journal_superblock_t *sb)
136{
137 __u32 csum;
138 __be32 old_csum;
139
140 old_csum = sb->s_checksum;
141 sb->s_checksum = 0;
142 csum = jbd2_chksum(j, ~0, (char *)sb, sizeof(journal_superblock_t));
143 sb->s_checksum = old_csum;
144
145 return cpu_to_be32(csum);
146}
147
148static int jbd2_superblock_csum_verify(journal_t *j, journal_superblock_t *sb)
149{
150 if (!jbd2_journal_has_csum_v2or3(j))
151 return 1;
152
153 return sb->s_checksum == jbd2_superblock_csum(j, sb);
154}
155
156static void jbd2_superblock_csum_set(journal_t *j, journal_superblock_t *sb)
157{
158 if (!jbd2_journal_has_csum_v2or3(j))
159 return;
160
161 sb->s_checksum = jbd2_superblock_csum(j, sb);
162}
163
164
165
166
167
168static void commit_timeout(unsigned long __data)
169{
170 struct task_struct * p = (struct task_struct *) __data;
171
172 wake_up_process(p);
173}
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191static int kjournald2(void *arg)
192{
193 journal_t *journal = arg;
194 transaction_t *transaction;
195
196
197
198
199
200 setup_timer(&journal->j_commit_timer, commit_timeout,
201 (unsigned long)current);
202
203 set_freezable();
204
205
206 journal->j_task = current;
207 wake_up(&journal->j_wait_done_commit);
208
209
210
211
212
213
214
215 memalloc_nofs_save();
216
217
218
219
220 write_lock(&journal->j_state_lock);
221
222loop:
223 if (journal->j_flags & JBD2_UNMOUNT)
224 goto end_loop;
225
226 jbd_debug(1, "commit_sequence=%d, commit_request=%d\n",
227 journal->j_commit_sequence, journal->j_commit_request);
228
229 if (journal->j_commit_sequence != journal->j_commit_request) {
230 jbd_debug(1, "OK, requests differ\n");
231 write_unlock(&journal->j_state_lock);
232 del_timer_sync(&journal->j_commit_timer);
233 jbd2_journal_commit_transaction(journal);
234 write_lock(&journal->j_state_lock);
235 goto loop;
236 }
237
238 wake_up(&journal->j_wait_done_commit);
239 if (freezing(current)) {
240
241
242
243
244
245 jbd_debug(1, "Now suspending kjournald2\n");
246 write_unlock(&journal->j_state_lock);
247 try_to_freeze();
248 write_lock(&journal->j_state_lock);
249 } else {
250
251
252
253
254 DEFINE_WAIT(wait);
255 int should_sleep = 1;
256
257 prepare_to_wait(&journal->j_wait_commit, &wait,
258 TASK_INTERRUPTIBLE);
259 if (journal->j_commit_sequence != journal->j_commit_request)
260 should_sleep = 0;
261 transaction = journal->j_running_transaction;
262 if (transaction && time_after_eq(jiffies,
263 transaction->t_expires))
264 should_sleep = 0;
265 if (journal->j_flags & JBD2_UNMOUNT)
266 should_sleep = 0;
267 if (should_sleep) {
268 write_unlock(&journal->j_state_lock);
269 schedule();
270 write_lock(&journal->j_state_lock);
271 }
272 finish_wait(&journal->j_wait_commit, &wait);
273 }
274
275 jbd_debug(1, "kjournald2 wakes\n");
276
277
278
279
280 transaction = journal->j_running_transaction;
281 if (transaction && time_after_eq(jiffies, transaction->t_expires)) {
282 journal->j_commit_request = transaction->t_tid;
283 jbd_debug(1, "woke because of timeout\n");
284 }
285 goto loop;
286
287end_loop:
288 del_timer_sync(&journal->j_commit_timer);
289 journal->j_task = NULL;
290 wake_up(&journal->j_wait_done_commit);
291 jbd_debug(1, "Journal thread exiting.\n");
292 write_unlock(&journal->j_state_lock);
293 return 0;
294}
295
296static int jbd2_journal_start_thread(journal_t *journal)
297{
298 struct task_struct *t;
299
300 t = kthread_run(kjournald2, journal, "jbd2/%s",
301 journal->j_devname);
302 if (IS_ERR(t))
303 return PTR_ERR(t);
304
305 wait_event(journal->j_wait_done_commit, journal->j_task != NULL);
306 return 0;
307}
308
309static void journal_kill_thread(journal_t *journal)
310{
311 write_lock(&journal->j_state_lock);
312 journal->j_flags |= JBD2_UNMOUNT;
313
314 while (journal->j_task) {
315 write_unlock(&journal->j_state_lock);
316 wake_up(&journal->j_wait_commit);
317 wait_event(journal->j_wait_done_commit, journal->j_task == NULL);
318 write_lock(&journal->j_state_lock);
319 }
320 write_unlock(&journal->j_state_lock);
321}
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
359 struct journal_head *jh_in,
360 struct buffer_head **bh_out,
361 sector_t blocknr)
362{
363 int need_copy_out = 0;
364 int done_copy_out = 0;
365 int do_escape = 0;
366 char *mapped_data;
367 struct buffer_head *new_bh;
368 struct page *new_page;
369 unsigned int new_offset;
370 struct buffer_head *bh_in = jh2bh(jh_in);
371 journal_t *journal = transaction->t_journal;
372
373
374
375
376
377
378
379
380
381
382 J_ASSERT_BH(bh_in, buffer_jbddirty(bh_in));
383
384 new_bh = alloc_buffer_head(GFP_NOFS|__GFP_NOFAIL);
385
386
387 atomic_set(&new_bh->b_count, 1);
388
389 jbd_lock_bh_state(bh_in);
390repeat:
391
392
393
394
395 if (jh_in->b_frozen_data) {
396 done_copy_out = 1;
397 new_page = virt_to_page(jh_in->b_frozen_data);
398 new_offset = offset_in_page(jh_in->b_frozen_data);
399 } else {
400 new_page = jh2bh(jh_in)->b_page;
401 new_offset = offset_in_page(jh2bh(jh_in)->b_data);
402 }
403
404 mapped_data = kmap_atomic(new_page);
405
406
407
408
409
410
411 if (!done_copy_out)
412 jbd2_buffer_frozen_trigger(jh_in, mapped_data + new_offset,
413 jh_in->b_triggers);
414
415
416
417
418 if (*((__be32 *)(mapped_data + new_offset)) ==
419 cpu_to_be32(JBD2_MAGIC_NUMBER)) {
420 need_copy_out = 1;
421 do_escape = 1;
422 }
423 kunmap_atomic(mapped_data);
424
425
426
427
428 if (need_copy_out && !done_copy_out) {
429 char *tmp;
430
431 jbd_unlock_bh_state(bh_in);
432 tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
433 if (!tmp) {
434 brelse(new_bh);
435 return -ENOMEM;
436 }
437 jbd_lock_bh_state(bh_in);
438 if (jh_in->b_frozen_data) {
439 jbd2_free(tmp, bh_in->b_size);
440 goto repeat;
441 }
442
443 jh_in->b_frozen_data = tmp;
444 mapped_data = kmap_atomic(new_page);
445 memcpy(tmp, mapped_data + new_offset, bh_in->b_size);
446 kunmap_atomic(mapped_data);
447
448 new_page = virt_to_page(tmp);
449 new_offset = offset_in_page(tmp);
450 done_copy_out = 1;
451
452
453
454
455
456
457 jh_in->b_frozen_triggers = jh_in->b_triggers;
458 }
459
460
461
462
463
464 if (do_escape) {
465 mapped_data = kmap_atomic(new_page);
466 *((unsigned int *)(mapped_data + new_offset)) = 0;
467 kunmap_atomic(mapped_data);
468 }
469
470 set_bh_page(new_bh, new_page, new_offset);
471 new_bh->b_size = bh_in->b_size;
472 new_bh->b_bdev = journal->j_dev;
473 new_bh->b_blocknr = blocknr;
474 new_bh->b_private = bh_in;
475 set_buffer_mapped(new_bh);
476 set_buffer_dirty(new_bh);
477
478 *bh_out = new_bh;
479
480
481
482
483
484
485 JBUFFER_TRACE(jh_in, "file as BJ_Shadow");
486 spin_lock(&journal->j_list_lock);
487 __jbd2_journal_file_buffer(jh_in, transaction, BJ_Shadow);
488 spin_unlock(&journal->j_list_lock);
489 set_buffer_shadow(bh_in);
490 jbd_unlock_bh_state(bh_in);
491
492 return do_escape | (done_copy_out << 1);
493}
494
495
496
497
498
499
500
501
502
503
504int __jbd2_log_start_commit(journal_t *journal, tid_t target)
505{
506
507 if (journal->j_commit_request == target)
508 return 0;
509
510
511
512
513
514
515 if (journal->j_running_transaction &&
516 journal->j_running_transaction->t_tid == target) {
517
518
519
520
521
522 journal->j_commit_request = target;
523 jbd_debug(1, "JBD2: requesting commit %d/%d\n",
524 journal->j_commit_request,
525 journal->j_commit_sequence);
526 journal->j_running_transaction->t_requested = jiffies;
527 wake_up(&journal->j_wait_commit);
528 return 1;
529 } else if (!tid_geq(journal->j_commit_request, target))
530
531
532
533 WARN_ONCE(1, "JBD2: bad log_start_commit: %u %u %u %u\n",
534 journal->j_commit_request,
535 journal->j_commit_sequence,
536 target, journal->j_running_transaction ?
537 journal->j_running_transaction->t_tid : 0);
538 return 0;
539}
540
541int jbd2_log_start_commit(journal_t *journal, tid_t tid)
542{
543 int ret;
544
545 write_lock(&journal->j_state_lock);
546 ret = __jbd2_log_start_commit(journal, tid);
547 write_unlock(&journal->j_state_lock);
548 return ret;
549}
550
551
552
553
554
555
556
557
558static int __jbd2_journal_force_commit(journal_t *journal)
559{
560 transaction_t *transaction = NULL;
561 tid_t tid;
562 int need_to_start = 0, ret = 0;
563
564 read_lock(&journal->j_state_lock);
565 if (journal->j_running_transaction && !current->journal_info) {
566 transaction = journal->j_running_transaction;
567 if (!tid_geq(journal->j_commit_request, transaction->t_tid))
568 need_to_start = 1;
569 } else if (journal->j_committing_transaction)
570 transaction = journal->j_committing_transaction;
571
572 if (!transaction) {
573
574 read_unlock(&journal->j_state_lock);
575 return 0;
576 }
577 tid = transaction->t_tid;
578 read_unlock(&journal->j_state_lock);
579 if (need_to_start)
580 jbd2_log_start_commit(journal, tid);
581 ret = jbd2_log_wait_commit(journal, tid);
582 if (!ret)
583 ret = 1;
584
585 return ret;
586}
587
588
589
590
591
592
593
594
595
596int jbd2_journal_force_commit_nested(journal_t *journal)
597{
598 int ret;
599
600 ret = __jbd2_journal_force_commit(journal);
601 return ret > 0;
602}
603
604
605
606
607
608
609
610
611int jbd2_journal_force_commit(journal_t *journal)
612{
613 int ret;
614
615 J_ASSERT(!current->journal_info);
616 ret = __jbd2_journal_force_commit(journal);
617 if (ret > 0)
618 ret = 0;
619 return ret;
620}
621
622
623
624
625
626
627int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid)
628{
629 int ret = 0;
630
631 write_lock(&journal->j_state_lock);
632 if (journal->j_running_transaction) {
633 tid_t tid = journal->j_running_transaction->t_tid;
634
635 __jbd2_log_start_commit(journal, tid);
636
637
638 if (ptid)
639 *ptid = tid;
640 ret = 1;
641 } else if (journal->j_committing_transaction) {
642
643
644
645
646 if (ptid)
647 *ptid = journal->j_committing_transaction->t_tid;
648 ret = 1;
649 }
650 write_unlock(&journal->j_state_lock);
651 return ret;
652}
653
654
655
656
657
658
659
660int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid)
661{
662 int ret = 0;
663 transaction_t *commit_trans;
664
665 if (!(journal->j_flags & JBD2_BARRIER))
666 return 0;
667 read_lock(&journal->j_state_lock);
668
669 if (tid_geq(journal->j_commit_sequence, tid))
670 goto out;
671 commit_trans = journal->j_committing_transaction;
672 if (!commit_trans || commit_trans->t_tid != tid) {
673 ret = 1;
674 goto out;
675 }
676
677
678
679
680 if (journal->j_fs_dev != journal->j_dev) {
681 if (!commit_trans->t_need_data_flush ||
682 commit_trans->t_state >= T_COMMIT_DFLUSH)
683 goto out;
684 } else {
685 if (commit_trans->t_state >= T_COMMIT_JFLUSH)
686 goto out;
687 }
688 ret = 1;
689out:
690 read_unlock(&journal->j_state_lock);
691 return ret;
692}
693EXPORT_SYMBOL(jbd2_trans_will_send_data_barrier);
694
695
696
697
698
699int jbd2_log_wait_commit(journal_t *journal, tid_t tid)
700{
701 int err = 0;
702
703 read_lock(&journal->j_state_lock);
704#ifdef CONFIG_PROVE_LOCKING
705
706
707
708
709
710 if (tid_gt(tid, journal->j_commit_sequence) &&
711 (!journal->j_committing_transaction ||
712 journal->j_committing_transaction->t_tid != tid)) {
713 read_unlock(&journal->j_state_lock);
714 jbd2_might_wait_for_commit(journal);
715 read_lock(&journal->j_state_lock);
716 }
717#endif
718#ifdef CONFIG_JBD2_DEBUG
719 if (!tid_geq(journal->j_commit_request, tid)) {
720 printk(KERN_ERR
721 "%s: error: j_commit_request=%d, tid=%d\n",
722 __func__, journal->j_commit_request, tid);
723 }
724#endif
725 while (tid_gt(tid, journal->j_commit_sequence)) {
726 jbd_debug(1, "JBD2: want %d, j_commit_sequence=%d\n",
727 tid, journal->j_commit_sequence);
728 read_unlock(&journal->j_state_lock);
729 wake_up(&journal->j_wait_commit);
730 wait_event(journal->j_wait_done_commit,
731 !tid_gt(tid, journal->j_commit_sequence));
732 read_lock(&journal->j_state_lock);
733 }
734 read_unlock(&journal->j_state_lock);
735
736 if (unlikely(is_journal_aborted(journal)))
737 err = -EIO;
738 return err;
739}
740
741
742
743
744
745
746
747
748int jbd2_complete_transaction(journal_t *journal, tid_t tid)
749{
750 int need_to_wait = 1;
751
752 read_lock(&journal->j_state_lock);
753 if (journal->j_running_transaction &&
754 journal->j_running_transaction->t_tid == tid) {
755 if (journal->j_commit_request != tid) {
756
757 read_unlock(&journal->j_state_lock);
758 jbd2_log_start_commit(journal, tid);
759 goto wait_commit;
760 }
761 } else if (!(journal->j_committing_transaction &&
762 journal->j_committing_transaction->t_tid == tid))
763 need_to_wait = 0;
764 read_unlock(&journal->j_state_lock);
765 if (!need_to_wait)
766 return 0;
767wait_commit:
768 return jbd2_log_wait_commit(journal, tid);
769}
770EXPORT_SYMBOL(jbd2_complete_transaction);
771
772
773
774
775
776int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp)
777{
778 unsigned long blocknr;
779
780 write_lock(&journal->j_state_lock);
781 J_ASSERT(journal->j_free > 1);
782
783 blocknr = journal->j_head;
784 journal->j_head++;
785 journal->j_free--;
786 if (journal->j_head == journal->j_last)
787 journal->j_head = journal->j_first;
788 write_unlock(&journal->j_state_lock);
789 return jbd2_journal_bmap(journal, blocknr, retp);
790}
791
792
793
794
795
796
797
798
799int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
800 unsigned long long *retp)
801{
802 int err = 0;
803 unsigned long long ret;
804
805 if (journal->j_inode) {
806 ret = bmap(journal->j_inode, blocknr);
807 if (ret)
808 *retp = ret;
809 else {
810 printk(KERN_ALERT "%s: journal block not found "
811 "at offset %lu on %s\n",
812 __func__, blocknr, journal->j_devname);
813 err = -EIO;
814 __journal_abort_soft(journal, err);
815 }
816 } else {
817 *retp = blocknr;
818 }
819 return err;
820}
821
822
823
824
825
826
827
828
829
830
831
832struct buffer_head *
833jbd2_journal_get_descriptor_buffer(transaction_t *transaction, int type)
834{
835 journal_t *journal = transaction->t_journal;
836 struct buffer_head *bh;
837 unsigned long long blocknr;
838 journal_header_t *header;
839 int err;
840
841 err = jbd2_journal_next_log_block(journal, &blocknr);
842
843 if (err)
844 return NULL;
845
846 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
847 if (!bh)
848 return NULL;
849 lock_buffer(bh);
850 memset(bh->b_data, 0, journal->j_blocksize);
851 header = (journal_header_t *)bh->b_data;
852 header->h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
853 header->h_blocktype = cpu_to_be32(type);
854 header->h_sequence = cpu_to_be32(transaction->t_tid);
855 set_buffer_uptodate(bh);
856 unlock_buffer(bh);
857 BUFFER_TRACE(bh, "return this buffer");
858 return bh;
859}
860
861void jbd2_descriptor_block_csum_set(journal_t *j, struct buffer_head *bh)
862{
863 struct jbd2_journal_block_tail *tail;
864 __u32 csum;
865
866 if (!jbd2_journal_has_csum_v2or3(j))
867 return;
868
869 tail = (struct jbd2_journal_block_tail *)(bh->b_data + j->j_blocksize -
870 sizeof(struct jbd2_journal_block_tail));
871 tail->t_checksum = 0;
872 csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
873 tail->t_checksum = cpu_to_be32(csum);
874}
875
876
877
878
879
880
881
882
883
884
885
886int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
887 unsigned long *block)
888{
889 transaction_t *transaction;
890 int ret;
891
892 read_lock(&journal->j_state_lock);
893 spin_lock(&journal->j_list_lock);
894 transaction = journal->j_checkpoint_transactions;
895 if (transaction) {
896 *tid = transaction->t_tid;
897 *block = transaction->t_log_start;
898 } else if ((transaction = journal->j_committing_transaction) != NULL) {
899 *tid = transaction->t_tid;
900 *block = transaction->t_log_start;
901 } else if ((transaction = journal->j_running_transaction) != NULL) {
902 *tid = transaction->t_tid;
903 *block = journal->j_head;
904 } else {
905 *tid = journal->j_transaction_sequence;
906 *block = journal->j_head;
907 }
908 ret = tid_gt(*tid, journal->j_tail_sequence);
909 spin_unlock(&journal->j_list_lock);
910 read_unlock(&journal->j_state_lock);
911
912 return ret;
913}
914
915
916
917
918
919
920
921
922
923
924
925int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
926{
927 unsigned long freed;
928 int ret;
929
930 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
931
932
933
934
935
936
937
938 ret = jbd2_journal_update_sb_log_tail(journal, tid, block,
939 REQ_SYNC | REQ_FUA);
940 if (ret)
941 goto out;
942
943 write_lock(&journal->j_state_lock);
944 freed = block - journal->j_tail;
945 if (block < journal->j_tail)
946 freed += journal->j_last - journal->j_first;
947
948 trace_jbd2_update_log_tail(journal, tid, block, freed);
949 jbd_debug(1,
950 "Cleaning journal tail from %d to %d (offset %lu), "
951 "freeing %lu\n",
952 journal->j_tail_sequence, tid, block, freed);
953
954 journal->j_free += freed;
955 journal->j_tail_sequence = tid;
956 journal->j_tail = block;
957 write_unlock(&journal->j_state_lock);
958
959out:
960 return ret;
961}
962
963
964
965
966
967
968void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
969{
970 mutex_lock_io(&journal->j_checkpoint_mutex);
971 if (tid_gt(tid, journal->j_tail_sequence))
972 __jbd2_update_log_tail(journal, tid, block);
973 mutex_unlock(&journal->j_checkpoint_mutex);
974}
975
976struct jbd2_stats_proc_session {
977 journal_t *journal;
978 struct transaction_stats_s *stats;
979 int start;
980 int max;
981};
982
983static void *jbd2_seq_info_start(struct seq_file *seq, loff_t *pos)
984{
985 return *pos ? NULL : SEQ_START_TOKEN;
986}
987
988static void *jbd2_seq_info_next(struct seq_file *seq, void *v, loff_t *pos)
989{
990 return NULL;
991}
992
993static int jbd2_seq_info_show(struct seq_file *seq, void *v)
994{
995 struct jbd2_stats_proc_session *s = seq->private;
996
997 if (v != SEQ_START_TOKEN)
998 return 0;
999 seq_printf(seq, "%lu transactions (%lu requested), "
1000 "each up to %u blocks\n",
1001 s->stats->ts_tid, s->stats->ts_requested,
1002 s->journal->j_max_transaction_buffers);
1003 if (s->stats->ts_tid == 0)
1004 return 0;
1005 seq_printf(seq, "average: \n %ums waiting for transaction\n",
1006 jiffies_to_msecs(s->stats->run.rs_wait / s->stats->ts_tid));
1007 seq_printf(seq, " %ums request delay\n",
1008 (s->stats->ts_requested == 0) ? 0 :
1009 jiffies_to_msecs(s->stats->run.rs_request_delay /
1010 s->stats->ts_requested));
1011 seq_printf(seq, " %ums running transaction\n",
1012 jiffies_to_msecs(s->stats->run.rs_running / s->stats->ts_tid));
1013 seq_printf(seq, " %ums transaction was being locked\n",
1014 jiffies_to_msecs(s->stats->run.rs_locked / s->stats->ts_tid));
1015 seq_printf(seq, " %ums flushing data (in ordered mode)\n",
1016 jiffies_to_msecs(s->stats->run.rs_flushing / s->stats->ts_tid));
1017 seq_printf(seq, " %ums logging transaction\n",
1018 jiffies_to_msecs(s->stats->run.rs_logging / s->stats->ts_tid));
1019 seq_printf(seq, " %lluus average transaction commit time\n",
1020 div_u64(s->journal->j_average_commit_time, 1000));
1021 seq_printf(seq, " %lu handles per transaction\n",
1022 s->stats->run.rs_handle_count / s->stats->ts_tid);
1023 seq_printf(seq, " %lu blocks per transaction\n",
1024 s->stats->run.rs_blocks / s->stats->ts_tid);
1025 seq_printf(seq, " %lu logged blocks per transaction\n",
1026 s->stats->run.rs_blocks_logged / s->stats->ts_tid);
1027 return 0;
1028}
1029
1030static void jbd2_seq_info_stop(struct seq_file *seq, void *v)
1031{
1032}
1033
1034static const struct seq_operations jbd2_seq_info_ops = {
1035 .start = jbd2_seq_info_start,
1036 .next = jbd2_seq_info_next,
1037 .stop = jbd2_seq_info_stop,
1038 .show = jbd2_seq_info_show,
1039};
1040
1041static int jbd2_seq_info_open(struct inode *inode, struct file *file)
1042{
1043 journal_t *journal = PDE_DATA(inode);
1044 struct jbd2_stats_proc_session *s;
1045 int rc, size;
1046
1047 s = kmalloc(sizeof(*s), GFP_KERNEL);
1048 if (s == NULL)
1049 return -ENOMEM;
1050 size = sizeof(struct transaction_stats_s);
1051 s->stats = kmalloc(size, GFP_KERNEL);
1052 if (s->stats == NULL) {
1053 kfree(s);
1054 return -ENOMEM;
1055 }
1056 spin_lock(&journal->j_history_lock);
1057 memcpy(s->stats, &journal->j_stats, size);
1058 s->journal = journal;
1059 spin_unlock(&journal->j_history_lock);
1060
1061 rc = seq_open(file, &jbd2_seq_info_ops);
1062 if (rc == 0) {
1063 struct seq_file *m = file->private_data;
1064 m->private = s;
1065 } else {
1066 kfree(s->stats);
1067 kfree(s);
1068 }
1069 return rc;
1070
1071}
1072
1073static int jbd2_seq_info_release(struct inode *inode, struct file *file)
1074{
1075 struct seq_file *seq = file->private_data;
1076 struct jbd2_stats_proc_session *s = seq->private;
1077 kfree(s->stats);
1078 kfree(s);
1079 return seq_release(inode, file);
1080}
1081
1082static const struct file_operations jbd2_seq_info_fops = {
1083 .owner = THIS_MODULE,
1084 .open = jbd2_seq_info_open,
1085 .read = seq_read,
1086 .llseek = seq_lseek,
1087 .release = jbd2_seq_info_release,
1088};
1089
1090static struct proc_dir_entry *proc_jbd2_stats;
1091
1092static void jbd2_stats_proc_init(journal_t *journal)
1093{
1094 journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats);
1095 if (journal->j_proc_entry) {
1096 proc_create_data("info", S_IRUGO, journal->j_proc_entry,
1097 &jbd2_seq_info_fops, journal);
1098 }
1099}
1100
1101static void jbd2_stats_proc_exit(journal_t *journal)
1102{
1103 remove_proc_entry("info", journal->j_proc_entry);
1104 remove_proc_entry(journal->j_devname, proc_jbd2_stats);
1105}
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116static journal_t *journal_init_common(struct block_device *bdev,
1117 struct block_device *fs_dev,
1118 unsigned long long start, int len, int blocksize)
1119{
1120 static struct lock_class_key jbd2_trans_commit_key;
1121 journal_t *journal;
1122 int err;
1123 struct buffer_head *bh;
1124 int n;
1125
1126 journal = kzalloc(sizeof(*journal), GFP_KERNEL);
1127 if (!journal)
1128 return NULL;
1129
1130 init_waitqueue_head(&journal->j_wait_transaction_locked);
1131 init_waitqueue_head(&journal->j_wait_done_commit);
1132 init_waitqueue_head(&journal->j_wait_commit);
1133 init_waitqueue_head(&journal->j_wait_updates);
1134 init_waitqueue_head(&journal->j_wait_reserved);
1135 mutex_init(&journal->j_barrier);
1136 mutex_init(&journal->j_checkpoint_mutex);
1137 spin_lock_init(&journal->j_revoke_lock);
1138 spin_lock_init(&journal->j_list_lock);
1139 rwlock_init(&journal->j_state_lock);
1140
1141 journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE);
1142 journal->j_min_batch_time = 0;
1143 journal->j_max_batch_time = 15000;
1144 atomic_set(&journal->j_reserved_credits, 0);
1145
1146
1147 journal->j_flags = JBD2_ABORT;
1148
1149
1150 err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
1151 if (err)
1152 goto err_cleanup;
1153
1154 spin_lock_init(&journal->j_history_lock);
1155
1156 lockdep_init_map(&journal->j_trans_commit_map, "jbd2_handle",
1157 &jbd2_trans_commit_key, 0);
1158
1159
1160 journal->j_blocksize = blocksize;
1161 journal->j_dev = bdev;
1162 journal->j_fs_dev = fs_dev;
1163 journal->j_blk_offset = start;
1164 journal->j_maxlen = len;
1165 n = journal->j_blocksize / sizeof(journal_block_tag_t);
1166 journal->j_wbufsize = n;
1167 journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *),
1168 GFP_KERNEL);
1169 if (!journal->j_wbuf)
1170 goto err_cleanup;
1171
1172 bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize);
1173 if (!bh) {
1174 pr_err("%s: Cannot get buffer for journal superblock\n",
1175 __func__);
1176 goto err_cleanup;
1177 }
1178 journal->j_sb_buffer = bh;
1179 journal->j_superblock = (journal_superblock_t *)bh->b_data;
1180
1181 return journal;
1182
1183err_cleanup:
1184 kfree(journal->j_wbuf);
1185 jbd2_journal_destroy_revoke(journal);
1186 kfree(journal);
1187 return NULL;
1188}
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213journal_t *jbd2_journal_init_dev(struct block_device *bdev,
1214 struct block_device *fs_dev,
1215 unsigned long long start, int len, int blocksize)
1216{
1217 journal_t *journal;
1218
1219 journal = journal_init_common(bdev, fs_dev, start, len, blocksize);
1220 if (!journal)
1221 return NULL;
1222
1223 bdevname(journal->j_dev, journal->j_devname);
1224 strreplace(journal->j_devname, '/', '!');
1225 jbd2_stats_proc_init(journal);
1226
1227 return journal;
1228}
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238journal_t *jbd2_journal_init_inode(struct inode *inode)
1239{
1240 journal_t *journal;
1241 char *p;
1242 unsigned long long blocknr;
1243
1244 blocknr = bmap(inode, 0);
1245 if (!blocknr) {
1246 pr_err("%s: Cannot locate journal superblock\n",
1247 __func__);
1248 return NULL;
1249 }
1250
1251 jbd_debug(1, "JBD2: inode %s/%ld, size %lld, bits %d, blksize %ld\n",
1252 inode->i_sb->s_id, inode->i_ino, (long long) inode->i_size,
1253 inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
1254
1255 journal = journal_init_common(inode->i_sb->s_bdev, inode->i_sb->s_bdev,
1256 blocknr, inode->i_size >> inode->i_sb->s_blocksize_bits,
1257 inode->i_sb->s_blocksize);
1258 if (!journal)
1259 return NULL;
1260
1261 journal->j_inode = inode;
1262 bdevname(journal->j_dev, journal->j_devname);
1263 p = strreplace(journal->j_devname, '/', '!');
1264 sprintf(p, "-%lu", journal->j_inode->i_ino);
1265 jbd2_stats_proc_init(journal);
1266
1267 return journal;
1268}
1269
1270
1271
1272
1273
1274
1275static void journal_fail_superblock (journal_t *journal)
1276{
1277 struct buffer_head *bh = journal->j_sb_buffer;
1278 brelse(bh);
1279 journal->j_sb_buffer = NULL;
1280}
1281
1282
1283
1284
1285
1286
1287
1288
1289static int journal_reset(journal_t *journal)
1290{
1291 journal_superblock_t *sb = journal->j_superblock;
1292 unsigned long long first, last;
1293
1294 first = be32_to_cpu(sb->s_first);
1295 last = be32_to_cpu(sb->s_maxlen);
1296 if (first + JBD2_MIN_JOURNAL_BLOCKS > last + 1) {
1297 printk(KERN_ERR "JBD2: Journal too short (blocks %llu-%llu).\n",
1298 first, last);
1299 journal_fail_superblock(journal);
1300 return -EINVAL;
1301 }
1302
1303 journal->j_first = first;
1304 journal->j_last = last;
1305
1306 journal->j_head = first;
1307 journal->j_tail = first;
1308 journal->j_free = last - first;
1309
1310 journal->j_tail_sequence = journal->j_transaction_sequence;
1311 journal->j_commit_sequence = journal->j_transaction_sequence - 1;
1312 journal->j_commit_request = journal->j_commit_sequence;
1313
1314 journal->j_max_transaction_buffers = journal->j_maxlen / 4;
1315
1316
1317
1318
1319
1320
1321
1322 if (sb->s_start == 0) {
1323 jbd_debug(1, "JBD2: Skipping superblock update on recovered sb "
1324 "(start %ld, seq %d, errno %d)\n",
1325 journal->j_tail, journal->j_tail_sequence,
1326 journal->j_errno);
1327 journal->j_flags |= JBD2_FLUSHED;
1328 } else {
1329
1330 mutex_lock_io(&journal->j_checkpoint_mutex);
1331
1332
1333
1334
1335
1336
1337 jbd2_journal_update_sb_log_tail(journal,
1338 journal->j_tail_sequence,
1339 journal->j_tail,
1340 REQ_SYNC | REQ_FUA);
1341 mutex_unlock(&journal->j_checkpoint_mutex);
1342 }
1343 return jbd2_journal_start_thread(journal);
1344}
1345
1346static int jbd2_write_superblock(journal_t *journal, int write_flags)
1347{
1348 struct buffer_head *bh = journal->j_sb_buffer;
1349 journal_superblock_t *sb = journal->j_superblock;
1350 int ret;
1351
1352 trace_jbd2_write_superblock(journal, write_flags);
1353 if (!(journal->j_flags & JBD2_BARRIER))
1354 write_flags &= ~(REQ_FUA | REQ_PREFLUSH);
1355 lock_buffer(bh);
1356 if (buffer_write_io_error(bh)) {
1357
1358
1359
1360
1361
1362
1363
1364
1365 printk(KERN_ERR "JBD2: previous I/O error detected "
1366 "for journal superblock update for %s.\n",
1367 journal->j_devname);
1368 clear_buffer_write_io_error(bh);
1369 set_buffer_uptodate(bh);
1370 }
1371 jbd2_superblock_csum_set(journal, sb);
1372 get_bh(bh);
1373 bh->b_end_io = end_buffer_write_sync;
1374 ret = submit_bh(REQ_OP_WRITE, write_flags, bh);
1375 wait_on_buffer(bh);
1376 if (buffer_write_io_error(bh)) {
1377 clear_buffer_write_io_error(bh);
1378 set_buffer_uptodate(bh);
1379 ret = -EIO;
1380 }
1381 if (ret) {
1382 printk(KERN_ERR "JBD2: Error %d detected when updating "
1383 "journal superblock for %s.\n", ret,
1384 journal->j_devname);
1385 jbd2_journal_abort(journal, ret);
1386 }
1387
1388 return ret;
1389}
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
1402 unsigned long tail_block, int write_op)
1403{
1404 journal_superblock_t *sb = journal->j_superblock;
1405 int ret;
1406
1407 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1408 jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
1409 tail_block, tail_tid);
1410
1411 sb->s_sequence = cpu_to_be32(tail_tid);
1412 sb->s_start = cpu_to_be32(tail_block);
1413
1414 ret = jbd2_write_superblock(journal, write_op);
1415 if (ret)
1416 goto out;
1417
1418
1419 write_lock(&journal->j_state_lock);
1420 WARN_ON(!sb->s_sequence);
1421 journal->j_flags &= ~JBD2_FLUSHED;
1422 write_unlock(&journal->j_state_lock);
1423
1424out:
1425 return ret;
1426}
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436static void jbd2_mark_journal_empty(journal_t *journal, int write_op)
1437{
1438 journal_superblock_t *sb = journal->j_superblock;
1439
1440 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
1441 read_lock(&journal->j_state_lock);
1442
1443 if (sb->s_start == 0) {
1444 read_unlock(&journal->j_state_lock);
1445 return;
1446 }
1447 jbd_debug(1, "JBD2: Marking journal as empty (seq %d)\n",
1448 journal->j_tail_sequence);
1449
1450 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
1451 sb->s_start = cpu_to_be32(0);
1452 read_unlock(&journal->j_state_lock);
1453
1454 jbd2_write_superblock(journal, write_op);
1455
1456
1457 write_lock(&journal->j_state_lock);
1458 journal->j_flags |= JBD2_FLUSHED;
1459 write_unlock(&journal->j_state_lock);
1460}
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470void jbd2_journal_update_sb_errno(journal_t *journal)
1471{
1472 journal_superblock_t *sb = journal->j_superblock;
1473
1474 read_lock(&journal->j_state_lock);
1475 jbd_debug(1, "JBD2: updating superblock error (errno %d)\n",
1476 journal->j_errno);
1477 sb->s_errno = cpu_to_be32(journal->j_errno);
1478 read_unlock(&journal->j_state_lock);
1479
1480 jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA);
1481}
1482EXPORT_SYMBOL(jbd2_journal_update_sb_errno);
1483
1484
1485
1486
1487
1488static int journal_get_superblock(journal_t *journal)
1489{
1490 struct buffer_head *bh;
1491 journal_superblock_t *sb;
1492 int err = -EIO;
1493
1494 bh = journal->j_sb_buffer;
1495
1496 J_ASSERT(bh != NULL);
1497 if (!buffer_uptodate(bh)) {
1498 ll_rw_block(REQ_OP_READ, 0, 1, &bh);
1499 wait_on_buffer(bh);
1500 if (!buffer_uptodate(bh)) {
1501 printk(KERN_ERR
1502 "JBD2: IO error reading journal superblock\n");
1503 goto out;
1504 }
1505 }
1506
1507 if (buffer_verified(bh))
1508 return 0;
1509
1510 sb = journal->j_superblock;
1511
1512 err = -EINVAL;
1513
1514 if (sb->s_header.h_magic != cpu_to_be32(JBD2_MAGIC_NUMBER) ||
1515 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) {
1516 printk(KERN_WARNING "JBD2: no valid journal superblock found\n");
1517 goto out;
1518 }
1519
1520 switch(be32_to_cpu(sb->s_header.h_blocktype)) {
1521 case JBD2_SUPERBLOCK_V1:
1522 journal->j_format_version = 1;
1523 break;
1524 case JBD2_SUPERBLOCK_V2:
1525 journal->j_format_version = 2;
1526 break;
1527 default:
1528 printk(KERN_WARNING "JBD2: unrecognised superblock format ID\n");
1529 goto out;
1530 }
1531
1532 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen)
1533 journal->j_maxlen = be32_to_cpu(sb->s_maxlen);
1534 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) {
1535 printk(KERN_WARNING "JBD2: journal file too short\n");
1536 goto out;
1537 }
1538
1539 if (be32_to_cpu(sb->s_first) == 0 ||
1540 be32_to_cpu(sb->s_first) >= journal->j_maxlen) {
1541 printk(KERN_WARNING
1542 "JBD2: Invalid start block of journal: %u\n",
1543 be32_to_cpu(sb->s_first));
1544 goto out;
1545 }
1546
1547 if (jbd2_has_feature_csum2(journal) &&
1548 jbd2_has_feature_csum3(journal)) {
1549
1550 printk(KERN_ERR "JBD2: Can't enable checksumming v2 and v3 "
1551 "at the same time!\n");
1552 goto out;
1553 }
1554
1555 if (jbd2_journal_has_csum_v2or3_feature(journal) &&
1556 jbd2_has_feature_checksum(journal)) {
1557
1558 printk(KERN_ERR "JBD2: Can't enable checksumming v1 and v2/3 "
1559 "at the same time!\n");
1560 goto out;
1561 }
1562
1563 if (!jbd2_verify_csum_type(journal, sb)) {
1564 printk(KERN_ERR "JBD2: Unknown checksum type\n");
1565 goto out;
1566 }
1567
1568
1569 if (jbd2_journal_has_csum_v2or3_feature(journal)) {
1570 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
1571 if (IS_ERR(journal->j_chksum_driver)) {
1572 printk(KERN_ERR "JBD2: Cannot load crc32c driver.\n");
1573 err = PTR_ERR(journal->j_chksum_driver);
1574 journal->j_chksum_driver = NULL;
1575 goto out;
1576 }
1577 }
1578
1579
1580 if (!jbd2_superblock_csum_verify(journal, sb)) {
1581 printk(KERN_ERR "JBD2: journal checksum error\n");
1582 err = -EFSBADCRC;
1583 goto out;
1584 }
1585
1586
1587 if (jbd2_journal_has_csum_v2or3(journal))
1588 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid,
1589 sizeof(sb->s_uuid));
1590
1591 set_buffer_verified(bh);
1592
1593 return 0;
1594
1595out:
1596 journal_fail_superblock(journal);
1597 return err;
1598}
1599
1600
1601
1602
1603
1604
1605static int load_superblock(journal_t *journal)
1606{
1607 int err;
1608 journal_superblock_t *sb;
1609
1610 err = journal_get_superblock(journal);
1611 if (err)
1612 return err;
1613
1614 sb = journal->j_superblock;
1615
1616 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence);
1617 journal->j_tail = be32_to_cpu(sb->s_start);
1618 journal->j_first = be32_to_cpu(sb->s_first);
1619 journal->j_last = be32_to_cpu(sb->s_maxlen);
1620 journal->j_errno = be32_to_cpu(sb->s_errno);
1621
1622 return 0;
1623}
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634int jbd2_journal_load(journal_t *journal)
1635{
1636 int err;
1637 journal_superblock_t *sb;
1638
1639 err = load_superblock(journal);
1640 if (err)
1641 return err;
1642
1643 sb = journal->j_superblock;
1644
1645
1646
1647 if (journal->j_format_version >= 2) {
1648 if ((sb->s_feature_ro_compat &
1649 ~cpu_to_be32(JBD2_KNOWN_ROCOMPAT_FEATURES)) ||
1650 (sb->s_feature_incompat &
1651 ~cpu_to_be32(JBD2_KNOWN_INCOMPAT_FEATURES))) {
1652 printk(KERN_WARNING
1653 "JBD2: Unrecognised features on journal\n");
1654 return -EINVAL;
1655 }
1656 }
1657
1658
1659
1660
1661 err = jbd2_journal_create_slab(be32_to_cpu(sb->s_blocksize));
1662 if (err)
1663 return err;
1664
1665
1666
1667 if (jbd2_journal_recover(journal))
1668 goto recovery_error;
1669
1670 if (journal->j_failed_commit) {
1671 printk(KERN_ERR "JBD2: journal transaction %u on %s "
1672 "is corrupt.\n", journal->j_failed_commit,
1673 journal->j_devname);
1674 return -EFSCORRUPTED;
1675 }
1676
1677
1678
1679
1680 if (journal_reset(journal))
1681 goto recovery_error;
1682
1683 journal->j_flags &= ~JBD2_ABORT;
1684 journal->j_flags |= JBD2_LOADED;
1685 return 0;
1686
1687recovery_error:
1688 printk(KERN_WARNING "JBD2: recovery failed\n");
1689 return -EIO;
1690}
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700int jbd2_journal_destroy(journal_t *journal)
1701{
1702 int err = 0;
1703
1704
1705 journal_kill_thread(journal);
1706
1707
1708 if (journal->j_running_transaction)
1709 jbd2_journal_commit_transaction(journal);
1710
1711
1712
1713
1714 spin_lock(&journal->j_list_lock);
1715 while (journal->j_checkpoint_transactions != NULL) {
1716 spin_unlock(&journal->j_list_lock);
1717 mutex_lock_io(&journal->j_checkpoint_mutex);
1718 err = jbd2_log_do_checkpoint(journal);
1719 mutex_unlock(&journal->j_checkpoint_mutex);
1720
1721
1722
1723
1724 if (err) {
1725 jbd2_journal_destroy_checkpoint(journal);
1726 spin_lock(&journal->j_list_lock);
1727 break;
1728 }
1729 spin_lock(&journal->j_list_lock);
1730 }
1731
1732 J_ASSERT(journal->j_running_transaction == NULL);
1733 J_ASSERT(journal->j_committing_transaction == NULL);
1734 J_ASSERT(journal->j_checkpoint_transactions == NULL);
1735 spin_unlock(&journal->j_list_lock);
1736
1737 if (journal->j_sb_buffer) {
1738 if (!is_journal_aborted(journal)) {
1739 mutex_lock_io(&journal->j_checkpoint_mutex);
1740
1741 write_lock(&journal->j_state_lock);
1742 journal->j_tail_sequence =
1743 ++journal->j_transaction_sequence;
1744 write_unlock(&journal->j_state_lock);
1745
1746 jbd2_mark_journal_empty(journal,
1747 REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
1748 mutex_unlock(&journal->j_checkpoint_mutex);
1749 } else
1750 err = -EIO;
1751 brelse(journal->j_sb_buffer);
1752 }
1753
1754 if (journal->j_proc_entry)
1755 jbd2_stats_proc_exit(journal);
1756 iput(journal->j_inode);
1757 if (journal->j_revoke)
1758 jbd2_journal_destroy_revoke(journal);
1759 if (journal->j_chksum_driver)
1760 crypto_free_shash(journal->j_chksum_driver);
1761 kfree(journal->j_wbuf);
1762 kfree(journal);
1763
1764 return err;
1765}
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779int jbd2_journal_check_used_features (journal_t *journal, unsigned long compat,
1780 unsigned long ro, unsigned long incompat)
1781{
1782 journal_superblock_t *sb;
1783
1784 if (!compat && !ro && !incompat)
1785 return 1;
1786
1787 if (journal->j_format_version == 0 &&
1788 journal_get_superblock(journal) != 0)
1789 return 0;
1790 if (journal->j_format_version == 1)
1791 return 0;
1792
1793 sb = journal->j_superblock;
1794
1795 if (((be32_to_cpu(sb->s_feature_compat) & compat) == compat) &&
1796 ((be32_to_cpu(sb->s_feature_ro_compat) & ro) == ro) &&
1797 ((be32_to_cpu(sb->s_feature_incompat) & incompat) == incompat))
1798 return 1;
1799
1800 return 0;
1801}
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814int jbd2_journal_check_available_features (journal_t *journal, unsigned long compat,
1815 unsigned long ro, unsigned long incompat)
1816{
1817 if (!compat && !ro && !incompat)
1818 return 1;
1819
1820
1821
1822
1823
1824 if (journal->j_format_version != 2)
1825 return 0;
1826
1827 if ((compat & JBD2_KNOWN_COMPAT_FEATURES) == compat &&
1828 (ro & JBD2_KNOWN_ROCOMPAT_FEATURES) == ro &&
1829 (incompat & JBD2_KNOWN_INCOMPAT_FEATURES) == incompat)
1830 return 1;
1831
1832 return 0;
1833}
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847int jbd2_journal_set_features (journal_t *journal, unsigned long compat,
1848 unsigned long ro, unsigned long incompat)
1849{
1850#define INCOMPAT_FEATURE_ON(f) \
1851 ((incompat & (f)) && !(sb->s_feature_incompat & cpu_to_be32(f)))
1852#define COMPAT_FEATURE_ON(f) \
1853 ((compat & (f)) && !(sb->s_feature_compat & cpu_to_be32(f)))
1854 journal_superblock_t *sb;
1855
1856 if (jbd2_journal_check_used_features(journal, compat, ro, incompat))
1857 return 1;
1858
1859 if (!jbd2_journal_check_available_features(journal, compat, ro, incompat))
1860 return 0;
1861
1862
1863 if (incompat & JBD2_FEATURE_INCOMPAT_CSUM_V2) {
1864 incompat &= ~JBD2_FEATURE_INCOMPAT_CSUM_V2;
1865 incompat |= JBD2_FEATURE_INCOMPAT_CSUM_V3;
1866 }
1867
1868
1869 if (incompat & JBD2_FEATURE_INCOMPAT_CSUM_V3 &&
1870 compat & JBD2_FEATURE_COMPAT_CHECKSUM)
1871 compat &= ~JBD2_FEATURE_COMPAT_CHECKSUM;
1872
1873 jbd_debug(1, "Setting new features 0x%lx/0x%lx/0x%lx\n",
1874 compat, ro, incompat);
1875
1876 sb = journal->j_superblock;
1877
1878
1879 if (INCOMPAT_FEATURE_ON(JBD2_FEATURE_INCOMPAT_CSUM_V3)) {
1880 sb->s_checksum_type = JBD2_CRC32C_CHKSUM;
1881 sb->s_feature_compat &=
1882 ~cpu_to_be32(JBD2_FEATURE_COMPAT_CHECKSUM);
1883
1884
1885 if (journal->j_chksum_driver == NULL) {
1886 journal->j_chksum_driver = crypto_alloc_shash("crc32c",
1887 0, 0);
1888 if (IS_ERR(journal->j_chksum_driver)) {
1889 printk(KERN_ERR "JBD2: Cannot load crc32c "
1890 "driver.\n");
1891 journal->j_chksum_driver = NULL;
1892 return 0;
1893 }
1894
1895
1896 journal->j_csum_seed = jbd2_chksum(journal, ~0,
1897 sb->s_uuid,
1898 sizeof(sb->s_uuid));
1899 }
1900 }
1901
1902
1903 if (COMPAT_FEATURE_ON(JBD2_FEATURE_COMPAT_CHECKSUM))
1904 sb->s_feature_incompat &=
1905 ~cpu_to_be32(JBD2_FEATURE_INCOMPAT_CSUM_V2 |
1906 JBD2_FEATURE_INCOMPAT_CSUM_V3);
1907
1908 sb->s_feature_compat |= cpu_to_be32(compat);
1909 sb->s_feature_ro_compat |= cpu_to_be32(ro);
1910 sb->s_feature_incompat |= cpu_to_be32(incompat);
1911
1912 return 1;
1913#undef COMPAT_FEATURE_ON
1914#undef INCOMPAT_FEATURE_ON
1915}
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928void jbd2_journal_clear_features(journal_t *journal, unsigned long compat,
1929 unsigned long ro, unsigned long incompat)
1930{
1931 journal_superblock_t *sb;
1932
1933 jbd_debug(1, "Clear features 0x%lx/0x%lx/0x%lx\n",
1934 compat, ro, incompat);
1935
1936 sb = journal->j_superblock;
1937
1938 sb->s_feature_compat &= ~cpu_to_be32(compat);
1939 sb->s_feature_ro_compat &= ~cpu_to_be32(ro);
1940 sb->s_feature_incompat &= ~cpu_to_be32(incompat);
1941}
1942EXPORT_SYMBOL(jbd2_journal_clear_features);
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953int jbd2_journal_flush(journal_t *journal)
1954{
1955 int err = 0;
1956 transaction_t *transaction = NULL;
1957
1958 write_lock(&journal->j_state_lock);
1959
1960
1961 if (journal->j_running_transaction) {
1962 transaction = journal->j_running_transaction;
1963 __jbd2_log_start_commit(journal, transaction->t_tid);
1964 } else if (journal->j_committing_transaction)
1965 transaction = journal->j_committing_transaction;
1966
1967
1968 if (transaction) {
1969 tid_t tid = transaction->t_tid;
1970
1971 write_unlock(&journal->j_state_lock);
1972 jbd2_log_wait_commit(journal, tid);
1973 } else {
1974 write_unlock(&journal->j_state_lock);
1975 }
1976
1977
1978 spin_lock(&journal->j_list_lock);
1979 while (!err && journal->j_checkpoint_transactions != NULL) {
1980 spin_unlock(&journal->j_list_lock);
1981 mutex_lock_io(&journal->j_checkpoint_mutex);
1982 err = jbd2_log_do_checkpoint(journal);
1983 mutex_unlock(&journal->j_checkpoint_mutex);
1984 spin_lock(&journal->j_list_lock);
1985 }
1986 spin_unlock(&journal->j_list_lock);
1987
1988 if (is_journal_aborted(journal))
1989 return -EIO;
1990
1991 mutex_lock_io(&journal->j_checkpoint_mutex);
1992 if (!err) {
1993 err = jbd2_cleanup_journal_tail(journal);
1994 if (err < 0) {
1995 mutex_unlock(&journal->j_checkpoint_mutex);
1996 goto out;
1997 }
1998 err = 0;
1999 }
2000
2001
2002
2003
2004
2005
2006 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
2007 mutex_unlock(&journal->j_checkpoint_mutex);
2008 write_lock(&journal->j_state_lock);
2009 J_ASSERT(!journal->j_running_transaction);
2010 J_ASSERT(!journal->j_committing_transaction);
2011 J_ASSERT(!journal->j_checkpoint_transactions);
2012 J_ASSERT(journal->j_head == journal->j_tail);
2013 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
2014 write_unlock(&journal->j_state_lock);
2015out:
2016 return err;
2017}
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032int jbd2_journal_wipe(journal_t *journal, int write)
2033{
2034 int err = 0;
2035
2036 J_ASSERT (!(journal->j_flags & JBD2_LOADED));
2037
2038 err = load_superblock(journal);
2039 if (err)
2040 return err;
2041
2042 if (!journal->j_tail)
2043 goto no_recovery;
2044
2045 printk(KERN_WARNING "JBD2: %s recovery information on journal\n",
2046 write ? "Clearing" : "Ignoring");
2047
2048 err = jbd2_journal_skip_recovery(journal);
2049 if (write) {
2050
2051 mutex_lock(&journal->j_checkpoint_mutex);
2052 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA);
2053 mutex_unlock(&journal->j_checkpoint_mutex);
2054 }
2055
2056 no_recovery:
2057 return err;
2058}
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073void __jbd2_journal_abort_hard(journal_t *journal)
2074{
2075 transaction_t *transaction;
2076
2077 if (journal->j_flags & JBD2_ABORT)
2078 return;
2079
2080 printk(KERN_ERR "Aborting journal on device %s.\n",
2081 journal->j_devname);
2082
2083 write_lock(&journal->j_state_lock);
2084 journal->j_flags |= JBD2_ABORT;
2085 transaction = journal->j_running_transaction;
2086 if (transaction)
2087 __jbd2_log_start_commit(journal, transaction->t_tid);
2088 write_unlock(&journal->j_state_lock);
2089}
2090
2091
2092
2093static void __journal_abort_soft (journal_t *journal, int errno)
2094{
2095 if (journal->j_flags & JBD2_ABORT)
2096 return;
2097
2098 if (!journal->j_errno)
2099 journal->j_errno = errno;
2100
2101 __jbd2_journal_abort_hard(journal);
2102
2103 if (errno) {
2104 jbd2_journal_update_sb_errno(journal);
2105 write_lock(&journal->j_state_lock);
2106 journal->j_flags |= JBD2_REC_ERR;
2107 write_unlock(&journal->j_state_lock);
2108 }
2109}
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157void jbd2_journal_abort(journal_t *journal, int errno)
2158{
2159 __journal_abort_soft(journal, errno);
2160}
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173int jbd2_journal_errno(journal_t *journal)
2174{
2175 int err;
2176
2177 read_lock(&journal->j_state_lock);
2178 if (journal->j_flags & JBD2_ABORT)
2179 err = -EROFS;
2180 else
2181 err = journal->j_errno;
2182 read_unlock(&journal->j_state_lock);
2183 return err;
2184}
2185
2186
2187
2188
2189
2190
2191
2192
2193int jbd2_journal_clear_err(journal_t *journal)
2194{
2195 int err = 0;
2196
2197 write_lock(&journal->j_state_lock);
2198 if (journal->j_flags & JBD2_ABORT)
2199 err = -EROFS;
2200 else
2201 journal->j_errno = 0;
2202 write_unlock(&journal->j_state_lock);
2203 return err;
2204}
2205
2206
2207
2208
2209
2210
2211
2212
2213void jbd2_journal_ack_err(journal_t *journal)
2214{
2215 write_lock(&journal->j_state_lock);
2216 if (journal->j_errno)
2217 journal->j_flags |= JBD2_ACK_ERR;
2218 write_unlock(&journal->j_state_lock);
2219}
2220
2221int jbd2_journal_blocks_per_page(struct inode *inode)
2222{
2223 return 1 << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
2224}
2225
2226
2227
2228
2229size_t journal_tag_bytes(journal_t *journal)
2230{
2231 size_t sz;
2232
2233 if (jbd2_has_feature_csum3(journal))
2234 return sizeof(journal_block_tag3_t);
2235
2236 sz = sizeof(journal_block_tag_t);
2237
2238 if (jbd2_has_feature_csum2(journal))
2239 sz += sizeof(__u16);
2240
2241 if (jbd2_has_feature_64bit(journal))
2242 return sz;
2243 else
2244 return sz - sizeof(__u32);
2245}
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262#define JBD2_MAX_SLABS 8
2263static struct kmem_cache *jbd2_slab[JBD2_MAX_SLABS];
2264
2265static const char *jbd2_slab_names[JBD2_MAX_SLABS] = {
2266 "jbd2_1k", "jbd2_2k", "jbd2_4k", "jbd2_8k",
2267 "jbd2_16k", "jbd2_32k", "jbd2_64k", "jbd2_128k"
2268};
2269
2270
2271static void jbd2_journal_destroy_slabs(void)
2272{
2273 int i;
2274
2275 for (i = 0; i < JBD2_MAX_SLABS; i++) {
2276 if (jbd2_slab[i])
2277 kmem_cache_destroy(jbd2_slab[i]);
2278 jbd2_slab[i] = NULL;
2279 }
2280}
2281
2282static int jbd2_journal_create_slab(size_t size)
2283{
2284 static DEFINE_MUTEX(jbd2_slab_create_mutex);
2285 int i = order_base_2(size) - 10;
2286 size_t slab_size;
2287
2288 if (size == PAGE_SIZE)
2289 return 0;
2290
2291 if (i >= JBD2_MAX_SLABS)
2292 return -EINVAL;
2293
2294 if (unlikely(i < 0))
2295 i = 0;
2296 mutex_lock(&jbd2_slab_create_mutex);
2297 if (jbd2_slab[i]) {
2298 mutex_unlock(&jbd2_slab_create_mutex);
2299 return 0;
2300 }
2301
2302 slab_size = 1 << (i+10);
2303 jbd2_slab[i] = kmem_cache_create(jbd2_slab_names[i], slab_size,
2304 slab_size, 0, NULL);
2305 mutex_unlock(&jbd2_slab_create_mutex);
2306 if (!jbd2_slab[i]) {
2307 printk(KERN_EMERG "JBD2: no memory for jbd2_slab cache\n");
2308 return -ENOMEM;
2309 }
2310 return 0;
2311}
2312
2313static struct kmem_cache *get_slab(size_t size)
2314{
2315 int i = order_base_2(size) - 10;
2316
2317 BUG_ON(i >= JBD2_MAX_SLABS);
2318 if (unlikely(i < 0))
2319 i = 0;
2320 BUG_ON(jbd2_slab[i] == NULL);
2321 return jbd2_slab[i];
2322}
2323
2324void *jbd2_alloc(size_t size, gfp_t flags)
2325{
2326 void *ptr;
2327
2328 BUG_ON(size & (size-1));
2329
2330 if (size < PAGE_SIZE)
2331 ptr = kmem_cache_alloc(get_slab(size), flags);
2332 else
2333 ptr = (void *)__get_free_pages(flags, get_order(size));
2334
2335
2336
2337 BUG_ON(((unsigned long) ptr) & (size-1));
2338
2339 return ptr;
2340}
2341
2342void jbd2_free(void *ptr, size_t size)
2343{
2344 if (size < PAGE_SIZE)
2345 kmem_cache_free(get_slab(size), ptr);
2346 else
2347 free_pages((unsigned long)ptr, get_order(size));
2348};
2349
2350
2351
2352
2353static struct kmem_cache *jbd2_journal_head_cache;
2354#ifdef CONFIG_JBD2_DEBUG
2355static atomic_t nr_journal_heads = ATOMIC_INIT(0);
2356#endif
2357
2358static int jbd2_journal_init_journal_head_cache(void)
2359{
2360 int retval;
2361
2362 J_ASSERT(jbd2_journal_head_cache == NULL);
2363 jbd2_journal_head_cache = kmem_cache_create("jbd2_journal_head",
2364 sizeof(struct journal_head),
2365 0,
2366 SLAB_TEMPORARY | SLAB_TYPESAFE_BY_RCU,
2367 NULL);
2368 retval = 0;
2369 if (!jbd2_journal_head_cache) {
2370 retval = -ENOMEM;
2371 printk(KERN_EMERG "JBD2: no memory for journal_head cache\n");
2372 }
2373 return retval;
2374}
2375
2376static void jbd2_journal_destroy_journal_head_cache(void)
2377{
2378 if (jbd2_journal_head_cache) {
2379 kmem_cache_destroy(jbd2_journal_head_cache);
2380 jbd2_journal_head_cache = NULL;
2381 }
2382}
2383
2384
2385
2386
2387static struct journal_head *journal_alloc_journal_head(void)
2388{
2389 struct journal_head *ret;
2390
2391#ifdef CONFIG_JBD2_DEBUG
2392 atomic_inc(&nr_journal_heads);
2393#endif
2394 ret = kmem_cache_zalloc(jbd2_journal_head_cache, GFP_NOFS);
2395 if (!ret) {
2396 jbd_debug(1, "out of memory for journal_head\n");
2397 pr_notice_ratelimited("ENOMEM in %s, retrying.\n", __func__);
2398 ret = kmem_cache_zalloc(jbd2_journal_head_cache,
2399 GFP_NOFS | __GFP_NOFAIL);
2400 }
2401 return ret;
2402}
2403
2404static void journal_free_journal_head(struct journal_head *jh)
2405{
2406#ifdef CONFIG_JBD2_DEBUG
2407 atomic_dec(&nr_journal_heads);
2408 memset(jh, JBD2_POISON_FREE, sizeof(*jh));
2409#endif
2410 kmem_cache_free(jbd2_journal_head_cache, jh);
2411}
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh)
2455{
2456 struct journal_head *jh;
2457 struct journal_head *new_jh = NULL;
2458
2459repeat:
2460 if (!buffer_jbd(bh))
2461 new_jh = journal_alloc_journal_head();
2462
2463 jbd_lock_bh_journal_head(bh);
2464 if (buffer_jbd(bh)) {
2465 jh = bh2jh(bh);
2466 } else {
2467 J_ASSERT_BH(bh,
2468 (atomic_read(&bh->b_count) > 0) ||
2469 (bh->b_page && bh->b_page->mapping));
2470
2471 if (!new_jh) {
2472 jbd_unlock_bh_journal_head(bh);
2473 goto repeat;
2474 }
2475
2476 jh = new_jh;
2477 new_jh = NULL;
2478 set_buffer_jbd(bh);
2479 bh->b_private = jh;
2480 jh->b_bh = bh;
2481 get_bh(bh);
2482 BUFFER_TRACE(bh, "added journal_head");
2483 }
2484 jh->b_jcount++;
2485 jbd_unlock_bh_journal_head(bh);
2486 if (new_jh)
2487 journal_free_journal_head(new_jh);
2488 return bh->b_private;
2489}
2490
2491
2492
2493
2494
2495struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh)
2496{
2497 struct journal_head *jh = NULL;
2498
2499 jbd_lock_bh_journal_head(bh);
2500 if (buffer_jbd(bh)) {
2501 jh = bh2jh(bh);
2502 jh->b_jcount++;
2503 }
2504 jbd_unlock_bh_journal_head(bh);
2505 return jh;
2506}
2507
2508static void __journal_remove_journal_head(struct buffer_head *bh)
2509{
2510 struct journal_head *jh = bh2jh(bh);
2511
2512 J_ASSERT_JH(jh, jh->b_jcount >= 0);
2513 J_ASSERT_JH(jh, jh->b_transaction == NULL);
2514 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
2515 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
2516 J_ASSERT_JH(jh, jh->b_jlist == BJ_None);
2517 J_ASSERT_BH(bh, buffer_jbd(bh));
2518 J_ASSERT_BH(bh, jh2bh(jh) == bh);
2519 BUFFER_TRACE(bh, "remove journal_head");
2520 if (jh->b_frozen_data) {
2521 printk(KERN_WARNING "%s: freeing b_frozen_data\n", __func__);
2522 jbd2_free(jh->b_frozen_data, bh->b_size);
2523 }
2524 if (jh->b_committed_data) {
2525 printk(KERN_WARNING "%s: freeing b_committed_data\n", __func__);
2526 jbd2_free(jh->b_committed_data, bh->b_size);
2527 }
2528 bh->b_private = NULL;
2529 jh->b_bh = NULL;
2530 clear_buffer_jbd(bh);
2531 journal_free_journal_head(jh);
2532}
2533
2534
2535
2536
2537
2538void jbd2_journal_put_journal_head(struct journal_head *jh)
2539{
2540 struct buffer_head *bh = jh2bh(jh);
2541
2542 jbd_lock_bh_journal_head(bh);
2543 J_ASSERT_JH(jh, jh->b_jcount > 0);
2544 --jh->b_jcount;
2545 if (!jh->b_jcount) {
2546 __journal_remove_journal_head(bh);
2547 jbd_unlock_bh_journal_head(bh);
2548 __brelse(bh);
2549 } else
2550 jbd_unlock_bh_journal_head(bh);
2551}
2552
2553
2554
2555
2556void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode)
2557{
2558 jinode->i_transaction = NULL;
2559 jinode->i_next_transaction = NULL;
2560 jinode->i_vfs_inode = inode;
2561 jinode->i_flags = 0;
2562 INIT_LIST_HEAD(&jinode->i_list);
2563}
2564
2565
2566
2567
2568
2569
2570void jbd2_journal_release_jbd_inode(journal_t *journal,
2571 struct jbd2_inode *jinode)
2572{
2573 if (!journal)
2574 return;
2575restart:
2576 spin_lock(&journal->j_list_lock);
2577
2578 if (jinode->i_flags & JI_COMMIT_RUNNING) {
2579 wait_queue_head_t *wq;
2580 DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING);
2581 wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING);
2582 prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE);
2583 spin_unlock(&journal->j_list_lock);
2584 schedule();
2585 finish_wait(wq, &wait.wait);
2586 goto restart;
2587 }
2588
2589 if (jinode->i_transaction) {
2590 list_del(&jinode->i_list);
2591 jinode->i_transaction = NULL;
2592 }
2593 spin_unlock(&journal->j_list_lock);
2594}
2595
2596
2597#ifdef CONFIG_PROC_FS
2598
2599#define JBD2_STATS_PROC_NAME "fs/jbd2"
2600
2601static void __init jbd2_create_jbd_stats_proc_entry(void)
2602{
2603 proc_jbd2_stats = proc_mkdir(JBD2_STATS_PROC_NAME, NULL);
2604}
2605
2606static void __exit jbd2_remove_jbd_stats_proc_entry(void)
2607{
2608 if (proc_jbd2_stats)
2609 remove_proc_entry(JBD2_STATS_PROC_NAME, NULL);
2610}
2611
2612#else
2613
2614#define jbd2_create_jbd_stats_proc_entry() do {} while (0)
2615#define jbd2_remove_jbd_stats_proc_entry() do {} while (0)
2616
2617#endif
2618
2619struct kmem_cache *jbd2_handle_cache, *jbd2_inode_cache;
2620
2621static int __init jbd2_journal_init_handle_cache(void)
2622{
2623 jbd2_handle_cache = KMEM_CACHE(jbd2_journal_handle, SLAB_TEMPORARY);
2624 if (jbd2_handle_cache == NULL) {
2625 printk(KERN_EMERG "JBD2: failed to create handle cache\n");
2626 return -ENOMEM;
2627 }
2628 jbd2_inode_cache = KMEM_CACHE(jbd2_inode, 0);
2629 if (jbd2_inode_cache == NULL) {
2630 printk(KERN_EMERG "JBD2: failed to create inode cache\n");
2631 kmem_cache_destroy(jbd2_handle_cache);
2632 return -ENOMEM;
2633 }
2634 return 0;
2635}
2636
2637static void jbd2_journal_destroy_handle_cache(void)
2638{
2639 if (jbd2_handle_cache)
2640 kmem_cache_destroy(jbd2_handle_cache);
2641 if (jbd2_inode_cache)
2642 kmem_cache_destroy(jbd2_inode_cache);
2643
2644}
2645
2646
2647
2648
2649
2650static int __init journal_init_caches(void)
2651{
2652 int ret;
2653
2654 ret = jbd2_journal_init_revoke_caches();
2655 if (ret == 0)
2656 ret = jbd2_journal_init_journal_head_cache();
2657 if (ret == 0)
2658 ret = jbd2_journal_init_handle_cache();
2659 if (ret == 0)
2660 ret = jbd2_journal_init_transaction_cache();
2661 return ret;
2662}
2663
2664static void jbd2_journal_destroy_caches(void)
2665{
2666 jbd2_journal_destroy_revoke_caches();
2667 jbd2_journal_destroy_journal_head_cache();
2668 jbd2_journal_destroy_handle_cache();
2669 jbd2_journal_destroy_transaction_cache();
2670 jbd2_journal_destroy_slabs();
2671}
2672
2673static int __init journal_init(void)
2674{
2675 int ret;
2676
2677 BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024);
2678
2679 ret = journal_init_caches();
2680 if (ret == 0) {
2681 jbd2_create_jbd_stats_proc_entry();
2682 } else {
2683 jbd2_journal_destroy_caches();
2684 }
2685 return ret;
2686}
2687
2688static void __exit journal_exit(void)
2689{
2690#ifdef CONFIG_JBD2_DEBUG
2691 int n = atomic_read(&nr_journal_heads);
2692 if (n)
2693 printk(KERN_ERR "JBD2: leaked %d journal_heads!\n", n);
2694#endif
2695 jbd2_remove_jbd_stats_proc_entry();
2696 jbd2_journal_destroy_caches();
2697}
2698
2699MODULE_LICENSE("GPL");
2700module_init(journal_init);
2701module_exit(journal_exit);
2702
2703