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/jbd.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/debugfs.h>
39#include <linux/ratelimit.h>
40
41#define CREATE_TRACE_POINTS
42#include <trace/events/jbd.h>
43
44#include <asm/uaccess.h>
45#include <asm/page.h>
46
47EXPORT_SYMBOL(journal_start);
48EXPORT_SYMBOL(journal_restart);
49EXPORT_SYMBOL(journal_extend);
50EXPORT_SYMBOL(journal_stop);
51EXPORT_SYMBOL(journal_lock_updates);
52EXPORT_SYMBOL(journal_unlock_updates);
53EXPORT_SYMBOL(journal_get_write_access);
54EXPORT_SYMBOL(journal_get_create_access);
55EXPORT_SYMBOL(journal_get_undo_access);
56EXPORT_SYMBOL(journal_dirty_data);
57EXPORT_SYMBOL(journal_dirty_metadata);
58EXPORT_SYMBOL(journal_release_buffer);
59EXPORT_SYMBOL(journal_forget);
60#if 0
61EXPORT_SYMBOL(journal_sync_buffer);
62#endif
63EXPORT_SYMBOL(journal_flush);
64EXPORT_SYMBOL(journal_revoke);
65
66EXPORT_SYMBOL(journal_init_dev);
67EXPORT_SYMBOL(journal_init_inode);
68EXPORT_SYMBOL(journal_update_format);
69EXPORT_SYMBOL(journal_check_used_features);
70EXPORT_SYMBOL(journal_check_available_features);
71EXPORT_SYMBOL(journal_set_features);
72EXPORT_SYMBOL(journal_create);
73EXPORT_SYMBOL(journal_load);
74EXPORT_SYMBOL(journal_destroy);
75EXPORT_SYMBOL(journal_abort);
76EXPORT_SYMBOL(journal_errno);
77EXPORT_SYMBOL(journal_ack_err);
78EXPORT_SYMBOL(journal_clear_err);
79EXPORT_SYMBOL(log_wait_commit);
80EXPORT_SYMBOL(log_start_commit);
81EXPORT_SYMBOL(journal_start_commit);
82EXPORT_SYMBOL(journal_force_commit_nested);
83EXPORT_SYMBOL(journal_wipe);
84EXPORT_SYMBOL(journal_blocks_per_page);
85EXPORT_SYMBOL(journal_invalidatepage);
86EXPORT_SYMBOL(journal_try_to_free_buffers);
87EXPORT_SYMBOL(journal_force_commit);
88
89static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
90static void __journal_abort_soft (journal_t *journal, int errno);
91static const char *journal_dev_name(journal_t *journal, char *buffer);
92
93
94
95
96
97static void commit_timeout(unsigned long __data)
98{
99 struct task_struct * p = (struct task_struct *) __data;
100
101 wake_up_process(p);
102}
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120static int kjournald(void *arg)
121{
122 journal_t *journal = arg;
123 transaction_t *transaction;
124
125
126
127
128
129 setup_timer(&journal->j_commit_timer, commit_timeout,
130 (unsigned long)current);
131
132
133 journal->j_task = current;
134 wake_up(&journal->j_wait_done_commit);
135
136 printk(KERN_INFO "kjournald starting. Commit interval %ld seconds\n",
137 journal->j_commit_interval / HZ);
138
139
140
141
142 spin_lock(&journal->j_state_lock);
143
144loop:
145 if (journal->j_flags & JFS_UNMOUNT)
146 goto end_loop;
147
148 jbd_debug(1, "commit_sequence=%d, commit_request=%d\n",
149 journal->j_commit_sequence, journal->j_commit_request);
150
151 if (journal->j_commit_sequence != journal->j_commit_request) {
152 jbd_debug(1, "OK, requests differ\n");
153 spin_unlock(&journal->j_state_lock);
154 del_timer_sync(&journal->j_commit_timer);
155 journal_commit_transaction(journal);
156 spin_lock(&journal->j_state_lock);
157 goto loop;
158 }
159
160 wake_up(&journal->j_wait_done_commit);
161 if (freezing(current)) {
162
163
164
165
166
167 jbd_debug(1, "Now suspending kjournald\n");
168 spin_unlock(&journal->j_state_lock);
169 refrigerator();
170 spin_lock(&journal->j_state_lock);
171 } else {
172
173
174
175
176 DEFINE_WAIT(wait);
177 int should_sleep = 1;
178
179 prepare_to_wait(&journal->j_wait_commit, &wait,
180 TASK_INTERRUPTIBLE);
181 if (journal->j_commit_sequence != journal->j_commit_request)
182 should_sleep = 0;
183 transaction = journal->j_running_transaction;
184 if (transaction && time_after_eq(jiffies,
185 transaction->t_expires))
186 should_sleep = 0;
187 if (journal->j_flags & JFS_UNMOUNT)
188 should_sleep = 0;
189 if (should_sleep) {
190 spin_unlock(&journal->j_state_lock);
191 schedule();
192 spin_lock(&journal->j_state_lock);
193 }
194 finish_wait(&journal->j_wait_commit, &wait);
195 }
196
197 jbd_debug(1, "kjournald wakes\n");
198
199
200
201
202 transaction = journal->j_running_transaction;
203 if (transaction && time_after_eq(jiffies, transaction->t_expires)) {
204 journal->j_commit_request = transaction->t_tid;
205 jbd_debug(1, "woke because of timeout\n");
206 }
207 goto loop;
208
209end_loop:
210 spin_unlock(&journal->j_state_lock);
211 del_timer_sync(&journal->j_commit_timer);
212 journal->j_task = NULL;
213 wake_up(&journal->j_wait_done_commit);
214 jbd_debug(1, "Journal thread exiting.\n");
215 return 0;
216}
217
218static int journal_start_thread(journal_t *journal)
219{
220 struct task_struct *t;
221
222 t = kthread_run(kjournald, journal, "kjournald");
223 if (IS_ERR(t))
224 return PTR_ERR(t);
225
226 wait_event(journal->j_wait_done_commit, journal->j_task != NULL);
227 return 0;
228}
229
230static void journal_kill_thread(journal_t *journal)
231{
232 spin_lock(&journal->j_state_lock);
233 journal->j_flags |= JFS_UNMOUNT;
234
235 while (journal->j_task) {
236 wake_up(&journal->j_wait_commit);
237 spin_unlock(&journal->j_state_lock);
238 wait_event(journal->j_wait_done_commit,
239 journal->j_task == NULL);
240 spin_lock(&journal->j_state_lock);
241 }
242 spin_unlock(&journal->j_state_lock);
243}
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282int journal_write_metadata_buffer(transaction_t *transaction,
283 struct journal_head *jh_in,
284 struct journal_head **jh_out,
285 unsigned int blocknr)
286{
287 int need_copy_out = 0;
288 int done_copy_out = 0;
289 int do_escape = 0;
290 char *mapped_data;
291 struct buffer_head *new_bh;
292 struct journal_head *new_jh;
293 struct page *new_page;
294 unsigned int new_offset;
295 struct buffer_head *bh_in = jh2bh(jh_in);
296 journal_t *journal = transaction->t_journal;
297
298
299
300
301
302
303
304
305
306
307 J_ASSERT_BH(bh_in, buffer_jbddirty(bh_in));
308
309 new_bh = alloc_buffer_head(GFP_NOFS|__GFP_NOFAIL);
310
311 new_bh->b_state = 0;
312 init_buffer(new_bh, NULL, NULL);
313 atomic_set(&new_bh->b_count, 1);
314 new_jh = journal_add_journal_head(new_bh);
315
316
317
318
319
320 jbd_lock_bh_state(bh_in);
321repeat:
322 if (jh_in->b_frozen_data) {
323 done_copy_out = 1;
324 new_page = virt_to_page(jh_in->b_frozen_data);
325 new_offset = offset_in_page(jh_in->b_frozen_data);
326 } else {
327 new_page = jh2bh(jh_in)->b_page;
328 new_offset = offset_in_page(jh2bh(jh_in)->b_data);
329 }
330
331 mapped_data = kmap_atomic(new_page, KM_USER0);
332
333
334
335 if (*((__be32 *)(mapped_data + new_offset)) ==
336 cpu_to_be32(JFS_MAGIC_NUMBER)) {
337 need_copy_out = 1;
338 do_escape = 1;
339 }
340 kunmap_atomic(mapped_data, KM_USER0);
341
342
343
344
345 if (need_copy_out && !done_copy_out) {
346 char *tmp;
347
348 jbd_unlock_bh_state(bh_in);
349 tmp = jbd_alloc(bh_in->b_size, GFP_NOFS);
350 jbd_lock_bh_state(bh_in);
351 if (jh_in->b_frozen_data) {
352 jbd_free(tmp, bh_in->b_size);
353 goto repeat;
354 }
355
356 jh_in->b_frozen_data = tmp;
357 mapped_data = kmap_atomic(new_page, KM_USER0);
358 memcpy(tmp, mapped_data + new_offset, jh2bh(jh_in)->b_size);
359 kunmap_atomic(mapped_data, KM_USER0);
360
361 new_page = virt_to_page(tmp);
362 new_offset = offset_in_page(tmp);
363 done_copy_out = 1;
364 }
365
366
367
368
369
370 if (do_escape) {
371 mapped_data = kmap_atomic(new_page, KM_USER0);
372 *((unsigned int *)(mapped_data + new_offset)) = 0;
373 kunmap_atomic(mapped_data, KM_USER0);
374 }
375
376 set_bh_page(new_bh, new_page, new_offset);
377 new_jh->b_transaction = NULL;
378 new_bh->b_size = jh2bh(jh_in)->b_size;
379 new_bh->b_bdev = transaction->t_journal->j_dev;
380 new_bh->b_blocknr = blocknr;
381 set_buffer_mapped(new_bh);
382 set_buffer_dirty(new_bh);
383
384 *jh_out = new_jh;
385
386
387
388
389
390
391 JBUFFER_TRACE(jh_in, "file as BJ_Shadow");
392 spin_lock(&journal->j_list_lock);
393 __journal_file_buffer(jh_in, transaction, BJ_Shadow);
394 spin_unlock(&journal->j_list_lock);
395 jbd_unlock_bh_state(bh_in);
396
397 JBUFFER_TRACE(new_jh, "file as BJ_IO");
398 journal_file_buffer(new_jh, transaction, BJ_IO);
399
400 return do_escape | (done_copy_out << 1);
401}
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416int __log_space_left(journal_t *journal)
417{
418 int left = journal->j_free;
419
420 assert_spin_locked(&journal->j_state_lock);
421
422
423
424
425
426
427#define MIN_LOG_RESERVED_BLOCKS 32
428
429 left -= MIN_LOG_RESERVED_BLOCKS;
430
431 if (left <= 0)
432 return 0;
433 left -= (left >> 3);
434 return left;
435}
436
437
438
439
440int __log_start_commit(journal_t *journal, tid_t target)
441{
442
443
444
445
446
447 if (journal->j_running_transaction &&
448 journal->j_running_transaction->t_tid == target) {
449
450
451
452
453
454 journal->j_commit_request = target;
455 jbd_debug(1, "JBD: requesting commit %d/%d\n",
456 journal->j_commit_request,
457 journal->j_commit_sequence);
458 wake_up(&journal->j_wait_commit);
459 return 1;
460 } else if (!tid_geq(journal->j_commit_request, target))
461
462
463
464 WARN_ONCE(1, "jbd: bad log_start_commit: %u %u %u %u\n",
465 journal->j_commit_request, journal->j_commit_sequence,
466 target, journal->j_running_transaction ?
467 journal->j_running_transaction->t_tid : 0);
468 return 0;
469}
470
471int log_start_commit(journal_t *journal, tid_t tid)
472{
473 int ret;
474
475 spin_lock(&journal->j_state_lock);
476 ret = __log_start_commit(journal, tid);
477 spin_unlock(&journal->j_state_lock);
478 return ret;
479}
480
481
482
483
484
485
486
487
488
489
490
491int journal_force_commit_nested(journal_t *journal)
492{
493 transaction_t *transaction = NULL;
494 tid_t tid;
495
496 spin_lock(&journal->j_state_lock);
497 if (journal->j_running_transaction && !current->journal_info) {
498 transaction = journal->j_running_transaction;
499 __log_start_commit(journal, transaction->t_tid);
500 } else if (journal->j_committing_transaction)
501 transaction = journal->j_committing_transaction;
502
503 if (!transaction) {
504 spin_unlock(&journal->j_state_lock);
505 return 0;
506 }
507
508 tid = transaction->t_tid;
509 spin_unlock(&journal->j_state_lock);
510 log_wait_commit(journal, tid);
511 return 1;
512}
513
514
515
516
517
518
519int journal_start_commit(journal_t *journal, tid_t *ptid)
520{
521 int ret = 0;
522
523 spin_lock(&journal->j_state_lock);
524 if (journal->j_running_transaction) {
525 tid_t tid = journal->j_running_transaction->t_tid;
526
527 __log_start_commit(journal, tid);
528
529
530 if (ptid)
531 *ptid = tid;
532 ret = 1;
533 } else if (journal->j_committing_transaction) {
534
535
536
537
538 if (ptid)
539 *ptid = journal->j_committing_transaction->t_tid;
540 ret = 1;
541 }
542 spin_unlock(&journal->j_state_lock);
543 return ret;
544}
545
546
547
548
549
550int log_wait_commit(journal_t *journal, tid_t tid)
551{
552 int err = 0;
553
554#ifdef CONFIG_JBD_DEBUG
555 spin_lock(&journal->j_state_lock);
556 if (!tid_geq(journal->j_commit_request, tid)) {
557 printk(KERN_EMERG
558 "%s: error: j_commit_request=%d, tid=%d\n",
559 __func__, journal->j_commit_request, tid);
560 }
561 spin_unlock(&journal->j_state_lock);
562#endif
563 spin_lock(&journal->j_state_lock);
564 while (tid_gt(tid, journal->j_commit_sequence)) {
565 jbd_debug(1, "JBD: want %d, j_commit_sequence=%d\n",
566 tid, journal->j_commit_sequence);
567 wake_up(&journal->j_wait_commit);
568 spin_unlock(&journal->j_state_lock);
569 wait_event(journal->j_wait_done_commit,
570 !tid_gt(tid, journal->j_commit_sequence));
571 spin_lock(&journal->j_state_lock);
572 }
573 spin_unlock(&journal->j_state_lock);
574
575 if (unlikely(is_journal_aborted(journal))) {
576 printk(KERN_EMERG "journal commit I/O error\n");
577 err = -EIO;
578 }
579 return err;
580}
581
582
583
584
585
586
587
588int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid)
589{
590 int ret = 0;
591 transaction_t *commit_trans;
592
593 if (!(journal->j_flags & JFS_BARRIER))
594 return 0;
595 spin_lock(&journal->j_state_lock);
596
597 if (tid_geq(journal->j_commit_sequence, tid))
598 goto out;
599
600
601
602
603 commit_trans = journal->j_committing_transaction;
604 if (commit_trans && commit_trans->t_tid == tid &&
605 commit_trans->t_state >= T_COMMIT_RECORD)
606 goto out;
607 ret = 1;
608out:
609 spin_unlock(&journal->j_state_lock);
610 return ret;
611}
612EXPORT_SYMBOL(journal_trans_will_send_data_barrier);
613
614
615
616
617
618int journal_next_log_block(journal_t *journal, unsigned int *retp)
619{
620 unsigned int blocknr;
621
622 spin_lock(&journal->j_state_lock);
623 J_ASSERT(journal->j_free > 1);
624
625 blocknr = journal->j_head;
626 journal->j_head++;
627 journal->j_free--;
628 if (journal->j_head == journal->j_last)
629 journal->j_head = journal->j_first;
630 spin_unlock(&journal->j_state_lock);
631 return journal_bmap(journal, blocknr, retp);
632}
633
634
635
636
637
638
639
640
641int journal_bmap(journal_t *journal, unsigned int blocknr,
642 unsigned int *retp)
643{
644 int err = 0;
645 unsigned int ret;
646
647 if (journal->j_inode) {
648 ret = bmap(journal->j_inode, blocknr);
649 if (ret)
650 *retp = ret;
651 else {
652 char b[BDEVNAME_SIZE];
653
654 printk(KERN_ALERT "%s: journal block not found "
655 "at offset %u on %s\n",
656 __func__,
657 blocknr,
658 bdevname(journal->j_dev, b));
659 err = -EIO;
660 __journal_abort_soft(journal, err);
661 }
662 } else {
663 *retp = blocknr;
664 }
665 return err;
666}
667
668
669
670
671
672
673
674
675
676
677
678struct journal_head *journal_get_descriptor_buffer(journal_t *journal)
679{
680 struct buffer_head *bh;
681 unsigned int blocknr;
682 int err;
683
684 err = journal_next_log_block(journal, &blocknr);
685
686 if (err)
687 return NULL;
688
689 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
690 if (!bh)
691 return NULL;
692 lock_buffer(bh);
693 memset(bh->b_data, 0, journal->j_blocksize);
694 set_buffer_uptodate(bh);
695 unlock_buffer(bh);
696 BUFFER_TRACE(bh, "return this buffer");
697 return journal_add_journal_head(bh);
698}
699
700
701
702
703
704
705
706
707
708
709static journal_t * journal_init_common (void)
710{
711 journal_t *journal;
712 int err;
713
714 journal = kzalloc(sizeof(*journal), GFP_KERNEL);
715 if (!journal)
716 goto fail;
717
718 init_waitqueue_head(&journal->j_wait_transaction_locked);
719 init_waitqueue_head(&journal->j_wait_logspace);
720 init_waitqueue_head(&journal->j_wait_done_commit);
721 init_waitqueue_head(&journal->j_wait_checkpoint);
722 init_waitqueue_head(&journal->j_wait_commit);
723 init_waitqueue_head(&journal->j_wait_updates);
724 mutex_init(&journal->j_barrier);
725 mutex_init(&journal->j_checkpoint_mutex);
726 spin_lock_init(&journal->j_revoke_lock);
727 spin_lock_init(&journal->j_list_lock);
728 spin_lock_init(&journal->j_state_lock);
729
730 journal->j_commit_interval = (HZ * JBD_DEFAULT_MAX_COMMIT_AGE);
731
732
733 journal->j_flags = JFS_ABORT;
734
735
736 err = journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
737 if (err) {
738 kfree(journal);
739 goto fail;
740 }
741 return journal;
742fail:
743 return NULL;
744}
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769journal_t * journal_init_dev(struct block_device *bdev,
770 struct block_device *fs_dev,
771 int start, int len, int blocksize)
772{
773 journal_t *journal = journal_init_common();
774 struct buffer_head *bh;
775 int n;
776
777 if (!journal)
778 return NULL;
779
780
781 journal->j_blocksize = blocksize;
782 n = journal->j_blocksize / sizeof(journal_block_tag_t);
783 journal->j_wbufsize = n;
784 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
785 if (!journal->j_wbuf) {
786 printk(KERN_ERR "%s: Can't allocate bhs for commit thread\n",
787 __func__);
788 goto out_err;
789 }
790 journal->j_dev = bdev;
791 journal->j_fs_dev = fs_dev;
792 journal->j_blk_offset = start;
793 journal->j_maxlen = len;
794
795 bh = __getblk(journal->j_dev, start, journal->j_blocksize);
796 if (!bh) {
797 printk(KERN_ERR
798 "%s: Cannot get buffer for journal superblock\n",
799 __func__);
800 goto out_err;
801 }
802 journal->j_sb_buffer = bh;
803 journal->j_superblock = (journal_superblock_t *)bh->b_data;
804
805 return journal;
806out_err:
807 kfree(journal->j_wbuf);
808 kfree(journal);
809 return NULL;
810}
811
812
813
814
815
816
817
818
819
820journal_t * journal_init_inode (struct inode *inode)
821{
822 struct buffer_head *bh;
823 journal_t *journal = journal_init_common();
824 int err;
825 int n;
826 unsigned int blocknr;
827
828 if (!journal)
829 return NULL;
830
831 journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev;
832 journal->j_inode = inode;
833 jbd_debug(1,
834 "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n",
835 journal, inode->i_sb->s_id, inode->i_ino,
836 (long long) inode->i_size,
837 inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
838
839 journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits;
840 journal->j_blocksize = inode->i_sb->s_blocksize;
841
842
843 n = journal->j_blocksize / sizeof(journal_block_tag_t);
844 journal->j_wbufsize = n;
845 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
846 if (!journal->j_wbuf) {
847 printk(KERN_ERR "%s: Can't allocate bhs for commit thread\n",
848 __func__);
849 goto out_err;
850 }
851
852 err = journal_bmap(journal, 0, &blocknr);
853
854 if (err) {
855 printk(KERN_ERR "%s: Cannot locate journal superblock\n",
856 __func__);
857 goto out_err;
858 }
859
860 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
861 if (!bh) {
862 printk(KERN_ERR
863 "%s: Cannot get buffer for journal superblock\n",
864 __func__);
865 goto out_err;
866 }
867 journal->j_sb_buffer = bh;
868 journal->j_superblock = (journal_superblock_t *)bh->b_data;
869
870 return journal;
871out_err:
872 kfree(journal->j_wbuf);
873 kfree(journal);
874 return NULL;
875}
876
877
878
879
880
881
882static void journal_fail_superblock (journal_t *journal)
883{
884 struct buffer_head *bh = journal->j_sb_buffer;
885 brelse(bh);
886 journal->j_sb_buffer = NULL;
887}
888
889
890
891
892
893
894
895
896static int journal_reset(journal_t *journal)
897{
898 journal_superblock_t *sb = journal->j_superblock;
899 unsigned int first, last;
900
901 first = be32_to_cpu(sb->s_first);
902 last = be32_to_cpu(sb->s_maxlen);
903 if (first + JFS_MIN_JOURNAL_BLOCKS > last + 1) {
904 printk(KERN_ERR "JBD: Journal too short (blocks %u-%u).\n",
905 first, last);
906 journal_fail_superblock(journal);
907 return -EINVAL;
908 }
909
910 journal->j_first = first;
911 journal->j_last = last;
912
913 journal->j_head = first;
914 journal->j_tail = first;
915 journal->j_free = last - first;
916
917 journal->j_tail_sequence = journal->j_transaction_sequence;
918 journal->j_commit_sequence = journal->j_transaction_sequence - 1;
919 journal->j_commit_request = journal->j_commit_sequence;
920
921 journal->j_max_transaction_buffers = journal->j_maxlen / 4;
922
923
924 journal_update_superblock(journal, 1);
925 return journal_start_thread(journal);
926}
927
928
929
930
931
932
933
934
935
936int journal_create(journal_t *journal)
937{
938 unsigned int blocknr;
939 struct buffer_head *bh;
940 journal_superblock_t *sb;
941 int i, err;
942
943 if (journal->j_maxlen < JFS_MIN_JOURNAL_BLOCKS) {
944 printk (KERN_ERR "Journal length (%d blocks) too short.\n",
945 journal->j_maxlen);
946 journal_fail_superblock(journal);
947 return -EINVAL;
948 }
949
950 if (journal->j_inode == NULL) {
951
952
953
954 printk(KERN_EMERG
955 "%s: creation of journal on external device!\n",
956 __func__);
957 BUG();
958 }
959
960
961
962 jbd_debug(1, "JBD: Zeroing out journal blocks...\n");
963 for (i = 0; i < journal->j_maxlen; i++) {
964 err = journal_bmap(journal, i, &blocknr);
965 if (err)
966 return err;
967 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
968 if (unlikely(!bh))
969 return -ENOMEM;
970 lock_buffer(bh);
971 memset (bh->b_data, 0, journal->j_blocksize);
972 BUFFER_TRACE(bh, "marking dirty");
973 mark_buffer_dirty(bh);
974 BUFFER_TRACE(bh, "marking uptodate");
975 set_buffer_uptodate(bh);
976 unlock_buffer(bh);
977 __brelse(bh);
978 }
979
980 sync_blockdev(journal->j_dev);
981 jbd_debug(1, "JBD: journal cleared.\n");
982
983
984 sb = journal->j_superblock;
985
986 sb->s_header.h_magic = cpu_to_be32(JFS_MAGIC_NUMBER);
987 sb->s_header.h_blocktype = cpu_to_be32(JFS_SUPERBLOCK_V2);
988
989 sb->s_blocksize = cpu_to_be32(journal->j_blocksize);
990 sb->s_maxlen = cpu_to_be32(journal->j_maxlen);
991 sb->s_first = cpu_to_be32(1);
992
993 journal->j_transaction_sequence = 1;
994
995 journal->j_flags &= ~JFS_ABORT;
996 journal->j_format_version = 2;
997
998 return journal_reset(journal);
999}
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009void journal_update_superblock(journal_t *journal, int wait)
1010{
1011 journal_superblock_t *sb = journal->j_superblock;
1012 struct buffer_head *bh = journal->j_sb_buffer;
1013
1014
1015
1016
1017
1018
1019
1020
1021 if (sb->s_start == 0 && journal->j_tail_sequence ==
1022 journal->j_transaction_sequence) {
1023 jbd_debug(1,"JBD: Skipping superblock update on recovered sb "
1024 "(start %u, seq %d, errno %d)\n",
1025 journal->j_tail, journal->j_tail_sequence,
1026 journal->j_errno);
1027 goto out;
1028 }
1029
1030 if (buffer_write_io_error(bh)) {
1031 char b[BDEVNAME_SIZE];
1032
1033
1034
1035
1036
1037
1038
1039
1040 printk(KERN_ERR "JBD: previous I/O error detected "
1041 "for journal superblock update for %s.\n",
1042 journal_dev_name(journal, b));
1043 clear_buffer_write_io_error(bh);
1044 set_buffer_uptodate(bh);
1045 }
1046
1047 spin_lock(&journal->j_state_lock);
1048 jbd_debug(1,"JBD: updating superblock (start %u, seq %d, errno %d)\n",
1049 journal->j_tail, journal->j_tail_sequence, journal->j_errno);
1050
1051 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
1052 sb->s_start = cpu_to_be32(journal->j_tail);
1053 sb->s_errno = cpu_to_be32(journal->j_errno);
1054 spin_unlock(&journal->j_state_lock);
1055
1056 BUFFER_TRACE(bh, "marking dirty");
1057 mark_buffer_dirty(bh);
1058 if (wait) {
1059 sync_dirty_buffer(bh);
1060 if (buffer_write_io_error(bh)) {
1061 char b[BDEVNAME_SIZE];
1062 printk(KERN_ERR "JBD: I/O error detected "
1063 "when updating journal superblock for %s.\n",
1064 journal_dev_name(journal, b));
1065 clear_buffer_write_io_error(bh);
1066 set_buffer_uptodate(bh);
1067 }
1068 } else
1069 write_dirty_buffer(bh, WRITE);
1070
1071 trace_jbd_update_superblock_end(journal, wait);
1072out:
1073
1074
1075
1076
1077 spin_lock(&journal->j_state_lock);
1078 if (sb->s_start)
1079 journal->j_flags &= ~JFS_FLUSHED;
1080 else
1081 journal->j_flags |= JFS_FLUSHED;
1082 spin_unlock(&journal->j_state_lock);
1083}
1084
1085
1086
1087
1088
1089
1090static int journal_get_superblock(journal_t *journal)
1091{
1092 struct buffer_head *bh;
1093 journal_superblock_t *sb;
1094 int err = -EIO;
1095
1096 bh = journal->j_sb_buffer;
1097
1098 J_ASSERT(bh != NULL);
1099 if (!buffer_uptodate(bh)) {
1100 ll_rw_block(READ, 1, &bh);
1101 wait_on_buffer(bh);
1102 if (!buffer_uptodate(bh)) {
1103 printk (KERN_ERR
1104 "JBD: IO error reading journal superblock\n");
1105 goto out;
1106 }
1107 }
1108
1109 sb = journal->j_superblock;
1110
1111 err = -EINVAL;
1112
1113 if (sb->s_header.h_magic != cpu_to_be32(JFS_MAGIC_NUMBER) ||
1114 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) {
1115 printk(KERN_WARNING "JBD: no valid journal superblock found\n");
1116 goto out;
1117 }
1118
1119 switch(be32_to_cpu(sb->s_header.h_blocktype)) {
1120 case JFS_SUPERBLOCK_V1:
1121 journal->j_format_version = 1;
1122 break;
1123 case JFS_SUPERBLOCK_V2:
1124 journal->j_format_version = 2;
1125 break;
1126 default:
1127 printk(KERN_WARNING "JBD: unrecognised superblock format ID\n");
1128 goto out;
1129 }
1130
1131 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen)
1132 journal->j_maxlen = be32_to_cpu(sb->s_maxlen);
1133 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) {
1134 printk (KERN_WARNING "JBD: journal file too short\n");
1135 goto out;
1136 }
1137
1138 if (be32_to_cpu(sb->s_first) == 0 ||
1139 be32_to_cpu(sb->s_first) >= journal->j_maxlen) {
1140 printk(KERN_WARNING
1141 "JBD: Invalid start block of journal: %u\n",
1142 be32_to_cpu(sb->s_first));
1143 goto out;
1144 }
1145
1146 return 0;
1147
1148out:
1149 journal_fail_superblock(journal);
1150 return err;
1151}
1152
1153
1154
1155
1156
1157
1158static int load_superblock(journal_t *journal)
1159{
1160 int err;
1161 journal_superblock_t *sb;
1162
1163 err = journal_get_superblock(journal);
1164 if (err)
1165 return err;
1166
1167 sb = journal->j_superblock;
1168
1169 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence);
1170 journal->j_tail = be32_to_cpu(sb->s_start);
1171 journal->j_first = be32_to_cpu(sb->s_first);
1172 journal->j_last = be32_to_cpu(sb->s_maxlen);
1173 journal->j_errno = be32_to_cpu(sb->s_errno);
1174
1175 return 0;
1176}
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187int journal_load(journal_t *journal)
1188{
1189 int err;
1190 journal_superblock_t *sb;
1191
1192 err = load_superblock(journal);
1193 if (err)
1194 return err;
1195
1196 sb = journal->j_superblock;
1197
1198
1199
1200 if (journal->j_format_version >= 2) {
1201 if ((sb->s_feature_ro_compat &
1202 ~cpu_to_be32(JFS_KNOWN_ROCOMPAT_FEATURES)) ||
1203 (sb->s_feature_incompat &
1204 ~cpu_to_be32(JFS_KNOWN_INCOMPAT_FEATURES))) {
1205 printk (KERN_WARNING
1206 "JBD: Unrecognised features on journal\n");
1207 return -EINVAL;
1208 }
1209 }
1210
1211
1212
1213 if (journal_recover(journal))
1214 goto recovery_error;
1215
1216
1217
1218
1219 if (journal_reset(journal))
1220 goto recovery_error;
1221
1222 journal->j_flags &= ~JFS_ABORT;
1223 journal->j_flags |= JFS_LOADED;
1224 return 0;
1225
1226recovery_error:
1227 printk (KERN_WARNING "JBD: recovery failed\n");
1228 return -EIO;
1229}
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239int journal_destroy(journal_t *journal)
1240{
1241 int err = 0;
1242
1243
1244
1245 journal_kill_thread(journal);
1246
1247
1248 if (journal->j_running_transaction)
1249 journal_commit_transaction(journal);
1250
1251
1252
1253
1254 spin_lock(&journal->j_list_lock);
1255 while (journal->j_checkpoint_transactions != NULL) {
1256 spin_unlock(&journal->j_list_lock);
1257 log_do_checkpoint(journal);
1258 spin_lock(&journal->j_list_lock);
1259 }
1260
1261 J_ASSERT(journal->j_running_transaction == NULL);
1262 J_ASSERT(journal->j_committing_transaction == NULL);
1263 J_ASSERT(journal->j_checkpoint_transactions == NULL);
1264 spin_unlock(&journal->j_list_lock);
1265
1266 if (journal->j_sb_buffer) {
1267 if (!is_journal_aborted(journal)) {
1268
1269 journal->j_tail = 0;
1270 journal->j_tail_sequence =
1271 ++journal->j_transaction_sequence;
1272 journal_update_superblock(journal, 1);
1273 } else {
1274 err = -EIO;
1275 }
1276 brelse(journal->j_sb_buffer);
1277 }
1278
1279 if (journal->j_inode)
1280 iput(journal->j_inode);
1281 if (journal->j_revoke)
1282 journal_destroy_revoke(journal);
1283 kfree(journal->j_wbuf);
1284 kfree(journal);
1285
1286 return err;
1287}
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301int journal_check_used_features (journal_t *journal, unsigned long compat,
1302 unsigned long ro, unsigned long incompat)
1303{
1304 journal_superblock_t *sb;
1305
1306 if (!compat && !ro && !incompat)
1307 return 1;
1308 if (journal->j_format_version == 1)
1309 return 0;
1310
1311 sb = journal->j_superblock;
1312
1313 if (((be32_to_cpu(sb->s_feature_compat) & compat) == compat) &&
1314 ((be32_to_cpu(sb->s_feature_ro_compat) & ro) == ro) &&
1315 ((be32_to_cpu(sb->s_feature_incompat) & incompat) == incompat))
1316 return 1;
1317
1318 return 0;
1319}
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332int journal_check_available_features (journal_t *journal, unsigned long compat,
1333 unsigned long ro, unsigned long incompat)
1334{
1335 if (!compat && !ro && !incompat)
1336 return 1;
1337
1338
1339
1340
1341
1342 if (journal->j_format_version != 2)
1343 return 0;
1344
1345 if ((compat & JFS_KNOWN_COMPAT_FEATURES) == compat &&
1346 (ro & JFS_KNOWN_ROCOMPAT_FEATURES) == ro &&
1347 (incompat & JFS_KNOWN_INCOMPAT_FEATURES) == incompat)
1348 return 1;
1349
1350 return 0;
1351}
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365int journal_set_features (journal_t *journal, unsigned long compat,
1366 unsigned long ro, unsigned long incompat)
1367{
1368 journal_superblock_t *sb;
1369
1370 if (journal_check_used_features(journal, compat, ro, incompat))
1371 return 1;
1372
1373 if (!journal_check_available_features(journal, compat, ro, incompat))
1374 return 0;
1375
1376 jbd_debug(1, "Setting new features 0x%lx/0x%lx/0x%lx\n",
1377 compat, ro, incompat);
1378
1379 sb = journal->j_superblock;
1380
1381 sb->s_feature_compat |= cpu_to_be32(compat);
1382 sb->s_feature_ro_compat |= cpu_to_be32(ro);
1383 sb->s_feature_incompat |= cpu_to_be32(incompat);
1384
1385 return 1;
1386}
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396int journal_update_format (journal_t *journal)
1397{
1398 journal_superblock_t *sb;
1399 int err;
1400
1401 err = journal_get_superblock(journal);
1402 if (err)
1403 return err;
1404
1405 sb = journal->j_superblock;
1406
1407 switch (be32_to_cpu(sb->s_header.h_blocktype)) {
1408 case JFS_SUPERBLOCK_V2:
1409 return 0;
1410 case JFS_SUPERBLOCK_V1:
1411 return journal_convert_superblock_v1(journal, sb);
1412 default:
1413 break;
1414 }
1415 return -EINVAL;
1416}
1417
1418static int journal_convert_superblock_v1(journal_t *journal,
1419 journal_superblock_t *sb)
1420{
1421 int offset, blocksize;
1422 struct buffer_head *bh;
1423
1424 printk(KERN_WARNING
1425 "JBD: Converting superblock from version 1 to 2.\n");
1426
1427
1428 offset = ((char *) &(sb->s_feature_compat)) - ((char *) sb);
1429 blocksize = be32_to_cpu(sb->s_blocksize);
1430 memset(&sb->s_feature_compat, 0, blocksize-offset);
1431
1432 sb->s_nr_users = cpu_to_be32(1);
1433 sb->s_header.h_blocktype = cpu_to_be32(JFS_SUPERBLOCK_V2);
1434 journal->j_format_version = 2;
1435
1436 bh = journal->j_sb_buffer;
1437 BUFFER_TRACE(bh, "marking dirty");
1438 mark_buffer_dirty(bh);
1439 sync_dirty_buffer(bh);
1440 return 0;
1441}
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453int journal_flush(journal_t *journal)
1454{
1455 int err = 0;
1456 transaction_t *transaction = NULL;
1457 unsigned int old_tail;
1458
1459 spin_lock(&journal->j_state_lock);
1460
1461
1462 if (journal->j_running_transaction) {
1463 transaction = journal->j_running_transaction;
1464 __log_start_commit(journal, transaction->t_tid);
1465 } else if (journal->j_committing_transaction)
1466 transaction = journal->j_committing_transaction;
1467
1468
1469 if (transaction) {
1470 tid_t tid = transaction->t_tid;
1471
1472 spin_unlock(&journal->j_state_lock);
1473 log_wait_commit(journal, tid);
1474 } else {
1475 spin_unlock(&journal->j_state_lock);
1476 }
1477
1478
1479 spin_lock(&journal->j_list_lock);
1480 while (!err && journal->j_checkpoint_transactions != NULL) {
1481 spin_unlock(&journal->j_list_lock);
1482 mutex_lock(&journal->j_checkpoint_mutex);
1483 err = log_do_checkpoint(journal);
1484 mutex_unlock(&journal->j_checkpoint_mutex);
1485 spin_lock(&journal->j_list_lock);
1486 }
1487 spin_unlock(&journal->j_list_lock);
1488
1489 if (is_journal_aborted(journal))
1490 return -EIO;
1491
1492 cleanup_journal_tail(journal);
1493
1494
1495
1496
1497
1498
1499 spin_lock(&journal->j_state_lock);
1500 old_tail = journal->j_tail;
1501 journal->j_tail = 0;
1502 spin_unlock(&journal->j_state_lock);
1503 journal_update_superblock(journal, 1);
1504 spin_lock(&journal->j_state_lock);
1505 journal->j_tail = old_tail;
1506
1507 J_ASSERT(!journal->j_running_transaction);
1508 J_ASSERT(!journal->j_committing_transaction);
1509 J_ASSERT(!journal->j_checkpoint_transactions);
1510 J_ASSERT(journal->j_head == journal->j_tail);
1511 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
1512 spin_unlock(&journal->j_state_lock);
1513 return 0;
1514}
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529int journal_wipe(journal_t *journal, int write)
1530{
1531 int err = 0;
1532
1533 J_ASSERT (!(journal->j_flags & JFS_LOADED));
1534
1535 err = load_superblock(journal);
1536 if (err)
1537 return err;
1538
1539 if (!journal->j_tail)
1540 goto no_recovery;
1541
1542 printk (KERN_WARNING "JBD: %s recovery information on journal\n",
1543 write ? "Clearing" : "Ignoring");
1544
1545 err = journal_skip_recovery(journal);
1546 if (write)
1547 journal_update_superblock(journal, 1);
1548
1549 no_recovery:
1550 return err;
1551}
1552
1553
1554
1555
1556
1557
1558static const char *journal_dev_name(journal_t *journal, char *buffer)
1559{
1560 struct block_device *bdev;
1561
1562 if (journal->j_inode)
1563 bdev = journal->j_inode->i_sb->s_bdev;
1564 else
1565 bdev = journal->j_dev;
1566
1567 return bdevname(bdev, buffer);
1568}
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583static void __journal_abort_hard(journal_t *journal)
1584{
1585 transaction_t *transaction;
1586 char b[BDEVNAME_SIZE];
1587
1588 if (journal->j_flags & JFS_ABORT)
1589 return;
1590
1591 printk(KERN_ERR "Aborting journal on device %s.\n",
1592 journal_dev_name(journal, b));
1593
1594 spin_lock(&journal->j_state_lock);
1595 journal->j_flags |= JFS_ABORT;
1596 transaction = journal->j_running_transaction;
1597 if (transaction)
1598 __log_start_commit(journal, transaction->t_tid);
1599 spin_unlock(&journal->j_state_lock);
1600}
1601
1602
1603
1604static void __journal_abort_soft (journal_t *journal, int errno)
1605{
1606 if (journal->j_flags & JFS_ABORT)
1607 return;
1608
1609 if (!journal->j_errno)
1610 journal->j_errno = errno;
1611
1612 __journal_abort_hard(journal);
1613
1614 if (errno)
1615 journal_update_superblock(journal, 1);
1616}
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664void journal_abort(journal_t *journal, int errno)
1665{
1666 __journal_abort_soft(journal, errno);
1667}
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680int journal_errno(journal_t *journal)
1681{
1682 int err;
1683
1684 spin_lock(&journal->j_state_lock);
1685 if (journal->j_flags & JFS_ABORT)
1686 err = -EROFS;
1687 else
1688 err = journal->j_errno;
1689 spin_unlock(&journal->j_state_lock);
1690 return err;
1691}
1692
1693
1694
1695
1696
1697
1698
1699
1700int journal_clear_err(journal_t *journal)
1701{
1702 int err = 0;
1703
1704 spin_lock(&journal->j_state_lock);
1705 if (journal->j_flags & JFS_ABORT)
1706 err = -EROFS;
1707 else
1708 journal->j_errno = 0;
1709 spin_unlock(&journal->j_state_lock);
1710 return err;
1711}
1712
1713
1714
1715
1716
1717
1718
1719
1720void journal_ack_err(journal_t *journal)
1721{
1722 spin_lock(&journal->j_state_lock);
1723 if (journal->j_errno)
1724 journal->j_flags |= JFS_ACK_ERR;
1725 spin_unlock(&journal->j_state_lock);
1726}
1727
1728int journal_blocks_per_page(struct inode *inode)
1729{
1730 return 1 << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
1731}
1732
1733
1734
1735
1736static struct kmem_cache *journal_head_cache;
1737#ifdef CONFIG_JBD_DEBUG
1738static atomic_t nr_journal_heads = ATOMIC_INIT(0);
1739#endif
1740
1741static int journal_init_journal_head_cache(void)
1742{
1743 int retval;
1744
1745 J_ASSERT(journal_head_cache == NULL);
1746 journal_head_cache = kmem_cache_create("journal_head",
1747 sizeof(struct journal_head),
1748 0,
1749 SLAB_TEMPORARY,
1750 NULL);
1751 retval = 0;
1752 if (!journal_head_cache) {
1753 retval = -ENOMEM;
1754 printk(KERN_EMERG "JBD: no memory for journal_head cache\n");
1755 }
1756 return retval;
1757}
1758
1759static void journal_destroy_journal_head_cache(void)
1760{
1761 if (journal_head_cache) {
1762 kmem_cache_destroy(journal_head_cache);
1763 journal_head_cache = NULL;
1764 }
1765}
1766
1767
1768
1769
1770static struct journal_head *journal_alloc_journal_head(void)
1771{
1772 struct journal_head *ret;
1773
1774#ifdef CONFIG_JBD_DEBUG
1775 atomic_inc(&nr_journal_heads);
1776#endif
1777 ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS);
1778 if (ret == NULL) {
1779 jbd_debug(1, "out of memory for journal_head\n");
1780 printk_ratelimited(KERN_NOTICE "ENOMEM in %s, retrying.\n",
1781 __func__);
1782
1783 while (ret == NULL) {
1784 yield();
1785 ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS);
1786 }
1787 }
1788 return ret;
1789}
1790
1791static void journal_free_journal_head(struct journal_head *jh)
1792{
1793#ifdef CONFIG_JBD_DEBUG
1794 atomic_dec(&nr_journal_heads);
1795 memset(jh, JBD_POISON_FREE, sizeof(*jh));
1796#endif
1797 kmem_cache_free(journal_head_cache, jh);
1798}
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841struct journal_head *journal_add_journal_head(struct buffer_head *bh)
1842{
1843 struct journal_head *jh;
1844 struct journal_head *new_jh = NULL;
1845
1846repeat:
1847 if (!buffer_jbd(bh)) {
1848 new_jh = journal_alloc_journal_head();
1849 memset(new_jh, 0, sizeof(*new_jh));
1850 }
1851
1852 jbd_lock_bh_journal_head(bh);
1853 if (buffer_jbd(bh)) {
1854 jh = bh2jh(bh);
1855 } else {
1856 J_ASSERT_BH(bh,
1857 (atomic_read(&bh->b_count) > 0) ||
1858 (bh->b_page && bh->b_page->mapping));
1859
1860 if (!new_jh) {
1861 jbd_unlock_bh_journal_head(bh);
1862 goto repeat;
1863 }
1864
1865 jh = new_jh;
1866 new_jh = NULL;
1867 set_buffer_jbd(bh);
1868 bh->b_private = jh;
1869 jh->b_bh = bh;
1870 get_bh(bh);
1871 BUFFER_TRACE(bh, "added journal_head");
1872 }
1873 jh->b_jcount++;
1874 jbd_unlock_bh_journal_head(bh);
1875 if (new_jh)
1876 journal_free_journal_head(new_jh);
1877 return bh->b_private;
1878}
1879
1880
1881
1882
1883
1884struct journal_head *journal_grab_journal_head(struct buffer_head *bh)
1885{
1886 struct journal_head *jh = NULL;
1887
1888 jbd_lock_bh_journal_head(bh);
1889 if (buffer_jbd(bh)) {
1890 jh = bh2jh(bh);
1891 jh->b_jcount++;
1892 }
1893 jbd_unlock_bh_journal_head(bh);
1894 return jh;
1895}
1896
1897static void __journal_remove_journal_head(struct buffer_head *bh)
1898{
1899 struct journal_head *jh = bh2jh(bh);
1900
1901 J_ASSERT_JH(jh, jh->b_jcount >= 0);
1902 J_ASSERT_JH(jh, jh->b_transaction == NULL);
1903 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1904 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
1905 J_ASSERT_JH(jh, jh->b_jlist == BJ_None);
1906 J_ASSERT_BH(bh, buffer_jbd(bh));
1907 J_ASSERT_BH(bh, jh2bh(jh) == bh);
1908 BUFFER_TRACE(bh, "remove journal_head");
1909 if (jh->b_frozen_data) {
1910 printk(KERN_WARNING "%s: freeing b_frozen_data\n", __func__);
1911 jbd_free(jh->b_frozen_data, bh->b_size);
1912 }
1913 if (jh->b_committed_data) {
1914 printk(KERN_WARNING "%s: freeing b_committed_data\n", __func__);
1915 jbd_free(jh->b_committed_data, bh->b_size);
1916 }
1917 bh->b_private = NULL;
1918 jh->b_bh = NULL;
1919 clear_buffer_jbd(bh);
1920 journal_free_journal_head(jh);
1921}
1922
1923
1924
1925
1926
1927void journal_put_journal_head(struct journal_head *jh)
1928{
1929 struct buffer_head *bh = jh2bh(jh);
1930
1931 jbd_lock_bh_journal_head(bh);
1932 J_ASSERT_JH(jh, jh->b_jcount > 0);
1933 --jh->b_jcount;
1934 if (!jh->b_jcount) {
1935 __journal_remove_journal_head(bh);
1936 jbd_unlock_bh_journal_head(bh);
1937 __brelse(bh);
1938 } else
1939 jbd_unlock_bh_journal_head(bh);
1940}
1941
1942
1943
1944
1945#ifdef CONFIG_JBD_DEBUG
1946
1947u8 journal_enable_debug __read_mostly;
1948EXPORT_SYMBOL(journal_enable_debug);
1949
1950static struct dentry *jbd_debugfs_dir;
1951static struct dentry *jbd_debug;
1952
1953static void __init jbd_create_debugfs_entry(void)
1954{
1955 jbd_debugfs_dir = debugfs_create_dir("jbd", NULL);
1956 if (jbd_debugfs_dir)
1957 jbd_debug = debugfs_create_u8("jbd-debug", S_IRUGO | S_IWUSR,
1958 jbd_debugfs_dir,
1959 &journal_enable_debug);
1960}
1961
1962static void __exit jbd_remove_debugfs_entry(void)
1963{
1964 debugfs_remove(jbd_debug);
1965 debugfs_remove(jbd_debugfs_dir);
1966}
1967
1968#else
1969
1970static inline void jbd_create_debugfs_entry(void)
1971{
1972}
1973
1974static inline void jbd_remove_debugfs_entry(void)
1975{
1976}
1977
1978#endif
1979
1980struct kmem_cache *jbd_handle_cache;
1981
1982static int __init journal_init_handle_cache(void)
1983{
1984 jbd_handle_cache = kmem_cache_create("journal_handle",
1985 sizeof(handle_t),
1986 0,
1987 SLAB_TEMPORARY,
1988 NULL);
1989 if (jbd_handle_cache == NULL) {
1990 printk(KERN_EMERG "JBD: failed to create handle cache\n");
1991 return -ENOMEM;
1992 }
1993 return 0;
1994}
1995
1996static void journal_destroy_handle_cache(void)
1997{
1998 if (jbd_handle_cache)
1999 kmem_cache_destroy(jbd_handle_cache);
2000}
2001
2002
2003
2004
2005
2006static int __init journal_init_caches(void)
2007{
2008 int ret;
2009
2010 ret = journal_init_revoke_caches();
2011 if (ret == 0)
2012 ret = journal_init_journal_head_cache();
2013 if (ret == 0)
2014 ret = journal_init_handle_cache();
2015 return ret;
2016}
2017
2018static void journal_destroy_caches(void)
2019{
2020 journal_destroy_revoke_caches();
2021 journal_destroy_journal_head_cache();
2022 journal_destroy_handle_cache();
2023}
2024
2025static int __init journal_init(void)
2026{
2027 int ret;
2028
2029 BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024);
2030
2031 ret = journal_init_caches();
2032 if (ret != 0)
2033 journal_destroy_caches();
2034 jbd_create_debugfs_entry();
2035 return ret;
2036}
2037
2038static void __exit journal_exit(void)
2039{
2040#ifdef CONFIG_JBD_DEBUG
2041 int n = atomic_read(&nr_journal_heads);
2042 if (n)
2043 printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n);
2044#endif
2045 jbd_remove_debugfs_entry();
2046 journal_destroy_caches();
2047}
2048
2049MODULE_LICENSE("GPL");
2050module_init(journal_init);
2051module_exit(journal_exit);
2052
2053