This source file includes following definitions.
- jbd2_journal_init_transaction_cache
- jbd2_journal_destroy_transaction_cache
- jbd2_journal_free_transaction
- jbd2_get_transaction
- update_t_max_wait
- wait_transaction_locked
- wait_transaction_switching
- sub_reserved_credits
- add_transaction_credits
- start_this_handle
- new_handle
- jbd2__journal_start
- jbd2_journal_start
- jbd2_journal_free_reserved
- jbd2_journal_start_reserved
- jbd2_journal_extend
- jbd2__journal_restart
- jbd2_journal_restart
- jbd2_journal_lock_updates
- jbd2_journal_unlock_updates
- warn_dirty_buffer
- jbd2_freeze_jh_data
- do_get_write_access
- jbd2_write_access_granted
- jbd2_journal_get_write_access
- jbd2_journal_get_create_access
- jbd2_journal_get_undo_access
- jbd2_journal_set_triggers
- jbd2_buffer_frozen_trigger
- jbd2_buffer_abort_trigger
- jbd2_journal_dirty_metadata
- jbd2_journal_forget
- jbd2_journal_stop
- __blist_add_buffer
- __blist_del_buffer
- __jbd2_journal_temp_unlink_buffer
- __jbd2_journal_unfile_buffer
- jbd2_journal_unfile_buffer
- __journal_try_to_free_buffer
- jbd2_journal_try_to_free_buffers
- __dispose_buffer
- journal_unmap_buffer
- jbd2_journal_invalidatepage
- __jbd2_journal_file_buffer
- jbd2_journal_file_buffer
- __jbd2_journal_refile_buffer
- jbd2_journal_refile_buffer
- jbd2_journal_file_inode
- jbd2_journal_inode_ranged_write
- jbd2_journal_inode_ranged_wait
- jbd2_journal_begin_ordered_truncate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <linux/time.h>
18 #include <linux/fs.h>
19 #include <linux/jbd2.h>
20 #include <linux/errno.h>
21 #include <linux/slab.h>
22 #include <linux/timer.h>
23 #include <linux/mm.h>
24 #include <linux/highmem.h>
25 #include <linux/hrtimer.h>
26 #include <linux/backing-dev.h>
27 #include <linux/bug.h>
28 #include <linux/module.h>
29 #include <linux/sched/mm.h>
30
31 #include <trace/events/jbd2.h>
32
33 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh);
34 static void __jbd2_journal_unfile_buffer(struct journal_head *jh);
35
36 static struct kmem_cache *transaction_cache;
37 int __init jbd2_journal_init_transaction_cache(void)
38 {
39 J_ASSERT(!transaction_cache);
40 transaction_cache = kmem_cache_create("jbd2_transaction_s",
41 sizeof(transaction_t),
42 0,
43 SLAB_HWCACHE_ALIGN|SLAB_TEMPORARY,
44 NULL);
45 if (!transaction_cache) {
46 pr_emerg("JBD2: failed to create transaction cache\n");
47 return -ENOMEM;
48 }
49 return 0;
50 }
51
52 void jbd2_journal_destroy_transaction_cache(void)
53 {
54 kmem_cache_destroy(transaction_cache);
55 transaction_cache = NULL;
56 }
57
58 void jbd2_journal_free_transaction(transaction_t *transaction)
59 {
60 if (unlikely(ZERO_OR_NULL_PTR(transaction)))
61 return;
62 kmem_cache_free(transaction_cache, transaction);
63 }
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 static void jbd2_get_transaction(journal_t *journal,
81 transaction_t *transaction)
82 {
83 transaction->t_journal = journal;
84 transaction->t_state = T_RUNNING;
85 transaction->t_start_time = ktime_get();
86 transaction->t_tid = journal->j_transaction_sequence++;
87 transaction->t_expires = jiffies + journal->j_commit_interval;
88 spin_lock_init(&transaction->t_handle_lock);
89 atomic_set(&transaction->t_updates, 0);
90 atomic_set(&transaction->t_outstanding_credits,
91 atomic_read(&journal->j_reserved_credits));
92 atomic_set(&transaction->t_handle_count, 0);
93 INIT_LIST_HEAD(&transaction->t_inode_list);
94 INIT_LIST_HEAD(&transaction->t_private_list);
95
96
97 journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires);
98 add_timer(&journal->j_commit_timer);
99
100 J_ASSERT(journal->j_running_transaction == NULL);
101 journal->j_running_transaction = transaction;
102 transaction->t_max_wait = 0;
103 transaction->t_start = jiffies;
104 transaction->t_requested = 0;
105 }
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 static inline void update_t_max_wait(transaction_t *transaction,
126 unsigned long ts)
127 {
128 #ifdef CONFIG_JBD2_DEBUG
129 if (jbd2_journal_enable_debug &&
130 time_after(transaction->t_start, ts)) {
131 ts = jbd2_time_diff(ts, transaction->t_start);
132 spin_lock(&transaction->t_handle_lock);
133 if (ts > transaction->t_max_wait)
134 transaction->t_max_wait = ts;
135 spin_unlock(&transaction->t_handle_lock);
136 }
137 #endif
138 }
139
140
141
142
143
144
145 static void wait_transaction_locked(journal_t *journal)
146 __releases(journal->j_state_lock)
147 {
148 DEFINE_WAIT(wait);
149 int need_to_start;
150 tid_t tid = journal->j_running_transaction->t_tid;
151
152 prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
153 TASK_UNINTERRUPTIBLE);
154 need_to_start = !tid_geq(journal->j_commit_request, tid);
155 read_unlock(&journal->j_state_lock);
156 if (need_to_start)
157 jbd2_log_start_commit(journal, tid);
158 jbd2_might_wait_for_commit(journal);
159 schedule();
160 finish_wait(&journal->j_wait_transaction_locked, &wait);
161 }
162
163
164
165
166
167
168 static void wait_transaction_switching(journal_t *journal)
169 __releases(journal->j_state_lock)
170 {
171 DEFINE_WAIT(wait);
172
173 if (WARN_ON(!journal->j_running_transaction ||
174 journal->j_running_transaction->t_state != T_SWITCH))
175 return;
176 prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
177 TASK_UNINTERRUPTIBLE);
178 read_unlock(&journal->j_state_lock);
179
180
181
182
183
184
185 schedule();
186 finish_wait(&journal->j_wait_transaction_locked, &wait);
187 }
188
189 static void sub_reserved_credits(journal_t *journal, int blocks)
190 {
191 atomic_sub(blocks, &journal->j_reserved_credits);
192 wake_up(&journal->j_wait_reserved);
193 }
194
195
196
197
198
199
200
201 static int add_transaction_credits(journal_t *journal, int blocks,
202 int rsv_blocks)
203 {
204 transaction_t *t = journal->j_running_transaction;
205 int needed;
206 int total = blocks + rsv_blocks;
207
208
209
210
211
212 if (t->t_state != T_RUNNING) {
213 WARN_ON_ONCE(t->t_state >= T_FLUSH);
214 wait_transaction_locked(journal);
215 return 1;
216 }
217
218
219
220
221
222
223 needed = atomic_add_return(total, &t->t_outstanding_credits);
224 if (needed > journal->j_max_transaction_buffers) {
225
226
227
228
229
230 atomic_sub(total, &t->t_outstanding_credits);
231
232
233
234
235
236 if (atomic_read(&journal->j_reserved_credits) + total >
237 journal->j_max_transaction_buffers) {
238 read_unlock(&journal->j_state_lock);
239 jbd2_might_wait_for_commit(journal);
240 wait_event(journal->j_wait_reserved,
241 atomic_read(&journal->j_reserved_credits) + total <=
242 journal->j_max_transaction_buffers);
243 return 1;
244 }
245
246 wait_transaction_locked(journal);
247 return 1;
248 }
249
250
251
252
253
254
255
256
257
258
259
260
261 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) {
262 atomic_sub(total, &t->t_outstanding_credits);
263 read_unlock(&journal->j_state_lock);
264 jbd2_might_wait_for_commit(journal);
265 write_lock(&journal->j_state_lock);
266 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal))
267 __jbd2_log_wait_for_space(journal);
268 write_unlock(&journal->j_state_lock);
269 return 1;
270 }
271
272
273 if (!rsv_blocks)
274 return 0;
275
276 needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits);
277
278 if (needed > journal->j_max_transaction_buffers / 2) {
279 sub_reserved_credits(journal, rsv_blocks);
280 atomic_sub(total, &t->t_outstanding_credits);
281 read_unlock(&journal->j_state_lock);
282 jbd2_might_wait_for_commit(journal);
283 wait_event(journal->j_wait_reserved,
284 atomic_read(&journal->j_reserved_credits) + rsv_blocks
285 <= journal->j_max_transaction_buffers / 2);
286 return 1;
287 }
288 return 0;
289 }
290
291
292
293
294
295
296
297
298 static int start_this_handle(journal_t *journal, handle_t *handle,
299 gfp_t gfp_mask)
300 {
301 transaction_t *transaction, *new_transaction = NULL;
302 int blocks = handle->h_buffer_credits;
303 int rsv_blocks = 0;
304 unsigned long ts = jiffies;
305
306 if (handle->h_rsv_handle)
307 rsv_blocks = handle->h_rsv_handle->h_buffer_credits;
308
309
310
311
312
313
314 if ((rsv_blocks > journal->j_max_transaction_buffers / 2) ||
315 (rsv_blocks + blocks > journal->j_max_transaction_buffers)) {
316 printk(KERN_ERR "JBD2: %s wants too many credits "
317 "credits:%d rsv_credits:%d max:%d\n",
318 current->comm, blocks, rsv_blocks,
319 journal->j_max_transaction_buffers);
320 WARN_ON(1);
321 return -ENOSPC;
322 }
323
324 alloc_transaction:
325 if (!journal->j_running_transaction) {
326
327
328
329
330 if ((gfp_mask & __GFP_FS) == 0)
331 gfp_mask |= __GFP_NOFAIL;
332 new_transaction = kmem_cache_zalloc(transaction_cache,
333 gfp_mask);
334 if (!new_transaction)
335 return -ENOMEM;
336 }
337
338 jbd_debug(3, "New handle %p going live.\n", handle);
339
340
341
342
343
344 repeat:
345 read_lock(&journal->j_state_lock);
346 BUG_ON(journal->j_flags & JBD2_UNMOUNT);
347 if (is_journal_aborted(journal) ||
348 (journal->j_errno != 0 && !(journal->j_flags & JBD2_ACK_ERR))) {
349 read_unlock(&journal->j_state_lock);
350 jbd2_journal_free_transaction(new_transaction);
351 return -EROFS;
352 }
353
354
355
356
357
358
359 if (!handle->h_reserved && journal->j_barrier_count) {
360 read_unlock(&journal->j_state_lock);
361 wait_event(journal->j_wait_transaction_locked,
362 journal->j_barrier_count == 0);
363 goto repeat;
364 }
365
366 if (!journal->j_running_transaction) {
367 read_unlock(&journal->j_state_lock);
368 if (!new_transaction)
369 goto alloc_transaction;
370 write_lock(&journal->j_state_lock);
371 if (!journal->j_running_transaction &&
372 (handle->h_reserved || !journal->j_barrier_count)) {
373 jbd2_get_transaction(journal, new_transaction);
374 new_transaction = NULL;
375 }
376 write_unlock(&journal->j_state_lock);
377 goto repeat;
378 }
379
380 transaction = journal->j_running_transaction;
381
382 if (!handle->h_reserved) {
383
384 if (add_transaction_credits(journal, blocks, rsv_blocks))
385 goto repeat;
386 } else {
387
388
389
390
391
392
393
394 if (transaction->t_state == T_SWITCH) {
395 wait_transaction_switching(journal);
396 goto repeat;
397 }
398 sub_reserved_credits(journal, blocks);
399 handle->h_reserved = 0;
400 }
401
402
403
404
405 update_t_max_wait(transaction, ts);
406 handle->h_transaction = transaction;
407 handle->h_requested_credits = blocks;
408 handle->h_start_jiffies = jiffies;
409 atomic_inc(&transaction->t_updates);
410 atomic_inc(&transaction->t_handle_count);
411 jbd_debug(4, "Handle %p given %d credits (total %d, free %lu)\n",
412 handle, blocks,
413 atomic_read(&transaction->t_outstanding_credits),
414 jbd2_log_space_left(journal));
415 read_unlock(&journal->j_state_lock);
416 current->journal_info = handle;
417
418 rwsem_acquire_read(&journal->j_trans_commit_map, 0, 0, _THIS_IP_);
419 jbd2_journal_free_transaction(new_transaction);
420
421
422
423
424 handle->saved_alloc_context = memalloc_nofs_save();
425 return 0;
426 }
427
428
429 static handle_t *new_handle(int nblocks)
430 {
431 handle_t *handle = jbd2_alloc_handle(GFP_NOFS);
432 if (!handle)
433 return NULL;
434 handle->h_buffer_credits = nblocks;
435 handle->h_ref = 1;
436
437 return handle;
438 }
439
440 handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks,
441 gfp_t gfp_mask, unsigned int type,
442 unsigned int line_no)
443 {
444 handle_t *handle = journal_current_handle();
445 int err;
446
447 if (!journal)
448 return ERR_PTR(-EROFS);
449
450 if (handle) {
451 J_ASSERT(handle->h_transaction->t_journal == journal);
452 handle->h_ref++;
453 return handle;
454 }
455
456 handle = new_handle(nblocks);
457 if (!handle)
458 return ERR_PTR(-ENOMEM);
459 if (rsv_blocks) {
460 handle_t *rsv_handle;
461
462 rsv_handle = new_handle(rsv_blocks);
463 if (!rsv_handle) {
464 jbd2_free_handle(handle);
465 return ERR_PTR(-ENOMEM);
466 }
467 rsv_handle->h_reserved = 1;
468 rsv_handle->h_journal = journal;
469 handle->h_rsv_handle = rsv_handle;
470 }
471
472 err = start_this_handle(journal, handle, gfp_mask);
473 if (err < 0) {
474 if (handle->h_rsv_handle)
475 jbd2_free_handle(handle->h_rsv_handle);
476 jbd2_free_handle(handle);
477 return ERR_PTR(err);
478 }
479 handle->h_type = type;
480 handle->h_line_no = line_no;
481 trace_jbd2_handle_start(journal->j_fs_dev->bd_dev,
482 handle->h_transaction->t_tid, type,
483 line_no, nblocks);
484
485 return handle;
486 }
487 EXPORT_SYMBOL(jbd2__journal_start);
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509 handle_t *jbd2_journal_start(journal_t *journal, int nblocks)
510 {
511 return jbd2__journal_start(journal, nblocks, 0, GFP_NOFS, 0, 0);
512 }
513 EXPORT_SYMBOL(jbd2_journal_start);
514
515 void jbd2_journal_free_reserved(handle_t *handle)
516 {
517 journal_t *journal = handle->h_journal;
518
519 WARN_ON(!handle->h_reserved);
520 sub_reserved_credits(journal, handle->h_buffer_credits);
521 jbd2_free_handle(handle);
522 }
523 EXPORT_SYMBOL(jbd2_journal_free_reserved);
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539 int jbd2_journal_start_reserved(handle_t *handle, unsigned int type,
540 unsigned int line_no)
541 {
542 journal_t *journal = handle->h_journal;
543 int ret = -EIO;
544
545 if (WARN_ON(!handle->h_reserved)) {
546
547 jbd2_journal_stop(handle);
548 return ret;
549 }
550
551
552
553
554 if (WARN_ON(current->journal_info)) {
555 jbd2_journal_free_reserved(handle);
556 return ret;
557 }
558
559 handle->h_journal = NULL;
560
561
562
563
564 ret = start_this_handle(journal, handle, GFP_NOFS);
565 if (ret < 0) {
566 handle->h_journal = journal;
567 jbd2_journal_free_reserved(handle);
568 return ret;
569 }
570 handle->h_type = type;
571 handle->h_line_no = line_no;
572 trace_jbd2_handle_start(journal->j_fs_dev->bd_dev,
573 handle->h_transaction->t_tid, type,
574 line_no, handle->h_buffer_credits);
575 return 0;
576 }
577 EXPORT_SYMBOL(jbd2_journal_start_reserved);
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599 int jbd2_journal_extend(handle_t *handle, int nblocks)
600 {
601 transaction_t *transaction = handle->h_transaction;
602 journal_t *journal;
603 int result;
604 int wanted;
605
606 if (is_handle_aborted(handle))
607 return -EROFS;
608 journal = transaction->t_journal;
609
610 result = 1;
611
612 read_lock(&journal->j_state_lock);
613
614
615 if (transaction->t_state != T_RUNNING) {
616 jbd_debug(3, "denied handle %p %d blocks: "
617 "transaction not running\n", handle, nblocks);
618 goto error_out;
619 }
620
621 spin_lock(&transaction->t_handle_lock);
622 wanted = atomic_add_return(nblocks,
623 &transaction->t_outstanding_credits);
624
625 if (wanted > journal->j_max_transaction_buffers) {
626 jbd_debug(3, "denied handle %p %d blocks: "
627 "transaction too large\n", handle, nblocks);
628 atomic_sub(nblocks, &transaction->t_outstanding_credits);
629 goto unlock;
630 }
631
632 if (wanted + (wanted >> JBD2_CONTROL_BLOCKS_SHIFT) >
633 jbd2_log_space_left(journal)) {
634 jbd_debug(3, "denied handle %p %d blocks: "
635 "insufficient log space\n", handle, nblocks);
636 atomic_sub(nblocks, &transaction->t_outstanding_credits);
637 goto unlock;
638 }
639
640 trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev,
641 transaction->t_tid,
642 handle->h_type, handle->h_line_no,
643 handle->h_buffer_credits,
644 nblocks);
645
646 handle->h_buffer_credits += nblocks;
647 handle->h_requested_credits += nblocks;
648 result = 0;
649
650 jbd_debug(3, "extended handle %p by %d\n", handle, nblocks);
651 unlock:
652 spin_unlock(&transaction->t_handle_lock);
653 error_out:
654 read_unlock(&journal->j_state_lock);
655 return result;
656 }
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675 int jbd2__journal_restart(handle_t *handle, int nblocks, gfp_t gfp_mask)
676 {
677 transaction_t *transaction = handle->h_transaction;
678 journal_t *journal;
679 tid_t tid;
680 int need_to_start, ret;
681
682
683
684 if (is_handle_aborted(handle))
685 return 0;
686 journal = transaction->t_journal;
687
688
689
690
691
692 J_ASSERT(atomic_read(&transaction->t_updates) > 0);
693 J_ASSERT(journal_current_handle() == handle);
694
695 read_lock(&journal->j_state_lock);
696 spin_lock(&transaction->t_handle_lock);
697 atomic_sub(handle->h_buffer_credits,
698 &transaction->t_outstanding_credits);
699 if (handle->h_rsv_handle) {
700 sub_reserved_credits(journal,
701 handle->h_rsv_handle->h_buffer_credits);
702 }
703 if (atomic_dec_and_test(&transaction->t_updates))
704 wake_up(&journal->j_wait_updates);
705 tid = transaction->t_tid;
706 spin_unlock(&transaction->t_handle_lock);
707 handle->h_transaction = NULL;
708 current->journal_info = NULL;
709
710 jbd_debug(2, "restarting handle %p\n", handle);
711 need_to_start = !tid_geq(journal->j_commit_request, tid);
712 read_unlock(&journal->j_state_lock);
713 if (need_to_start)
714 jbd2_log_start_commit(journal, tid);
715
716 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
717 handle->h_buffer_credits = nblocks;
718
719
720
721
722
723 memalloc_nofs_restore(handle->saved_alloc_context);
724 ret = start_this_handle(journal, handle, gfp_mask);
725 return ret;
726 }
727 EXPORT_SYMBOL(jbd2__journal_restart);
728
729
730 int jbd2_journal_restart(handle_t *handle, int nblocks)
731 {
732 return jbd2__journal_restart(handle, nblocks, GFP_NOFS);
733 }
734 EXPORT_SYMBOL(jbd2_journal_restart);
735
736
737
738
739
740
741
742
743
744
745
746 void jbd2_journal_lock_updates(journal_t *journal)
747 {
748 DEFINE_WAIT(wait);
749
750 jbd2_might_wait_for_commit(journal);
751
752 write_lock(&journal->j_state_lock);
753 ++journal->j_barrier_count;
754
755
756 if (atomic_read(&journal->j_reserved_credits)) {
757 write_unlock(&journal->j_state_lock);
758 wait_event(journal->j_wait_reserved,
759 atomic_read(&journal->j_reserved_credits) == 0);
760 write_lock(&journal->j_state_lock);
761 }
762
763
764 while (1) {
765 transaction_t *transaction = journal->j_running_transaction;
766
767 if (!transaction)
768 break;
769
770 spin_lock(&transaction->t_handle_lock);
771 prepare_to_wait(&journal->j_wait_updates, &wait,
772 TASK_UNINTERRUPTIBLE);
773 if (!atomic_read(&transaction->t_updates)) {
774 spin_unlock(&transaction->t_handle_lock);
775 finish_wait(&journal->j_wait_updates, &wait);
776 break;
777 }
778 spin_unlock(&transaction->t_handle_lock);
779 write_unlock(&journal->j_state_lock);
780 schedule();
781 finish_wait(&journal->j_wait_updates, &wait);
782 write_lock(&journal->j_state_lock);
783 }
784 write_unlock(&journal->j_state_lock);
785
786
787
788
789
790
791
792 mutex_lock(&journal->j_barrier);
793 }
794
795
796
797
798
799
800
801
802
803 void jbd2_journal_unlock_updates (journal_t *journal)
804 {
805 J_ASSERT(journal->j_barrier_count != 0);
806
807 mutex_unlock(&journal->j_barrier);
808 write_lock(&journal->j_state_lock);
809 --journal->j_barrier_count;
810 write_unlock(&journal->j_state_lock);
811 wake_up(&journal->j_wait_transaction_locked);
812 }
813
814 static void warn_dirty_buffer(struct buffer_head *bh)
815 {
816 printk(KERN_WARNING
817 "JBD2: Spotted dirty metadata buffer (dev = %pg, blocknr = %llu). "
818 "There's a risk of filesystem corruption in case of system "
819 "crash.\n",
820 bh->b_bdev, (unsigned long long)bh->b_blocknr);
821 }
822
823
824 static void jbd2_freeze_jh_data(struct journal_head *jh)
825 {
826 struct page *page;
827 int offset;
828 char *source;
829 struct buffer_head *bh = jh2bh(jh);
830
831 J_EXPECT_JH(jh, buffer_uptodate(bh), "Possible IO failure.\n");
832 page = bh->b_page;
833 offset = offset_in_page(bh->b_data);
834 source = kmap_atomic(page);
835
836 jbd2_buffer_frozen_trigger(jh, source + offset, jh->b_triggers);
837 memcpy(jh->b_frozen_data, source + offset, bh->b_size);
838 kunmap_atomic(source);
839
840
841
842
843
844 jh->b_frozen_triggers = jh->b_triggers;
845 }
846
847
848
849
850
851
852
853
854
855
856
857 static int
858 do_get_write_access(handle_t *handle, struct journal_head *jh,
859 int force_copy)
860 {
861 struct buffer_head *bh;
862 transaction_t *transaction = handle->h_transaction;
863 journal_t *journal;
864 int error;
865 char *frozen_buffer = NULL;
866 unsigned long start_lock, time_lock;
867
868 journal = transaction->t_journal;
869
870 jbd_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy);
871
872 JBUFFER_TRACE(jh, "entry");
873 repeat:
874 bh = jh2bh(jh);
875
876
877
878 start_lock = jiffies;
879 lock_buffer(bh);
880 jbd_lock_bh_state(bh);
881
882
883 time_lock = jbd2_time_diff(start_lock, jiffies);
884 if (time_lock > HZ/10)
885 trace_jbd2_lock_buffer_stall(bh->b_bdev->bd_dev,
886 jiffies_to_msecs(time_lock));
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901 if (buffer_dirty(bh)) {
902
903
904
905
906 if (jh->b_transaction) {
907 J_ASSERT_JH(jh,
908 jh->b_transaction == transaction ||
909 jh->b_transaction ==
910 journal->j_committing_transaction);
911 if (jh->b_next_transaction)
912 J_ASSERT_JH(jh, jh->b_next_transaction ==
913 transaction);
914 warn_dirty_buffer(bh);
915 }
916
917
918
919
920
921 JBUFFER_TRACE(jh, "Journalling dirty buffer");
922 clear_buffer_dirty(bh);
923 set_buffer_jbddirty(bh);
924 }
925
926 unlock_buffer(bh);
927
928 error = -EROFS;
929 if (is_handle_aborted(handle)) {
930 jbd_unlock_bh_state(bh);
931 goto out;
932 }
933 error = 0;
934
935
936
937
938
939 if (jh->b_transaction == transaction ||
940 jh->b_next_transaction == transaction)
941 goto done;
942
943
944
945
946
947 jh->b_modified = 0;
948
949
950
951
952
953
954 if (!jh->b_transaction) {
955 JBUFFER_TRACE(jh, "no transaction");
956 J_ASSERT_JH(jh, !jh->b_next_transaction);
957 JBUFFER_TRACE(jh, "file as BJ_Reserved");
958
959
960
961
962
963 smp_wmb();
964 spin_lock(&journal->j_list_lock);
965 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
966 spin_unlock(&journal->j_list_lock);
967 goto done;
968 }
969
970
971
972
973 if (jh->b_frozen_data) {
974 JBUFFER_TRACE(jh, "has frozen data");
975 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
976 goto attach_next;
977 }
978
979 JBUFFER_TRACE(jh, "owned by older transaction");
980 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
981 J_ASSERT_JH(jh, jh->b_transaction == journal->j_committing_transaction);
982
983
984
985
986
987
988
989
990
991
992 if (buffer_shadow(bh)) {
993 JBUFFER_TRACE(jh, "on shadow: sleep");
994 jbd_unlock_bh_state(bh);
995 wait_on_bit_io(&bh->b_state, BH_Shadow, TASK_UNINTERRUPTIBLE);
996 goto repeat;
997 }
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011 if (jh->b_jlist == BJ_Metadata || force_copy) {
1012 JBUFFER_TRACE(jh, "generate frozen data");
1013 if (!frozen_buffer) {
1014 JBUFFER_TRACE(jh, "allocate memory for buffer");
1015 jbd_unlock_bh_state(bh);
1016 frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size,
1017 GFP_NOFS | __GFP_NOFAIL);
1018 goto repeat;
1019 }
1020 jh->b_frozen_data = frozen_buffer;
1021 frozen_buffer = NULL;
1022 jbd2_freeze_jh_data(jh);
1023 }
1024 attach_next:
1025
1026
1027
1028
1029
1030 smp_wmb();
1031 jh->b_next_transaction = transaction;
1032
1033 done:
1034 jbd_unlock_bh_state(bh);
1035
1036
1037
1038
1039
1040 jbd2_journal_cancel_revoke(handle, jh);
1041
1042 out:
1043 if (unlikely(frozen_buffer))
1044 jbd2_free(frozen_buffer, bh->b_size);
1045
1046 JBUFFER_TRACE(jh, "exit");
1047 return error;
1048 }
1049
1050
1051 static bool jbd2_write_access_granted(handle_t *handle, struct buffer_head *bh,
1052 bool undo)
1053 {
1054 struct journal_head *jh;
1055 bool ret = false;
1056
1057
1058 if (buffer_dirty(bh))
1059 return false;
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072 rcu_read_lock();
1073 if (!buffer_jbd(bh))
1074 goto out;
1075
1076 jh = READ_ONCE(bh->b_private);
1077 if (!jh)
1078 goto out;
1079
1080 if (undo && !jh->b_committed_data)
1081 goto out;
1082 if (READ_ONCE(jh->b_transaction) != handle->h_transaction &&
1083 READ_ONCE(jh->b_next_transaction) != handle->h_transaction)
1084 goto out;
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094 smp_mb();
1095 if (unlikely(jh->b_bh != bh))
1096 goto out;
1097 ret = true;
1098 out:
1099 rcu_read_unlock();
1100 return ret;
1101 }
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114 int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
1115 {
1116 struct journal_head *jh;
1117 int rc;
1118
1119 if (is_handle_aborted(handle))
1120 return -EROFS;
1121
1122 if (jbd2_write_access_granted(handle, bh, false))
1123 return 0;
1124
1125 jh = jbd2_journal_add_journal_head(bh);
1126
1127
1128
1129 rc = do_get_write_access(handle, jh, 0);
1130 jbd2_journal_put_journal_head(jh);
1131 return rc;
1132 }
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154 int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
1155 {
1156 transaction_t *transaction = handle->h_transaction;
1157 journal_t *journal;
1158 struct journal_head *jh = jbd2_journal_add_journal_head(bh);
1159 int err;
1160
1161 jbd_debug(5, "journal_head %p\n", jh);
1162 err = -EROFS;
1163 if (is_handle_aborted(handle))
1164 goto out;
1165 journal = transaction->t_journal;
1166 err = 0;
1167
1168 JBUFFER_TRACE(jh, "entry");
1169
1170
1171
1172
1173
1174
1175
1176 jbd_lock_bh_state(bh);
1177 J_ASSERT_JH(jh, (jh->b_transaction == transaction ||
1178 jh->b_transaction == NULL ||
1179 (jh->b_transaction == journal->j_committing_transaction &&
1180 jh->b_jlist == BJ_Forget)));
1181
1182 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1183 J_ASSERT_JH(jh, buffer_locked(jh2bh(jh)));
1184
1185 if (jh->b_transaction == NULL) {
1186
1187
1188
1189
1190
1191
1192
1193
1194 clear_buffer_dirty(jh2bh(jh));
1195
1196 jh->b_modified = 0;
1197
1198 JBUFFER_TRACE(jh, "file as BJ_Reserved");
1199 spin_lock(&journal->j_list_lock);
1200 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
1201 spin_unlock(&journal->j_list_lock);
1202 } else if (jh->b_transaction == journal->j_committing_transaction) {
1203
1204 jh->b_modified = 0;
1205
1206 JBUFFER_TRACE(jh, "set next transaction");
1207 spin_lock(&journal->j_list_lock);
1208 jh->b_next_transaction = transaction;
1209 spin_unlock(&journal->j_list_lock);
1210 }
1211 jbd_unlock_bh_state(bh);
1212
1213
1214
1215
1216
1217
1218
1219
1220 JBUFFER_TRACE(jh, "cancelling revoke");
1221 jbd2_journal_cancel_revoke(handle, jh);
1222 out:
1223 jbd2_journal_put_journal_head(jh);
1224 return err;
1225 }
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253 int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh)
1254 {
1255 int err;
1256 struct journal_head *jh;
1257 char *committed_data = NULL;
1258
1259 if (is_handle_aborted(handle))
1260 return -EROFS;
1261
1262 if (jbd2_write_access_granted(handle, bh, true))
1263 return 0;
1264
1265 jh = jbd2_journal_add_journal_head(bh);
1266 JBUFFER_TRACE(jh, "entry");
1267
1268
1269
1270
1271
1272
1273 err = do_get_write_access(handle, jh, 1);
1274 if (err)
1275 goto out;
1276
1277 repeat:
1278 if (!jh->b_committed_data)
1279 committed_data = jbd2_alloc(jh2bh(jh)->b_size,
1280 GFP_NOFS|__GFP_NOFAIL);
1281
1282 jbd_lock_bh_state(bh);
1283 if (!jh->b_committed_data) {
1284
1285
1286 JBUFFER_TRACE(jh, "generate b_committed data");
1287 if (!committed_data) {
1288 jbd_unlock_bh_state(bh);
1289 goto repeat;
1290 }
1291
1292 jh->b_committed_data = committed_data;
1293 committed_data = NULL;
1294 memcpy(jh->b_committed_data, bh->b_data, bh->b_size);
1295 }
1296 jbd_unlock_bh_state(bh);
1297 out:
1298 jbd2_journal_put_journal_head(jh);
1299 if (unlikely(committed_data))
1300 jbd2_free(committed_data, bh->b_size);
1301 return err;
1302 }
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315 void jbd2_journal_set_triggers(struct buffer_head *bh,
1316 struct jbd2_buffer_trigger_type *type)
1317 {
1318 struct journal_head *jh = jbd2_journal_grab_journal_head(bh);
1319
1320 if (WARN_ON(!jh))
1321 return;
1322 jh->b_triggers = type;
1323 jbd2_journal_put_journal_head(jh);
1324 }
1325
1326 void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data,
1327 struct jbd2_buffer_trigger_type *triggers)
1328 {
1329 struct buffer_head *bh = jh2bh(jh);
1330
1331 if (!triggers || !triggers->t_frozen)
1332 return;
1333
1334 triggers->t_frozen(triggers, bh, mapped_data, bh->b_size);
1335 }
1336
1337 void jbd2_buffer_abort_trigger(struct journal_head *jh,
1338 struct jbd2_buffer_trigger_type *triggers)
1339 {
1340 if (!triggers || !triggers->t_abort)
1341 return;
1342
1343 triggers->t_abort(triggers, jh2bh(jh));
1344 }
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369 int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1370 {
1371 transaction_t *transaction = handle->h_transaction;
1372 journal_t *journal;
1373 struct journal_head *jh;
1374 int ret = 0;
1375
1376 if (is_handle_aborted(handle))
1377 return -EROFS;
1378 if (!buffer_jbd(bh))
1379 return -EUCLEAN;
1380
1381
1382
1383
1384
1385 jh = bh2jh(bh);
1386 jbd_debug(5, "journal_head %p\n", jh);
1387 JBUFFER_TRACE(jh, "entry");
1388
1389
1390
1391
1392
1393
1394
1395 if (jh->b_transaction != transaction &&
1396 jh->b_next_transaction != transaction) {
1397 jbd_lock_bh_state(bh);
1398 J_ASSERT_JH(jh, jh->b_transaction == transaction ||
1399 jh->b_next_transaction == transaction);
1400 jbd_unlock_bh_state(bh);
1401 }
1402 if (jh->b_modified == 1) {
1403
1404 if (jh->b_transaction == transaction &&
1405 jh->b_jlist != BJ_Metadata) {
1406 jbd_lock_bh_state(bh);
1407 if (jh->b_transaction == transaction &&
1408 jh->b_jlist != BJ_Metadata)
1409 pr_err("JBD2: assertion failure: h_type=%u "
1410 "h_line_no=%u block_no=%llu jlist=%u\n",
1411 handle->h_type, handle->h_line_no,
1412 (unsigned long long) bh->b_blocknr,
1413 jh->b_jlist);
1414 J_ASSERT_JH(jh, jh->b_transaction != transaction ||
1415 jh->b_jlist == BJ_Metadata);
1416 jbd_unlock_bh_state(bh);
1417 }
1418 goto out;
1419 }
1420
1421 journal = transaction->t_journal;
1422 jbd_lock_bh_state(bh);
1423
1424 if (jh->b_modified == 0) {
1425
1426
1427
1428
1429
1430 if (handle->h_buffer_credits <= 0) {
1431 ret = -ENOSPC;
1432 goto out_unlock_bh;
1433 }
1434 jh->b_modified = 1;
1435 handle->h_buffer_credits--;
1436 }
1437
1438
1439
1440
1441
1442
1443
1444
1445 if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) {
1446 JBUFFER_TRACE(jh, "fastpath");
1447 if (unlikely(jh->b_transaction !=
1448 journal->j_running_transaction)) {
1449 printk(KERN_ERR "JBD2: %s: "
1450 "jh->b_transaction (%llu, %p, %u) != "
1451 "journal->j_running_transaction (%p, %u)\n",
1452 journal->j_devname,
1453 (unsigned long long) bh->b_blocknr,
1454 jh->b_transaction,
1455 jh->b_transaction ? jh->b_transaction->t_tid : 0,
1456 journal->j_running_transaction,
1457 journal->j_running_transaction ?
1458 journal->j_running_transaction->t_tid : 0);
1459 ret = -EINVAL;
1460 }
1461 goto out_unlock_bh;
1462 }
1463
1464 set_buffer_jbddirty(bh);
1465
1466
1467
1468
1469
1470
1471
1472 if (jh->b_transaction != transaction) {
1473 JBUFFER_TRACE(jh, "already on other transaction");
1474 if (unlikely(((jh->b_transaction !=
1475 journal->j_committing_transaction)) ||
1476 (jh->b_next_transaction != transaction))) {
1477 printk(KERN_ERR "jbd2_journal_dirty_metadata: %s: "
1478 "bad jh for block %llu: "
1479 "transaction (%p, %u), "
1480 "jh->b_transaction (%p, %u), "
1481 "jh->b_next_transaction (%p, %u), jlist %u\n",
1482 journal->j_devname,
1483 (unsigned long long) bh->b_blocknr,
1484 transaction, transaction->t_tid,
1485 jh->b_transaction,
1486 jh->b_transaction ?
1487 jh->b_transaction->t_tid : 0,
1488 jh->b_next_transaction,
1489 jh->b_next_transaction ?
1490 jh->b_next_transaction->t_tid : 0,
1491 jh->b_jlist);
1492 WARN_ON(1);
1493 ret = -EINVAL;
1494 }
1495
1496
1497 goto out_unlock_bh;
1498 }
1499
1500
1501 J_ASSERT_JH(jh, jh->b_frozen_data == NULL);
1502
1503 JBUFFER_TRACE(jh, "file as BJ_Metadata");
1504 spin_lock(&journal->j_list_lock);
1505 __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata);
1506 spin_unlock(&journal->j_list_lock);
1507 out_unlock_bh:
1508 jbd_unlock_bh_state(bh);
1509 out:
1510 JBUFFER_TRACE(jh, "exit");
1511 return ret;
1512 }
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531 int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
1532 {
1533 transaction_t *transaction = handle->h_transaction;
1534 journal_t *journal;
1535 struct journal_head *jh;
1536 int drop_reserve = 0;
1537 int err = 0;
1538 int was_modified = 0;
1539
1540 if (is_handle_aborted(handle))
1541 return -EROFS;
1542 journal = transaction->t_journal;
1543
1544 BUFFER_TRACE(bh, "entry");
1545
1546 jbd_lock_bh_state(bh);
1547
1548 if (!buffer_jbd(bh))
1549 goto not_jbd;
1550 jh = bh2jh(bh);
1551
1552
1553
1554 if (!J_EXPECT_JH(jh, !jh->b_committed_data,
1555 "inconsistent data on disk")) {
1556 err = -EIO;
1557 goto not_jbd;
1558 }
1559
1560
1561 was_modified = jh->b_modified;
1562
1563
1564
1565
1566
1567 jh->b_modified = 0;
1568
1569 if (jh->b_transaction == transaction) {
1570 J_ASSERT_JH(jh, !jh->b_frozen_data);
1571
1572
1573
1574
1575 clear_buffer_dirty(bh);
1576 clear_buffer_jbddirty(bh);
1577
1578 JBUFFER_TRACE(jh, "belongs to current transaction: unfile");
1579
1580
1581
1582
1583
1584 if (was_modified)
1585 drop_reserve = 1;
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599 spin_lock(&journal->j_list_lock);
1600 if (jh->b_cp_transaction) {
1601 __jbd2_journal_temp_unlink_buffer(jh);
1602 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
1603 } else {
1604 __jbd2_journal_unfile_buffer(jh);
1605 if (!buffer_jbd(bh)) {
1606 spin_unlock(&journal->j_list_lock);
1607 goto not_jbd;
1608 }
1609 }
1610 spin_unlock(&journal->j_list_lock);
1611 } else if (jh->b_transaction) {
1612 J_ASSERT_JH(jh, (jh->b_transaction ==
1613 journal->j_committing_transaction));
1614
1615
1616 JBUFFER_TRACE(jh, "belongs to older transaction");
1617
1618
1619
1620
1621
1622
1623
1624 set_buffer_freed(bh);
1625
1626 if (!jh->b_next_transaction) {
1627 spin_lock(&journal->j_list_lock);
1628 jh->b_next_transaction = transaction;
1629 spin_unlock(&journal->j_list_lock);
1630 } else {
1631 J_ASSERT(jh->b_next_transaction == transaction);
1632
1633
1634
1635
1636
1637 if (was_modified)
1638 drop_reserve = 1;
1639 }
1640 } else {
1641
1642
1643
1644
1645
1646 spin_lock(&journal->j_list_lock);
1647 if (!jh->b_cp_transaction) {
1648 JBUFFER_TRACE(jh, "belongs to none transaction");
1649 spin_unlock(&journal->j_list_lock);
1650 goto not_jbd;
1651 }
1652
1653
1654
1655
1656
1657 if (!buffer_dirty(bh)) {
1658 __jbd2_journal_remove_checkpoint(jh);
1659 spin_unlock(&journal->j_list_lock);
1660 goto not_jbd;
1661 }
1662
1663
1664
1665
1666
1667
1668
1669 clear_buffer_dirty(bh);
1670 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
1671 spin_unlock(&journal->j_list_lock);
1672 }
1673
1674 jbd_unlock_bh_state(bh);
1675 __brelse(bh);
1676 drop:
1677 if (drop_reserve) {
1678
1679 handle->h_buffer_credits++;
1680 }
1681 return err;
1682
1683 not_jbd:
1684 jbd_unlock_bh_state(bh);
1685 __bforget(bh);
1686 goto drop;
1687 }
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705 int jbd2_journal_stop(handle_t *handle)
1706 {
1707 transaction_t *transaction = handle->h_transaction;
1708 journal_t *journal;
1709 int err = 0, wait_for_commit = 0;
1710 tid_t tid;
1711 pid_t pid;
1712
1713 if (!transaction) {
1714
1715
1716
1717
1718
1719 if (--handle->h_ref > 0) {
1720 jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1721 handle->h_ref);
1722 return err;
1723 } else {
1724 if (handle->h_rsv_handle)
1725 jbd2_free_handle(handle->h_rsv_handle);
1726 goto free_and_exit;
1727 }
1728 }
1729 journal = transaction->t_journal;
1730
1731 J_ASSERT(journal_current_handle() == handle);
1732
1733 if (is_handle_aborted(handle))
1734 err = -EIO;
1735 else
1736 J_ASSERT(atomic_read(&transaction->t_updates) > 0);
1737
1738 if (--handle->h_ref > 0) {
1739 jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1740 handle->h_ref);
1741 return err;
1742 }
1743
1744 jbd_debug(4, "Handle %p going down\n", handle);
1745 trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev,
1746 transaction->t_tid,
1747 handle->h_type, handle->h_line_no,
1748 jiffies - handle->h_start_jiffies,
1749 handle->h_sync, handle->h_requested_credits,
1750 (handle->h_requested_credits -
1751 handle->h_buffer_credits));
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782 pid = current->pid;
1783 if (handle->h_sync && journal->j_last_sync_writer != pid &&
1784 journal->j_max_batch_time) {
1785 u64 commit_time, trans_time;
1786
1787 journal->j_last_sync_writer = pid;
1788
1789 read_lock(&journal->j_state_lock);
1790 commit_time = journal->j_average_commit_time;
1791 read_unlock(&journal->j_state_lock);
1792
1793 trans_time = ktime_to_ns(ktime_sub(ktime_get(),
1794 transaction->t_start_time));
1795
1796 commit_time = max_t(u64, commit_time,
1797 1000*journal->j_min_batch_time);
1798 commit_time = min_t(u64, commit_time,
1799 1000*journal->j_max_batch_time);
1800
1801 if (trans_time < commit_time) {
1802 ktime_t expires = ktime_add_ns(ktime_get(),
1803 commit_time);
1804 set_current_state(TASK_UNINTERRUPTIBLE);
1805 schedule_hrtimeout(&expires, HRTIMER_MODE_ABS);
1806 }
1807 }
1808
1809 if (handle->h_sync)
1810 transaction->t_synchronous_commit = 1;
1811 current->journal_info = NULL;
1812 atomic_sub(handle->h_buffer_credits,
1813 &transaction->t_outstanding_credits);
1814
1815
1816
1817
1818
1819
1820
1821 if (handle->h_sync ||
1822 (atomic_read(&transaction->t_outstanding_credits) >
1823 journal->j_max_transaction_buffers) ||
1824 time_after_eq(jiffies, transaction->t_expires)) {
1825
1826
1827
1828
1829 jbd_debug(2, "transaction too old, requesting commit for "
1830 "handle %p\n", handle);
1831
1832 jbd2_log_start_commit(journal, transaction->t_tid);
1833
1834
1835
1836
1837
1838 if (handle->h_sync && !(current->flags & PF_MEMALLOC))
1839 wait_for_commit = 1;
1840 }
1841
1842
1843
1844
1845
1846
1847
1848 tid = transaction->t_tid;
1849 if (atomic_dec_and_test(&transaction->t_updates)) {
1850 wake_up(&journal->j_wait_updates);
1851 if (journal->j_barrier_count)
1852 wake_up(&journal->j_wait_transaction_locked);
1853 }
1854
1855 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
1856
1857 if (wait_for_commit)
1858 err = jbd2_log_wait_commit(journal, tid);
1859
1860 if (handle->h_rsv_handle)
1861 jbd2_journal_free_reserved(handle->h_rsv_handle);
1862 free_and_exit:
1863
1864
1865
1866
1867 memalloc_nofs_restore(handle->saved_alloc_context);
1868 jbd2_free_handle(handle);
1869 return err;
1870 }
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888 static inline void
1889 __blist_add_buffer(struct journal_head **list, struct journal_head *jh)
1890 {
1891 if (!*list) {
1892 jh->b_tnext = jh->b_tprev = jh;
1893 *list = jh;
1894 } else {
1895
1896 struct journal_head *first = *list, *last = first->b_tprev;
1897 jh->b_tprev = last;
1898 jh->b_tnext = first;
1899 last->b_tnext = first->b_tprev = jh;
1900 }
1901 }
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912 static inline void
1913 __blist_del_buffer(struct journal_head **list, struct journal_head *jh)
1914 {
1915 if (*list == jh) {
1916 *list = jh->b_tnext;
1917 if (*list == jh)
1918 *list = NULL;
1919 }
1920 jh->b_tprev->b_tnext = jh->b_tnext;
1921 jh->b_tnext->b_tprev = jh->b_tprev;
1922 }
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh)
1936 {
1937 struct journal_head **list = NULL;
1938 transaction_t *transaction;
1939 struct buffer_head *bh = jh2bh(jh);
1940
1941 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
1942 transaction = jh->b_transaction;
1943 if (transaction)
1944 assert_spin_locked(&transaction->t_journal->j_list_lock);
1945
1946 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
1947 if (jh->b_jlist != BJ_None)
1948 J_ASSERT_JH(jh, transaction != NULL);
1949
1950 switch (jh->b_jlist) {
1951 case BJ_None:
1952 return;
1953 case BJ_Metadata:
1954 transaction->t_nr_buffers--;
1955 J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0);
1956 list = &transaction->t_buffers;
1957 break;
1958 case BJ_Forget:
1959 list = &transaction->t_forget;
1960 break;
1961 case BJ_Shadow:
1962 list = &transaction->t_shadow_list;
1963 break;
1964 case BJ_Reserved:
1965 list = &transaction->t_reserved_list;
1966 break;
1967 }
1968
1969 __blist_del_buffer(list, jh);
1970 jh->b_jlist = BJ_None;
1971 if (transaction && is_journal_aborted(transaction->t_journal))
1972 clear_buffer_jbddirty(bh);
1973 else if (test_clear_buffer_jbddirty(bh))
1974 mark_buffer_dirty(bh);
1975 }
1976
1977
1978
1979
1980
1981
1982
1983
1984 static void __jbd2_journal_unfile_buffer(struct journal_head *jh)
1985 {
1986 __jbd2_journal_temp_unlink_buffer(jh);
1987 jh->b_transaction = NULL;
1988 jbd2_journal_put_journal_head(jh);
1989 }
1990
1991 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh)
1992 {
1993 struct buffer_head *bh = jh2bh(jh);
1994
1995
1996 get_bh(bh);
1997 jbd_lock_bh_state(bh);
1998 spin_lock(&journal->j_list_lock);
1999 __jbd2_journal_unfile_buffer(jh);
2000 spin_unlock(&journal->j_list_lock);
2001 jbd_unlock_bh_state(bh);
2002 __brelse(bh);
2003 }
2004
2005
2006
2007
2008
2009
2010 static void
2011 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh)
2012 {
2013 struct journal_head *jh;
2014
2015 jh = bh2jh(bh);
2016
2017 if (buffer_locked(bh) || buffer_dirty(bh))
2018 goto out;
2019
2020 if (jh->b_next_transaction != NULL || jh->b_transaction != NULL)
2021 goto out;
2022
2023 spin_lock(&journal->j_list_lock);
2024 if (jh->b_cp_transaction != NULL) {
2025
2026 JBUFFER_TRACE(jh, "remove from checkpoint list");
2027 __jbd2_journal_remove_checkpoint(jh);
2028 }
2029 spin_unlock(&journal->j_list_lock);
2030 out:
2031 return;
2032 }
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072 int jbd2_journal_try_to_free_buffers(journal_t *journal,
2073 struct page *page, gfp_t gfp_mask)
2074 {
2075 struct buffer_head *head;
2076 struct buffer_head *bh;
2077 int ret = 0;
2078
2079 J_ASSERT(PageLocked(page));
2080
2081 head = page_buffers(page);
2082 bh = head;
2083 do {
2084 struct journal_head *jh;
2085
2086
2087
2088
2089
2090
2091 jh = jbd2_journal_grab_journal_head(bh);
2092 if (!jh)
2093 continue;
2094
2095 jbd_lock_bh_state(bh);
2096 __journal_try_to_free_buffer(journal, bh);
2097 jbd2_journal_put_journal_head(jh);
2098 jbd_unlock_bh_state(bh);
2099 if (buffer_jbd(bh))
2100 goto busy;
2101 } while ((bh = bh->b_this_page) != head);
2102
2103 ret = try_to_free_buffers(page);
2104
2105 busy:
2106 return ret;
2107 }
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction)
2122 {
2123 int may_free = 1;
2124 struct buffer_head *bh = jh2bh(jh);
2125
2126 if (jh->b_cp_transaction) {
2127 JBUFFER_TRACE(jh, "on running+cp transaction");
2128 __jbd2_journal_temp_unlink_buffer(jh);
2129
2130
2131
2132
2133
2134 clear_buffer_dirty(bh);
2135 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
2136 may_free = 0;
2137 } else {
2138 JBUFFER_TRACE(jh, "on running transaction");
2139 __jbd2_journal_unfile_buffer(jh);
2140 }
2141 return may_free;
2142 }
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,
2192 int partial_page)
2193 {
2194 transaction_t *transaction;
2195 struct journal_head *jh;
2196 int may_free = 1;
2197
2198 BUFFER_TRACE(bh, "entry");
2199
2200
2201
2202
2203
2204
2205
2206 if (!buffer_jbd(bh))
2207 goto zap_buffer_unlocked;
2208
2209
2210 write_lock(&journal->j_state_lock);
2211 jbd_lock_bh_state(bh);
2212 spin_lock(&journal->j_list_lock);
2213
2214 jh = jbd2_journal_grab_journal_head(bh);
2215 if (!jh)
2216 goto zap_buffer_no_jh;
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241 transaction = jh->b_transaction;
2242 if (transaction == NULL) {
2243
2244
2245
2246
2247 if (!jh->b_cp_transaction) {
2248 JBUFFER_TRACE(jh, "not on any transaction: zap");
2249 goto zap_buffer;
2250 }
2251
2252 if (!buffer_dirty(bh)) {
2253
2254 __jbd2_journal_remove_checkpoint(jh);
2255 goto zap_buffer;
2256 }
2257
2258
2259
2260
2261
2262 if (journal->j_running_transaction) {
2263
2264
2265
2266 JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget");
2267 may_free = __dispose_buffer(jh,
2268 journal->j_running_transaction);
2269 goto zap_buffer;
2270 } else {
2271
2272
2273
2274
2275 if (journal->j_committing_transaction) {
2276 JBUFFER_TRACE(jh, "give to committing trans");
2277 may_free = __dispose_buffer(jh,
2278 journal->j_committing_transaction);
2279 goto zap_buffer;
2280 } else {
2281
2282
2283 clear_buffer_jbddirty(bh);
2284 __jbd2_journal_remove_checkpoint(jh);
2285 goto zap_buffer;
2286 }
2287 }
2288 } else if (transaction == journal->j_committing_transaction) {
2289 JBUFFER_TRACE(jh, "on committing transaction");
2290
2291
2292
2293
2294
2295 if (partial_page) {
2296 jbd2_journal_put_journal_head(jh);
2297 spin_unlock(&journal->j_list_lock);
2298 jbd_unlock_bh_state(bh);
2299 write_unlock(&journal->j_state_lock);
2300 return -EBUSY;
2301 }
2302
2303
2304
2305
2306
2307
2308
2309 set_buffer_freed(bh);
2310 if (journal->j_running_transaction && buffer_jbddirty(bh))
2311 jh->b_next_transaction = journal->j_running_transaction;
2312 jh->b_modified = 0;
2313 jbd2_journal_put_journal_head(jh);
2314 spin_unlock(&journal->j_list_lock);
2315 jbd_unlock_bh_state(bh);
2316 write_unlock(&journal->j_state_lock);
2317 return 0;
2318 } else {
2319
2320
2321
2322
2323
2324
2325 J_ASSERT_JH(jh, transaction == journal->j_running_transaction);
2326 JBUFFER_TRACE(jh, "on running transaction");
2327 may_free = __dispose_buffer(jh, transaction);
2328 }
2329
2330 zap_buffer:
2331
2332
2333
2334
2335
2336
2337
2338
2339 jh->b_modified = 0;
2340 jbd2_journal_put_journal_head(jh);
2341 zap_buffer_no_jh:
2342 spin_unlock(&journal->j_list_lock);
2343 jbd_unlock_bh_state(bh);
2344 write_unlock(&journal->j_state_lock);
2345 zap_buffer_unlocked:
2346 clear_buffer_dirty(bh);
2347 J_ASSERT_BH(bh, !buffer_jbddirty(bh));
2348 clear_buffer_mapped(bh);
2349 clear_buffer_req(bh);
2350 clear_buffer_new(bh);
2351 clear_buffer_delay(bh);
2352 clear_buffer_unwritten(bh);
2353 bh->b_bdev = NULL;
2354 return may_free;
2355 }
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369 int jbd2_journal_invalidatepage(journal_t *journal,
2370 struct page *page,
2371 unsigned int offset,
2372 unsigned int length)
2373 {
2374 struct buffer_head *head, *bh, *next;
2375 unsigned int stop = offset + length;
2376 unsigned int curr_off = 0;
2377 int partial_page = (offset || length < PAGE_SIZE);
2378 int may_free = 1;
2379 int ret = 0;
2380
2381 if (!PageLocked(page))
2382 BUG();
2383 if (!page_has_buffers(page))
2384 return 0;
2385
2386 BUG_ON(stop > PAGE_SIZE || stop < length);
2387
2388
2389
2390
2391
2392 head = bh = page_buffers(page);
2393 do {
2394 unsigned int next_off = curr_off + bh->b_size;
2395 next = bh->b_this_page;
2396
2397 if (next_off > stop)
2398 return 0;
2399
2400 if (offset <= curr_off) {
2401
2402 lock_buffer(bh);
2403 ret = journal_unmap_buffer(journal, bh, partial_page);
2404 unlock_buffer(bh);
2405 if (ret < 0)
2406 return ret;
2407 may_free &= ret;
2408 }
2409 curr_off = next_off;
2410 bh = next;
2411
2412 } while (bh != head);
2413
2414 if (!partial_page) {
2415 if (may_free && try_to_free_buffers(page))
2416 J_ASSERT(!page_has_buffers(page));
2417 }
2418 return 0;
2419 }
2420
2421
2422
2423
2424 void __jbd2_journal_file_buffer(struct journal_head *jh,
2425 transaction_t *transaction, int jlist)
2426 {
2427 struct journal_head **list = NULL;
2428 int was_dirty = 0;
2429 struct buffer_head *bh = jh2bh(jh);
2430
2431 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
2432 assert_spin_locked(&transaction->t_journal->j_list_lock);
2433
2434 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
2435 J_ASSERT_JH(jh, jh->b_transaction == transaction ||
2436 jh->b_transaction == NULL);
2437
2438 if (jh->b_transaction && jh->b_jlist == jlist)
2439 return;
2440
2441 if (jlist == BJ_Metadata || jlist == BJ_Reserved ||
2442 jlist == BJ_Shadow || jlist == BJ_Forget) {
2443
2444
2445
2446
2447
2448
2449
2450 if (buffer_dirty(bh))
2451 warn_dirty_buffer(bh);
2452 if (test_clear_buffer_dirty(bh) ||
2453 test_clear_buffer_jbddirty(bh))
2454 was_dirty = 1;
2455 }
2456
2457 if (jh->b_transaction)
2458 __jbd2_journal_temp_unlink_buffer(jh);
2459 else
2460 jbd2_journal_grab_journal_head(bh);
2461 jh->b_transaction = transaction;
2462
2463 switch (jlist) {
2464 case BJ_None:
2465 J_ASSERT_JH(jh, !jh->b_committed_data);
2466 J_ASSERT_JH(jh, !jh->b_frozen_data);
2467 return;
2468 case BJ_Metadata:
2469 transaction->t_nr_buffers++;
2470 list = &transaction->t_buffers;
2471 break;
2472 case BJ_Forget:
2473 list = &transaction->t_forget;
2474 break;
2475 case BJ_Shadow:
2476 list = &transaction->t_shadow_list;
2477 break;
2478 case BJ_Reserved:
2479 list = &transaction->t_reserved_list;
2480 break;
2481 }
2482
2483 __blist_add_buffer(list, jh);
2484 jh->b_jlist = jlist;
2485
2486 if (was_dirty)
2487 set_buffer_jbddirty(bh);
2488 }
2489
2490 void jbd2_journal_file_buffer(struct journal_head *jh,
2491 transaction_t *transaction, int jlist)
2492 {
2493 jbd_lock_bh_state(jh2bh(jh));
2494 spin_lock(&transaction->t_journal->j_list_lock);
2495 __jbd2_journal_file_buffer(jh, transaction, jlist);
2496 spin_unlock(&transaction->t_journal->j_list_lock);
2497 jbd_unlock_bh_state(jh2bh(jh));
2498 }
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511 void __jbd2_journal_refile_buffer(struct journal_head *jh)
2512 {
2513 int was_dirty, jlist;
2514 struct buffer_head *bh = jh2bh(jh);
2515
2516 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
2517 if (jh->b_transaction)
2518 assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock);
2519
2520
2521 if (jh->b_next_transaction == NULL) {
2522 __jbd2_journal_unfile_buffer(jh);
2523 return;
2524 }
2525
2526
2527
2528
2529
2530
2531 was_dirty = test_clear_buffer_jbddirty(bh);
2532 __jbd2_journal_temp_unlink_buffer(jh);
2533
2534
2535
2536
2537
2538 WRITE_ONCE(jh->b_transaction, jh->b_next_transaction);
2539 WRITE_ONCE(jh->b_next_transaction, NULL);
2540 if (buffer_freed(bh))
2541 jlist = BJ_Forget;
2542 else if (jh->b_modified)
2543 jlist = BJ_Metadata;
2544 else
2545 jlist = BJ_Reserved;
2546 __jbd2_journal_file_buffer(jh, jh->b_transaction, jlist);
2547 J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING);
2548
2549 if (was_dirty)
2550 set_buffer_jbddirty(bh);
2551 }
2552
2553
2554
2555
2556
2557
2558
2559 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh)
2560 {
2561 struct buffer_head *bh = jh2bh(jh);
2562
2563
2564 get_bh(bh);
2565 jbd_lock_bh_state(bh);
2566 spin_lock(&journal->j_list_lock);
2567 __jbd2_journal_refile_buffer(jh);
2568 jbd_unlock_bh_state(bh);
2569 spin_unlock(&journal->j_list_lock);
2570 __brelse(bh);
2571 }
2572
2573
2574
2575
2576 static int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *jinode,
2577 unsigned long flags, loff_t start_byte, loff_t end_byte)
2578 {
2579 transaction_t *transaction = handle->h_transaction;
2580 journal_t *journal;
2581
2582 if (is_handle_aborted(handle))
2583 return -EROFS;
2584 journal = transaction->t_journal;
2585
2586 jbd_debug(4, "Adding inode %lu, tid:%d\n", jinode->i_vfs_inode->i_ino,
2587 transaction->t_tid);
2588
2589 spin_lock(&journal->j_list_lock);
2590 jinode->i_flags |= flags;
2591
2592 if (jinode->i_dirty_end) {
2593 jinode->i_dirty_start = min(jinode->i_dirty_start, start_byte);
2594 jinode->i_dirty_end = max(jinode->i_dirty_end, end_byte);
2595 } else {
2596 jinode->i_dirty_start = start_byte;
2597 jinode->i_dirty_end = end_byte;
2598 }
2599
2600
2601 if (jinode->i_transaction == transaction ||
2602 jinode->i_next_transaction == transaction)
2603 goto done;
2604
2605
2606
2607
2608
2609
2610 if (!transaction->t_need_data_flush)
2611 transaction->t_need_data_flush = 1;
2612
2613
2614 if (jinode->i_transaction) {
2615 J_ASSERT(jinode->i_next_transaction == NULL);
2616 J_ASSERT(jinode->i_transaction ==
2617 journal->j_committing_transaction);
2618 jinode->i_next_transaction = transaction;
2619 goto done;
2620 }
2621
2622 J_ASSERT(!jinode->i_next_transaction);
2623 jinode->i_transaction = transaction;
2624 list_add(&jinode->i_list, &transaction->t_inode_list);
2625 done:
2626 spin_unlock(&journal->j_list_lock);
2627
2628 return 0;
2629 }
2630
2631 int jbd2_journal_inode_ranged_write(handle_t *handle,
2632 struct jbd2_inode *jinode, loff_t start_byte, loff_t length)
2633 {
2634 return jbd2_journal_file_inode(handle, jinode,
2635 JI_WRITE_DATA | JI_WAIT_DATA, start_byte,
2636 start_byte + length - 1);
2637 }
2638
2639 int jbd2_journal_inode_ranged_wait(handle_t *handle, struct jbd2_inode *jinode,
2640 loff_t start_byte, loff_t length)
2641 {
2642 return jbd2_journal_file_inode(handle, jinode, JI_WAIT_DATA,
2643 start_byte, start_byte + length - 1);
2644 }
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666 int jbd2_journal_begin_ordered_truncate(journal_t *journal,
2667 struct jbd2_inode *jinode,
2668 loff_t new_size)
2669 {
2670 transaction_t *inode_trans, *commit_trans;
2671 int ret = 0;
2672
2673
2674 if (!jinode->i_transaction)
2675 goto out;
2676
2677
2678
2679 read_lock(&journal->j_state_lock);
2680 commit_trans = journal->j_committing_transaction;
2681 read_unlock(&journal->j_state_lock);
2682 spin_lock(&journal->j_list_lock);
2683 inode_trans = jinode->i_transaction;
2684 spin_unlock(&journal->j_list_lock);
2685 if (inode_trans == commit_trans) {
2686 ret = filemap_fdatawrite_range(jinode->i_vfs_inode->i_mapping,
2687 new_size, LLONG_MAX);
2688 if (ret)
2689 jbd2_journal_abort(journal, ret);
2690 }
2691 out:
2692 return ret;
2693 }