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