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 try_to_freeze();
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_checkpoint_mutex);
725 spin_lock_init(&journal->j_revoke_lock);
726 spin_lock_init(&journal->j_list_lock);
727 spin_lock_init(&journal->j_state_lock);
728
729 journal->j_commit_interval = (HZ * JBD_DEFAULT_MAX_COMMIT_AGE);
730
731
732 journal->j_flags = JFS_ABORT;
733
734
735 err = journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
736 if (err) {
737 kfree(journal);
738 goto fail;
739 }
740 return journal;
741fail:
742 return NULL;
743}
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768journal_t * journal_init_dev(struct block_device *bdev,
769 struct block_device *fs_dev,
770 int start, int len, int blocksize)
771{
772 journal_t *journal = journal_init_common();
773 struct buffer_head *bh;
774 int n;
775
776 if (!journal)
777 return NULL;
778
779
780 journal->j_blocksize = blocksize;
781 n = journal->j_blocksize / sizeof(journal_block_tag_t);
782 journal->j_wbufsize = n;
783 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
784 if (!journal->j_wbuf) {
785 printk(KERN_ERR "%s: Can't allocate bhs for commit thread\n",
786 __func__);
787 goto out_err;
788 }
789 journal->j_dev = bdev;
790 journal->j_fs_dev = fs_dev;
791 journal->j_blk_offset = start;
792 journal->j_maxlen = len;
793
794 bh = __getblk(journal->j_dev, start, journal->j_blocksize);
795 if (!bh) {
796 printk(KERN_ERR
797 "%s: Cannot get buffer for journal superblock\n",
798 __func__);
799 goto out_err;
800 }
801 journal->j_sb_buffer = bh;
802 journal->j_superblock = (journal_superblock_t *)bh->b_data;
803
804 return journal;
805out_err:
806 kfree(journal->j_wbuf);
807 kfree(journal);
808 return NULL;
809}
810
811
812
813
814
815
816
817
818
819journal_t * journal_init_inode (struct inode *inode)
820{
821 struct buffer_head *bh;
822 journal_t *journal = journal_init_common();
823 int err;
824 int n;
825 unsigned int blocknr;
826
827 if (!journal)
828 return NULL;
829
830 journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev;
831 journal->j_inode = inode;
832 jbd_debug(1,
833 "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n",
834 journal, inode->i_sb->s_id, inode->i_ino,
835 (long long) inode->i_size,
836 inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
837
838 journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits;
839 journal->j_blocksize = inode->i_sb->s_blocksize;
840
841
842 n = journal->j_blocksize / sizeof(journal_block_tag_t);
843 journal->j_wbufsize = n;
844 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
845 if (!journal->j_wbuf) {
846 printk(KERN_ERR "%s: Can't allocate bhs for commit thread\n",
847 __func__);
848 goto out_err;
849 }
850
851 err = journal_bmap(journal, 0, &blocknr);
852
853 if (err) {
854 printk(KERN_ERR "%s: Cannot locate journal superblock\n",
855 __func__);
856 goto out_err;
857 }
858
859 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
860 if (!bh) {
861 printk(KERN_ERR
862 "%s: Cannot get buffer for journal superblock\n",
863 __func__);
864 goto out_err;
865 }
866 journal->j_sb_buffer = bh;
867 journal->j_superblock = (journal_superblock_t *)bh->b_data;
868
869 return journal;
870out_err:
871 kfree(journal->j_wbuf);
872 kfree(journal);
873 return NULL;
874}
875
876
877
878
879
880
881static void journal_fail_superblock (journal_t *journal)
882{
883 struct buffer_head *bh = journal->j_sb_buffer;
884 brelse(bh);
885 journal->j_sb_buffer = NULL;
886}
887
888
889
890
891
892
893
894
895static int journal_reset(journal_t *journal)
896{
897 journal_superblock_t *sb = journal->j_superblock;
898 unsigned int first, last;
899
900 first = be32_to_cpu(sb->s_first);
901 last = be32_to_cpu(sb->s_maxlen);
902 if (first + JFS_MIN_JOURNAL_BLOCKS > last + 1) {
903 printk(KERN_ERR "JBD: Journal too short (blocks %u-%u).\n",
904 first, last);
905 journal_fail_superblock(journal);
906 return -EINVAL;
907 }
908
909 journal->j_first = first;
910 journal->j_last = last;
911
912 journal->j_head = first;
913 journal->j_tail = first;
914 journal->j_free = last - first;
915
916 journal->j_tail_sequence = journal->j_transaction_sequence;
917 journal->j_commit_sequence = journal->j_transaction_sequence - 1;
918 journal->j_commit_request = journal->j_commit_sequence;
919
920 journal->j_max_transaction_buffers = journal->j_maxlen / 4;
921
922
923 journal_update_superblock(journal, 1);
924 return journal_start_thread(journal);
925}
926
927
928
929
930
931
932
933
934
935int journal_create(journal_t *journal)
936{
937 unsigned int blocknr;
938 struct buffer_head *bh;
939 journal_superblock_t *sb;
940 int i, err;
941
942 if (journal->j_maxlen < JFS_MIN_JOURNAL_BLOCKS) {
943 printk (KERN_ERR "Journal length (%d blocks) too short.\n",
944 journal->j_maxlen);
945 journal_fail_superblock(journal);
946 return -EINVAL;
947 }
948
949 if (journal->j_inode == NULL) {
950
951
952
953 printk(KERN_EMERG
954 "%s: creation of journal on external device!\n",
955 __func__);
956 BUG();
957 }
958
959
960
961 jbd_debug(1, "JBD: Zeroing out journal blocks...\n");
962 for (i = 0; i < journal->j_maxlen; i++) {
963 err = journal_bmap(journal, i, &blocknr);
964 if (err)
965 return err;
966 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
967 if (unlikely(!bh))
968 return -ENOMEM;
969 lock_buffer(bh);
970 memset (bh->b_data, 0, journal->j_blocksize);
971 BUFFER_TRACE(bh, "marking dirty");
972 mark_buffer_dirty(bh);
973 BUFFER_TRACE(bh, "marking uptodate");
974 set_buffer_uptodate(bh);
975 unlock_buffer(bh);
976 __brelse(bh);
977 }
978
979 sync_blockdev(journal->j_dev);
980 jbd_debug(1, "JBD: journal cleared.\n");
981
982
983 sb = journal->j_superblock;
984
985 sb->s_header.h_magic = cpu_to_be32(JFS_MAGIC_NUMBER);
986 sb->s_header.h_blocktype = cpu_to_be32(JFS_SUPERBLOCK_V2);
987
988 sb->s_blocksize = cpu_to_be32(journal->j_blocksize);
989 sb->s_maxlen = cpu_to_be32(journal->j_maxlen);
990 sb->s_first = cpu_to_be32(1);
991
992 journal->j_transaction_sequence = 1;
993
994 journal->j_flags &= ~JFS_ABORT;
995 journal->j_format_version = 2;
996
997 return journal_reset(journal);
998}
999
1000
1001
1002
1003
1004
1005
1006
1007
1008void journal_update_superblock(journal_t *journal, int wait)
1009{
1010 journal_superblock_t *sb = journal->j_superblock;
1011 struct buffer_head *bh = journal->j_sb_buffer;
1012
1013
1014
1015
1016
1017
1018
1019
1020 if (sb->s_start == 0 && journal->j_tail_sequence ==
1021 journal->j_transaction_sequence) {
1022 jbd_debug(1,"JBD: Skipping superblock update on recovered sb "
1023 "(start %u, seq %d, errno %d)\n",
1024 journal->j_tail, journal->j_tail_sequence,
1025 journal->j_errno);
1026 goto out;
1027 }
1028
1029 if (buffer_write_io_error(bh)) {
1030 char b[BDEVNAME_SIZE];
1031
1032
1033
1034
1035
1036
1037
1038
1039 printk(KERN_ERR "JBD: previous I/O error detected "
1040 "for journal superblock update for %s.\n",
1041 journal_dev_name(journal, b));
1042 clear_buffer_write_io_error(bh);
1043 set_buffer_uptodate(bh);
1044 }
1045
1046 spin_lock(&journal->j_state_lock);
1047 jbd_debug(1,"JBD: updating superblock (start %u, seq %d, errno %d)\n",
1048 journal->j_tail, journal->j_tail_sequence, journal->j_errno);
1049
1050 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
1051 sb->s_start = cpu_to_be32(journal->j_tail);
1052 sb->s_errno = cpu_to_be32(journal->j_errno);
1053 spin_unlock(&journal->j_state_lock);
1054
1055 BUFFER_TRACE(bh, "marking dirty");
1056 mark_buffer_dirty(bh);
1057 if (wait) {
1058 sync_dirty_buffer(bh);
1059 if (buffer_write_io_error(bh)) {
1060 char b[BDEVNAME_SIZE];
1061 printk(KERN_ERR "JBD: I/O error detected "
1062 "when updating journal superblock for %s.\n",
1063 journal_dev_name(journal, b));
1064 clear_buffer_write_io_error(bh);
1065 set_buffer_uptodate(bh);
1066 }
1067 } else
1068 write_dirty_buffer(bh, WRITE);
1069
1070 trace_jbd_update_superblock_end(journal, wait);
1071out:
1072
1073
1074
1075
1076 spin_lock(&journal->j_state_lock);
1077 if (sb->s_start)
1078 journal->j_flags &= ~JFS_FLUSHED;
1079 else
1080 journal->j_flags |= JFS_FLUSHED;
1081 spin_unlock(&journal->j_state_lock);
1082}
1083
1084
1085
1086
1087
1088
1089static int journal_get_superblock(journal_t *journal)
1090{
1091 struct buffer_head *bh;
1092 journal_superblock_t *sb;
1093 int err = -EIO;
1094
1095 bh = journal->j_sb_buffer;
1096
1097 J_ASSERT(bh != NULL);
1098 if (!buffer_uptodate(bh)) {
1099 ll_rw_block(READ, 1, &bh);
1100 wait_on_buffer(bh);
1101 if (!buffer_uptodate(bh)) {
1102 printk (KERN_ERR
1103 "JBD: IO error reading journal superblock\n");
1104 goto out;
1105 }
1106 }
1107
1108 sb = journal->j_superblock;
1109
1110 err = -EINVAL;
1111
1112 if (sb->s_header.h_magic != cpu_to_be32(JFS_MAGIC_NUMBER) ||
1113 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) {
1114 printk(KERN_WARNING "JBD: no valid journal superblock found\n");
1115 goto out;
1116 }
1117
1118 switch(be32_to_cpu(sb->s_header.h_blocktype)) {
1119 case JFS_SUPERBLOCK_V1:
1120 journal->j_format_version = 1;
1121 break;
1122 case JFS_SUPERBLOCK_V2:
1123 journal->j_format_version = 2;
1124 break;
1125 default:
1126 printk(KERN_WARNING "JBD: unrecognised superblock format ID\n");
1127 goto out;
1128 }
1129
1130 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen)
1131 journal->j_maxlen = be32_to_cpu(sb->s_maxlen);
1132 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) {
1133 printk (KERN_WARNING "JBD: journal file too short\n");
1134 goto out;
1135 }
1136
1137 if (be32_to_cpu(sb->s_first) == 0 ||
1138 be32_to_cpu(sb->s_first) >= journal->j_maxlen) {
1139 printk(KERN_WARNING
1140 "JBD: Invalid start block of journal: %u\n",
1141 be32_to_cpu(sb->s_first));
1142 goto out;
1143 }
1144
1145 return 0;
1146
1147out:
1148 journal_fail_superblock(journal);
1149 return err;
1150}
1151
1152
1153
1154
1155
1156
1157static int load_superblock(journal_t *journal)
1158{
1159 int err;
1160 journal_superblock_t *sb;
1161
1162 err = journal_get_superblock(journal);
1163 if (err)
1164 return err;
1165
1166 sb = journal->j_superblock;
1167
1168 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence);
1169 journal->j_tail = be32_to_cpu(sb->s_start);
1170 journal->j_first = be32_to_cpu(sb->s_first);
1171 journal->j_last = be32_to_cpu(sb->s_maxlen);
1172 journal->j_errno = be32_to_cpu(sb->s_errno);
1173
1174 return 0;
1175}
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186int journal_load(journal_t *journal)
1187{
1188 int err;
1189 journal_superblock_t *sb;
1190
1191 err = load_superblock(journal);
1192 if (err)
1193 return err;
1194
1195 sb = journal->j_superblock;
1196
1197
1198
1199 if (journal->j_format_version >= 2) {
1200 if ((sb->s_feature_ro_compat &
1201 ~cpu_to_be32(JFS_KNOWN_ROCOMPAT_FEATURES)) ||
1202 (sb->s_feature_incompat &
1203 ~cpu_to_be32(JFS_KNOWN_INCOMPAT_FEATURES))) {
1204 printk (KERN_WARNING
1205 "JBD: Unrecognised features on journal\n");
1206 return -EINVAL;
1207 }
1208 }
1209
1210
1211
1212 if (journal_recover(journal))
1213 goto recovery_error;
1214
1215
1216
1217
1218 if (journal_reset(journal))
1219 goto recovery_error;
1220
1221 journal->j_flags &= ~JFS_ABORT;
1222 journal->j_flags |= JFS_LOADED;
1223 return 0;
1224
1225recovery_error:
1226 printk (KERN_WARNING "JBD: recovery failed\n");
1227 return -EIO;
1228}
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238int journal_destroy(journal_t *journal)
1239{
1240 int err = 0;
1241
1242
1243
1244 journal_kill_thread(journal);
1245
1246
1247 if (journal->j_running_transaction)
1248 journal_commit_transaction(journal);
1249
1250
1251
1252
1253 spin_lock(&journal->j_list_lock);
1254 while (journal->j_checkpoint_transactions != NULL) {
1255 spin_unlock(&journal->j_list_lock);
1256 log_do_checkpoint(journal);
1257 spin_lock(&journal->j_list_lock);
1258 }
1259
1260 J_ASSERT(journal->j_running_transaction == NULL);
1261 J_ASSERT(journal->j_committing_transaction == NULL);
1262 J_ASSERT(journal->j_checkpoint_transactions == NULL);
1263 spin_unlock(&journal->j_list_lock);
1264
1265 if (journal->j_sb_buffer) {
1266 if (!is_journal_aborted(journal)) {
1267
1268 journal->j_tail = 0;
1269 journal->j_tail_sequence =
1270 ++journal->j_transaction_sequence;
1271 journal_update_superblock(journal, 1);
1272 } else {
1273 err = -EIO;
1274 }
1275 brelse(journal->j_sb_buffer);
1276 }
1277
1278 if (journal->j_inode)
1279 iput(journal->j_inode);
1280 if (journal->j_revoke)
1281 journal_destroy_revoke(journal);
1282 kfree(journal->j_wbuf);
1283 kfree(journal);
1284
1285 return err;
1286}
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300int journal_check_used_features (journal_t *journal, unsigned long compat,
1301 unsigned long ro, unsigned long incompat)
1302{
1303 journal_superblock_t *sb;
1304
1305 if (!compat && !ro && !incompat)
1306 return 1;
1307 if (journal->j_format_version == 1)
1308 return 0;
1309
1310 sb = journal->j_superblock;
1311
1312 if (((be32_to_cpu(sb->s_feature_compat) & compat) == compat) &&
1313 ((be32_to_cpu(sb->s_feature_ro_compat) & ro) == ro) &&
1314 ((be32_to_cpu(sb->s_feature_incompat) & incompat) == incompat))
1315 return 1;
1316
1317 return 0;
1318}
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331int journal_check_available_features (journal_t *journal, unsigned long compat,
1332 unsigned long ro, unsigned long incompat)
1333{
1334 if (!compat && !ro && !incompat)
1335 return 1;
1336
1337
1338
1339
1340
1341 if (journal->j_format_version != 2)
1342 return 0;
1343
1344 if ((compat & JFS_KNOWN_COMPAT_FEATURES) == compat &&
1345 (ro & JFS_KNOWN_ROCOMPAT_FEATURES) == ro &&
1346 (incompat & JFS_KNOWN_INCOMPAT_FEATURES) == incompat)
1347 return 1;
1348
1349 return 0;
1350}
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364int journal_set_features (journal_t *journal, unsigned long compat,
1365 unsigned long ro, unsigned long incompat)
1366{
1367 journal_superblock_t *sb;
1368
1369 if (journal_check_used_features(journal, compat, ro, incompat))
1370 return 1;
1371
1372 if (!journal_check_available_features(journal, compat, ro, incompat))
1373 return 0;
1374
1375 jbd_debug(1, "Setting new features 0x%lx/0x%lx/0x%lx\n",
1376 compat, ro, incompat);
1377
1378 sb = journal->j_superblock;
1379
1380 sb->s_feature_compat |= cpu_to_be32(compat);
1381 sb->s_feature_ro_compat |= cpu_to_be32(ro);
1382 sb->s_feature_incompat |= cpu_to_be32(incompat);
1383
1384 return 1;
1385}
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395int journal_update_format (journal_t *journal)
1396{
1397 journal_superblock_t *sb;
1398 int err;
1399
1400 err = journal_get_superblock(journal);
1401 if (err)
1402 return err;
1403
1404 sb = journal->j_superblock;
1405
1406 switch (be32_to_cpu(sb->s_header.h_blocktype)) {
1407 case JFS_SUPERBLOCK_V2:
1408 return 0;
1409 case JFS_SUPERBLOCK_V1:
1410 return journal_convert_superblock_v1(journal, sb);
1411 default:
1412 break;
1413 }
1414 return -EINVAL;
1415}
1416
1417static int journal_convert_superblock_v1(journal_t *journal,
1418 journal_superblock_t *sb)
1419{
1420 int offset, blocksize;
1421 struct buffer_head *bh;
1422
1423 printk(KERN_WARNING
1424 "JBD: Converting superblock from version 1 to 2.\n");
1425
1426
1427 offset = ((char *) &(sb->s_feature_compat)) - ((char *) sb);
1428 blocksize = be32_to_cpu(sb->s_blocksize);
1429 memset(&sb->s_feature_compat, 0, blocksize-offset);
1430
1431 sb->s_nr_users = cpu_to_be32(1);
1432 sb->s_header.h_blocktype = cpu_to_be32(JFS_SUPERBLOCK_V2);
1433 journal->j_format_version = 2;
1434
1435 bh = journal->j_sb_buffer;
1436 BUFFER_TRACE(bh, "marking dirty");
1437 mark_buffer_dirty(bh);
1438 sync_dirty_buffer(bh);
1439 return 0;
1440}
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452int journal_flush(journal_t *journal)
1453{
1454 int err = 0;
1455 transaction_t *transaction = NULL;
1456 unsigned int old_tail;
1457
1458 spin_lock(&journal->j_state_lock);
1459
1460
1461 if (journal->j_running_transaction) {
1462 transaction = journal->j_running_transaction;
1463 __log_start_commit(journal, transaction->t_tid);
1464 } else if (journal->j_committing_transaction)
1465 transaction = journal->j_committing_transaction;
1466
1467
1468 if (transaction) {
1469 tid_t tid = transaction->t_tid;
1470
1471 spin_unlock(&journal->j_state_lock);
1472 log_wait_commit(journal, tid);
1473 } else {
1474 spin_unlock(&journal->j_state_lock);
1475 }
1476
1477
1478 spin_lock(&journal->j_list_lock);
1479 while (!err && journal->j_checkpoint_transactions != NULL) {
1480 spin_unlock(&journal->j_list_lock);
1481 mutex_lock(&journal->j_checkpoint_mutex);
1482 err = log_do_checkpoint(journal);
1483 mutex_unlock(&journal->j_checkpoint_mutex);
1484 spin_lock(&journal->j_list_lock);
1485 }
1486 spin_unlock(&journal->j_list_lock);
1487
1488 if (is_journal_aborted(journal))
1489 return -EIO;
1490
1491 cleanup_journal_tail(journal);
1492
1493
1494
1495
1496
1497
1498 spin_lock(&journal->j_state_lock);
1499 old_tail = journal->j_tail;
1500 journal->j_tail = 0;
1501 spin_unlock(&journal->j_state_lock);
1502 journal_update_superblock(journal, 1);
1503 spin_lock(&journal->j_state_lock);
1504 journal->j_tail = old_tail;
1505
1506 J_ASSERT(!journal->j_running_transaction);
1507 J_ASSERT(!journal->j_committing_transaction);
1508 J_ASSERT(!journal->j_checkpoint_transactions);
1509 J_ASSERT(journal->j_head == journal->j_tail);
1510 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
1511 spin_unlock(&journal->j_state_lock);
1512 return 0;
1513}
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528int journal_wipe(journal_t *journal, int write)
1529{
1530 int err = 0;
1531
1532 J_ASSERT (!(journal->j_flags & JFS_LOADED));
1533
1534 err = load_superblock(journal);
1535 if (err)
1536 return err;
1537
1538 if (!journal->j_tail)
1539 goto no_recovery;
1540
1541 printk (KERN_WARNING "JBD: %s recovery information on journal\n",
1542 write ? "Clearing" : "Ignoring");
1543
1544 err = journal_skip_recovery(journal);
1545 if (write)
1546 journal_update_superblock(journal, 1);
1547
1548 no_recovery:
1549 return err;
1550}
1551
1552
1553
1554
1555
1556
1557static const char *journal_dev_name(journal_t *journal, char *buffer)
1558{
1559 struct block_device *bdev;
1560
1561 if (journal->j_inode)
1562 bdev = journal->j_inode->i_sb->s_bdev;
1563 else
1564 bdev = journal->j_dev;
1565
1566 return bdevname(bdev, buffer);
1567}
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582static void __journal_abort_hard(journal_t *journal)
1583{
1584 transaction_t *transaction;
1585 char b[BDEVNAME_SIZE];
1586
1587 if (journal->j_flags & JFS_ABORT)
1588 return;
1589
1590 printk(KERN_ERR "Aborting journal on device %s.\n",
1591 journal_dev_name(journal, b));
1592
1593 spin_lock(&journal->j_state_lock);
1594 journal->j_flags |= JFS_ABORT;
1595 transaction = journal->j_running_transaction;
1596 if (transaction)
1597 __log_start_commit(journal, transaction->t_tid);
1598 spin_unlock(&journal->j_state_lock);
1599}
1600
1601
1602
1603static void __journal_abort_soft (journal_t *journal, int errno)
1604{
1605 if (journal->j_flags & JFS_ABORT)
1606 return;
1607
1608 if (!journal->j_errno)
1609 journal->j_errno = errno;
1610
1611 __journal_abort_hard(journal);
1612
1613 if (errno)
1614 journal_update_superblock(journal, 1);
1615}
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
1663void journal_abort(journal_t *journal, int errno)
1664{
1665 __journal_abort_soft(journal, errno);
1666}
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679int journal_errno(journal_t *journal)
1680{
1681 int err;
1682
1683 spin_lock(&journal->j_state_lock);
1684 if (journal->j_flags & JFS_ABORT)
1685 err = -EROFS;
1686 else
1687 err = journal->j_errno;
1688 spin_unlock(&journal->j_state_lock);
1689 return err;
1690}
1691
1692
1693
1694
1695
1696
1697
1698
1699int journal_clear_err(journal_t *journal)
1700{
1701 int err = 0;
1702
1703 spin_lock(&journal->j_state_lock);
1704 if (journal->j_flags & JFS_ABORT)
1705 err = -EROFS;
1706 else
1707 journal->j_errno = 0;
1708 spin_unlock(&journal->j_state_lock);
1709 return err;
1710}
1711
1712
1713
1714
1715
1716
1717
1718
1719void journal_ack_err(journal_t *journal)
1720{
1721 spin_lock(&journal->j_state_lock);
1722 if (journal->j_errno)
1723 journal->j_flags |= JFS_ACK_ERR;
1724 spin_unlock(&journal->j_state_lock);
1725}
1726
1727int journal_blocks_per_page(struct inode *inode)
1728{
1729 return 1 << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
1730}
1731
1732
1733
1734
1735static struct kmem_cache *journal_head_cache;
1736#ifdef CONFIG_JBD_DEBUG
1737static atomic_t nr_journal_heads = ATOMIC_INIT(0);
1738#endif
1739
1740static int journal_init_journal_head_cache(void)
1741{
1742 int retval;
1743
1744 J_ASSERT(journal_head_cache == NULL);
1745 journal_head_cache = kmem_cache_create("journal_head",
1746 sizeof(struct journal_head),
1747 0,
1748 SLAB_TEMPORARY,
1749 NULL);
1750 retval = 0;
1751 if (!journal_head_cache) {
1752 retval = -ENOMEM;
1753 printk(KERN_EMERG "JBD: no memory for journal_head cache\n");
1754 }
1755 return retval;
1756}
1757
1758static void journal_destroy_journal_head_cache(void)
1759{
1760 if (journal_head_cache) {
1761 kmem_cache_destroy(journal_head_cache);
1762 journal_head_cache = NULL;
1763 }
1764}
1765
1766
1767
1768
1769static struct journal_head *journal_alloc_journal_head(void)
1770{
1771 struct journal_head *ret;
1772
1773#ifdef CONFIG_JBD_DEBUG
1774 atomic_inc(&nr_journal_heads);
1775#endif
1776 ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS);
1777 if (ret == NULL) {
1778 jbd_debug(1, "out of memory for journal_head\n");
1779 printk_ratelimited(KERN_NOTICE "ENOMEM in %s, retrying.\n",
1780 __func__);
1781
1782 while (ret == NULL) {
1783 yield();
1784 ret = kmem_cache_alloc(journal_head_cache, GFP_NOFS);
1785 }
1786 }
1787 return ret;
1788}
1789
1790static void journal_free_journal_head(struct journal_head *jh)
1791{
1792#ifdef CONFIG_JBD_DEBUG
1793 atomic_dec(&nr_journal_heads);
1794 memset(jh, JBD_POISON_FREE, sizeof(*jh));
1795#endif
1796 kmem_cache_free(journal_head_cache, jh);
1797}
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
1840struct journal_head *journal_add_journal_head(struct buffer_head *bh)
1841{
1842 struct journal_head *jh;
1843 struct journal_head *new_jh = NULL;
1844
1845repeat:
1846 if (!buffer_jbd(bh)) {
1847 new_jh = journal_alloc_journal_head();
1848 memset(new_jh, 0, sizeof(*new_jh));
1849 }
1850
1851 jbd_lock_bh_journal_head(bh);
1852 if (buffer_jbd(bh)) {
1853 jh = bh2jh(bh);
1854 } else {
1855 J_ASSERT_BH(bh,
1856 (atomic_read(&bh->b_count) > 0) ||
1857 (bh->b_page && bh->b_page->mapping));
1858
1859 if (!new_jh) {
1860 jbd_unlock_bh_journal_head(bh);
1861 goto repeat;
1862 }
1863
1864 jh = new_jh;
1865 new_jh = NULL;
1866 set_buffer_jbd(bh);
1867 bh->b_private = jh;
1868 jh->b_bh = bh;
1869 get_bh(bh);
1870 BUFFER_TRACE(bh, "added journal_head");
1871 }
1872 jh->b_jcount++;
1873 jbd_unlock_bh_journal_head(bh);
1874 if (new_jh)
1875 journal_free_journal_head(new_jh);
1876 return bh->b_private;
1877}
1878
1879
1880
1881
1882
1883struct journal_head *journal_grab_journal_head(struct buffer_head *bh)
1884{
1885 struct journal_head *jh = NULL;
1886
1887 jbd_lock_bh_journal_head(bh);
1888 if (buffer_jbd(bh)) {
1889 jh = bh2jh(bh);
1890 jh->b_jcount++;
1891 }
1892 jbd_unlock_bh_journal_head(bh);
1893 return jh;
1894}
1895
1896static void __journal_remove_journal_head(struct buffer_head *bh)
1897{
1898 struct journal_head *jh = bh2jh(bh);
1899
1900 J_ASSERT_JH(jh, jh->b_jcount >= 0);
1901 J_ASSERT_JH(jh, jh->b_transaction == NULL);
1902 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1903 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL);
1904 J_ASSERT_JH(jh, jh->b_jlist == BJ_None);
1905 J_ASSERT_BH(bh, buffer_jbd(bh));
1906 J_ASSERT_BH(bh, jh2bh(jh) == bh);
1907 BUFFER_TRACE(bh, "remove journal_head");
1908 if (jh->b_frozen_data) {
1909 printk(KERN_WARNING "%s: freeing b_frozen_data\n", __func__);
1910 jbd_free(jh->b_frozen_data, bh->b_size);
1911 }
1912 if (jh->b_committed_data) {
1913 printk(KERN_WARNING "%s: freeing b_committed_data\n", __func__);
1914 jbd_free(jh->b_committed_data, bh->b_size);
1915 }
1916 bh->b_private = NULL;
1917 jh->b_bh = NULL;
1918 clear_buffer_jbd(bh);
1919 journal_free_journal_head(jh);
1920}
1921
1922
1923
1924
1925
1926void journal_put_journal_head(struct journal_head *jh)
1927{
1928 struct buffer_head *bh = jh2bh(jh);
1929
1930 jbd_lock_bh_journal_head(bh);
1931 J_ASSERT_JH(jh, jh->b_jcount > 0);
1932 --jh->b_jcount;
1933 if (!jh->b_jcount) {
1934 __journal_remove_journal_head(bh);
1935 jbd_unlock_bh_journal_head(bh);
1936 __brelse(bh);
1937 } else
1938 jbd_unlock_bh_journal_head(bh);
1939}
1940
1941
1942
1943
1944#ifdef CONFIG_JBD_DEBUG
1945
1946u8 journal_enable_debug __read_mostly;
1947EXPORT_SYMBOL(journal_enable_debug);
1948
1949static struct dentry *jbd_debugfs_dir;
1950static struct dentry *jbd_debug;
1951
1952static void __init jbd_create_debugfs_entry(void)
1953{
1954 jbd_debugfs_dir = debugfs_create_dir("jbd", NULL);
1955 if (jbd_debugfs_dir)
1956 jbd_debug = debugfs_create_u8("jbd-debug", S_IRUGO | S_IWUSR,
1957 jbd_debugfs_dir,
1958 &journal_enable_debug);
1959}
1960
1961static void __exit jbd_remove_debugfs_entry(void)
1962{
1963 debugfs_remove(jbd_debug);
1964 debugfs_remove(jbd_debugfs_dir);
1965}
1966
1967#else
1968
1969static inline void jbd_create_debugfs_entry(void)
1970{
1971}
1972
1973static inline void jbd_remove_debugfs_entry(void)
1974{
1975}
1976
1977#endif
1978
1979struct kmem_cache *jbd_handle_cache;
1980
1981static int __init journal_init_handle_cache(void)
1982{
1983 jbd_handle_cache = kmem_cache_create("journal_handle",
1984 sizeof(handle_t),
1985 0,
1986 SLAB_TEMPORARY,
1987 NULL);
1988 if (jbd_handle_cache == NULL) {
1989 printk(KERN_EMERG "JBD: failed to create handle cache\n");
1990 return -ENOMEM;
1991 }
1992 return 0;
1993}
1994
1995static void journal_destroy_handle_cache(void)
1996{
1997 if (jbd_handle_cache)
1998 kmem_cache_destroy(jbd_handle_cache);
1999}
2000
2001
2002
2003
2004
2005static int __init journal_init_caches(void)
2006{
2007 int ret;
2008
2009 ret = journal_init_revoke_caches();
2010 if (ret == 0)
2011 ret = journal_init_journal_head_cache();
2012 if (ret == 0)
2013 ret = journal_init_handle_cache();
2014 return ret;
2015}
2016
2017static void journal_destroy_caches(void)
2018{
2019 journal_destroy_revoke_caches();
2020 journal_destroy_journal_head_cache();
2021 journal_destroy_handle_cache();
2022}
2023
2024static int __init journal_init(void)
2025{
2026 int ret;
2027
2028 BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024);
2029
2030 ret = journal_init_caches();
2031 if (ret != 0)
2032 journal_destroy_caches();
2033 jbd_create_debugfs_entry();
2034 return ret;
2035}
2036
2037static void __exit journal_exit(void)
2038{
2039#ifdef CONFIG_JBD_DEBUG
2040 int n = atomic_read(&nr_journal_heads);
2041 if (n)
2042 printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n);
2043#endif
2044 jbd_remove_debugfs_entry();
2045 journal_destroy_caches();
2046}
2047
2048MODULE_LICENSE("GPL");
2049module_init(journal_init);
2050module_exit(journal_exit);
2051
2052