1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/module.h>
26#include <linux/time.h>
27#include <linux/fs.h>
28#include <linux/jbd2.h>
29#include <linux/errno.h>
30#include <linux/slab.h>
31#include <linux/init.h>
32#include <linux/mm.h>
33#include <linux/freezer.h>
34#include <linux/pagemap.h>
35#include <linux/kthread.h>
36#include <linux/poison.h>
37#include <linux/proc_fs.h>
38#include <linux/debugfs.h>
39#include <linux/seq_file.h>
40#include <linux/math64.h>
41#include <linux/hash.h>
42
43#define CREATE_TRACE_POINTS
44#include <trace/events/jbd2.h>
45
46#include <asm/uaccess.h>
47#include <asm/page.h>
48
49EXPORT_SYMBOL(jbd2_journal_start);
50EXPORT_SYMBOL(jbd2_journal_restart);
51EXPORT_SYMBOL(jbd2_journal_extend);
52EXPORT_SYMBOL(jbd2_journal_stop);
53EXPORT_SYMBOL(jbd2_journal_lock_updates);
54EXPORT_SYMBOL(jbd2_journal_unlock_updates);
55EXPORT_SYMBOL(jbd2_journal_get_write_access);
56EXPORT_SYMBOL(jbd2_journal_get_create_access);
57EXPORT_SYMBOL(jbd2_journal_get_undo_access);
58EXPORT_SYMBOL(jbd2_journal_set_triggers);
59EXPORT_SYMBOL(jbd2_journal_dirty_metadata);
60EXPORT_SYMBOL(jbd2_journal_release_buffer);
61EXPORT_SYMBOL(jbd2_journal_forget);
62#if 0
63EXPORT_SYMBOL(journal_sync_buffer);
64#endif
65EXPORT_SYMBOL(jbd2_journal_flush);
66EXPORT_SYMBOL(jbd2_journal_revoke);
67
68EXPORT_SYMBOL(jbd2_journal_init_dev);
69EXPORT_SYMBOL(jbd2_journal_init_inode);
70EXPORT_SYMBOL(jbd2_journal_update_format);
71EXPORT_SYMBOL(jbd2_journal_check_used_features);
72EXPORT_SYMBOL(jbd2_journal_check_available_features);
73EXPORT_SYMBOL(jbd2_journal_set_features);
74EXPORT_SYMBOL(jbd2_journal_load);
75EXPORT_SYMBOL(jbd2_journal_destroy);
76EXPORT_SYMBOL(jbd2_journal_abort);
77EXPORT_SYMBOL(jbd2_journal_errno);
78EXPORT_SYMBOL(jbd2_journal_ack_err);
79EXPORT_SYMBOL(jbd2_journal_clear_err);
80EXPORT_SYMBOL(jbd2_log_wait_commit);
81EXPORT_SYMBOL(jbd2_journal_start_commit);
82EXPORT_SYMBOL(jbd2_journal_force_commit_nested);
83EXPORT_SYMBOL(jbd2_journal_wipe);
84EXPORT_SYMBOL(jbd2_journal_blocks_per_page);
85EXPORT_SYMBOL(jbd2_journal_invalidatepage);
86EXPORT_SYMBOL(jbd2_journal_try_to_free_buffers);
87EXPORT_SYMBOL(jbd2_journal_force_commit);
88EXPORT_SYMBOL(jbd2_journal_file_inode);
89EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
90EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
91EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
92
93static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
94static void __journal_abort_soft (journal_t *journal, int errno);
95
96
97
98
99
100static void commit_timeout(unsigned long __data)
101{
102 struct task_struct * p = (struct task_struct *) __data;
103
104 wake_up_process(p);
105}
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123static int kjournald2(void *arg)
124{
125 journal_t *journal = arg;
126 transaction_t *transaction;
127
128
129
130
131
132 setup_timer(&journal->j_commit_timer, commit_timeout,
133 (unsigned long)current);
134
135
136 journal->j_task = current;
137 wake_up(&journal->j_wait_done_commit);
138
139
140
141
142 spin_lock(&journal->j_state_lock);
143
144loop:
145 if (journal->j_flags & JBD2_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 jbd2_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 kjournald2\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 & JBD2_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, "kjournald2 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 jbd2_journal_start_thread(journal_t *journal)
219{
220 struct task_struct *t;
221
222 t = kthread_run(kjournald2, journal, "jbd2/%s",
223 journal->j_devname);
224 if (IS_ERR(t))
225 return PTR_ERR(t);
226
227 wait_event(journal->j_wait_done_commit, journal->j_task != NULL);
228 return 0;
229}
230
231static void journal_kill_thread(journal_t *journal)
232{
233 spin_lock(&journal->j_state_lock);
234 journal->j_flags |= JBD2_UNMOUNT;
235
236 while (journal->j_task) {
237 wake_up(&journal->j_wait_commit);
238 spin_unlock(&journal->j_state_lock);
239 wait_event(journal->j_wait_done_commit, 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 jbd2_journal_write_metadata_buffer(transaction_t *transaction,
283 struct journal_head *jh_in,
284 struct journal_head **jh_out,
285 unsigned long long 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 struct jbd2_buffer_trigger_type *triggers;
297 journal_t *journal = transaction->t_journal;
298
299
300
301
302
303
304
305
306
307
308 J_ASSERT_BH(bh_in, buffer_jbddirty(bh_in));
309
310 new_bh = alloc_buffer_head(GFP_NOFS|__GFP_NOFAIL);
311
312 new_bh->b_state = 0;
313 init_buffer(new_bh, NULL, NULL);
314 atomic_set(&new_bh->b_count, 1);
315 new_jh = jbd2_journal_add_journal_head(new_bh);
316
317
318
319
320
321 jbd_lock_bh_state(bh_in);
322repeat:
323 if (jh_in->b_frozen_data) {
324 done_copy_out = 1;
325 new_page = virt_to_page(jh_in->b_frozen_data);
326 new_offset = offset_in_page(jh_in->b_frozen_data);
327 triggers = jh_in->b_frozen_triggers;
328 } else {
329 new_page = jh2bh(jh_in)->b_page;
330 new_offset = offset_in_page(jh2bh(jh_in)->b_data);
331 triggers = jh_in->b_triggers;
332 }
333
334 mapped_data = kmap_atomic(new_page, KM_USER0);
335
336
337
338
339
340 jbd2_buffer_commit_trigger(jh_in, mapped_data + new_offset,
341 triggers);
342
343
344
345
346 if (*((__be32 *)(mapped_data + new_offset)) ==
347 cpu_to_be32(JBD2_MAGIC_NUMBER)) {
348 need_copy_out = 1;
349 do_escape = 1;
350 }
351 kunmap_atomic(mapped_data, KM_USER0);
352
353
354
355
356 if (need_copy_out && !done_copy_out) {
357 char *tmp;
358
359 jbd_unlock_bh_state(bh_in);
360 tmp = jbd2_alloc(bh_in->b_size, GFP_NOFS);
361 jbd_lock_bh_state(bh_in);
362 if (jh_in->b_frozen_data) {
363 jbd2_free(tmp, bh_in->b_size);
364 goto repeat;
365 }
366
367 jh_in->b_frozen_data = tmp;
368 mapped_data = kmap_atomic(new_page, KM_USER0);
369 memcpy(tmp, mapped_data + new_offset, jh2bh(jh_in)->b_size);
370 kunmap_atomic(mapped_data, KM_USER0);
371
372 new_page = virt_to_page(tmp);
373 new_offset = offset_in_page(tmp);
374 done_copy_out = 1;
375
376
377
378
379
380
381 jh_in->b_frozen_triggers = jh_in->b_triggers;
382 }
383
384
385
386
387
388 if (do_escape) {
389 mapped_data = kmap_atomic(new_page, KM_USER0);
390 *((unsigned int *)(mapped_data + new_offset)) = 0;
391 kunmap_atomic(mapped_data, KM_USER0);
392 }
393
394 set_bh_page(new_bh, new_page, new_offset);
395 new_jh->b_transaction = NULL;
396 new_bh->b_size = jh2bh(jh_in)->b_size;
397 new_bh->b_bdev = transaction->t_journal->j_dev;
398 new_bh->b_blocknr = blocknr;
399 set_buffer_mapped(new_bh);
400 set_buffer_dirty(new_bh);
401
402 *jh_out = new_jh;
403
404
405
406
407
408
409 JBUFFER_TRACE(jh_in, "file as BJ_Shadow");
410 spin_lock(&journal->j_list_lock);
411 __jbd2_journal_file_buffer(jh_in, transaction, BJ_Shadow);
412 spin_unlock(&journal->j_list_lock);
413 jbd_unlock_bh_state(bh_in);
414
415 JBUFFER_TRACE(new_jh, "file as BJ_IO");
416 jbd2_journal_file_buffer(new_jh, transaction, BJ_IO);
417
418 return do_escape | (done_copy_out << 1);
419}
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434int __jbd2_log_space_left(journal_t *journal)
435{
436 int left = journal->j_free;
437
438 assert_spin_locked(&journal->j_state_lock);
439
440
441
442
443
444
445#define MIN_LOG_RESERVED_BLOCKS 32
446
447 left -= MIN_LOG_RESERVED_BLOCKS;
448
449 if (left <= 0)
450 return 0;
451 left -= (left >> 3);
452 return left;
453}
454
455
456
457
458int __jbd2_log_start_commit(journal_t *journal, tid_t target)
459{
460
461
462
463 if (!tid_geq(journal->j_commit_request, target)) {
464
465
466
467
468
469 journal->j_commit_request = target;
470 jbd_debug(1, "JBD: requesting commit %d/%d\n",
471 journal->j_commit_request,
472 journal->j_commit_sequence);
473 wake_up(&journal->j_wait_commit);
474 return 1;
475 }
476 return 0;
477}
478
479int jbd2_log_start_commit(journal_t *journal, tid_t tid)
480{
481 int ret;
482
483 spin_lock(&journal->j_state_lock);
484 ret = __jbd2_log_start_commit(journal, tid);
485 spin_unlock(&journal->j_state_lock);
486 return ret;
487}
488
489
490
491
492
493
494
495
496
497
498
499int jbd2_journal_force_commit_nested(journal_t *journal)
500{
501 transaction_t *transaction = NULL;
502 tid_t tid;
503
504 spin_lock(&journal->j_state_lock);
505 if (journal->j_running_transaction && !current->journal_info) {
506 transaction = journal->j_running_transaction;
507 __jbd2_log_start_commit(journal, transaction->t_tid);
508 } else if (journal->j_committing_transaction)
509 transaction = journal->j_committing_transaction;
510
511 if (!transaction) {
512 spin_unlock(&journal->j_state_lock);
513 return 0;
514 }
515
516 tid = transaction->t_tid;
517 spin_unlock(&journal->j_state_lock);
518 jbd2_log_wait_commit(journal, tid);
519 return 1;
520}
521
522
523
524
525
526
527int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid)
528{
529 int ret = 0;
530
531 spin_lock(&journal->j_state_lock);
532 if (journal->j_running_transaction) {
533 tid_t tid = journal->j_running_transaction->t_tid;
534
535 __jbd2_log_start_commit(journal, tid);
536
537
538 if (ptid)
539 *ptid = tid;
540 ret = 1;
541 } else if (journal->j_committing_transaction) {
542
543
544
545
546 if (ptid)
547 *ptid = journal->j_committing_transaction->t_tid;
548 ret = 1;
549 }
550 spin_unlock(&journal->j_state_lock);
551 return ret;
552}
553
554
555
556
557
558int jbd2_log_wait_commit(journal_t *journal, tid_t tid)
559{
560 int err = 0;
561
562#ifdef CONFIG_JBD2_DEBUG
563 spin_lock(&journal->j_state_lock);
564 if (!tid_geq(journal->j_commit_request, tid)) {
565 printk(KERN_EMERG
566 "%s: error: j_commit_request=%d, tid=%d\n",
567 __func__, journal->j_commit_request, tid);
568 }
569 spin_unlock(&journal->j_state_lock);
570#endif
571 spin_lock(&journal->j_state_lock);
572 while (tid_gt(tid, journal->j_commit_sequence)) {
573 jbd_debug(1, "JBD: want %d, j_commit_sequence=%d\n",
574 tid, journal->j_commit_sequence);
575 wake_up(&journal->j_wait_commit);
576 spin_unlock(&journal->j_state_lock);
577 wait_event(journal->j_wait_done_commit,
578 !tid_gt(tid, journal->j_commit_sequence));
579 spin_lock(&journal->j_state_lock);
580 }
581 spin_unlock(&journal->j_state_lock);
582
583 if (unlikely(is_journal_aborted(journal))) {
584 printk(KERN_EMERG "journal commit I/O error\n");
585 err = -EIO;
586 }
587 return err;
588}
589
590
591
592
593
594int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp)
595{
596 unsigned long blocknr;
597
598 spin_lock(&journal->j_state_lock);
599 J_ASSERT(journal->j_free > 1);
600
601 blocknr = journal->j_head;
602 journal->j_head++;
603 journal->j_free--;
604 if (journal->j_head == journal->j_last)
605 journal->j_head = journal->j_first;
606 spin_unlock(&journal->j_state_lock);
607 return jbd2_journal_bmap(journal, blocknr, retp);
608}
609
610
611
612
613
614
615
616
617int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
618 unsigned long long *retp)
619{
620 int err = 0;
621 unsigned long long ret;
622
623 if (journal->j_inode) {
624 ret = bmap(journal->j_inode, blocknr);
625 if (ret)
626 *retp = ret;
627 else {
628 printk(KERN_ALERT "%s: journal block not found "
629 "at offset %lu on %s\n",
630 __func__, blocknr, journal->j_devname);
631 err = -EIO;
632 __journal_abort_soft(journal, err);
633 }
634 } else {
635 *retp = blocknr;
636 }
637 return err;
638}
639
640
641
642
643
644
645
646
647
648
649
650struct journal_head *jbd2_journal_get_descriptor_buffer(journal_t *journal)
651{
652 struct buffer_head *bh;
653 unsigned long long blocknr;
654 int err;
655
656 err = jbd2_journal_next_log_block(journal, &blocknr);
657
658 if (err)
659 return NULL;
660
661 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
662 if (!bh)
663 return NULL;
664 lock_buffer(bh);
665 memset(bh->b_data, 0, journal->j_blocksize);
666 set_buffer_uptodate(bh);
667 unlock_buffer(bh);
668 BUFFER_TRACE(bh, "return this buffer");
669 return jbd2_journal_add_journal_head(bh);
670}
671
672struct jbd2_stats_proc_session {
673 journal_t *journal;
674 struct transaction_stats_s *stats;
675 int start;
676 int max;
677};
678
679static void *jbd2_seq_info_start(struct seq_file *seq, loff_t *pos)
680{
681 return *pos ? NULL : SEQ_START_TOKEN;
682}
683
684static void *jbd2_seq_info_next(struct seq_file *seq, void *v, loff_t *pos)
685{
686 return NULL;
687}
688
689static int jbd2_seq_info_show(struct seq_file *seq, void *v)
690{
691 struct jbd2_stats_proc_session *s = seq->private;
692
693 if (v != SEQ_START_TOKEN)
694 return 0;
695 seq_printf(seq, "%lu transaction, each up to %u blocks\n",
696 s->stats->ts_tid,
697 s->journal->j_max_transaction_buffers);
698 if (s->stats->ts_tid == 0)
699 return 0;
700 seq_printf(seq, "average: \n %ums waiting for transaction\n",
701 jiffies_to_msecs(s->stats->run.rs_wait / s->stats->ts_tid));
702 seq_printf(seq, " %ums running transaction\n",
703 jiffies_to_msecs(s->stats->run.rs_running / s->stats->ts_tid));
704 seq_printf(seq, " %ums transaction was being locked\n",
705 jiffies_to_msecs(s->stats->run.rs_locked / s->stats->ts_tid));
706 seq_printf(seq, " %ums flushing data (in ordered mode)\n",
707 jiffies_to_msecs(s->stats->run.rs_flushing / s->stats->ts_tid));
708 seq_printf(seq, " %ums logging transaction\n",
709 jiffies_to_msecs(s->stats->run.rs_logging / s->stats->ts_tid));
710 seq_printf(seq, " %lluus average transaction commit time\n",
711 div_u64(s->journal->j_average_commit_time, 1000));
712 seq_printf(seq, " %lu handles per transaction\n",
713 s->stats->run.rs_handle_count / s->stats->ts_tid);
714 seq_printf(seq, " %lu blocks per transaction\n",
715 s->stats->run.rs_blocks / s->stats->ts_tid);
716 seq_printf(seq, " %lu logged blocks per transaction\n",
717 s->stats->run.rs_blocks_logged / s->stats->ts_tid);
718 return 0;
719}
720
721static void jbd2_seq_info_stop(struct seq_file *seq, void *v)
722{
723}
724
725static const struct seq_operations jbd2_seq_info_ops = {
726 .start = jbd2_seq_info_start,
727 .next = jbd2_seq_info_next,
728 .stop = jbd2_seq_info_stop,
729 .show = jbd2_seq_info_show,
730};
731
732static int jbd2_seq_info_open(struct inode *inode, struct file *file)
733{
734 journal_t *journal = PDE(inode)->data;
735 struct jbd2_stats_proc_session *s;
736 int rc, size;
737
738 s = kmalloc(sizeof(*s), GFP_KERNEL);
739 if (s == NULL)
740 return -ENOMEM;
741 size = sizeof(struct transaction_stats_s);
742 s->stats = kmalloc(size, GFP_KERNEL);
743 if (s->stats == NULL) {
744 kfree(s);
745 return -ENOMEM;
746 }
747 spin_lock(&journal->j_history_lock);
748 memcpy(s->stats, &journal->j_stats, size);
749 s->journal = journal;
750 spin_unlock(&journal->j_history_lock);
751
752 rc = seq_open(file, &jbd2_seq_info_ops);
753 if (rc == 0) {
754 struct seq_file *m = file->private_data;
755 m->private = s;
756 } else {
757 kfree(s->stats);
758 kfree(s);
759 }
760 return rc;
761
762}
763
764static int jbd2_seq_info_release(struct inode *inode, struct file *file)
765{
766 struct seq_file *seq = file->private_data;
767 struct jbd2_stats_proc_session *s = seq->private;
768 kfree(s->stats);
769 kfree(s);
770 return seq_release(inode, file);
771}
772
773static const struct file_operations jbd2_seq_info_fops = {
774 .owner = THIS_MODULE,
775 .open = jbd2_seq_info_open,
776 .read = seq_read,
777 .llseek = seq_lseek,
778 .release = jbd2_seq_info_release,
779};
780
781static struct proc_dir_entry *proc_jbd2_stats;
782
783static void jbd2_stats_proc_init(journal_t *journal)
784{
785 journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats);
786 if (journal->j_proc_entry) {
787 proc_create_data("info", S_IRUGO, journal->j_proc_entry,
788 &jbd2_seq_info_fops, journal);
789 }
790}
791
792static void jbd2_stats_proc_exit(journal_t *journal)
793{
794 remove_proc_entry("info", journal->j_proc_entry);
795 remove_proc_entry(journal->j_devname, proc_jbd2_stats);
796}
797
798
799
800
801
802
803
804
805
806
807static journal_t * journal_init_common (void)
808{
809 journal_t *journal;
810 int err;
811
812 journal = kzalloc(sizeof(*journal), GFP_KERNEL|__GFP_NOFAIL);
813 if (!journal)
814 goto fail;
815
816 init_waitqueue_head(&journal->j_wait_transaction_locked);
817 init_waitqueue_head(&journal->j_wait_logspace);
818 init_waitqueue_head(&journal->j_wait_done_commit);
819 init_waitqueue_head(&journal->j_wait_checkpoint);
820 init_waitqueue_head(&journal->j_wait_commit);
821 init_waitqueue_head(&journal->j_wait_updates);
822 mutex_init(&journal->j_barrier);
823 mutex_init(&journal->j_checkpoint_mutex);
824 spin_lock_init(&journal->j_revoke_lock);
825 spin_lock_init(&journal->j_list_lock);
826 spin_lock_init(&journal->j_state_lock);
827
828 journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE);
829 journal->j_min_batch_time = 0;
830 journal->j_max_batch_time = 15000;
831
832
833 journal->j_flags = JBD2_ABORT;
834
835
836 err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH);
837 if (err) {
838 kfree(journal);
839 goto fail;
840 }
841
842 spin_lock_init(&journal->j_history_lock);
843
844 return journal;
845fail:
846 return NULL;
847}
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872journal_t * jbd2_journal_init_dev(struct block_device *bdev,
873 struct block_device *fs_dev,
874 unsigned long long start, int len, int blocksize)
875{
876 journal_t *journal = journal_init_common();
877 struct buffer_head *bh;
878 char *p;
879 int n;
880
881 if (!journal)
882 return NULL;
883
884
885 journal->j_blocksize = blocksize;
886 jbd2_stats_proc_init(journal);
887 n = journal->j_blocksize / sizeof(journal_block_tag_t);
888 journal->j_wbufsize = n;
889 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
890 if (!journal->j_wbuf) {
891 printk(KERN_ERR "%s: Cant allocate bhs for commit thread\n",
892 __func__);
893 goto out_err;
894 }
895 journal->j_dev = bdev;
896 journal->j_fs_dev = fs_dev;
897 journal->j_blk_offset = start;
898 journal->j_maxlen = len;
899 bdevname(journal->j_dev, journal->j_devname);
900 p = journal->j_devname;
901 while ((p = strchr(p, '/')))
902 *p = '!';
903
904 bh = __getblk(journal->j_dev, start, journal->j_blocksize);
905 if (!bh) {
906 printk(KERN_ERR
907 "%s: Cannot get buffer for journal superblock\n",
908 __func__);
909 goto out_err;
910 }
911 journal->j_sb_buffer = bh;
912 journal->j_superblock = (journal_superblock_t *)bh->b_data;
913
914 return journal;
915out_err:
916 kfree(journal->j_wbuf);
917 jbd2_stats_proc_exit(journal);
918 kfree(journal);
919 return NULL;
920}
921
922
923
924
925
926
927
928
929
930journal_t * jbd2_journal_init_inode (struct inode *inode)
931{
932 struct buffer_head *bh;
933 journal_t *journal = journal_init_common();
934 char *p;
935 int err;
936 int n;
937 unsigned long long blocknr;
938
939 if (!journal)
940 return NULL;
941
942 journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev;
943 journal->j_inode = inode;
944 bdevname(journal->j_dev, journal->j_devname);
945 p = journal->j_devname;
946 while ((p = strchr(p, '/')))
947 *p = '!';
948 p = journal->j_devname + strlen(journal->j_devname);
949 sprintf(p, "-%lu", journal->j_inode->i_ino);
950 jbd_debug(1,
951 "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n",
952 journal, inode->i_sb->s_id, inode->i_ino,
953 (long long) inode->i_size,
954 inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
955
956 journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits;
957 journal->j_blocksize = inode->i_sb->s_blocksize;
958 jbd2_stats_proc_init(journal);
959
960
961 n = journal->j_blocksize / sizeof(journal_block_tag_t);
962 journal->j_wbufsize = n;
963 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL);
964 if (!journal->j_wbuf) {
965 printk(KERN_ERR "%s: Cant allocate bhs for commit thread\n",
966 __func__);
967 goto out_err;
968 }
969
970 err = jbd2_journal_bmap(journal, 0, &blocknr);
971
972 if (err) {
973 printk(KERN_ERR "%s: Cannnot locate journal superblock\n",
974 __func__);
975 goto out_err;
976 }
977
978 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize);
979 if (!bh) {
980 printk(KERN_ERR
981 "%s: Cannot get buffer for journal superblock\n",
982 __func__);
983 goto out_err;
984 }
985 journal->j_sb_buffer = bh;
986 journal->j_superblock = (journal_superblock_t *)bh->b_data;
987
988 return journal;
989out_err:
990 kfree(journal->j_wbuf);
991 jbd2_stats_proc_exit(journal);
992 kfree(journal);
993 return NULL;
994}
995
996
997
998
999
1000
1001static void journal_fail_superblock (journal_t *journal)
1002{
1003 struct buffer_head *bh = journal->j_sb_buffer;
1004 brelse(bh);
1005 journal->j_sb_buffer = NULL;
1006}
1007
1008
1009
1010
1011
1012
1013
1014
1015static int journal_reset(journal_t *journal)
1016{
1017 journal_superblock_t *sb = journal->j_superblock;
1018 unsigned long long first, last;
1019
1020 first = be32_to_cpu(sb->s_first);
1021 last = be32_to_cpu(sb->s_maxlen);
1022 if (first + JBD2_MIN_JOURNAL_BLOCKS > last + 1) {
1023 printk(KERN_ERR "JBD: Journal too short (blocks %llu-%llu).\n",
1024 first, last);
1025 journal_fail_superblock(journal);
1026 return -EINVAL;
1027 }
1028
1029 journal->j_first = first;
1030 journal->j_last = last;
1031
1032 journal->j_head = first;
1033 journal->j_tail = first;
1034 journal->j_free = last - first;
1035
1036 journal->j_tail_sequence = journal->j_transaction_sequence;
1037 journal->j_commit_sequence = journal->j_transaction_sequence - 1;
1038 journal->j_commit_request = journal->j_commit_sequence;
1039
1040 journal->j_max_transaction_buffers = journal->j_maxlen / 4;
1041
1042
1043 jbd2_journal_update_superblock(journal, 1);
1044 return jbd2_journal_start_thread(journal);
1045}
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055void jbd2_journal_update_superblock(journal_t *journal, int wait)
1056{
1057 journal_superblock_t *sb = journal->j_superblock;
1058 struct buffer_head *bh = journal->j_sb_buffer;
1059
1060
1061
1062
1063
1064
1065
1066
1067 if (sb->s_start == 0 && journal->j_tail_sequence ==
1068 journal->j_transaction_sequence) {
1069 jbd_debug(1,"JBD: Skipping superblock update on recovered sb "
1070 "(start %ld, seq %d, errno %d)\n",
1071 journal->j_tail, journal->j_tail_sequence,
1072 journal->j_errno);
1073 goto out;
1074 }
1075
1076 if (buffer_write_io_error(bh)) {
1077
1078
1079
1080
1081
1082
1083
1084
1085 printk(KERN_ERR "JBD2: previous I/O error detected "
1086 "for journal superblock update for %s.\n",
1087 journal->j_devname);
1088 clear_buffer_write_io_error(bh);
1089 set_buffer_uptodate(bh);
1090 }
1091
1092 spin_lock(&journal->j_state_lock);
1093 jbd_debug(1,"JBD: updating superblock (start %ld, seq %d, errno %d)\n",
1094 journal->j_tail, journal->j_tail_sequence, journal->j_errno);
1095
1096 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
1097 sb->s_start = cpu_to_be32(journal->j_tail);
1098 sb->s_errno = cpu_to_be32(journal->j_errno);
1099 spin_unlock(&journal->j_state_lock);
1100
1101 BUFFER_TRACE(bh, "marking dirty");
1102 mark_buffer_dirty(bh);
1103 if (wait) {
1104 sync_dirty_buffer(bh);
1105 if (buffer_write_io_error(bh)) {
1106 printk(KERN_ERR "JBD2: I/O error detected "
1107 "when updating journal superblock for %s.\n",
1108 journal->j_devname);
1109 clear_buffer_write_io_error(bh);
1110 set_buffer_uptodate(bh);
1111 }
1112 } else
1113 ll_rw_block(SWRITE, 1, &bh);
1114
1115out:
1116
1117
1118
1119
1120 spin_lock(&journal->j_state_lock);
1121 if (sb->s_start)
1122 journal->j_flags &= ~JBD2_FLUSHED;
1123 else
1124 journal->j_flags |= JBD2_FLUSHED;
1125 spin_unlock(&journal->j_state_lock);
1126}
1127
1128
1129
1130
1131
1132
1133static int journal_get_superblock(journal_t *journal)
1134{
1135 struct buffer_head *bh;
1136 journal_superblock_t *sb;
1137 int err = -EIO;
1138
1139 bh = journal->j_sb_buffer;
1140
1141 J_ASSERT(bh != NULL);
1142 if (!buffer_uptodate(bh)) {
1143 ll_rw_block(READ, 1, &bh);
1144 wait_on_buffer(bh);
1145 if (!buffer_uptodate(bh)) {
1146 printk (KERN_ERR
1147 "JBD: IO error reading journal superblock\n");
1148 goto out;
1149 }
1150 }
1151
1152 sb = journal->j_superblock;
1153
1154 err = -EINVAL;
1155
1156 if (sb->s_header.h_magic != cpu_to_be32(JBD2_MAGIC_NUMBER) ||
1157 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) {
1158 printk(KERN_WARNING "JBD: no valid journal superblock found\n");
1159 goto out;
1160 }
1161
1162 switch(be32_to_cpu(sb->s_header.h_blocktype)) {
1163 case JBD2_SUPERBLOCK_V1:
1164 journal->j_format_version = 1;
1165 break;
1166 case JBD2_SUPERBLOCK_V2:
1167 journal->j_format_version = 2;
1168 break;
1169 default:
1170 printk(KERN_WARNING "JBD: unrecognised superblock format ID\n");
1171 goto out;
1172 }
1173
1174 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen)
1175 journal->j_maxlen = be32_to_cpu(sb->s_maxlen);
1176 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) {
1177 printk (KERN_WARNING "JBD: journal file too short\n");
1178 goto out;
1179 }
1180
1181 return 0;
1182
1183out:
1184 journal_fail_superblock(journal);
1185 return err;
1186}
1187
1188
1189
1190
1191
1192
1193static int load_superblock(journal_t *journal)
1194{
1195 int err;
1196 journal_superblock_t *sb;
1197
1198 err = journal_get_superblock(journal);
1199 if (err)
1200 return err;
1201
1202 sb = journal->j_superblock;
1203
1204 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence);
1205 journal->j_tail = be32_to_cpu(sb->s_start);
1206 journal->j_first = be32_to_cpu(sb->s_first);
1207 journal->j_last = be32_to_cpu(sb->s_maxlen);
1208 journal->j_errno = be32_to_cpu(sb->s_errno);
1209
1210 return 0;
1211}
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222int jbd2_journal_load(journal_t *journal)
1223{
1224 int err;
1225 journal_superblock_t *sb;
1226
1227 err = load_superblock(journal);
1228 if (err)
1229 return err;
1230
1231 sb = journal->j_superblock;
1232
1233
1234
1235 if (journal->j_format_version >= 2) {
1236 if ((sb->s_feature_ro_compat &
1237 ~cpu_to_be32(JBD2_KNOWN_ROCOMPAT_FEATURES)) ||
1238 (sb->s_feature_incompat &
1239 ~cpu_to_be32(JBD2_KNOWN_INCOMPAT_FEATURES))) {
1240 printk (KERN_WARNING
1241 "JBD: Unrecognised features on journal\n");
1242 return -EINVAL;
1243 }
1244 }
1245
1246
1247
1248 if (jbd2_journal_recover(journal))
1249 goto recovery_error;
1250
1251
1252
1253
1254 if (journal_reset(journal))
1255 goto recovery_error;
1256
1257 journal->j_flags &= ~JBD2_ABORT;
1258 journal->j_flags |= JBD2_LOADED;
1259 return 0;
1260
1261recovery_error:
1262 printk (KERN_WARNING "JBD: recovery failed\n");
1263 return -EIO;
1264}
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274int jbd2_journal_destroy(journal_t *journal)
1275{
1276 int err = 0;
1277
1278
1279 journal_kill_thread(journal);
1280
1281
1282 if (journal->j_running_transaction)
1283 jbd2_journal_commit_transaction(journal);
1284
1285
1286
1287
1288 spin_lock(&journal->j_list_lock);
1289 while (journal->j_checkpoint_transactions != NULL) {
1290 spin_unlock(&journal->j_list_lock);
1291 mutex_lock(&journal->j_checkpoint_mutex);
1292 jbd2_log_do_checkpoint(journal);
1293 mutex_unlock(&journal->j_checkpoint_mutex);
1294 spin_lock(&journal->j_list_lock);
1295 }
1296
1297 J_ASSERT(journal->j_running_transaction == NULL);
1298 J_ASSERT(journal->j_committing_transaction == NULL);
1299 J_ASSERT(journal->j_checkpoint_transactions == NULL);
1300 spin_unlock(&journal->j_list_lock);
1301
1302 if (journal->j_sb_buffer) {
1303 if (!is_journal_aborted(journal)) {
1304
1305 journal->j_tail = 0;
1306 journal->j_tail_sequence =
1307 ++journal->j_transaction_sequence;
1308 jbd2_journal_update_superblock(journal, 1);
1309 } else {
1310 err = -EIO;
1311 }
1312 brelse(journal->j_sb_buffer);
1313 }
1314
1315 if (journal->j_proc_entry)
1316 jbd2_stats_proc_exit(journal);
1317 if (journal->j_inode)
1318 iput(journal->j_inode);
1319 if (journal->j_revoke)
1320 jbd2_journal_destroy_revoke(journal);
1321 kfree(journal->j_wbuf);
1322 kfree(journal);
1323
1324 return err;
1325}
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339int jbd2_journal_check_used_features (journal_t *journal, unsigned long compat,
1340 unsigned long ro, unsigned long incompat)
1341{
1342 journal_superblock_t *sb;
1343
1344 if (!compat && !ro && !incompat)
1345 return 1;
1346 if (journal->j_format_version == 1)
1347 return 0;
1348
1349 sb = journal->j_superblock;
1350
1351 if (((be32_to_cpu(sb->s_feature_compat) & compat) == compat) &&
1352 ((be32_to_cpu(sb->s_feature_ro_compat) & ro) == ro) &&
1353 ((be32_to_cpu(sb->s_feature_incompat) & incompat) == incompat))
1354 return 1;
1355
1356 return 0;
1357}
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370int jbd2_journal_check_available_features (journal_t *journal, unsigned long compat,
1371 unsigned long ro, unsigned long incompat)
1372{
1373 journal_superblock_t *sb;
1374
1375 if (!compat && !ro && !incompat)
1376 return 1;
1377
1378 sb = journal->j_superblock;
1379
1380
1381
1382
1383
1384 if (journal->j_format_version != 2)
1385 return 0;
1386
1387 if ((compat & JBD2_KNOWN_COMPAT_FEATURES) == compat &&
1388 (ro & JBD2_KNOWN_ROCOMPAT_FEATURES) == ro &&
1389 (incompat & JBD2_KNOWN_INCOMPAT_FEATURES) == incompat)
1390 return 1;
1391
1392 return 0;
1393}
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407int jbd2_journal_set_features (journal_t *journal, unsigned long compat,
1408 unsigned long ro, unsigned long incompat)
1409{
1410 journal_superblock_t *sb;
1411
1412 if (jbd2_journal_check_used_features(journal, compat, ro, incompat))
1413 return 1;
1414
1415 if (!jbd2_journal_check_available_features(journal, compat, ro, incompat))
1416 return 0;
1417
1418 jbd_debug(1, "Setting new features 0x%lx/0x%lx/0x%lx\n",
1419 compat, ro, incompat);
1420
1421 sb = journal->j_superblock;
1422
1423 sb->s_feature_compat |= cpu_to_be32(compat);
1424 sb->s_feature_ro_compat |= cpu_to_be32(ro);
1425 sb->s_feature_incompat |= cpu_to_be32(incompat);
1426
1427 return 1;
1428}
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441void jbd2_journal_clear_features(journal_t *journal, unsigned long compat,
1442 unsigned long ro, unsigned long incompat)
1443{
1444 journal_superblock_t *sb;
1445
1446 jbd_debug(1, "Clear features 0x%lx/0x%lx/0x%lx\n",
1447 compat, ro, incompat);
1448
1449 sb = journal->j_superblock;
1450
1451 sb->s_feature_compat &= ~cpu_to_be32(compat);
1452 sb->s_feature_ro_compat &= ~cpu_to_be32(ro);
1453 sb->s_feature_incompat &= ~cpu_to_be32(incompat);
1454}
1455EXPORT_SYMBOL(jbd2_journal_clear_features);
1456
1457
1458
1459
1460
1461
1462
1463
1464int jbd2_journal_update_format (journal_t *journal)
1465{
1466 journal_superblock_t *sb;
1467 int err;
1468
1469 err = journal_get_superblock(journal);
1470 if (err)
1471 return err;
1472
1473 sb = journal->j_superblock;
1474
1475 switch (be32_to_cpu(sb->s_header.h_blocktype)) {
1476 case JBD2_SUPERBLOCK_V2:
1477 return 0;
1478 case JBD2_SUPERBLOCK_V1:
1479 return journal_convert_superblock_v1(journal, sb);
1480 default:
1481 break;
1482 }
1483 return -EINVAL;
1484}
1485
1486static int journal_convert_superblock_v1(journal_t *journal,
1487 journal_superblock_t *sb)
1488{
1489 int offset, blocksize;
1490 struct buffer_head *bh;
1491
1492 printk(KERN_WARNING
1493 "JBD: Converting superblock from version 1 to 2.\n");
1494
1495
1496 offset = ((char *) &(sb->s_feature_compat)) - ((char *) sb);
1497 blocksize = be32_to_cpu(sb->s_blocksize);
1498 memset(&sb->s_feature_compat, 0, blocksize-offset);
1499
1500 sb->s_nr_users = cpu_to_be32(1);
1501 sb->s_header.h_blocktype = cpu_to_be32(JBD2_SUPERBLOCK_V2);
1502 journal->j_format_version = 2;
1503
1504 bh = journal->j_sb_buffer;
1505 BUFFER_TRACE(bh, "marking dirty");
1506 mark_buffer_dirty(bh);
1507 sync_dirty_buffer(bh);
1508 return 0;
1509}
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521int jbd2_journal_flush(journal_t *journal)
1522{
1523 int err = 0;
1524 transaction_t *transaction = NULL;
1525 unsigned long old_tail;
1526
1527 spin_lock(&journal->j_state_lock);
1528
1529
1530 if (journal->j_running_transaction) {
1531 transaction = journal->j_running_transaction;
1532 __jbd2_log_start_commit(journal, transaction->t_tid);
1533 } else if (journal->j_committing_transaction)
1534 transaction = journal->j_committing_transaction;
1535
1536
1537 if (transaction) {
1538 tid_t tid = transaction->t_tid;
1539
1540 spin_unlock(&journal->j_state_lock);
1541 jbd2_log_wait_commit(journal, tid);
1542 } else {
1543 spin_unlock(&journal->j_state_lock);
1544 }
1545
1546
1547 spin_lock(&journal->j_list_lock);
1548 while (!err && journal->j_checkpoint_transactions != NULL) {
1549 spin_unlock(&journal->j_list_lock);
1550 mutex_lock(&journal->j_checkpoint_mutex);
1551 err = jbd2_log_do_checkpoint(journal);
1552 mutex_unlock(&journal->j_checkpoint_mutex);
1553 spin_lock(&journal->j_list_lock);
1554 }
1555 spin_unlock(&journal->j_list_lock);
1556
1557 if (is_journal_aborted(journal))
1558 return -EIO;
1559
1560 jbd2_cleanup_journal_tail(journal);
1561
1562
1563
1564
1565
1566
1567 spin_lock(&journal->j_state_lock);
1568 old_tail = journal->j_tail;
1569 journal->j_tail = 0;
1570 spin_unlock(&journal->j_state_lock);
1571 jbd2_journal_update_superblock(journal, 1);
1572 spin_lock(&journal->j_state_lock);
1573 journal->j_tail = old_tail;
1574
1575 J_ASSERT(!journal->j_running_transaction);
1576 J_ASSERT(!journal->j_committing_transaction);
1577 J_ASSERT(!journal->j_checkpoint_transactions);
1578 J_ASSERT(journal->j_head == journal->j_tail);
1579 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
1580 spin_unlock(&journal->j_state_lock);
1581 return 0;
1582}
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597int jbd2_journal_wipe(journal_t *journal, int write)
1598{
1599 journal_superblock_t *sb;
1600 int err = 0;
1601
1602 J_ASSERT (!(journal->j_flags & JBD2_LOADED));
1603
1604 err = load_superblock(journal);
1605 if (err)
1606 return err;
1607
1608 sb = journal->j_superblock;
1609
1610 if (!journal->j_tail)
1611 goto no_recovery;
1612
1613 printk (KERN_WARNING "JBD: %s recovery information on journal\n",
1614 write ? "Clearing" : "Ignoring");
1615
1616 err = jbd2_journal_skip_recovery(journal);
1617 if (write)
1618 jbd2_journal_update_superblock(journal, 1);
1619
1620 no_recovery:
1621 return err;
1622}
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637void __jbd2_journal_abort_hard(journal_t *journal)
1638{
1639 transaction_t *transaction;
1640
1641 if (journal->j_flags & JBD2_ABORT)
1642 return;
1643
1644 printk(KERN_ERR "Aborting journal on device %s.\n",
1645 journal->j_devname);
1646
1647 spin_lock(&journal->j_state_lock);
1648 journal->j_flags |= JBD2_ABORT;
1649 transaction = journal->j_running_transaction;
1650 if (transaction)
1651 __jbd2_log_start_commit(journal, transaction->t_tid);
1652 spin_unlock(&journal->j_state_lock);
1653}
1654
1655
1656
1657static void __journal_abort_soft (journal_t *journal, int errno)
1658{
1659 if (journal->j_flags & JBD2_ABORT)
1660 return;
1661
1662 if (!journal->j_errno)
1663 journal->j_errno = errno;
1664
1665 __jbd2_journal_abort_hard(journal);
1666
1667 if (errno)
1668 jbd2_journal_update_superblock(journal, 1);
1669}
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717void jbd2_journal_abort(journal_t *journal, int errno)
1718{
1719 __journal_abort_soft(journal, errno);
1720}
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733int jbd2_journal_errno(journal_t *journal)
1734{
1735 int err;
1736
1737 spin_lock(&journal->j_state_lock);
1738 if (journal->j_flags & JBD2_ABORT)
1739 err = -EROFS;
1740 else
1741 err = journal->j_errno;
1742 spin_unlock(&journal->j_state_lock);
1743 return err;
1744}
1745
1746
1747
1748
1749
1750
1751
1752
1753int jbd2_journal_clear_err(journal_t *journal)
1754{
1755 int err = 0;
1756
1757 spin_lock(&journal->j_state_lock);
1758 if (journal->j_flags & JBD2_ABORT)
1759 err = -EROFS;
1760 else
1761 journal->j_errno = 0;
1762 spin_unlock(&journal->j_state_lock);
1763 return err;
1764}
1765
1766
1767
1768
1769
1770
1771
1772
1773void jbd2_journal_ack_err(journal_t *journal)
1774{
1775 spin_lock(&journal->j_state_lock);
1776 if (journal->j_errno)
1777 journal->j_flags |= JBD2_ACK_ERR;
1778 spin_unlock(&journal->j_state_lock);
1779}
1780
1781int jbd2_journal_blocks_per_page(struct inode *inode)
1782{
1783 return 1 << (PAGE_CACHE_SHIFT - inode->i_sb->s_blocksize_bits);
1784}
1785
1786
1787
1788
1789size_t journal_tag_bytes(journal_t *journal)
1790{
1791 if (JBD2_HAS_INCOMPAT_FEATURE(journal, JBD2_FEATURE_INCOMPAT_64BIT))
1792 return JBD2_TAG_SIZE64;
1793 else
1794 return JBD2_TAG_SIZE32;
1795}
1796
1797
1798
1799
1800static struct kmem_cache *jbd2_journal_head_cache;
1801#ifdef CONFIG_JBD2_DEBUG
1802static atomic_t nr_journal_heads = ATOMIC_INIT(0);
1803#endif
1804
1805static int journal_init_jbd2_journal_head_cache(void)
1806{
1807 int retval;
1808
1809 J_ASSERT(jbd2_journal_head_cache == NULL);
1810 jbd2_journal_head_cache = kmem_cache_create("jbd2_journal_head",
1811 sizeof(struct journal_head),
1812 0,
1813 SLAB_TEMPORARY,
1814 NULL);
1815 retval = 0;
1816 if (!jbd2_journal_head_cache) {
1817 retval = -ENOMEM;
1818 printk(KERN_EMERG "JBD: no memory for journal_head cache\n");
1819 }
1820 return retval;
1821}
1822
1823static void jbd2_journal_destroy_jbd2_journal_head_cache(void)
1824{
1825 if (jbd2_journal_head_cache) {
1826 kmem_cache_destroy(jbd2_journal_head_cache);
1827 jbd2_journal_head_cache = NULL;
1828 }
1829}
1830
1831
1832
1833
1834static struct journal_head *journal_alloc_journal_head(void)
1835{
1836 struct journal_head *ret;
1837 static unsigned long last_warning;
1838
1839#ifdef CONFIG_JBD2_DEBUG
1840 atomic_inc(&nr_journal_heads);
1841#endif
1842 ret = kmem_cache_alloc(jbd2_journal_head_cache, GFP_NOFS);
1843 if (!ret) {
1844 jbd_debug(1, "out of memory for journal_head\n");
1845 if (time_after(jiffies, last_warning + 5*HZ)) {
1846 printk(KERN_NOTICE "ENOMEM in %s, retrying.\n",
1847 __func__);
1848 last_warning = jiffies;
1849 }
1850 while (!ret) {
1851 yield();
1852 ret = kmem_cache_alloc(jbd2_journal_head_cache, GFP_NOFS);
1853 }
1854 }
1855 return ret;
1856}
1857
1858static void journal_free_journal_head(struct journal_head *jh)
1859{
1860#ifdef CONFIG_JBD2_DEBUG
1861 atomic_dec(&nr_journal_heads);
1862 memset(jh, JBD2_POISON_FREE, sizeof(*jh));
1863#endif
1864 kmem_cache_free(jbd2_journal_head_cache, jh);
1865}
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh)
1911{
1912 struct journal_head *jh;
1913 struct journal_head *new_jh = NULL;
1914
1915repeat:
1916 if (!buffer_jbd(bh)) {
1917 new_jh = journal_alloc_journal_head();
1918 memset(new_jh, 0, sizeof(*new_jh));
1919 }
1920
1921 jbd_lock_bh_journal_head(bh);
1922 if (buffer_jbd(bh)) {
1923 jh = bh2jh(bh);
1924 } else {
1925 J_ASSERT_BH(bh,
1926 (atomic_read(&bh->b_count) > 0) ||
1927 (bh->b_page && bh->b_page->mapping));
1928
1929 if (!new_jh) {
1930 jbd_unlock_bh_journal_head(bh);
1931 goto repeat;
1932 }
1933
1934 jh = new_jh;
1935 new_jh = NULL;
1936 set_buffer_jbd(bh);
1937 bh->b_private = jh;
1938 jh->b_bh = bh;
1939 get_bh(bh);
1940 BUFFER_TRACE(bh, "added journal_head");
1941 }
1942 jh->b_jcount++;
1943 jbd_unlock_bh_journal_head(bh);
1944 if (new_jh)
1945 journal_free_journal_head(new_jh);
1946 return bh->b_private;
1947}
1948
1949
1950
1951
1952
1953struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh)
1954{
1955 struct journal_head *jh = NULL;
1956
1957 jbd_lock_bh_journal_head(bh);
1958 if (buffer_jbd(bh)) {
1959 jh = bh2jh(bh);
1960 jh->b_jcount++;
1961 }
1962 jbd_unlock_bh_journal_head(bh);
1963 return jh;
1964}
1965
1966static void __journal_remove_journal_head(struct buffer_head *bh)
1967{
1968 struct journal_head *jh = bh2jh(bh);
1969
1970 J_ASSERT_JH(jh, jh->b_jcount >= 0);
1971
1972 get_bh(bh);
1973 if (jh->b_jcount == 0) {
1974 if (jh->b_transaction == NULL &&
1975 jh->b_next_transaction == NULL &&
1976 jh->b_cp_transaction == NULL) {
1977 J_ASSERT_JH(jh, jh->b_jlist == BJ_None);
1978 J_ASSERT_BH(bh, buffer_jbd(bh));
1979 J_ASSERT_BH(bh, jh2bh(jh) == bh);
1980 BUFFER_TRACE(bh, "remove journal_head");
1981 if (jh->b_frozen_data) {
1982 printk(KERN_WARNING "%s: freeing "
1983 "b_frozen_data\n",
1984 __func__);
1985 jbd2_free(jh->b_frozen_data, bh->b_size);
1986 }
1987 if (jh->b_committed_data) {
1988 printk(KERN_WARNING "%s: freeing "
1989 "b_committed_data\n",
1990 __func__);
1991 jbd2_free(jh->b_committed_data, bh->b_size);
1992 }
1993 bh->b_private = NULL;
1994 jh->b_bh = NULL;
1995 clear_buffer_jbd(bh);
1996 __brelse(bh);
1997 journal_free_journal_head(jh);
1998 } else {
1999 BUFFER_TRACE(bh, "journal_head was locked");
2000 }
2001 }
2002}
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017void jbd2_journal_remove_journal_head(struct buffer_head *bh)
2018{
2019 jbd_lock_bh_journal_head(bh);
2020 __journal_remove_journal_head(bh);
2021 jbd_unlock_bh_journal_head(bh);
2022}
2023
2024
2025
2026
2027
2028void jbd2_journal_put_journal_head(struct journal_head *jh)
2029{
2030 struct buffer_head *bh = jh2bh(jh);
2031
2032 jbd_lock_bh_journal_head(bh);
2033 J_ASSERT_JH(jh, jh->b_jcount > 0);
2034 --jh->b_jcount;
2035 if (!jh->b_jcount && !jh->b_transaction) {
2036 __journal_remove_journal_head(bh);
2037 __brelse(bh);
2038 }
2039 jbd_unlock_bh_journal_head(bh);
2040}
2041
2042
2043
2044
2045void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode)
2046{
2047 jinode->i_transaction = NULL;
2048 jinode->i_next_transaction = NULL;
2049 jinode->i_vfs_inode = inode;
2050 jinode->i_flags = 0;
2051 INIT_LIST_HEAD(&jinode->i_list);
2052}
2053
2054
2055
2056
2057
2058
2059void jbd2_journal_release_jbd_inode(journal_t *journal,
2060 struct jbd2_inode *jinode)
2061{
2062 int writeout = 0;
2063
2064 if (!journal)
2065 return;
2066restart:
2067 spin_lock(&journal->j_list_lock);
2068
2069 if (jinode->i_flags & JI_COMMIT_RUNNING) {
2070 wait_queue_head_t *wq;
2071 DEFINE_WAIT_BIT(wait, &jinode->i_flags, __JI_COMMIT_RUNNING);
2072 wq = bit_waitqueue(&jinode->i_flags, __JI_COMMIT_RUNNING);
2073 prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE);
2074 spin_unlock(&journal->j_list_lock);
2075 schedule();
2076 finish_wait(wq, &wait.wait);
2077 goto restart;
2078 }
2079
2080
2081 if (journal->j_committing_transaction == jinode->i_transaction)
2082 writeout = 1;
2083 if (jinode->i_transaction) {
2084 list_del(&jinode->i_list);
2085 jinode->i_transaction = NULL;
2086 }
2087 spin_unlock(&journal->j_list_lock);
2088}
2089
2090
2091
2092
2093#ifdef CONFIG_JBD2_DEBUG
2094u8 jbd2_journal_enable_debug __read_mostly;
2095EXPORT_SYMBOL(jbd2_journal_enable_debug);
2096
2097#define JBD2_DEBUG_NAME "jbd2-debug"
2098
2099static struct dentry *jbd2_debugfs_dir;
2100static struct dentry *jbd2_debug;
2101
2102static void __init jbd2_create_debugfs_entry(void)
2103{
2104 jbd2_debugfs_dir = debugfs_create_dir("jbd2", NULL);
2105 if (jbd2_debugfs_dir)
2106 jbd2_debug = debugfs_create_u8(JBD2_DEBUG_NAME, S_IRUGO,
2107 jbd2_debugfs_dir,
2108 &jbd2_journal_enable_debug);
2109}
2110
2111static void __exit jbd2_remove_debugfs_entry(void)
2112{
2113 debugfs_remove(jbd2_debug);
2114 debugfs_remove(jbd2_debugfs_dir);
2115}
2116
2117#else
2118
2119static void __init jbd2_create_debugfs_entry(void)
2120{
2121}
2122
2123static void __exit jbd2_remove_debugfs_entry(void)
2124{
2125}
2126
2127#endif
2128
2129#ifdef CONFIG_PROC_FS
2130
2131#define JBD2_STATS_PROC_NAME "fs/jbd2"
2132
2133static void __init jbd2_create_jbd_stats_proc_entry(void)
2134{
2135 proc_jbd2_stats = proc_mkdir(JBD2_STATS_PROC_NAME, NULL);
2136}
2137
2138static void __exit jbd2_remove_jbd_stats_proc_entry(void)
2139{
2140 if (proc_jbd2_stats)
2141 remove_proc_entry(JBD2_STATS_PROC_NAME, NULL);
2142}
2143
2144#else
2145
2146#define jbd2_create_jbd_stats_proc_entry() do {} while (0)
2147#define jbd2_remove_jbd_stats_proc_entry() do {} while (0)
2148
2149#endif
2150
2151struct kmem_cache *jbd2_handle_cache;
2152
2153static int __init journal_init_handle_cache(void)
2154{
2155 jbd2_handle_cache = kmem_cache_create("jbd2_journal_handle",
2156 sizeof(handle_t),
2157 0,
2158 SLAB_TEMPORARY,
2159 NULL);
2160 if (jbd2_handle_cache == NULL) {
2161 printk(KERN_EMERG "JBD: failed to create handle cache\n");
2162 return -ENOMEM;
2163 }
2164 return 0;
2165}
2166
2167static void jbd2_journal_destroy_handle_cache(void)
2168{
2169 if (jbd2_handle_cache)
2170 kmem_cache_destroy(jbd2_handle_cache);
2171}
2172
2173
2174
2175
2176
2177static int __init journal_init_caches(void)
2178{
2179 int ret;
2180
2181 ret = jbd2_journal_init_revoke_caches();
2182 if (ret == 0)
2183 ret = journal_init_jbd2_journal_head_cache();
2184 if (ret == 0)
2185 ret = journal_init_handle_cache();
2186 return ret;
2187}
2188
2189static void jbd2_journal_destroy_caches(void)
2190{
2191 jbd2_journal_destroy_revoke_caches();
2192 jbd2_journal_destroy_jbd2_journal_head_cache();
2193 jbd2_journal_destroy_handle_cache();
2194}
2195
2196static int __init journal_init(void)
2197{
2198 int ret;
2199
2200 BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024);
2201
2202 ret = journal_init_caches();
2203 if (ret == 0) {
2204 jbd2_create_debugfs_entry();
2205 jbd2_create_jbd_stats_proc_entry();
2206 } else {
2207 jbd2_journal_destroy_caches();
2208 }
2209 return ret;
2210}
2211
2212static void __exit journal_exit(void)
2213{
2214#ifdef CONFIG_JBD2_DEBUG
2215 int n = atomic_read(&nr_journal_heads);
2216 if (n)
2217 printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n);
2218#endif
2219 jbd2_remove_debugfs_entry();
2220 jbd2_remove_jbd_stats_proc_entry();
2221 jbd2_journal_destroy_caches();
2222}
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234struct devname_cache {
2235 struct rcu_head rcu;
2236 dev_t device;
2237 char devname[BDEVNAME_SIZE];
2238};
2239#define CACHE_SIZE_BITS 6
2240static struct devname_cache *devcache[1 << CACHE_SIZE_BITS];
2241static DEFINE_SPINLOCK(devname_cache_lock);
2242
2243static void free_devcache(struct rcu_head *rcu)
2244{
2245 kfree(rcu);
2246}
2247
2248const char *jbd2_dev_to_name(dev_t device)
2249{
2250 int i = hash_32(device, CACHE_SIZE_BITS);
2251 char *ret;
2252 struct block_device *bd;
2253 static struct devname_cache *new_dev;
2254
2255 rcu_read_lock();
2256 if (devcache[i] && devcache[i]->device == device) {
2257 ret = devcache[i]->devname;
2258 rcu_read_unlock();
2259 return ret;
2260 }
2261 rcu_read_unlock();
2262
2263 new_dev = kmalloc(sizeof(struct devname_cache), GFP_KERNEL);
2264 if (!new_dev)
2265 return "NODEV-ALLOCFAILURE";
2266 spin_lock(&devname_cache_lock);
2267 if (devcache[i]) {
2268 if (devcache[i]->device == device) {
2269 kfree(new_dev);
2270 ret = devcache[i]->devname;
2271 spin_unlock(&devname_cache_lock);
2272 return ret;
2273 }
2274 call_rcu(&devcache[i]->rcu, free_devcache);
2275 }
2276 devcache[i] = new_dev;
2277 devcache[i]->device = device;
2278 bd = bdget(device);
2279 if (bd) {
2280 bdevname(bd, devcache[i]->devname);
2281 bdput(bd);
2282 } else
2283 __bdevname(device, devcache[i]->devname);
2284 ret = devcache[i]->devname;
2285 spin_unlock(&devname_cache_lock);
2286 return ret;
2287}
2288EXPORT_SYMBOL(jbd2_dev_to_name);
2289
2290MODULE_LICENSE("GPL");
2291module_init(journal_init);
2292module_exit(journal_exit);
2293
2294