This source file includes following definitions.
- ocfs2_wait_on_mount
- ocfs2_wait_on_quotas
- ocfs2_replay_map_set_state
- ocfs2_compute_replay_slots
- ocfs2_queue_replay_slots
- ocfs2_free_replay_slots
- ocfs2_recovery_init
- ocfs2_recovery_thread_running
- ocfs2_recovery_exit
- __ocfs2_recovery_map_test
- ocfs2_recovery_map_set
- ocfs2_recovery_map_clear
- ocfs2_commit_cache
- ocfs2_start_trans
- ocfs2_commit_trans
- ocfs2_extend_trans
- ocfs2_allocate_extend_trans
- to_ocfs2_trigger
- ocfs2_frozen_trigger
- ocfs2_dq_frozen_trigger
- ocfs2_db_frozen_trigger
- ocfs2_abort_trigger
- __ocfs2_journal_access
- ocfs2_journal_access_di
- ocfs2_journal_access_eb
- ocfs2_journal_access_rb
- ocfs2_journal_access_gd
- ocfs2_journal_access_db
- ocfs2_journal_access_xb
- ocfs2_journal_access_dq
- ocfs2_journal_access_dr
- ocfs2_journal_access_dl
- ocfs2_journal_access
- ocfs2_journal_dirty
- ocfs2_set_journal_params
- ocfs2_journal_init
- ocfs2_bump_recovery_generation
- ocfs2_get_recovery_generation
- ocfs2_journal_toggle_dirty
- ocfs2_journal_shutdown
- ocfs2_clear_journal_error
- ocfs2_journal_load
- ocfs2_journal_wipe
- ocfs2_recovery_completed
- ocfs2_wait_for_recovery
- ocfs2_force_read_journal
- ocfs2_complete_recovery
- ocfs2_queue_recovery_completion
- ocfs2_complete_mount_recovery
- ocfs2_complete_quota_recovery
- __ocfs2_recovery_thread
- ocfs2_recovery_thread
- ocfs2_read_journal_inode
- ocfs2_replay_journal
- ocfs2_recover_node
- ocfs2_trylock_journal
- ocfs2_mark_dead_nodes
- ocfs2_orphan_scan_timeout
- ocfs2_queue_orphan_scan
- ocfs2_orphan_scan_work
- ocfs2_orphan_scan_stop
- ocfs2_orphan_scan_init
- ocfs2_orphan_scan_start
- ocfs2_orphan_filldir
- ocfs2_queue_orphans
- ocfs2_orphan_recovery_can_continue
- ocfs2_mark_recovering_orphan_dir
- ocfs2_clear_recovering_orphan_dir
- ocfs2_recover_orphans
- __ocfs2_wait_on_mount
- ocfs2_commit_thread
- ocfs2_check_journals_nolocks
1
2
3
4
5
6
7
8
9
10
11
12 #include <linux/fs.h>
13 #include <linux/types.h>
14 #include <linux/slab.h>
15 #include <linux/highmem.h>
16 #include <linux/kthread.h>
17 #include <linux/time.h>
18 #include <linux/random.h>
19 #include <linux/delay.h>
20
21 #include <cluster/masklog.h>
22
23 #include "ocfs2.h"
24
25 #include "alloc.h"
26 #include "blockcheck.h"
27 #include "dir.h"
28 #include "dlmglue.h"
29 #include "extent_map.h"
30 #include "heartbeat.h"
31 #include "inode.h"
32 #include "journal.h"
33 #include "localalloc.h"
34 #include "slot_map.h"
35 #include "super.h"
36 #include "sysfile.h"
37 #include "uptodate.h"
38 #include "quota.h"
39 #include "file.h"
40 #include "namei.h"
41
42 #include "buffer_head_io.h"
43 #include "ocfs2_trace.h"
44
45 DEFINE_SPINLOCK(trans_inc_lock);
46
47 #define ORPHAN_SCAN_SCHEDULE_TIMEOUT 300000
48
49 static int ocfs2_force_read_journal(struct inode *inode);
50 static int ocfs2_recover_node(struct ocfs2_super *osb,
51 int node_num, int slot_num);
52 static int __ocfs2_recovery_thread(void *arg);
53 static int ocfs2_commit_cache(struct ocfs2_super *osb);
54 static int __ocfs2_wait_on_mount(struct ocfs2_super *osb, int quota);
55 static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb,
56 int dirty, int replayed);
57 static int ocfs2_trylock_journal(struct ocfs2_super *osb,
58 int slot_num);
59 static int ocfs2_recover_orphans(struct ocfs2_super *osb,
60 int slot,
61 enum ocfs2_orphan_reco_type orphan_reco_type);
62 static int ocfs2_commit_thread(void *arg);
63 static void ocfs2_queue_recovery_completion(struct ocfs2_journal *journal,
64 int slot_num,
65 struct ocfs2_dinode *la_dinode,
66 struct ocfs2_dinode *tl_dinode,
67 struct ocfs2_quota_recovery *qrec,
68 enum ocfs2_orphan_reco_type orphan_reco_type);
69
70 static inline int ocfs2_wait_on_mount(struct ocfs2_super *osb)
71 {
72 return __ocfs2_wait_on_mount(osb, 0);
73 }
74
75 static inline int ocfs2_wait_on_quotas(struct ocfs2_super *osb)
76 {
77 return __ocfs2_wait_on_mount(osb, 1);
78 }
79
80
81
82
83
84
85 enum ocfs2_replay_state {
86 REPLAY_UNNEEDED = 0,
87 REPLAY_NEEDED,
88 REPLAY_DONE
89 };
90
91 struct ocfs2_replay_map {
92 unsigned int rm_slots;
93 enum ocfs2_replay_state rm_state;
94 unsigned char rm_replay_slots[0];
95 };
96
97 static void ocfs2_replay_map_set_state(struct ocfs2_super *osb, int state)
98 {
99 if (!osb->replay_map)
100 return;
101
102
103 if (osb->replay_map->rm_state == REPLAY_DONE)
104 return;
105
106 osb->replay_map->rm_state = state;
107 }
108
109 int ocfs2_compute_replay_slots(struct ocfs2_super *osb)
110 {
111 struct ocfs2_replay_map *replay_map;
112 int i, node_num;
113
114
115 if (osb->replay_map)
116 return 0;
117
118 replay_map = kzalloc(sizeof(struct ocfs2_replay_map) +
119 (osb->max_slots * sizeof(char)), GFP_KERNEL);
120
121 if (!replay_map) {
122 mlog_errno(-ENOMEM);
123 return -ENOMEM;
124 }
125
126 spin_lock(&osb->osb_lock);
127
128 replay_map->rm_slots = osb->max_slots;
129 replay_map->rm_state = REPLAY_UNNEEDED;
130
131
132 for (i = 0; i < replay_map->rm_slots; i++) {
133 if (ocfs2_slot_to_node_num_locked(osb, i, &node_num) == -ENOENT)
134 replay_map->rm_replay_slots[i] = 1;
135 }
136
137 osb->replay_map = replay_map;
138 spin_unlock(&osb->osb_lock);
139 return 0;
140 }
141
142 static void ocfs2_queue_replay_slots(struct ocfs2_super *osb,
143 enum ocfs2_orphan_reco_type orphan_reco_type)
144 {
145 struct ocfs2_replay_map *replay_map = osb->replay_map;
146 int i;
147
148 if (!replay_map)
149 return;
150
151 if (replay_map->rm_state != REPLAY_NEEDED)
152 return;
153
154 for (i = 0; i < replay_map->rm_slots; i++)
155 if (replay_map->rm_replay_slots[i])
156 ocfs2_queue_recovery_completion(osb->journal, i, NULL,
157 NULL, NULL,
158 orphan_reco_type);
159 replay_map->rm_state = REPLAY_DONE;
160 }
161
162 static void ocfs2_free_replay_slots(struct ocfs2_super *osb)
163 {
164 struct ocfs2_replay_map *replay_map = osb->replay_map;
165
166 if (!osb->replay_map)
167 return;
168
169 kfree(replay_map);
170 osb->replay_map = NULL;
171 }
172
173 int ocfs2_recovery_init(struct ocfs2_super *osb)
174 {
175 struct ocfs2_recovery_map *rm;
176
177 mutex_init(&osb->recovery_lock);
178 osb->disable_recovery = 0;
179 osb->recovery_thread_task = NULL;
180 init_waitqueue_head(&osb->recovery_event);
181
182 rm = kzalloc(sizeof(struct ocfs2_recovery_map) +
183 osb->max_slots * sizeof(unsigned int),
184 GFP_KERNEL);
185 if (!rm) {
186 mlog_errno(-ENOMEM);
187 return -ENOMEM;
188 }
189
190 rm->rm_entries = (unsigned int *)((char *)rm +
191 sizeof(struct ocfs2_recovery_map));
192 osb->recovery_map = rm;
193
194 return 0;
195 }
196
197
198
199
200 static int ocfs2_recovery_thread_running(struct ocfs2_super *osb)
201 {
202 mb();
203 return osb->recovery_thread_task != NULL;
204 }
205
206 void ocfs2_recovery_exit(struct ocfs2_super *osb)
207 {
208 struct ocfs2_recovery_map *rm;
209
210
211
212 mutex_lock(&osb->recovery_lock);
213 osb->disable_recovery = 1;
214 mutex_unlock(&osb->recovery_lock);
215 wait_event(osb->recovery_event, !ocfs2_recovery_thread_running(osb));
216
217
218
219
220 if (osb->ocfs2_wq)
221 flush_workqueue(osb->ocfs2_wq);
222
223
224
225
226
227 rm = osb->recovery_map;
228
229
230 kfree(rm);
231 }
232
233 static int __ocfs2_recovery_map_test(struct ocfs2_super *osb,
234 unsigned int node_num)
235 {
236 int i;
237 struct ocfs2_recovery_map *rm = osb->recovery_map;
238
239 assert_spin_locked(&osb->osb_lock);
240
241 for (i = 0; i < rm->rm_used; i++) {
242 if (rm->rm_entries[i] == node_num)
243 return 1;
244 }
245
246 return 0;
247 }
248
249
250 static int ocfs2_recovery_map_set(struct ocfs2_super *osb,
251 unsigned int node_num)
252 {
253 struct ocfs2_recovery_map *rm = osb->recovery_map;
254
255 spin_lock(&osb->osb_lock);
256 if (__ocfs2_recovery_map_test(osb, node_num)) {
257 spin_unlock(&osb->osb_lock);
258 return 1;
259 }
260
261
262 BUG_ON(rm->rm_used >= osb->max_slots);
263
264 rm->rm_entries[rm->rm_used] = node_num;
265 rm->rm_used++;
266 spin_unlock(&osb->osb_lock);
267
268 return 0;
269 }
270
271 static void ocfs2_recovery_map_clear(struct ocfs2_super *osb,
272 unsigned int node_num)
273 {
274 int i;
275 struct ocfs2_recovery_map *rm = osb->recovery_map;
276
277 spin_lock(&osb->osb_lock);
278
279 for (i = 0; i < rm->rm_used; i++) {
280 if (rm->rm_entries[i] == node_num)
281 break;
282 }
283
284 if (i < rm->rm_used) {
285
286 memmove(&(rm->rm_entries[i]), &(rm->rm_entries[i + 1]),
287 (rm->rm_used - i - 1) * sizeof(unsigned int));
288 rm->rm_used--;
289 }
290
291 spin_unlock(&osb->osb_lock);
292 }
293
294 static int ocfs2_commit_cache(struct ocfs2_super *osb)
295 {
296 int status = 0;
297 unsigned int flushed;
298 struct ocfs2_journal *journal = NULL;
299
300 journal = osb->journal;
301
302
303 down_write(&journal->j_trans_barrier);
304
305 flushed = atomic_read(&journal->j_num_trans);
306 trace_ocfs2_commit_cache_begin(flushed);
307 if (flushed == 0) {
308 up_write(&journal->j_trans_barrier);
309 goto finally;
310 }
311
312 jbd2_journal_lock_updates(journal->j_journal);
313 status = jbd2_journal_flush(journal->j_journal);
314 jbd2_journal_unlock_updates(journal->j_journal);
315 if (status < 0) {
316 up_write(&journal->j_trans_barrier);
317 mlog_errno(status);
318 goto finally;
319 }
320
321 ocfs2_inc_trans_id(journal);
322
323 flushed = atomic_read(&journal->j_num_trans);
324 atomic_set(&journal->j_num_trans, 0);
325 up_write(&journal->j_trans_barrier);
326
327 trace_ocfs2_commit_cache_end(journal->j_trans_id, flushed);
328
329 ocfs2_wake_downconvert_thread(osb);
330 wake_up(&journal->j_checkpointed);
331 finally:
332 return status;
333 }
334
335 handle_t *ocfs2_start_trans(struct ocfs2_super *osb, int max_buffs)
336 {
337 journal_t *journal = osb->journal->j_journal;
338 handle_t *handle;
339
340 BUG_ON(!osb || !osb->journal->j_journal);
341
342 if (ocfs2_is_hard_readonly(osb))
343 return ERR_PTR(-EROFS);
344
345 BUG_ON(osb->journal->j_state == OCFS2_JOURNAL_FREE);
346 BUG_ON(max_buffs <= 0);
347
348
349 if (journal_current_handle())
350 return jbd2_journal_start(journal, max_buffs);
351
352 sb_start_intwrite(osb->sb);
353
354 down_read(&osb->journal->j_trans_barrier);
355
356 handle = jbd2_journal_start(journal, max_buffs);
357 if (IS_ERR(handle)) {
358 up_read(&osb->journal->j_trans_barrier);
359 sb_end_intwrite(osb->sb);
360
361 mlog_errno(PTR_ERR(handle));
362
363 if (is_journal_aborted(journal)) {
364 ocfs2_abort(osb->sb, "Detected aborted journal\n");
365 handle = ERR_PTR(-EROFS);
366 }
367 } else {
368 if (!ocfs2_mount_local(osb))
369 atomic_inc(&(osb->journal->j_num_trans));
370 }
371
372 return handle;
373 }
374
375 int ocfs2_commit_trans(struct ocfs2_super *osb,
376 handle_t *handle)
377 {
378 int ret, nested;
379 struct ocfs2_journal *journal = osb->journal;
380
381 BUG_ON(!handle);
382
383 nested = handle->h_ref > 1;
384 ret = jbd2_journal_stop(handle);
385 if (ret < 0)
386 mlog_errno(ret);
387
388 if (!nested) {
389 up_read(&journal->j_trans_barrier);
390 sb_end_intwrite(osb->sb);
391 }
392
393 return ret;
394 }
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413 int ocfs2_extend_trans(handle_t *handle, int nblocks)
414 {
415 int status, old_nblocks;
416
417 BUG_ON(!handle);
418 BUG_ON(nblocks < 0);
419
420 if (!nblocks)
421 return 0;
422
423 old_nblocks = handle->h_buffer_credits;
424
425 trace_ocfs2_extend_trans(old_nblocks, nblocks);
426
427 #ifdef CONFIG_OCFS2_DEBUG_FS
428 status = 1;
429 #else
430 status = jbd2_journal_extend(handle, nblocks);
431 if (status < 0) {
432 mlog_errno(status);
433 goto bail;
434 }
435 #endif
436
437 if (status > 0) {
438 trace_ocfs2_extend_trans_restart(old_nblocks + nblocks);
439 status = jbd2_journal_restart(handle,
440 old_nblocks + nblocks);
441 if (status < 0) {
442 mlog_errno(status);
443 goto bail;
444 }
445 }
446
447 status = 0;
448 bail:
449 return status;
450 }
451
452
453
454
455
456
457
458 int ocfs2_allocate_extend_trans(handle_t *handle, int thresh)
459 {
460 int status, old_nblks;
461
462 BUG_ON(!handle);
463
464 old_nblks = handle->h_buffer_credits;
465 trace_ocfs2_allocate_extend_trans(old_nblks, thresh);
466
467 if (old_nblks < thresh)
468 return 0;
469
470 status = jbd2_journal_extend(handle, OCFS2_MAX_TRANS_DATA);
471 if (status < 0) {
472 mlog_errno(status);
473 goto bail;
474 }
475
476 if (status > 0) {
477 status = jbd2_journal_restart(handle, OCFS2_MAX_TRANS_DATA);
478 if (status < 0)
479 mlog_errno(status);
480 }
481
482 bail:
483 return status;
484 }
485
486
487 struct ocfs2_triggers {
488 struct jbd2_buffer_trigger_type ot_triggers;
489 int ot_offset;
490 };
491
492 static inline struct ocfs2_triggers *to_ocfs2_trigger(struct jbd2_buffer_trigger_type *triggers)
493 {
494 return container_of(triggers, struct ocfs2_triggers, ot_triggers);
495 }
496
497 static void ocfs2_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
498 struct buffer_head *bh,
499 void *data, size_t size)
500 {
501 struct ocfs2_triggers *ot = to_ocfs2_trigger(triggers);
502
503
504
505
506
507
508
509 ocfs2_block_check_compute(data, size, data + ot->ot_offset);
510 }
511
512
513
514
515
516 static void ocfs2_dq_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
517 struct buffer_head *bh,
518 void *data, size_t size)
519 {
520 struct ocfs2_disk_dqtrailer *dqt =
521 ocfs2_block_dqtrailer(size, data);
522
523
524
525
526
527
528
529 ocfs2_block_check_compute(data, size, &dqt->dq_check);
530 }
531
532
533
534
535
536 static void ocfs2_db_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
537 struct buffer_head *bh,
538 void *data, size_t size)
539 {
540 struct ocfs2_dir_block_trailer *trailer =
541 ocfs2_dir_trailer_from_size(size, data);
542
543
544
545
546
547
548
549 ocfs2_block_check_compute(data, size, &trailer->db_check);
550 }
551
552 static void ocfs2_abort_trigger(struct jbd2_buffer_trigger_type *triggers,
553 struct buffer_head *bh)
554 {
555 mlog(ML_ERROR,
556 "ocfs2_abort_trigger called by JBD2. bh = 0x%lx, "
557 "bh->b_blocknr = %llu\n",
558 (unsigned long)bh,
559 (unsigned long long)bh->b_blocknr);
560
561 ocfs2_error(bh->b_bdev->bd_super,
562 "JBD2 has aborted our journal, ocfs2 cannot continue\n");
563 }
564
565 static struct ocfs2_triggers di_triggers = {
566 .ot_triggers = {
567 .t_frozen = ocfs2_frozen_trigger,
568 .t_abort = ocfs2_abort_trigger,
569 },
570 .ot_offset = offsetof(struct ocfs2_dinode, i_check),
571 };
572
573 static struct ocfs2_triggers eb_triggers = {
574 .ot_triggers = {
575 .t_frozen = ocfs2_frozen_trigger,
576 .t_abort = ocfs2_abort_trigger,
577 },
578 .ot_offset = offsetof(struct ocfs2_extent_block, h_check),
579 };
580
581 static struct ocfs2_triggers rb_triggers = {
582 .ot_triggers = {
583 .t_frozen = ocfs2_frozen_trigger,
584 .t_abort = ocfs2_abort_trigger,
585 },
586 .ot_offset = offsetof(struct ocfs2_refcount_block, rf_check),
587 };
588
589 static struct ocfs2_triggers gd_triggers = {
590 .ot_triggers = {
591 .t_frozen = ocfs2_frozen_trigger,
592 .t_abort = ocfs2_abort_trigger,
593 },
594 .ot_offset = offsetof(struct ocfs2_group_desc, bg_check),
595 };
596
597 static struct ocfs2_triggers db_triggers = {
598 .ot_triggers = {
599 .t_frozen = ocfs2_db_frozen_trigger,
600 .t_abort = ocfs2_abort_trigger,
601 },
602 };
603
604 static struct ocfs2_triggers xb_triggers = {
605 .ot_triggers = {
606 .t_frozen = ocfs2_frozen_trigger,
607 .t_abort = ocfs2_abort_trigger,
608 },
609 .ot_offset = offsetof(struct ocfs2_xattr_block, xb_check),
610 };
611
612 static struct ocfs2_triggers dq_triggers = {
613 .ot_triggers = {
614 .t_frozen = ocfs2_dq_frozen_trigger,
615 .t_abort = ocfs2_abort_trigger,
616 },
617 };
618
619 static struct ocfs2_triggers dr_triggers = {
620 .ot_triggers = {
621 .t_frozen = ocfs2_frozen_trigger,
622 .t_abort = ocfs2_abort_trigger,
623 },
624 .ot_offset = offsetof(struct ocfs2_dx_root_block, dr_check),
625 };
626
627 static struct ocfs2_triggers dl_triggers = {
628 .ot_triggers = {
629 .t_frozen = ocfs2_frozen_trigger,
630 .t_abort = ocfs2_abort_trigger,
631 },
632 .ot_offset = offsetof(struct ocfs2_dx_leaf, dl_check),
633 };
634
635 static int __ocfs2_journal_access(handle_t *handle,
636 struct ocfs2_caching_info *ci,
637 struct buffer_head *bh,
638 struct ocfs2_triggers *triggers,
639 int type)
640 {
641 int status;
642 struct ocfs2_super *osb =
643 OCFS2_SB(ocfs2_metadata_cache_get_super(ci));
644
645 BUG_ON(!ci || !ci->ci_ops);
646 BUG_ON(!handle);
647 BUG_ON(!bh);
648
649 trace_ocfs2_journal_access(
650 (unsigned long long)ocfs2_metadata_cache_owner(ci),
651 (unsigned long long)bh->b_blocknr, type, bh->b_size);
652
653
654 if (!buffer_uptodate(bh)) {
655 mlog(ML_ERROR, "giving me a buffer that's not uptodate!\n");
656 mlog(ML_ERROR, "b_blocknr=%llu, b_state=0x%lx\n",
657 (unsigned long long)bh->b_blocknr, bh->b_state);
658
659 lock_buffer(bh);
660
661
662
663
664
665
666
667
668
669
670 if (buffer_write_io_error(bh) && !buffer_uptodate(bh)) {
671 unlock_buffer(bh);
672 return ocfs2_error(osb->sb, "A previous attempt to "
673 "write this buffer head failed\n");
674 }
675 unlock_buffer(bh);
676 }
677
678
679
680
681
682
683
684 ocfs2_set_ci_lock_trans(osb->journal, ci);
685
686 ocfs2_metadata_cache_io_lock(ci);
687 switch (type) {
688 case OCFS2_JOURNAL_ACCESS_CREATE:
689 case OCFS2_JOURNAL_ACCESS_WRITE:
690 status = jbd2_journal_get_write_access(handle, bh);
691 break;
692
693 case OCFS2_JOURNAL_ACCESS_UNDO:
694 status = jbd2_journal_get_undo_access(handle, bh);
695 break;
696
697 default:
698 status = -EINVAL;
699 mlog(ML_ERROR, "Unknown access type!\n");
700 }
701 if (!status && ocfs2_meta_ecc(osb) && triggers)
702 jbd2_journal_set_triggers(bh, &triggers->ot_triggers);
703 ocfs2_metadata_cache_io_unlock(ci);
704
705 if (status < 0)
706 mlog(ML_ERROR, "Error %d getting %d access to buffer!\n",
707 status, type);
708
709 return status;
710 }
711
712 int ocfs2_journal_access_di(handle_t *handle, struct ocfs2_caching_info *ci,
713 struct buffer_head *bh, int type)
714 {
715 return __ocfs2_journal_access(handle, ci, bh, &di_triggers, type);
716 }
717
718 int ocfs2_journal_access_eb(handle_t *handle, struct ocfs2_caching_info *ci,
719 struct buffer_head *bh, int type)
720 {
721 return __ocfs2_journal_access(handle, ci, bh, &eb_triggers, type);
722 }
723
724 int ocfs2_journal_access_rb(handle_t *handle, struct ocfs2_caching_info *ci,
725 struct buffer_head *bh, int type)
726 {
727 return __ocfs2_journal_access(handle, ci, bh, &rb_triggers,
728 type);
729 }
730
731 int ocfs2_journal_access_gd(handle_t *handle, struct ocfs2_caching_info *ci,
732 struct buffer_head *bh, int type)
733 {
734 return __ocfs2_journal_access(handle, ci, bh, &gd_triggers, type);
735 }
736
737 int ocfs2_journal_access_db(handle_t *handle, struct ocfs2_caching_info *ci,
738 struct buffer_head *bh, int type)
739 {
740 return __ocfs2_journal_access(handle, ci, bh, &db_triggers, type);
741 }
742
743 int ocfs2_journal_access_xb(handle_t *handle, struct ocfs2_caching_info *ci,
744 struct buffer_head *bh, int type)
745 {
746 return __ocfs2_journal_access(handle, ci, bh, &xb_triggers, type);
747 }
748
749 int ocfs2_journal_access_dq(handle_t *handle, struct ocfs2_caching_info *ci,
750 struct buffer_head *bh, int type)
751 {
752 return __ocfs2_journal_access(handle, ci, bh, &dq_triggers, type);
753 }
754
755 int ocfs2_journal_access_dr(handle_t *handle, struct ocfs2_caching_info *ci,
756 struct buffer_head *bh, int type)
757 {
758 return __ocfs2_journal_access(handle, ci, bh, &dr_triggers, type);
759 }
760
761 int ocfs2_journal_access_dl(handle_t *handle, struct ocfs2_caching_info *ci,
762 struct buffer_head *bh, int type)
763 {
764 return __ocfs2_journal_access(handle, ci, bh, &dl_triggers, type);
765 }
766
767 int ocfs2_journal_access(handle_t *handle, struct ocfs2_caching_info *ci,
768 struct buffer_head *bh, int type)
769 {
770 return __ocfs2_journal_access(handle, ci, bh, NULL, type);
771 }
772
773 void ocfs2_journal_dirty(handle_t *handle, struct buffer_head *bh)
774 {
775 int status;
776
777 trace_ocfs2_journal_dirty((unsigned long long)bh->b_blocknr);
778
779 status = jbd2_journal_dirty_metadata(handle, bh);
780 if (status) {
781 mlog_errno(status);
782 if (!is_handle_aborted(handle)) {
783 journal_t *journal = handle->h_transaction->t_journal;
784 struct super_block *sb = bh->b_bdev->bd_super;
785
786 mlog(ML_ERROR, "jbd2_journal_dirty_metadata failed. "
787 "Aborting transaction and journal.\n");
788 handle->h_err = status;
789 jbd2_journal_abort_handle(handle);
790 jbd2_journal_abort(journal, status);
791 ocfs2_abort(sb, "Journal already aborted.\n");
792 }
793 }
794 }
795
796 #define OCFS2_DEFAULT_COMMIT_INTERVAL (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE)
797
798 void ocfs2_set_journal_params(struct ocfs2_super *osb)
799 {
800 journal_t *journal = osb->journal->j_journal;
801 unsigned long commit_interval = OCFS2_DEFAULT_COMMIT_INTERVAL;
802
803 if (osb->osb_commit_interval)
804 commit_interval = osb->osb_commit_interval;
805
806 write_lock(&journal->j_state_lock);
807 journal->j_commit_interval = commit_interval;
808 if (osb->s_mount_opt & OCFS2_MOUNT_BARRIER)
809 journal->j_flags |= JBD2_BARRIER;
810 else
811 journal->j_flags &= ~JBD2_BARRIER;
812 write_unlock(&journal->j_state_lock);
813 }
814
815 int ocfs2_journal_init(struct ocfs2_journal *journal, int *dirty)
816 {
817 int status = -1;
818 struct inode *inode = NULL;
819 journal_t *j_journal = NULL;
820 struct ocfs2_dinode *di = NULL;
821 struct buffer_head *bh = NULL;
822 struct ocfs2_super *osb;
823 int inode_lock = 0;
824
825 BUG_ON(!journal);
826
827 osb = journal->j_osb;
828
829
830 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
831 osb->slot_num);
832 if (inode == NULL) {
833 status = -EACCES;
834 mlog_errno(status);
835 goto done;
836 }
837 if (is_bad_inode(inode)) {
838 mlog(ML_ERROR, "access error (bad inode)\n");
839 iput(inode);
840 inode = NULL;
841 status = -EACCES;
842 goto done;
843 }
844
845 SET_INODE_JOURNAL(inode);
846 OCFS2_I(inode)->ip_open_count++;
847
848
849
850
851 status = ocfs2_inode_lock_full(inode, &bh, 1, OCFS2_META_LOCK_RECOVERY);
852 if (status < 0) {
853 if (status != -ERESTARTSYS)
854 mlog(ML_ERROR, "Could not get lock on journal!\n");
855 goto done;
856 }
857
858 inode_lock = 1;
859 di = (struct ocfs2_dinode *)bh->b_data;
860
861 if (i_size_read(inode) < OCFS2_MIN_JOURNAL_SIZE) {
862 mlog(ML_ERROR, "Journal file size (%lld) is too small!\n",
863 i_size_read(inode));
864 status = -EINVAL;
865 goto done;
866 }
867
868 trace_ocfs2_journal_init(i_size_read(inode),
869 (unsigned long long)inode->i_blocks,
870 OCFS2_I(inode)->ip_clusters);
871
872
873 j_journal = jbd2_journal_init_inode(inode);
874 if (j_journal == NULL) {
875 mlog(ML_ERROR, "Linux journal layer error\n");
876 status = -EINVAL;
877 goto done;
878 }
879
880 trace_ocfs2_journal_init_maxlen(j_journal->j_maxlen);
881
882 *dirty = (le32_to_cpu(di->id1.journal1.ij_flags) &
883 OCFS2_JOURNAL_DIRTY_FL);
884
885 journal->j_journal = j_journal;
886 journal->j_inode = inode;
887 journal->j_bh = bh;
888
889 ocfs2_set_journal_params(osb);
890
891 journal->j_state = OCFS2_JOURNAL_LOADED;
892
893 status = 0;
894 done:
895 if (status < 0) {
896 if (inode_lock)
897 ocfs2_inode_unlock(inode, 1);
898 brelse(bh);
899 if (inode) {
900 OCFS2_I(inode)->ip_open_count--;
901 iput(inode);
902 }
903 }
904
905 return status;
906 }
907
908 static void ocfs2_bump_recovery_generation(struct ocfs2_dinode *di)
909 {
910 le32_add_cpu(&(di->id1.journal1.ij_recovery_generation), 1);
911 }
912
913 static u32 ocfs2_get_recovery_generation(struct ocfs2_dinode *di)
914 {
915 return le32_to_cpu(di->id1.journal1.ij_recovery_generation);
916 }
917
918 static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb,
919 int dirty, int replayed)
920 {
921 int status;
922 unsigned int flags;
923 struct ocfs2_journal *journal = osb->journal;
924 struct buffer_head *bh = journal->j_bh;
925 struct ocfs2_dinode *fe;
926
927 fe = (struct ocfs2_dinode *)bh->b_data;
928
929
930
931
932 BUG_ON(!OCFS2_IS_VALID_DINODE(fe));
933
934 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
935 if (dirty)
936 flags |= OCFS2_JOURNAL_DIRTY_FL;
937 else
938 flags &= ~OCFS2_JOURNAL_DIRTY_FL;
939 fe->id1.journal1.ij_flags = cpu_to_le32(flags);
940
941 if (replayed)
942 ocfs2_bump_recovery_generation(fe);
943
944 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &fe->i_check);
945 status = ocfs2_write_block(osb, bh, INODE_CACHE(journal->j_inode));
946 if (status < 0)
947 mlog_errno(status);
948
949 return status;
950 }
951
952
953
954
955
956 void ocfs2_journal_shutdown(struct ocfs2_super *osb)
957 {
958 struct ocfs2_journal *journal = NULL;
959 int status = 0;
960 struct inode *inode = NULL;
961 int num_running_trans = 0;
962
963 BUG_ON(!osb);
964
965 journal = osb->journal;
966 if (!journal)
967 goto done;
968
969 inode = journal->j_inode;
970
971 if (journal->j_state != OCFS2_JOURNAL_LOADED)
972 goto done;
973
974
975 if (!igrab(inode))
976 BUG();
977
978 num_running_trans = atomic_read(&(osb->journal->j_num_trans));
979 trace_ocfs2_journal_shutdown(num_running_trans);
980
981
982
983
984
985 journal->j_state = OCFS2_JOURNAL_IN_SHUTDOWN;
986
987
988
989
990 if (osb->commit_task) {
991
992 trace_ocfs2_journal_shutdown_wait(osb->commit_task);
993 kthread_stop(osb->commit_task);
994 osb->commit_task = NULL;
995 }
996
997 BUG_ON(atomic_read(&(osb->journal->j_num_trans)) != 0);
998
999 if (ocfs2_mount_local(osb)) {
1000 jbd2_journal_lock_updates(journal->j_journal);
1001 status = jbd2_journal_flush(journal->j_journal);
1002 jbd2_journal_unlock_updates(journal->j_journal);
1003 if (status < 0)
1004 mlog_errno(status);
1005 }
1006
1007
1008 if (!jbd2_journal_destroy(journal->j_journal) && !status) {
1009
1010
1011
1012
1013 status = ocfs2_journal_toggle_dirty(osb, 0, 0);
1014 if (status < 0)
1015 mlog_errno(status);
1016 }
1017 journal->j_journal = NULL;
1018
1019 OCFS2_I(inode)->ip_open_count--;
1020
1021
1022 ocfs2_inode_unlock(inode, 1);
1023
1024 brelse(journal->j_bh);
1025 journal->j_bh = NULL;
1026
1027 journal->j_state = OCFS2_JOURNAL_FREE;
1028
1029
1030 done:
1031 iput(inode);
1032 }
1033
1034 static void ocfs2_clear_journal_error(struct super_block *sb,
1035 journal_t *journal,
1036 int slot)
1037 {
1038 int olderr;
1039
1040 olderr = jbd2_journal_errno(journal);
1041 if (olderr) {
1042 mlog(ML_ERROR, "File system error %d recorded in "
1043 "journal %u.\n", olderr, slot);
1044 mlog(ML_ERROR, "File system on device %s needs checking.\n",
1045 sb->s_id);
1046
1047 jbd2_journal_ack_err(journal);
1048 jbd2_journal_clear_err(journal);
1049 }
1050 }
1051
1052 int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed)
1053 {
1054 int status = 0;
1055 struct ocfs2_super *osb;
1056
1057 BUG_ON(!journal);
1058
1059 osb = journal->j_osb;
1060
1061 status = jbd2_journal_load(journal->j_journal);
1062 if (status < 0) {
1063 mlog(ML_ERROR, "Failed to load journal!\n");
1064 goto done;
1065 }
1066
1067 ocfs2_clear_journal_error(osb->sb, journal->j_journal, osb->slot_num);
1068
1069 if (replayed) {
1070 jbd2_journal_lock_updates(journal->j_journal);
1071 status = jbd2_journal_flush(journal->j_journal);
1072 jbd2_journal_unlock_updates(journal->j_journal);
1073 if (status < 0)
1074 mlog_errno(status);
1075 }
1076
1077 status = ocfs2_journal_toggle_dirty(osb, 1, replayed);
1078 if (status < 0) {
1079 mlog_errno(status);
1080 goto done;
1081 }
1082
1083
1084 if (!local) {
1085 osb->commit_task = kthread_run(ocfs2_commit_thread, osb,
1086 "ocfs2cmt-%s", osb->uuid_str);
1087 if (IS_ERR(osb->commit_task)) {
1088 status = PTR_ERR(osb->commit_task);
1089 osb->commit_task = NULL;
1090 mlog(ML_ERROR, "unable to launch ocfs2commit thread, "
1091 "error=%d", status);
1092 goto done;
1093 }
1094 } else
1095 osb->commit_task = NULL;
1096
1097 done:
1098 return status;
1099 }
1100
1101
1102
1103
1104 int ocfs2_journal_wipe(struct ocfs2_journal *journal, int full)
1105 {
1106 int status;
1107
1108 BUG_ON(!journal);
1109
1110 status = jbd2_journal_wipe(journal->j_journal, full);
1111 if (status < 0) {
1112 mlog_errno(status);
1113 goto bail;
1114 }
1115
1116 status = ocfs2_journal_toggle_dirty(journal->j_osb, 0, 0);
1117 if (status < 0)
1118 mlog_errno(status);
1119
1120 bail:
1121 return status;
1122 }
1123
1124 static int ocfs2_recovery_completed(struct ocfs2_super *osb)
1125 {
1126 int empty;
1127 struct ocfs2_recovery_map *rm = osb->recovery_map;
1128
1129 spin_lock(&osb->osb_lock);
1130 empty = (rm->rm_used == 0);
1131 spin_unlock(&osb->osb_lock);
1132
1133 return empty;
1134 }
1135
1136 void ocfs2_wait_for_recovery(struct ocfs2_super *osb)
1137 {
1138 wait_event(osb->recovery_event, ocfs2_recovery_completed(osb));
1139 }
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151 static int ocfs2_force_read_journal(struct inode *inode)
1152 {
1153 int status = 0;
1154 int i;
1155 u64 v_blkno, p_blkno, p_blocks, num_blocks;
1156 struct buffer_head *bh = NULL;
1157 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1158
1159 num_blocks = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode));
1160 v_blkno = 0;
1161 while (v_blkno < num_blocks) {
1162 status = ocfs2_extent_map_get_blocks(inode, v_blkno,
1163 &p_blkno, &p_blocks, NULL);
1164 if (status < 0) {
1165 mlog_errno(status);
1166 goto bail;
1167 }
1168
1169 for (i = 0; i < p_blocks; i++, p_blkno++) {
1170 bh = __find_get_block(osb->sb->s_bdev, p_blkno,
1171 osb->sb->s_blocksize);
1172
1173 if (!bh)
1174 continue;
1175
1176 brelse(bh);
1177 bh = NULL;
1178
1179
1180
1181 status = ocfs2_read_blocks_sync(osb, p_blkno, 1, &bh);
1182 if (status < 0) {
1183 mlog_errno(status);
1184 goto bail;
1185 }
1186
1187 brelse(bh);
1188 bh = NULL;
1189 }
1190
1191 v_blkno += p_blocks;
1192 }
1193
1194 bail:
1195 return status;
1196 }
1197
1198 struct ocfs2_la_recovery_item {
1199 struct list_head lri_list;
1200 int lri_slot;
1201 struct ocfs2_dinode *lri_la_dinode;
1202 struct ocfs2_dinode *lri_tl_dinode;
1203 struct ocfs2_quota_recovery *lri_qrec;
1204 enum ocfs2_orphan_reco_type lri_orphan_reco_type;
1205 };
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217 void ocfs2_complete_recovery(struct work_struct *work)
1218 {
1219 int ret = 0;
1220 struct ocfs2_journal *journal =
1221 container_of(work, struct ocfs2_journal, j_recovery_work);
1222 struct ocfs2_super *osb = journal->j_osb;
1223 struct ocfs2_dinode *la_dinode, *tl_dinode;
1224 struct ocfs2_la_recovery_item *item, *n;
1225 struct ocfs2_quota_recovery *qrec;
1226 enum ocfs2_orphan_reco_type orphan_reco_type;
1227 LIST_HEAD(tmp_la_list);
1228
1229 trace_ocfs2_complete_recovery(
1230 (unsigned long long)OCFS2_I(journal->j_inode)->ip_blkno);
1231
1232 spin_lock(&journal->j_lock);
1233 list_splice_init(&journal->j_la_cleanups, &tmp_la_list);
1234 spin_unlock(&journal->j_lock);
1235
1236 list_for_each_entry_safe(item, n, &tmp_la_list, lri_list) {
1237 list_del_init(&item->lri_list);
1238
1239 ocfs2_wait_on_quotas(osb);
1240
1241 la_dinode = item->lri_la_dinode;
1242 tl_dinode = item->lri_tl_dinode;
1243 qrec = item->lri_qrec;
1244 orphan_reco_type = item->lri_orphan_reco_type;
1245
1246 trace_ocfs2_complete_recovery_slot(item->lri_slot,
1247 la_dinode ? le64_to_cpu(la_dinode->i_blkno) : 0,
1248 tl_dinode ? le64_to_cpu(tl_dinode->i_blkno) : 0,
1249 qrec);
1250
1251 if (la_dinode) {
1252 ret = ocfs2_complete_local_alloc_recovery(osb,
1253 la_dinode);
1254 if (ret < 0)
1255 mlog_errno(ret);
1256
1257 kfree(la_dinode);
1258 }
1259
1260 if (tl_dinode) {
1261 ret = ocfs2_complete_truncate_log_recovery(osb,
1262 tl_dinode);
1263 if (ret < 0)
1264 mlog_errno(ret);
1265
1266 kfree(tl_dinode);
1267 }
1268
1269 ret = ocfs2_recover_orphans(osb, item->lri_slot,
1270 orphan_reco_type);
1271 if (ret < 0)
1272 mlog_errno(ret);
1273
1274 if (qrec) {
1275 ret = ocfs2_finish_quota_recovery(osb, qrec,
1276 item->lri_slot);
1277 if (ret < 0)
1278 mlog_errno(ret);
1279
1280 }
1281
1282 kfree(item);
1283 }
1284
1285 trace_ocfs2_complete_recovery_end(ret);
1286 }
1287
1288
1289
1290
1291 static void ocfs2_queue_recovery_completion(struct ocfs2_journal *journal,
1292 int slot_num,
1293 struct ocfs2_dinode *la_dinode,
1294 struct ocfs2_dinode *tl_dinode,
1295 struct ocfs2_quota_recovery *qrec,
1296 enum ocfs2_orphan_reco_type orphan_reco_type)
1297 {
1298 struct ocfs2_la_recovery_item *item;
1299
1300 item = kmalloc(sizeof(struct ocfs2_la_recovery_item), GFP_NOFS);
1301 if (!item) {
1302
1303
1304
1305 kfree(la_dinode);
1306 kfree(tl_dinode);
1307
1308 if (qrec)
1309 ocfs2_free_quota_recovery(qrec);
1310
1311 mlog_errno(-ENOMEM);
1312 return;
1313 }
1314
1315 INIT_LIST_HEAD(&item->lri_list);
1316 item->lri_la_dinode = la_dinode;
1317 item->lri_slot = slot_num;
1318 item->lri_tl_dinode = tl_dinode;
1319 item->lri_qrec = qrec;
1320 item->lri_orphan_reco_type = orphan_reco_type;
1321
1322 spin_lock(&journal->j_lock);
1323 list_add_tail(&item->lri_list, &journal->j_la_cleanups);
1324 queue_work(journal->j_osb->ocfs2_wq, &journal->j_recovery_work);
1325 spin_unlock(&journal->j_lock);
1326 }
1327
1328
1329
1330 void ocfs2_complete_mount_recovery(struct ocfs2_super *osb)
1331 {
1332 struct ocfs2_journal *journal = osb->journal;
1333
1334 if (ocfs2_is_hard_readonly(osb))
1335 return;
1336
1337
1338
1339 ocfs2_queue_recovery_completion(journal, osb->slot_num,
1340 osb->local_alloc_copy, NULL, NULL,
1341 ORPHAN_NEED_TRUNCATE);
1342 ocfs2_schedule_truncate_log_flush(osb, 0);
1343
1344 osb->local_alloc_copy = NULL;
1345
1346
1347 ocfs2_replay_map_set_state(osb, REPLAY_NEEDED);
1348 ocfs2_queue_replay_slots(osb, ORPHAN_NEED_TRUNCATE);
1349 ocfs2_free_replay_slots(osb);
1350 }
1351
1352 void ocfs2_complete_quota_recovery(struct ocfs2_super *osb)
1353 {
1354 if (osb->quota_rec) {
1355 ocfs2_queue_recovery_completion(osb->journal,
1356 osb->slot_num,
1357 NULL,
1358 NULL,
1359 osb->quota_rec,
1360 ORPHAN_NEED_TRUNCATE);
1361 osb->quota_rec = NULL;
1362 }
1363 }
1364
1365 static int __ocfs2_recovery_thread(void *arg)
1366 {
1367 int status, node_num, slot_num;
1368 struct ocfs2_super *osb = arg;
1369 struct ocfs2_recovery_map *rm = osb->recovery_map;
1370 int *rm_quota = NULL;
1371 int rm_quota_used = 0, i;
1372 struct ocfs2_quota_recovery *qrec;
1373
1374
1375 int quota_enabled = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb,
1376 OCFS2_FEATURE_RO_COMPAT_USRQUOTA)
1377 || OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb,
1378 OCFS2_FEATURE_RO_COMPAT_GRPQUOTA);
1379
1380 status = ocfs2_wait_on_mount(osb);
1381 if (status < 0) {
1382 goto bail;
1383 }
1384
1385 if (quota_enabled) {
1386 rm_quota = kcalloc(osb->max_slots, sizeof(int), GFP_NOFS);
1387 if (!rm_quota) {
1388 status = -ENOMEM;
1389 goto bail;
1390 }
1391 }
1392 restart:
1393 status = ocfs2_super_lock(osb, 1);
1394 if (status < 0) {
1395 mlog_errno(status);
1396 goto bail;
1397 }
1398
1399 status = ocfs2_compute_replay_slots(osb);
1400 if (status < 0)
1401 mlog_errno(status);
1402
1403
1404 ocfs2_queue_recovery_completion(osb->journal, osb->slot_num, NULL,
1405 NULL, NULL, ORPHAN_NO_NEED_TRUNCATE);
1406
1407 spin_lock(&osb->osb_lock);
1408 while (rm->rm_used) {
1409
1410
1411 node_num = rm->rm_entries[0];
1412 spin_unlock(&osb->osb_lock);
1413 slot_num = ocfs2_node_num_to_slot(osb, node_num);
1414 trace_ocfs2_recovery_thread_node(node_num, slot_num);
1415 if (slot_num == -ENOENT) {
1416 status = 0;
1417 goto skip_recovery;
1418 }
1419
1420
1421
1422
1423
1424
1425
1426 if (quota_enabled) {
1427 for (i = 0; i < rm_quota_used
1428 && rm_quota[i] != slot_num; i++)
1429 ;
1430
1431 if (i == rm_quota_used)
1432 rm_quota[rm_quota_used++] = slot_num;
1433 }
1434
1435 status = ocfs2_recover_node(osb, node_num, slot_num);
1436 skip_recovery:
1437 if (!status) {
1438 ocfs2_recovery_map_clear(osb, node_num);
1439 } else {
1440 mlog(ML_ERROR,
1441 "Error %d recovering node %d on device (%u,%u)!\n",
1442 status, node_num,
1443 MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
1444 mlog(ML_ERROR, "Volume requires unmount.\n");
1445 }
1446
1447 spin_lock(&osb->osb_lock);
1448 }
1449 spin_unlock(&osb->osb_lock);
1450 trace_ocfs2_recovery_thread_end(status);
1451
1452
1453 status = ocfs2_check_journals_nolocks(osb);
1454 status = (status == -EROFS) ? 0 : status;
1455 if (status < 0)
1456 mlog_errno(status);
1457
1458
1459
1460
1461 if (quota_enabled) {
1462 for (i = 0; i < rm_quota_used; i++) {
1463 qrec = ocfs2_begin_quota_recovery(osb, rm_quota[i]);
1464 if (IS_ERR(qrec)) {
1465 status = PTR_ERR(qrec);
1466 mlog_errno(status);
1467 continue;
1468 }
1469 ocfs2_queue_recovery_completion(osb->journal,
1470 rm_quota[i],
1471 NULL, NULL, qrec,
1472 ORPHAN_NEED_TRUNCATE);
1473 }
1474 }
1475
1476 ocfs2_super_unlock(osb, 1);
1477
1478
1479 ocfs2_queue_replay_slots(osb, ORPHAN_NEED_TRUNCATE);
1480
1481 bail:
1482 mutex_lock(&osb->recovery_lock);
1483 if (!status && !ocfs2_recovery_completed(osb)) {
1484 mutex_unlock(&osb->recovery_lock);
1485 goto restart;
1486 }
1487
1488 ocfs2_free_replay_slots(osb);
1489 osb->recovery_thread_task = NULL;
1490 mb();
1491 wake_up(&osb->recovery_event);
1492
1493 mutex_unlock(&osb->recovery_lock);
1494
1495 if (quota_enabled)
1496 kfree(rm_quota);
1497
1498
1499
1500
1501 complete_and_exit(NULL, status);
1502 }
1503
1504 void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num)
1505 {
1506 mutex_lock(&osb->recovery_lock);
1507
1508 trace_ocfs2_recovery_thread(node_num, osb->node_num,
1509 osb->disable_recovery, osb->recovery_thread_task,
1510 osb->disable_recovery ?
1511 -1 : ocfs2_recovery_map_set(osb, node_num));
1512
1513 if (osb->disable_recovery)
1514 goto out;
1515
1516 if (osb->recovery_thread_task)
1517 goto out;
1518
1519 osb->recovery_thread_task = kthread_run(__ocfs2_recovery_thread, osb,
1520 "ocfs2rec-%s", osb->uuid_str);
1521 if (IS_ERR(osb->recovery_thread_task)) {
1522 mlog_errno((int)PTR_ERR(osb->recovery_thread_task));
1523 osb->recovery_thread_task = NULL;
1524 }
1525
1526 out:
1527 mutex_unlock(&osb->recovery_lock);
1528 wake_up(&osb->recovery_event);
1529 }
1530
1531 static int ocfs2_read_journal_inode(struct ocfs2_super *osb,
1532 int slot_num,
1533 struct buffer_head **bh,
1534 struct inode **ret_inode)
1535 {
1536 int status = -EACCES;
1537 struct inode *inode = NULL;
1538
1539 BUG_ON(slot_num >= osb->max_slots);
1540
1541 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
1542 slot_num);
1543 if (!inode || is_bad_inode(inode)) {
1544 mlog_errno(status);
1545 goto bail;
1546 }
1547 SET_INODE_JOURNAL(inode);
1548
1549 status = ocfs2_read_inode_block_full(inode, bh, OCFS2_BH_IGNORE_CACHE);
1550 if (status < 0) {
1551 mlog_errno(status);
1552 goto bail;
1553 }
1554
1555 status = 0;
1556
1557 bail:
1558 if (inode) {
1559 if (status || !ret_inode)
1560 iput(inode);
1561 else
1562 *ret_inode = inode;
1563 }
1564 return status;
1565 }
1566
1567
1568
1569 static int ocfs2_replay_journal(struct ocfs2_super *osb,
1570 int node_num,
1571 int slot_num)
1572 {
1573 int status;
1574 int got_lock = 0;
1575 unsigned int flags;
1576 struct inode *inode = NULL;
1577 struct ocfs2_dinode *fe;
1578 journal_t *journal = NULL;
1579 struct buffer_head *bh = NULL;
1580 u32 slot_reco_gen;
1581
1582 status = ocfs2_read_journal_inode(osb, slot_num, &bh, &inode);
1583 if (status) {
1584 mlog_errno(status);
1585 goto done;
1586 }
1587
1588 fe = (struct ocfs2_dinode *)bh->b_data;
1589 slot_reco_gen = ocfs2_get_recovery_generation(fe);
1590 brelse(bh);
1591 bh = NULL;
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601 if (osb->slot_recovery_generations[slot_num] != slot_reco_gen) {
1602 trace_ocfs2_replay_journal_recovered(slot_num,
1603 osb->slot_recovery_generations[slot_num], slot_reco_gen);
1604 osb->slot_recovery_generations[slot_num] = slot_reco_gen;
1605 status = -EBUSY;
1606 goto done;
1607 }
1608
1609
1610
1611 status = ocfs2_inode_lock_full(inode, &bh, 1, OCFS2_META_LOCK_RECOVERY);
1612 if (status < 0) {
1613 trace_ocfs2_replay_journal_lock_err(status);
1614 if (status != -ERESTARTSYS)
1615 mlog(ML_ERROR, "Could not lock journal!\n");
1616 goto done;
1617 }
1618 got_lock = 1;
1619
1620 fe = (struct ocfs2_dinode *) bh->b_data;
1621
1622 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
1623 slot_reco_gen = ocfs2_get_recovery_generation(fe);
1624
1625 if (!(flags & OCFS2_JOURNAL_DIRTY_FL)) {
1626 trace_ocfs2_replay_journal_skip(node_num);
1627
1628 osb->slot_recovery_generations[slot_num] = slot_reco_gen;
1629 goto done;
1630 }
1631
1632
1633 ocfs2_replay_map_set_state(osb, REPLAY_NEEDED);
1634
1635 printk(KERN_NOTICE "ocfs2: Begin replay journal (node %d, slot %d) on "\
1636 "device (%u,%u)\n", node_num, slot_num, MAJOR(osb->sb->s_dev),
1637 MINOR(osb->sb->s_dev));
1638
1639 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1640
1641 status = ocfs2_force_read_journal(inode);
1642 if (status < 0) {
1643 mlog_errno(status);
1644 goto done;
1645 }
1646
1647 journal = jbd2_journal_init_inode(inode);
1648 if (journal == NULL) {
1649 mlog(ML_ERROR, "Linux journal layer error\n");
1650 status = -EIO;
1651 goto done;
1652 }
1653
1654 status = jbd2_journal_load(journal);
1655 if (status < 0) {
1656 mlog_errno(status);
1657 if (!igrab(inode))
1658 BUG();
1659 jbd2_journal_destroy(journal);
1660 goto done;
1661 }
1662
1663 ocfs2_clear_journal_error(osb->sb, journal, slot_num);
1664
1665
1666 jbd2_journal_lock_updates(journal);
1667 status = jbd2_journal_flush(journal);
1668 jbd2_journal_unlock_updates(journal);
1669 if (status < 0)
1670 mlog_errno(status);
1671
1672
1673 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
1674 flags &= ~OCFS2_JOURNAL_DIRTY_FL;
1675 fe->id1.journal1.ij_flags = cpu_to_le32(flags);
1676
1677
1678 ocfs2_bump_recovery_generation(fe);
1679 osb->slot_recovery_generations[slot_num] =
1680 ocfs2_get_recovery_generation(fe);
1681
1682 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &fe->i_check);
1683 status = ocfs2_write_block(osb, bh, INODE_CACHE(inode));
1684 if (status < 0)
1685 mlog_errno(status);
1686
1687 if (!igrab(inode))
1688 BUG();
1689
1690 jbd2_journal_destroy(journal);
1691
1692 printk(KERN_NOTICE "ocfs2: End replay journal (node %d, slot %d) on "\
1693 "device (%u,%u)\n", node_num, slot_num, MAJOR(osb->sb->s_dev),
1694 MINOR(osb->sb->s_dev));
1695 done:
1696
1697 if (got_lock)
1698 ocfs2_inode_unlock(inode, 1);
1699
1700 iput(inode);
1701 brelse(bh);
1702
1703 return status;
1704 }
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718 static int ocfs2_recover_node(struct ocfs2_super *osb,
1719 int node_num, int slot_num)
1720 {
1721 int status = 0;
1722 struct ocfs2_dinode *la_copy = NULL;
1723 struct ocfs2_dinode *tl_copy = NULL;
1724
1725 trace_ocfs2_recover_node(node_num, slot_num, osb->node_num);
1726
1727
1728
1729 BUG_ON(osb->node_num == node_num);
1730
1731 status = ocfs2_replay_journal(osb, node_num, slot_num);
1732 if (status < 0) {
1733 if (status == -EBUSY) {
1734 trace_ocfs2_recover_node_skip(slot_num, node_num);
1735 status = 0;
1736 goto done;
1737 }
1738 mlog_errno(status);
1739 goto done;
1740 }
1741
1742
1743 status = ocfs2_begin_local_alloc_recovery(osb, slot_num, &la_copy);
1744 if (status < 0) {
1745 mlog_errno(status);
1746 goto done;
1747 }
1748
1749
1750
1751
1752 status = ocfs2_begin_truncate_log_recovery(osb, slot_num, &tl_copy);
1753 if (status < 0)
1754 mlog_errno(status);
1755
1756
1757
1758 status = ocfs2_clear_slot(osb, slot_num);
1759 if (status < 0)
1760 mlog_errno(status);
1761
1762
1763 ocfs2_queue_recovery_completion(osb->journal, slot_num, la_copy,
1764 tl_copy, NULL, ORPHAN_NEED_TRUNCATE);
1765
1766 status = 0;
1767 done:
1768
1769 return status;
1770 }
1771
1772
1773
1774
1775 static int ocfs2_trylock_journal(struct ocfs2_super *osb,
1776 int slot_num)
1777 {
1778 int status, flags;
1779 struct inode *inode = NULL;
1780
1781 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
1782 slot_num);
1783 if (inode == NULL) {
1784 mlog(ML_ERROR, "access error\n");
1785 status = -EACCES;
1786 goto bail;
1787 }
1788 if (is_bad_inode(inode)) {
1789 mlog(ML_ERROR, "access error (bad inode)\n");
1790 iput(inode);
1791 inode = NULL;
1792 status = -EACCES;
1793 goto bail;
1794 }
1795 SET_INODE_JOURNAL(inode);
1796
1797 flags = OCFS2_META_LOCK_RECOVERY | OCFS2_META_LOCK_NOQUEUE;
1798 status = ocfs2_inode_lock_full(inode, NULL, 1, flags);
1799 if (status < 0) {
1800 if (status != -EAGAIN)
1801 mlog_errno(status);
1802 goto bail;
1803 }
1804
1805 ocfs2_inode_unlock(inode, 1);
1806 bail:
1807 iput(inode);
1808
1809 return status;
1810 }
1811
1812
1813
1814 int ocfs2_mark_dead_nodes(struct ocfs2_super *osb)
1815 {
1816 unsigned int node_num;
1817 int status, i;
1818 u32 gen;
1819 struct buffer_head *bh = NULL;
1820 struct ocfs2_dinode *di;
1821
1822
1823
1824
1825 for (i = 0; i < osb->max_slots; i++) {
1826
1827 status = ocfs2_read_journal_inode(osb, i, &bh, NULL);
1828 if (status) {
1829 mlog_errno(status);
1830 goto bail;
1831 }
1832 di = (struct ocfs2_dinode *)bh->b_data;
1833 gen = ocfs2_get_recovery_generation(di);
1834 brelse(bh);
1835 bh = NULL;
1836
1837 spin_lock(&osb->osb_lock);
1838 osb->slot_recovery_generations[i] = gen;
1839
1840 trace_ocfs2_mark_dead_nodes(i,
1841 osb->slot_recovery_generations[i]);
1842
1843 if (i == osb->slot_num) {
1844 spin_unlock(&osb->osb_lock);
1845 continue;
1846 }
1847
1848 status = ocfs2_slot_to_node_num_locked(osb, i, &node_num);
1849 if (status == -ENOENT) {
1850 spin_unlock(&osb->osb_lock);
1851 continue;
1852 }
1853
1854 if (__ocfs2_recovery_map_test(osb, node_num)) {
1855 spin_unlock(&osb->osb_lock);
1856 continue;
1857 }
1858 spin_unlock(&osb->osb_lock);
1859
1860
1861
1862
1863 status = ocfs2_trylock_journal(osb, i);
1864 if (!status) {
1865
1866
1867
1868 ocfs2_recovery_thread(osb, node_num);
1869 } else if ((status < 0) && (status != -EAGAIN)) {
1870 mlog_errno(status);
1871 goto bail;
1872 }
1873 }
1874
1875 status = 0;
1876 bail:
1877 return status;
1878 }
1879
1880
1881
1882
1883
1884
1885 static inline unsigned long ocfs2_orphan_scan_timeout(void)
1886 {
1887 unsigned long time;
1888
1889 get_random_bytes(&time, sizeof(time));
1890 time = ORPHAN_SCAN_SCHEDULE_TIMEOUT + (time % 5000);
1891 return msecs_to_jiffies(time);
1892 }
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921 static void ocfs2_queue_orphan_scan(struct ocfs2_super *osb)
1922 {
1923 struct ocfs2_orphan_scan *os;
1924 int status, i;
1925 u32 seqno = 0;
1926
1927 os = &osb->osb_orphan_scan;
1928
1929 if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE)
1930 goto out;
1931
1932 trace_ocfs2_queue_orphan_scan_begin(os->os_count, os->os_seqno,
1933 atomic_read(&os->os_state));
1934
1935 status = ocfs2_orphan_scan_lock(osb, &seqno);
1936 if (status < 0) {
1937 if (status != -EAGAIN)
1938 mlog_errno(status);
1939 goto out;
1940 }
1941
1942
1943 if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE)
1944 goto unlock;
1945
1946 if (os->os_seqno != seqno) {
1947 os->os_seqno = seqno;
1948 goto unlock;
1949 }
1950
1951 for (i = 0; i < osb->max_slots; i++)
1952 ocfs2_queue_recovery_completion(osb->journal, i, NULL, NULL,
1953 NULL, ORPHAN_NO_NEED_TRUNCATE);
1954
1955
1956
1957
1958 seqno++;
1959 os->os_count++;
1960 os->os_scantime = ktime_get_seconds();
1961 unlock:
1962 ocfs2_orphan_scan_unlock(osb, seqno);
1963 out:
1964 trace_ocfs2_queue_orphan_scan_end(os->os_count, os->os_seqno,
1965 atomic_read(&os->os_state));
1966 return;
1967 }
1968
1969
1970 static void ocfs2_orphan_scan_work(struct work_struct *work)
1971 {
1972 struct ocfs2_orphan_scan *os;
1973 struct ocfs2_super *osb;
1974
1975 os = container_of(work, struct ocfs2_orphan_scan,
1976 os_orphan_scan_work.work);
1977 osb = os->os_osb;
1978
1979 mutex_lock(&os->os_lock);
1980 ocfs2_queue_orphan_scan(osb);
1981 if (atomic_read(&os->os_state) == ORPHAN_SCAN_ACTIVE)
1982 queue_delayed_work(osb->ocfs2_wq, &os->os_orphan_scan_work,
1983 ocfs2_orphan_scan_timeout());
1984 mutex_unlock(&os->os_lock);
1985 }
1986
1987 void ocfs2_orphan_scan_stop(struct ocfs2_super *osb)
1988 {
1989 struct ocfs2_orphan_scan *os;
1990
1991 os = &osb->osb_orphan_scan;
1992 if (atomic_read(&os->os_state) == ORPHAN_SCAN_ACTIVE) {
1993 atomic_set(&os->os_state, ORPHAN_SCAN_INACTIVE);
1994 mutex_lock(&os->os_lock);
1995 cancel_delayed_work(&os->os_orphan_scan_work);
1996 mutex_unlock(&os->os_lock);
1997 }
1998 }
1999
2000 void ocfs2_orphan_scan_init(struct ocfs2_super *osb)
2001 {
2002 struct ocfs2_orphan_scan *os;
2003
2004 os = &osb->osb_orphan_scan;
2005 os->os_osb = osb;
2006 os->os_count = 0;
2007 os->os_seqno = 0;
2008 mutex_init(&os->os_lock);
2009 INIT_DELAYED_WORK(&os->os_orphan_scan_work, ocfs2_orphan_scan_work);
2010 }
2011
2012 void ocfs2_orphan_scan_start(struct ocfs2_super *osb)
2013 {
2014 struct ocfs2_orphan_scan *os;
2015
2016 os = &osb->osb_orphan_scan;
2017 os->os_scantime = ktime_get_seconds();
2018 if (ocfs2_is_hard_readonly(osb) || ocfs2_mount_local(osb))
2019 atomic_set(&os->os_state, ORPHAN_SCAN_INACTIVE);
2020 else {
2021 atomic_set(&os->os_state, ORPHAN_SCAN_ACTIVE);
2022 queue_delayed_work(osb->ocfs2_wq, &os->os_orphan_scan_work,
2023 ocfs2_orphan_scan_timeout());
2024 }
2025 }
2026
2027 struct ocfs2_orphan_filldir_priv {
2028 struct dir_context ctx;
2029 struct inode *head;
2030 struct ocfs2_super *osb;
2031 enum ocfs2_orphan_reco_type orphan_reco_type;
2032 };
2033
2034 static int ocfs2_orphan_filldir(struct dir_context *ctx, const char *name,
2035 int name_len, loff_t pos, u64 ino,
2036 unsigned type)
2037 {
2038 struct ocfs2_orphan_filldir_priv *p =
2039 container_of(ctx, struct ocfs2_orphan_filldir_priv, ctx);
2040 struct inode *iter;
2041
2042 if (name_len == 1 && !strncmp(".", name, 1))
2043 return 0;
2044 if (name_len == 2 && !strncmp("..", name, 2))
2045 return 0;
2046
2047
2048 if ((p->orphan_reco_type == ORPHAN_NO_NEED_TRUNCATE) &&
2049 (!strncmp(name, OCFS2_DIO_ORPHAN_PREFIX,
2050 OCFS2_DIO_ORPHAN_PREFIX_LEN)))
2051 return 0;
2052
2053
2054 iter = ocfs2_iget(p->osb, ino,
2055 OCFS2_FI_FLAG_ORPHAN_RECOVERY, 0);
2056 if (IS_ERR(iter))
2057 return 0;
2058
2059 if (!strncmp(name, OCFS2_DIO_ORPHAN_PREFIX,
2060 OCFS2_DIO_ORPHAN_PREFIX_LEN))
2061 OCFS2_I(iter)->ip_flags |= OCFS2_INODE_DIO_ORPHAN_ENTRY;
2062
2063
2064
2065 if (OCFS2_I(iter)->ip_next_orphan) {
2066 iput(iter);
2067 return 0;
2068 }
2069
2070 trace_ocfs2_orphan_filldir((unsigned long long)OCFS2_I(iter)->ip_blkno);
2071
2072
2073 OCFS2_I(iter)->ip_next_orphan = p->head;
2074 p->head = iter;
2075
2076 return 0;
2077 }
2078
2079 static int ocfs2_queue_orphans(struct ocfs2_super *osb,
2080 int slot,
2081 struct inode **head,
2082 enum ocfs2_orphan_reco_type orphan_reco_type)
2083 {
2084 int status;
2085 struct inode *orphan_dir_inode = NULL;
2086 struct ocfs2_orphan_filldir_priv priv = {
2087 .ctx.actor = ocfs2_orphan_filldir,
2088 .osb = osb,
2089 .head = *head,
2090 .orphan_reco_type = orphan_reco_type
2091 };
2092
2093 orphan_dir_inode = ocfs2_get_system_file_inode(osb,
2094 ORPHAN_DIR_SYSTEM_INODE,
2095 slot);
2096 if (!orphan_dir_inode) {
2097 status = -ENOENT;
2098 mlog_errno(status);
2099 return status;
2100 }
2101
2102 inode_lock(orphan_dir_inode);
2103 status = ocfs2_inode_lock(orphan_dir_inode, NULL, 0);
2104 if (status < 0) {
2105 mlog_errno(status);
2106 goto out;
2107 }
2108
2109 status = ocfs2_dir_foreach(orphan_dir_inode, &priv.ctx);
2110 if (status) {
2111 mlog_errno(status);
2112 goto out_cluster;
2113 }
2114
2115 *head = priv.head;
2116
2117 out_cluster:
2118 ocfs2_inode_unlock(orphan_dir_inode, 0);
2119 out:
2120 inode_unlock(orphan_dir_inode);
2121 iput(orphan_dir_inode);
2122 return status;
2123 }
2124
2125 static int ocfs2_orphan_recovery_can_continue(struct ocfs2_super *osb,
2126 int slot)
2127 {
2128 int ret;
2129
2130 spin_lock(&osb->osb_lock);
2131 ret = !osb->osb_orphan_wipes[slot];
2132 spin_unlock(&osb->osb_lock);
2133 return ret;
2134 }
2135
2136 static void ocfs2_mark_recovering_orphan_dir(struct ocfs2_super *osb,
2137 int slot)
2138 {
2139 spin_lock(&osb->osb_lock);
2140
2141
2142 ocfs2_node_map_set_bit(osb, &osb->osb_recovering_orphan_dirs, slot);
2143 while (osb->osb_orphan_wipes[slot]) {
2144
2145
2146
2147 spin_unlock(&osb->osb_lock);
2148 wait_event_interruptible(osb->osb_wipe_event,
2149 ocfs2_orphan_recovery_can_continue(osb, slot));
2150 spin_lock(&osb->osb_lock);
2151 }
2152 spin_unlock(&osb->osb_lock);
2153 }
2154
2155 static void ocfs2_clear_recovering_orphan_dir(struct ocfs2_super *osb,
2156 int slot)
2157 {
2158 ocfs2_node_map_clear_bit(osb, &osb->osb_recovering_orphan_dirs, slot);
2159 }
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179 static int ocfs2_recover_orphans(struct ocfs2_super *osb,
2180 int slot,
2181 enum ocfs2_orphan_reco_type orphan_reco_type)
2182 {
2183 int ret = 0;
2184 struct inode *inode = NULL;
2185 struct inode *iter;
2186 struct ocfs2_inode_info *oi;
2187 struct buffer_head *di_bh = NULL;
2188 struct ocfs2_dinode *di = NULL;
2189
2190 trace_ocfs2_recover_orphans(slot);
2191
2192 ocfs2_mark_recovering_orphan_dir(osb, slot);
2193 ret = ocfs2_queue_orphans(osb, slot, &inode, orphan_reco_type);
2194 ocfs2_clear_recovering_orphan_dir(osb, slot);
2195
2196
2197
2198 if (ret)
2199 mlog_errno(ret);
2200
2201 while (inode) {
2202 oi = OCFS2_I(inode);
2203 trace_ocfs2_recover_orphans_iput(
2204 (unsigned long long)oi->ip_blkno);
2205
2206 iter = oi->ip_next_orphan;
2207 oi->ip_next_orphan = NULL;
2208
2209 if (oi->ip_flags & OCFS2_INODE_DIO_ORPHAN_ENTRY) {
2210 inode_lock(inode);
2211 ret = ocfs2_rw_lock(inode, 1);
2212 if (ret < 0) {
2213 mlog_errno(ret);
2214 goto unlock_mutex;
2215 }
2216
2217
2218
2219
2220 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2221 if (ret) {
2222 mlog_errno(ret);
2223 goto unlock_rw;
2224 }
2225
2226 di = (struct ocfs2_dinode *)di_bh->b_data;
2227
2228 if (di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL)) {
2229 ret = ocfs2_truncate_file(inode, di_bh,
2230 i_size_read(inode));
2231 if (ret < 0) {
2232 if (ret != -ENOSPC)
2233 mlog_errno(ret);
2234 goto unlock_inode;
2235 }
2236
2237 ret = ocfs2_del_inode_from_orphan(osb, inode,
2238 di_bh, 0, 0);
2239 if (ret)
2240 mlog_errno(ret);
2241 }
2242 unlock_inode:
2243 ocfs2_inode_unlock(inode, 1);
2244 brelse(di_bh);
2245 di_bh = NULL;
2246 unlock_rw:
2247 ocfs2_rw_unlock(inode, 1);
2248 unlock_mutex:
2249 inode_unlock(inode);
2250
2251
2252 oi->ip_flags &= ~OCFS2_INODE_DIO_ORPHAN_ENTRY;
2253 } else {
2254 spin_lock(&oi->ip_lock);
2255
2256
2257 oi->ip_flags |= OCFS2_INODE_MAYBE_ORPHANED;
2258 spin_unlock(&oi->ip_lock);
2259 }
2260
2261 iput(inode);
2262 inode = iter;
2263 }
2264
2265 return ret;
2266 }
2267
2268 static int __ocfs2_wait_on_mount(struct ocfs2_super *osb, int quota)
2269 {
2270
2271
2272
2273 wait_event(osb->osb_mount_event,
2274 (!quota && atomic_read(&osb->vol_state) == VOLUME_MOUNTED) ||
2275 atomic_read(&osb->vol_state) == VOLUME_MOUNTED_QUOTAS ||
2276 atomic_read(&osb->vol_state) == VOLUME_DISABLED);
2277
2278
2279
2280
2281 if (atomic_read(&osb->vol_state) == VOLUME_DISABLED) {
2282 trace_ocfs2_wait_on_mount(VOLUME_DISABLED);
2283 mlog(0, "mount error, exiting!\n");
2284 return -EBUSY;
2285 }
2286
2287 return 0;
2288 }
2289
2290 static int ocfs2_commit_thread(void *arg)
2291 {
2292 int status;
2293 struct ocfs2_super *osb = arg;
2294 struct ocfs2_journal *journal = osb->journal;
2295
2296
2297
2298
2299
2300 while (!(kthread_should_stop() &&
2301 atomic_read(&journal->j_num_trans) == 0)) {
2302
2303 wait_event_interruptible(osb->checkpoint_event,
2304 atomic_read(&journal->j_num_trans)
2305 || kthread_should_stop());
2306
2307 status = ocfs2_commit_cache(osb);
2308 if (status < 0) {
2309 static unsigned long abort_warn_time;
2310
2311
2312 if (printk_timed_ratelimit(&abort_warn_time, 60*HZ))
2313 mlog(ML_ERROR, "status = %d, journal is "
2314 "already aborted.\n", status);
2315
2316
2317
2318
2319
2320 msleep_interruptible(1000);
2321 }
2322
2323 if (kthread_should_stop() && atomic_read(&journal->j_num_trans)){
2324 mlog(ML_KTHREAD,
2325 "commit_thread: %u transactions pending on "
2326 "shutdown\n",
2327 atomic_read(&journal->j_num_trans));
2328 }
2329 }
2330
2331 return 0;
2332 }
2333
2334
2335
2336
2337
2338
2339 int ocfs2_check_journals_nolocks(struct ocfs2_super *osb)
2340 {
2341 int ret = 0;
2342 unsigned int slot;
2343 struct buffer_head *di_bh = NULL;
2344 struct ocfs2_dinode *di;
2345 int journal_dirty = 0;
2346
2347 for(slot = 0; slot < osb->max_slots; slot++) {
2348 ret = ocfs2_read_journal_inode(osb, slot, &di_bh, NULL);
2349 if (ret) {
2350 mlog_errno(ret);
2351 goto out;
2352 }
2353
2354 di = (struct ocfs2_dinode *) di_bh->b_data;
2355
2356 osb->slot_recovery_generations[slot] =
2357 ocfs2_get_recovery_generation(di);
2358
2359 if (le32_to_cpu(di->id1.journal1.ij_flags) &
2360 OCFS2_JOURNAL_DIRTY_FL)
2361 journal_dirty = 1;
2362
2363 brelse(di_bh);
2364 di_bh = NULL;
2365 }
2366
2367 out:
2368 if (journal_dirty)
2369 ret = -EROFS;
2370 return ret;
2371 }