0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/fs.h>
0011 #include <linux/types.h>
0012 #include <linux/slab.h>
0013 #include <linux/highmem.h>
0014 #include <linux/kthread.h>
0015 #include <linux/time.h>
0016 #include <linux/random.h>
0017 #include <linux/delay.h>
0018
0019 #include <cluster/masklog.h>
0020
0021 #include "ocfs2.h"
0022
0023 #include "alloc.h"
0024 #include "blockcheck.h"
0025 #include "dir.h"
0026 #include "dlmglue.h"
0027 #include "extent_map.h"
0028 #include "heartbeat.h"
0029 #include "inode.h"
0030 #include "journal.h"
0031 #include "localalloc.h"
0032 #include "slot_map.h"
0033 #include "super.h"
0034 #include "sysfile.h"
0035 #include "uptodate.h"
0036 #include "quota.h"
0037 #include "file.h"
0038 #include "namei.h"
0039
0040 #include "buffer_head_io.h"
0041 #include "ocfs2_trace.h"
0042
0043 DEFINE_SPINLOCK(trans_inc_lock);
0044
0045 #define ORPHAN_SCAN_SCHEDULE_TIMEOUT 300000
0046
0047 static int ocfs2_force_read_journal(struct inode *inode);
0048 static int ocfs2_recover_node(struct ocfs2_super *osb,
0049 int node_num, int slot_num);
0050 static int __ocfs2_recovery_thread(void *arg);
0051 static int ocfs2_commit_cache(struct ocfs2_super *osb);
0052 static int __ocfs2_wait_on_mount(struct ocfs2_super *osb, int quota);
0053 static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb,
0054 int dirty, int replayed);
0055 static int ocfs2_trylock_journal(struct ocfs2_super *osb,
0056 int slot_num);
0057 static int ocfs2_recover_orphans(struct ocfs2_super *osb,
0058 int slot,
0059 enum ocfs2_orphan_reco_type orphan_reco_type);
0060 static int ocfs2_commit_thread(void *arg);
0061 static void ocfs2_queue_recovery_completion(struct ocfs2_journal *journal,
0062 int slot_num,
0063 struct ocfs2_dinode *la_dinode,
0064 struct ocfs2_dinode *tl_dinode,
0065 struct ocfs2_quota_recovery *qrec,
0066 enum ocfs2_orphan_reco_type orphan_reco_type);
0067
0068 static inline int ocfs2_wait_on_mount(struct ocfs2_super *osb)
0069 {
0070 return __ocfs2_wait_on_mount(osb, 0);
0071 }
0072
0073 static inline int ocfs2_wait_on_quotas(struct ocfs2_super *osb)
0074 {
0075 return __ocfs2_wait_on_mount(osb, 1);
0076 }
0077
0078
0079
0080
0081
0082
0083 enum ocfs2_replay_state {
0084 REPLAY_UNNEEDED = 0,
0085 REPLAY_NEEDED,
0086 REPLAY_DONE
0087 };
0088
0089 struct ocfs2_replay_map {
0090 unsigned int rm_slots;
0091 enum ocfs2_replay_state rm_state;
0092 unsigned char rm_replay_slots[];
0093 };
0094
0095 static void ocfs2_replay_map_set_state(struct ocfs2_super *osb, int state)
0096 {
0097 if (!osb->replay_map)
0098 return;
0099
0100
0101 if (osb->replay_map->rm_state == REPLAY_DONE)
0102 return;
0103
0104 osb->replay_map->rm_state = state;
0105 }
0106
0107 int ocfs2_compute_replay_slots(struct ocfs2_super *osb)
0108 {
0109 struct ocfs2_replay_map *replay_map;
0110 int i, node_num;
0111
0112
0113 if (osb->replay_map)
0114 return 0;
0115
0116 replay_map = kzalloc(sizeof(struct ocfs2_replay_map) +
0117 (osb->max_slots * sizeof(char)), GFP_KERNEL);
0118
0119 if (!replay_map) {
0120 mlog_errno(-ENOMEM);
0121 return -ENOMEM;
0122 }
0123
0124 spin_lock(&osb->osb_lock);
0125
0126 replay_map->rm_slots = osb->max_slots;
0127 replay_map->rm_state = REPLAY_UNNEEDED;
0128
0129
0130 for (i = 0; i < replay_map->rm_slots; i++) {
0131 if (ocfs2_slot_to_node_num_locked(osb, i, &node_num) == -ENOENT)
0132 replay_map->rm_replay_slots[i] = 1;
0133 }
0134
0135 osb->replay_map = replay_map;
0136 spin_unlock(&osb->osb_lock);
0137 return 0;
0138 }
0139
0140 static void ocfs2_queue_replay_slots(struct ocfs2_super *osb,
0141 enum ocfs2_orphan_reco_type orphan_reco_type)
0142 {
0143 struct ocfs2_replay_map *replay_map = osb->replay_map;
0144 int i;
0145
0146 if (!replay_map)
0147 return;
0148
0149 if (replay_map->rm_state != REPLAY_NEEDED)
0150 return;
0151
0152 for (i = 0; i < replay_map->rm_slots; i++)
0153 if (replay_map->rm_replay_slots[i])
0154 ocfs2_queue_recovery_completion(osb->journal, i, NULL,
0155 NULL, NULL,
0156 orphan_reco_type);
0157 replay_map->rm_state = REPLAY_DONE;
0158 }
0159
0160 static void ocfs2_free_replay_slots(struct ocfs2_super *osb)
0161 {
0162 struct ocfs2_replay_map *replay_map = osb->replay_map;
0163
0164 if (!osb->replay_map)
0165 return;
0166
0167 kfree(replay_map);
0168 osb->replay_map = NULL;
0169 }
0170
0171 int ocfs2_recovery_init(struct ocfs2_super *osb)
0172 {
0173 struct ocfs2_recovery_map *rm;
0174
0175 mutex_init(&osb->recovery_lock);
0176 osb->disable_recovery = 0;
0177 osb->recovery_thread_task = NULL;
0178 init_waitqueue_head(&osb->recovery_event);
0179
0180 rm = kzalloc(sizeof(struct ocfs2_recovery_map) +
0181 osb->max_slots * sizeof(unsigned int),
0182 GFP_KERNEL);
0183 if (!rm) {
0184 mlog_errno(-ENOMEM);
0185 return -ENOMEM;
0186 }
0187
0188 rm->rm_entries = (unsigned int *)((char *)rm +
0189 sizeof(struct ocfs2_recovery_map));
0190 osb->recovery_map = rm;
0191
0192 return 0;
0193 }
0194
0195
0196
0197
0198 static int ocfs2_recovery_thread_running(struct ocfs2_super *osb)
0199 {
0200 mb();
0201 return osb->recovery_thread_task != NULL;
0202 }
0203
0204 void ocfs2_recovery_exit(struct ocfs2_super *osb)
0205 {
0206 struct ocfs2_recovery_map *rm;
0207
0208
0209
0210 mutex_lock(&osb->recovery_lock);
0211 osb->disable_recovery = 1;
0212 mutex_unlock(&osb->recovery_lock);
0213 wait_event(osb->recovery_event, !ocfs2_recovery_thread_running(osb));
0214
0215
0216
0217
0218 if (osb->ocfs2_wq)
0219 flush_workqueue(osb->ocfs2_wq);
0220
0221
0222
0223
0224
0225 rm = osb->recovery_map;
0226
0227
0228 kfree(rm);
0229 }
0230
0231 static int __ocfs2_recovery_map_test(struct ocfs2_super *osb,
0232 unsigned int node_num)
0233 {
0234 int i;
0235 struct ocfs2_recovery_map *rm = osb->recovery_map;
0236
0237 assert_spin_locked(&osb->osb_lock);
0238
0239 for (i = 0; i < rm->rm_used; i++) {
0240 if (rm->rm_entries[i] == node_num)
0241 return 1;
0242 }
0243
0244 return 0;
0245 }
0246
0247
0248 static int ocfs2_recovery_map_set(struct ocfs2_super *osb,
0249 unsigned int node_num)
0250 {
0251 struct ocfs2_recovery_map *rm = osb->recovery_map;
0252
0253 spin_lock(&osb->osb_lock);
0254 if (__ocfs2_recovery_map_test(osb, node_num)) {
0255 spin_unlock(&osb->osb_lock);
0256 return 1;
0257 }
0258
0259
0260 BUG_ON(rm->rm_used >= osb->max_slots);
0261
0262 rm->rm_entries[rm->rm_used] = node_num;
0263 rm->rm_used++;
0264 spin_unlock(&osb->osb_lock);
0265
0266 return 0;
0267 }
0268
0269 static void ocfs2_recovery_map_clear(struct ocfs2_super *osb,
0270 unsigned int node_num)
0271 {
0272 int i;
0273 struct ocfs2_recovery_map *rm = osb->recovery_map;
0274
0275 spin_lock(&osb->osb_lock);
0276
0277 for (i = 0; i < rm->rm_used; i++) {
0278 if (rm->rm_entries[i] == node_num)
0279 break;
0280 }
0281
0282 if (i < rm->rm_used) {
0283
0284 memmove(&(rm->rm_entries[i]), &(rm->rm_entries[i + 1]),
0285 (rm->rm_used - i - 1) * sizeof(unsigned int));
0286 rm->rm_used--;
0287 }
0288
0289 spin_unlock(&osb->osb_lock);
0290 }
0291
0292 static int ocfs2_commit_cache(struct ocfs2_super *osb)
0293 {
0294 int status = 0;
0295 unsigned int flushed;
0296 struct ocfs2_journal *journal = NULL;
0297
0298 journal = osb->journal;
0299
0300
0301 down_write(&journal->j_trans_barrier);
0302
0303 flushed = atomic_read(&journal->j_num_trans);
0304 trace_ocfs2_commit_cache_begin(flushed);
0305 if (flushed == 0) {
0306 up_write(&journal->j_trans_barrier);
0307 goto finally;
0308 }
0309
0310 jbd2_journal_lock_updates(journal->j_journal);
0311 status = jbd2_journal_flush(journal->j_journal, 0);
0312 jbd2_journal_unlock_updates(journal->j_journal);
0313 if (status < 0) {
0314 up_write(&journal->j_trans_barrier);
0315 mlog_errno(status);
0316 goto finally;
0317 }
0318
0319 ocfs2_inc_trans_id(journal);
0320
0321 flushed = atomic_read(&journal->j_num_trans);
0322 atomic_set(&journal->j_num_trans, 0);
0323 up_write(&journal->j_trans_barrier);
0324
0325 trace_ocfs2_commit_cache_end(journal->j_trans_id, flushed);
0326
0327 ocfs2_wake_downconvert_thread(osb);
0328 wake_up(&journal->j_checkpointed);
0329 finally:
0330 return status;
0331 }
0332
0333 handle_t *ocfs2_start_trans(struct ocfs2_super *osb, int max_buffs)
0334 {
0335 journal_t *journal = osb->journal->j_journal;
0336 handle_t *handle;
0337
0338 BUG_ON(!osb || !osb->journal->j_journal);
0339
0340 if (ocfs2_is_hard_readonly(osb))
0341 return ERR_PTR(-EROFS);
0342
0343 BUG_ON(osb->journal->j_state == OCFS2_JOURNAL_FREE);
0344 BUG_ON(max_buffs <= 0);
0345
0346
0347 if (journal_current_handle())
0348 return jbd2_journal_start(journal, max_buffs);
0349
0350 sb_start_intwrite(osb->sb);
0351
0352 down_read(&osb->journal->j_trans_barrier);
0353
0354 handle = jbd2_journal_start(journal, max_buffs);
0355 if (IS_ERR(handle)) {
0356 up_read(&osb->journal->j_trans_barrier);
0357 sb_end_intwrite(osb->sb);
0358
0359 mlog_errno(PTR_ERR(handle));
0360
0361 if (is_journal_aborted(journal)) {
0362 ocfs2_abort(osb->sb, "Detected aborted journal\n");
0363 handle = ERR_PTR(-EROFS);
0364 }
0365 } else {
0366 if (!ocfs2_mount_local(osb))
0367 atomic_inc(&(osb->journal->j_num_trans));
0368 }
0369
0370 return handle;
0371 }
0372
0373 int ocfs2_commit_trans(struct ocfs2_super *osb,
0374 handle_t *handle)
0375 {
0376 int ret, nested;
0377 struct ocfs2_journal *journal = osb->journal;
0378
0379 BUG_ON(!handle);
0380
0381 nested = handle->h_ref > 1;
0382 ret = jbd2_journal_stop(handle);
0383 if (ret < 0)
0384 mlog_errno(ret);
0385
0386 if (!nested) {
0387 up_read(&journal->j_trans_barrier);
0388 sb_end_intwrite(osb->sb);
0389 }
0390
0391 return ret;
0392 }
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411 int ocfs2_extend_trans(handle_t *handle, int nblocks)
0412 {
0413 int status, old_nblocks;
0414
0415 BUG_ON(!handle);
0416 BUG_ON(nblocks < 0);
0417
0418 if (!nblocks)
0419 return 0;
0420
0421 old_nblocks = jbd2_handle_buffer_credits(handle);
0422
0423 trace_ocfs2_extend_trans(old_nblocks, nblocks);
0424
0425 #ifdef CONFIG_OCFS2_DEBUG_FS
0426 status = 1;
0427 #else
0428 status = jbd2_journal_extend(handle, nblocks, 0);
0429 if (status < 0) {
0430 mlog_errno(status);
0431 goto bail;
0432 }
0433 #endif
0434
0435 if (status > 0) {
0436 trace_ocfs2_extend_trans_restart(old_nblocks + nblocks);
0437 status = jbd2_journal_restart(handle,
0438 old_nblocks + nblocks);
0439 if (status < 0) {
0440 mlog_errno(status);
0441 goto bail;
0442 }
0443 }
0444
0445 status = 0;
0446 bail:
0447 return status;
0448 }
0449
0450
0451
0452
0453
0454
0455
0456 int ocfs2_allocate_extend_trans(handle_t *handle, int thresh)
0457 {
0458 int status, old_nblks;
0459
0460 BUG_ON(!handle);
0461
0462 old_nblks = jbd2_handle_buffer_credits(handle);
0463 trace_ocfs2_allocate_extend_trans(old_nblks, thresh);
0464
0465 if (old_nblks < thresh)
0466 return 0;
0467
0468 status = jbd2_journal_extend(handle, OCFS2_MAX_TRANS_DATA, 0);
0469 if (status < 0) {
0470 mlog_errno(status);
0471 goto bail;
0472 }
0473
0474 if (status > 0) {
0475 status = jbd2_journal_restart(handle, OCFS2_MAX_TRANS_DATA);
0476 if (status < 0)
0477 mlog_errno(status);
0478 }
0479
0480 bail:
0481 return status;
0482 }
0483
0484
0485 struct ocfs2_triggers {
0486 struct jbd2_buffer_trigger_type ot_triggers;
0487 int ot_offset;
0488 };
0489
0490 static inline struct ocfs2_triggers *to_ocfs2_trigger(struct jbd2_buffer_trigger_type *triggers)
0491 {
0492 return container_of(triggers, struct ocfs2_triggers, ot_triggers);
0493 }
0494
0495 static void ocfs2_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
0496 struct buffer_head *bh,
0497 void *data, size_t size)
0498 {
0499 struct ocfs2_triggers *ot = to_ocfs2_trigger(triggers);
0500
0501
0502
0503
0504
0505
0506
0507 ocfs2_block_check_compute(data, size, data + ot->ot_offset);
0508 }
0509
0510
0511
0512
0513
0514 static void ocfs2_dq_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
0515 struct buffer_head *bh,
0516 void *data, size_t size)
0517 {
0518 struct ocfs2_disk_dqtrailer *dqt =
0519 ocfs2_block_dqtrailer(size, data);
0520
0521
0522
0523
0524
0525
0526
0527 ocfs2_block_check_compute(data, size, &dqt->dq_check);
0528 }
0529
0530
0531
0532
0533
0534 static void ocfs2_db_frozen_trigger(struct jbd2_buffer_trigger_type *triggers,
0535 struct buffer_head *bh,
0536 void *data, size_t size)
0537 {
0538 struct ocfs2_dir_block_trailer *trailer =
0539 ocfs2_dir_trailer_from_size(size, data);
0540
0541
0542
0543
0544
0545
0546
0547 ocfs2_block_check_compute(data, size, &trailer->db_check);
0548 }
0549
0550 static void ocfs2_abort_trigger(struct jbd2_buffer_trigger_type *triggers,
0551 struct buffer_head *bh)
0552 {
0553 mlog(ML_ERROR,
0554 "ocfs2_abort_trigger called by JBD2. bh = 0x%lx, "
0555 "bh->b_blocknr = %llu\n",
0556 (unsigned long)bh,
0557 (unsigned long long)bh->b_blocknr);
0558
0559 ocfs2_error(bh->b_bdev->bd_super,
0560 "JBD2 has aborted our journal, ocfs2 cannot continue\n");
0561 }
0562
0563 static struct ocfs2_triggers di_triggers = {
0564 .ot_triggers = {
0565 .t_frozen = ocfs2_frozen_trigger,
0566 .t_abort = ocfs2_abort_trigger,
0567 },
0568 .ot_offset = offsetof(struct ocfs2_dinode, i_check),
0569 };
0570
0571 static struct ocfs2_triggers eb_triggers = {
0572 .ot_triggers = {
0573 .t_frozen = ocfs2_frozen_trigger,
0574 .t_abort = ocfs2_abort_trigger,
0575 },
0576 .ot_offset = offsetof(struct ocfs2_extent_block, h_check),
0577 };
0578
0579 static struct ocfs2_triggers rb_triggers = {
0580 .ot_triggers = {
0581 .t_frozen = ocfs2_frozen_trigger,
0582 .t_abort = ocfs2_abort_trigger,
0583 },
0584 .ot_offset = offsetof(struct ocfs2_refcount_block, rf_check),
0585 };
0586
0587 static struct ocfs2_triggers gd_triggers = {
0588 .ot_triggers = {
0589 .t_frozen = ocfs2_frozen_trigger,
0590 .t_abort = ocfs2_abort_trigger,
0591 },
0592 .ot_offset = offsetof(struct ocfs2_group_desc, bg_check),
0593 };
0594
0595 static struct ocfs2_triggers db_triggers = {
0596 .ot_triggers = {
0597 .t_frozen = ocfs2_db_frozen_trigger,
0598 .t_abort = ocfs2_abort_trigger,
0599 },
0600 };
0601
0602 static struct ocfs2_triggers xb_triggers = {
0603 .ot_triggers = {
0604 .t_frozen = ocfs2_frozen_trigger,
0605 .t_abort = ocfs2_abort_trigger,
0606 },
0607 .ot_offset = offsetof(struct ocfs2_xattr_block, xb_check),
0608 };
0609
0610 static struct ocfs2_triggers dq_triggers = {
0611 .ot_triggers = {
0612 .t_frozen = ocfs2_dq_frozen_trigger,
0613 .t_abort = ocfs2_abort_trigger,
0614 },
0615 };
0616
0617 static struct ocfs2_triggers dr_triggers = {
0618 .ot_triggers = {
0619 .t_frozen = ocfs2_frozen_trigger,
0620 .t_abort = ocfs2_abort_trigger,
0621 },
0622 .ot_offset = offsetof(struct ocfs2_dx_root_block, dr_check),
0623 };
0624
0625 static struct ocfs2_triggers dl_triggers = {
0626 .ot_triggers = {
0627 .t_frozen = ocfs2_frozen_trigger,
0628 .t_abort = ocfs2_abort_trigger,
0629 },
0630 .ot_offset = offsetof(struct ocfs2_dx_leaf, dl_check),
0631 };
0632
0633 static int __ocfs2_journal_access(handle_t *handle,
0634 struct ocfs2_caching_info *ci,
0635 struct buffer_head *bh,
0636 struct ocfs2_triggers *triggers,
0637 int type)
0638 {
0639 int status;
0640 struct ocfs2_super *osb =
0641 OCFS2_SB(ocfs2_metadata_cache_get_super(ci));
0642
0643 BUG_ON(!ci || !ci->ci_ops);
0644 BUG_ON(!handle);
0645 BUG_ON(!bh);
0646
0647 trace_ocfs2_journal_access(
0648 (unsigned long long)ocfs2_metadata_cache_owner(ci),
0649 (unsigned long long)bh->b_blocknr, type, bh->b_size);
0650
0651
0652 if (!buffer_uptodate(bh)) {
0653 mlog(ML_ERROR, "giving me a buffer that's not uptodate!\n");
0654 mlog(ML_ERROR, "b_blocknr=%llu, b_state=0x%lx\n",
0655 (unsigned long long)bh->b_blocknr, bh->b_state);
0656
0657 lock_buffer(bh);
0658
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668 if (buffer_write_io_error(bh) && !buffer_uptodate(bh)) {
0669 unlock_buffer(bh);
0670 return ocfs2_error(osb->sb, "A previous attempt to "
0671 "write this buffer head failed\n");
0672 }
0673 unlock_buffer(bh);
0674 }
0675
0676
0677
0678
0679
0680
0681
0682 ocfs2_set_ci_lock_trans(osb->journal, ci);
0683
0684 ocfs2_metadata_cache_io_lock(ci);
0685 switch (type) {
0686 case OCFS2_JOURNAL_ACCESS_CREATE:
0687 case OCFS2_JOURNAL_ACCESS_WRITE:
0688 status = jbd2_journal_get_write_access(handle, bh);
0689 break;
0690
0691 case OCFS2_JOURNAL_ACCESS_UNDO:
0692 status = jbd2_journal_get_undo_access(handle, bh);
0693 break;
0694
0695 default:
0696 status = -EINVAL;
0697 mlog(ML_ERROR, "Unknown access type!\n");
0698 }
0699 if (!status && ocfs2_meta_ecc(osb) && triggers)
0700 jbd2_journal_set_triggers(bh, &triggers->ot_triggers);
0701 ocfs2_metadata_cache_io_unlock(ci);
0702
0703 if (status < 0)
0704 mlog(ML_ERROR, "Error %d getting %d access to buffer!\n",
0705 status, type);
0706
0707 return status;
0708 }
0709
0710 int ocfs2_journal_access_di(handle_t *handle, struct ocfs2_caching_info *ci,
0711 struct buffer_head *bh, int type)
0712 {
0713 return __ocfs2_journal_access(handle, ci, bh, &di_triggers, type);
0714 }
0715
0716 int ocfs2_journal_access_eb(handle_t *handle, struct ocfs2_caching_info *ci,
0717 struct buffer_head *bh, int type)
0718 {
0719 return __ocfs2_journal_access(handle, ci, bh, &eb_triggers, type);
0720 }
0721
0722 int ocfs2_journal_access_rb(handle_t *handle, struct ocfs2_caching_info *ci,
0723 struct buffer_head *bh, int type)
0724 {
0725 return __ocfs2_journal_access(handle, ci, bh, &rb_triggers,
0726 type);
0727 }
0728
0729 int ocfs2_journal_access_gd(handle_t *handle, struct ocfs2_caching_info *ci,
0730 struct buffer_head *bh, int type)
0731 {
0732 return __ocfs2_journal_access(handle, ci, bh, &gd_triggers, type);
0733 }
0734
0735 int ocfs2_journal_access_db(handle_t *handle, struct ocfs2_caching_info *ci,
0736 struct buffer_head *bh, int type)
0737 {
0738 return __ocfs2_journal_access(handle, ci, bh, &db_triggers, type);
0739 }
0740
0741 int ocfs2_journal_access_xb(handle_t *handle, struct ocfs2_caching_info *ci,
0742 struct buffer_head *bh, int type)
0743 {
0744 return __ocfs2_journal_access(handle, ci, bh, &xb_triggers, type);
0745 }
0746
0747 int ocfs2_journal_access_dq(handle_t *handle, struct ocfs2_caching_info *ci,
0748 struct buffer_head *bh, int type)
0749 {
0750 return __ocfs2_journal_access(handle, ci, bh, &dq_triggers, type);
0751 }
0752
0753 int ocfs2_journal_access_dr(handle_t *handle, struct ocfs2_caching_info *ci,
0754 struct buffer_head *bh, int type)
0755 {
0756 return __ocfs2_journal_access(handle, ci, bh, &dr_triggers, type);
0757 }
0758
0759 int ocfs2_journal_access_dl(handle_t *handle, struct ocfs2_caching_info *ci,
0760 struct buffer_head *bh, int type)
0761 {
0762 return __ocfs2_journal_access(handle, ci, bh, &dl_triggers, type);
0763 }
0764
0765 int ocfs2_journal_access(handle_t *handle, struct ocfs2_caching_info *ci,
0766 struct buffer_head *bh, int type)
0767 {
0768 return __ocfs2_journal_access(handle, ci, bh, NULL, type);
0769 }
0770
0771 void ocfs2_journal_dirty(handle_t *handle, struct buffer_head *bh)
0772 {
0773 int status;
0774
0775 trace_ocfs2_journal_dirty((unsigned long long)bh->b_blocknr);
0776
0777 status = jbd2_journal_dirty_metadata(handle, bh);
0778 if (status) {
0779 mlog_errno(status);
0780 if (!is_handle_aborted(handle)) {
0781 journal_t *journal = handle->h_transaction->t_journal;
0782 struct super_block *sb = bh->b_bdev->bd_super;
0783
0784 mlog(ML_ERROR, "jbd2_journal_dirty_metadata failed. "
0785 "Aborting transaction and journal.\n");
0786 handle->h_err = status;
0787 jbd2_journal_abort_handle(handle);
0788 jbd2_journal_abort(journal, status);
0789 ocfs2_abort(sb, "Journal already aborted.\n");
0790 }
0791 }
0792 }
0793
0794 #define OCFS2_DEFAULT_COMMIT_INTERVAL (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE)
0795
0796 void ocfs2_set_journal_params(struct ocfs2_super *osb)
0797 {
0798 journal_t *journal = osb->journal->j_journal;
0799 unsigned long commit_interval = OCFS2_DEFAULT_COMMIT_INTERVAL;
0800
0801 if (osb->osb_commit_interval)
0802 commit_interval = osb->osb_commit_interval;
0803
0804 write_lock(&journal->j_state_lock);
0805 journal->j_commit_interval = commit_interval;
0806 if (osb->s_mount_opt & OCFS2_MOUNT_BARRIER)
0807 journal->j_flags |= JBD2_BARRIER;
0808 else
0809 journal->j_flags &= ~JBD2_BARRIER;
0810 write_unlock(&journal->j_state_lock);
0811 }
0812
0813
0814
0815
0816
0817 int ocfs2_journal_alloc(struct ocfs2_super *osb)
0818 {
0819 int status = 0;
0820 struct ocfs2_journal *journal;
0821
0822 journal = kzalloc(sizeof(struct ocfs2_journal), GFP_KERNEL);
0823 if (!journal) {
0824 mlog(ML_ERROR, "unable to alloc journal\n");
0825 status = -ENOMEM;
0826 goto bail;
0827 }
0828 osb->journal = journal;
0829 journal->j_osb = osb;
0830
0831 atomic_set(&journal->j_num_trans, 0);
0832 init_rwsem(&journal->j_trans_barrier);
0833 init_waitqueue_head(&journal->j_checkpointed);
0834 spin_lock_init(&journal->j_lock);
0835 journal->j_trans_id = 1UL;
0836 INIT_LIST_HEAD(&journal->j_la_cleanups);
0837 INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery);
0838 journal->j_state = OCFS2_JOURNAL_FREE;
0839
0840 bail:
0841 return status;
0842 }
0843
0844 int ocfs2_journal_init(struct ocfs2_super *osb, int *dirty)
0845 {
0846 int status = -1;
0847 struct inode *inode = NULL;
0848 journal_t *j_journal = NULL;
0849 struct ocfs2_journal *journal = osb->journal;
0850 struct ocfs2_dinode *di = NULL;
0851 struct buffer_head *bh = NULL;
0852 int inode_lock = 0;
0853
0854 BUG_ON(!journal);
0855
0856 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
0857 osb->slot_num);
0858 if (inode == NULL) {
0859 status = -EACCES;
0860 mlog_errno(status);
0861 goto done;
0862 }
0863 if (is_bad_inode(inode)) {
0864 mlog(ML_ERROR, "access error (bad inode)\n");
0865 iput(inode);
0866 inode = NULL;
0867 status = -EACCES;
0868 goto done;
0869 }
0870
0871 SET_INODE_JOURNAL(inode);
0872 OCFS2_I(inode)->ip_open_count++;
0873
0874
0875
0876
0877 status = ocfs2_inode_lock_full(inode, &bh, 1, OCFS2_META_LOCK_RECOVERY);
0878 if (status < 0) {
0879 if (status != -ERESTARTSYS)
0880 mlog(ML_ERROR, "Could not get lock on journal!\n");
0881 goto done;
0882 }
0883
0884 inode_lock = 1;
0885 di = (struct ocfs2_dinode *)bh->b_data;
0886
0887 if (i_size_read(inode) < OCFS2_MIN_JOURNAL_SIZE) {
0888 mlog(ML_ERROR, "Journal file size (%lld) is too small!\n",
0889 i_size_read(inode));
0890 status = -EINVAL;
0891 goto done;
0892 }
0893
0894 trace_ocfs2_journal_init(i_size_read(inode),
0895 (unsigned long long)inode->i_blocks,
0896 OCFS2_I(inode)->ip_clusters);
0897
0898
0899 j_journal = jbd2_journal_init_inode(inode);
0900 if (j_journal == NULL) {
0901 mlog(ML_ERROR, "Linux journal layer error\n");
0902 status = -EINVAL;
0903 goto done;
0904 }
0905
0906 trace_ocfs2_journal_init_maxlen(j_journal->j_total_len);
0907
0908 *dirty = (le32_to_cpu(di->id1.journal1.ij_flags) &
0909 OCFS2_JOURNAL_DIRTY_FL);
0910
0911 journal->j_journal = j_journal;
0912 journal->j_journal->j_submit_inode_data_buffers =
0913 jbd2_journal_submit_inode_data_buffers;
0914 journal->j_journal->j_finish_inode_data_buffers =
0915 jbd2_journal_finish_inode_data_buffers;
0916 journal->j_inode = inode;
0917 journal->j_bh = bh;
0918
0919 ocfs2_set_journal_params(osb);
0920
0921 journal->j_state = OCFS2_JOURNAL_LOADED;
0922
0923 status = 0;
0924 done:
0925 if (status < 0) {
0926 if (inode_lock)
0927 ocfs2_inode_unlock(inode, 1);
0928 brelse(bh);
0929 if (inode) {
0930 OCFS2_I(inode)->ip_open_count--;
0931 iput(inode);
0932 }
0933 }
0934
0935 return status;
0936 }
0937
0938 static void ocfs2_bump_recovery_generation(struct ocfs2_dinode *di)
0939 {
0940 le32_add_cpu(&(di->id1.journal1.ij_recovery_generation), 1);
0941 }
0942
0943 static u32 ocfs2_get_recovery_generation(struct ocfs2_dinode *di)
0944 {
0945 return le32_to_cpu(di->id1.journal1.ij_recovery_generation);
0946 }
0947
0948 static int ocfs2_journal_toggle_dirty(struct ocfs2_super *osb,
0949 int dirty, int replayed)
0950 {
0951 int status;
0952 unsigned int flags;
0953 struct ocfs2_journal *journal = osb->journal;
0954 struct buffer_head *bh = journal->j_bh;
0955 struct ocfs2_dinode *fe;
0956
0957 fe = (struct ocfs2_dinode *)bh->b_data;
0958
0959
0960
0961
0962 BUG_ON(!OCFS2_IS_VALID_DINODE(fe));
0963
0964 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
0965 if (dirty)
0966 flags |= OCFS2_JOURNAL_DIRTY_FL;
0967 else
0968 flags &= ~OCFS2_JOURNAL_DIRTY_FL;
0969 fe->id1.journal1.ij_flags = cpu_to_le32(flags);
0970
0971 if (replayed)
0972 ocfs2_bump_recovery_generation(fe);
0973
0974 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &fe->i_check);
0975 status = ocfs2_write_block(osb, bh, INODE_CACHE(journal->j_inode));
0976 if (status < 0)
0977 mlog_errno(status);
0978
0979 return status;
0980 }
0981
0982
0983
0984
0985
0986 void ocfs2_journal_shutdown(struct ocfs2_super *osb)
0987 {
0988 struct ocfs2_journal *journal = NULL;
0989 int status = 0;
0990 struct inode *inode = NULL;
0991 int num_running_trans = 0;
0992
0993 BUG_ON(!osb);
0994
0995 journal = osb->journal;
0996 if (!journal)
0997 goto done;
0998
0999 inode = journal->j_inode;
1000
1001 if (journal->j_state != OCFS2_JOURNAL_LOADED)
1002 goto done;
1003
1004
1005 if (!igrab(inode))
1006 BUG();
1007
1008 num_running_trans = atomic_read(&(osb->journal->j_num_trans));
1009 trace_ocfs2_journal_shutdown(num_running_trans);
1010
1011
1012
1013
1014
1015 journal->j_state = OCFS2_JOURNAL_IN_SHUTDOWN;
1016
1017
1018
1019
1020 if (osb->commit_task) {
1021
1022 trace_ocfs2_journal_shutdown_wait(osb->commit_task);
1023 kthread_stop(osb->commit_task);
1024 osb->commit_task = NULL;
1025 }
1026
1027 BUG_ON(atomic_read(&(osb->journal->j_num_trans)) != 0);
1028
1029 if (ocfs2_mount_local(osb)) {
1030 jbd2_journal_lock_updates(journal->j_journal);
1031 status = jbd2_journal_flush(journal->j_journal, 0);
1032 jbd2_journal_unlock_updates(journal->j_journal);
1033 if (status < 0)
1034 mlog_errno(status);
1035 }
1036
1037
1038 if (!jbd2_journal_destroy(journal->j_journal) && !status) {
1039
1040
1041
1042
1043 status = ocfs2_journal_toggle_dirty(osb, 0, 0);
1044 if (status < 0)
1045 mlog_errno(status);
1046 }
1047 journal->j_journal = NULL;
1048
1049 OCFS2_I(inode)->ip_open_count--;
1050
1051
1052 ocfs2_inode_unlock(inode, 1);
1053
1054 brelse(journal->j_bh);
1055 journal->j_bh = NULL;
1056
1057 journal->j_state = OCFS2_JOURNAL_FREE;
1058
1059 done:
1060 iput(inode);
1061 kfree(journal);
1062 osb->journal = NULL;
1063 }
1064
1065 static void ocfs2_clear_journal_error(struct super_block *sb,
1066 journal_t *journal,
1067 int slot)
1068 {
1069 int olderr;
1070
1071 olderr = jbd2_journal_errno(journal);
1072 if (olderr) {
1073 mlog(ML_ERROR, "File system error %d recorded in "
1074 "journal %u.\n", olderr, slot);
1075 mlog(ML_ERROR, "File system on device %s needs checking.\n",
1076 sb->s_id);
1077
1078 jbd2_journal_ack_err(journal);
1079 jbd2_journal_clear_err(journal);
1080 }
1081 }
1082
1083 int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed)
1084 {
1085 int status = 0;
1086 struct ocfs2_super *osb;
1087
1088 BUG_ON(!journal);
1089
1090 osb = journal->j_osb;
1091
1092 status = jbd2_journal_load(journal->j_journal);
1093 if (status < 0) {
1094 mlog(ML_ERROR, "Failed to load journal!\n");
1095 goto done;
1096 }
1097
1098 ocfs2_clear_journal_error(osb->sb, journal->j_journal, osb->slot_num);
1099
1100 if (replayed) {
1101 jbd2_journal_lock_updates(journal->j_journal);
1102 status = jbd2_journal_flush(journal->j_journal, 0);
1103 jbd2_journal_unlock_updates(journal->j_journal);
1104 if (status < 0)
1105 mlog_errno(status);
1106 }
1107
1108 status = ocfs2_journal_toggle_dirty(osb, 1, replayed);
1109 if (status < 0) {
1110 mlog_errno(status);
1111 goto done;
1112 }
1113
1114
1115 if (!local) {
1116 osb->commit_task = kthread_run(ocfs2_commit_thread, osb,
1117 "ocfs2cmt-%s", osb->uuid_str);
1118 if (IS_ERR(osb->commit_task)) {
1119 status = PTR_ERR(osb->commit_task);
1120 osb->commit_task = NULL;
1121 mlog(ML_ERROR, "unable to launch ocfs2commit thread, "
1122 "error=%d", status);
1123 goto done;
1124 }
1125 } else
1126 osb->commit_task = NULL;
1127
1128 done:
1129 return status;
1130 }
1131
1132
1133
1134
1135 int ocfs2_journal_wipe(struct ocfs2_journal *journal, int full)
1136 {
1137 int status;
1138
1139 BUG_ON(!journal);
1140
1141 status = jbd2_journal_wipe(journal->j_journal, full);
1142 if (status < 0) {
1143 mlog_errno(status);
1144 goto bail;
1145 }
1146
1147 status = ocfs2_journal_toggle_dirty(journal->j_osb, 0, 0);
1148 if (status < 0)
1149 mlog_errno(status);
1150
1151 bail:
1152 return status;
1153 }
1154
1155 static int ocfs2_recovery_completed(struct ocfs2_super *osb)
1156 {
1157 int empty;
1158 struct ocfs2_recovery_map *rm = osb->recovery_map;
1159
1160 spin_lock(&osb->osb_lock);
1161 empty = (rm->rm_used == 0);
1162 spin_unlock(&osb->osb_lock);
1163
1164 return empty;
1165 }
1166
1167 void ocfs2_wait_for_recovery(struct ocfs2_super *osb)
1168 {
1169 wait_event(osb->recovery_event, ocfs2_recovery_completed(osb));
1170 }
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182 static int ocfs2_force_read_journal(struct inode *inode)
1183 {
1184 int status = 0;
1185 int i;
1186 u64 v_blkno, p_blkno, p_blocks, num_blocks;
1187 struct buffer_head *bh = NULL;
1188 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1189
1190 num_blocks = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode));
1191 v_blkno = 0;
1192 while (v_blkno < num_blocks) {
1193 status = ocfs2_extent_map_get_blocks(inode, v_blkno,
1194 &p_blkno, &p_blocks, NULL);
1195 if (status < 0) {
1196 mlog_errno(status);
1197 goto bail;
1198 }
1199
1200 for (i = 0; i < p_blocks; i++, p_blkno++) {
1201 bh = __find_get_block(osb->sb->s_bdev, p_blkno,
1202 osb->sb->s_blocksize);
1203
1204 if (!bh)
1205 continue;
1206
1207 brelse(bh);
1208 bh = NULL;
1209
1210
1211
1212 status = ocfs2_read_blocks_sync(osb, p_blkno, 1, &bh);
1213 if (status < 0) {
1214 mlog_errno(status);
1215 goto bail;
1216 }
1217
1218 brelse(bh);
1219 bh = NULL;
1220 }
1221
1222 v_blkno += p_blocks;
1223 }
1224
1225 bail:
1226 return status;
1227 }
1228
1229 struct ocfs2_la_recovery_item {
1230 struct list_head lri_list;
1231 int lri_slot;
1232 struct ocfs2_dinode *lri_la_dinode;
1233 struct ocfs2_dinode *lri_tl_dinode;
1234 struct ocfs2_quota_recovery *lri_qrec;
1235 enum ocfs2_orphan_reco_type lri_orphan_reco_type;
1236 };
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248 void ocfs2_complete_recovery(struct work_struct *work)
1249 {
1250 int ret = 0;
1251 struct ocfs2_journal *journal =
1252 container_of(work, struct ocfs2_journal, j_recovery_work);
1253 struct ocfs2_super *osb = journal->j_osb;
1254 struct ocfs2_dinode *la_dinode, *tl_dinode;
1255 struct ocfs2_la_recovery_item *item, *n;
1256 struct ocfs2_quota_recovery *qrec;
1257 enum ocfs2_orphan_reco_type orphan_reco_type;
1258 LIST_HEAD(tmp_la_list);
1259
1260 trace_ocfs2_complete_recovery(
1261 (unsigned long long)OCFS2_I(journal->j_inode)->ip_blkno);
1262
1263 spin_lock(&journal->j_lock);
1264 list_splice_init(&journal->j_la_cleanups, &tmp_la_list);
1265 spin_unlock(&journal->j_lock);
1266
1267 list_for_each_entry_safe(item, n, &tmp_la_list, lri_list) {
1268 list_del_init(&item->lri_list);
1269
1270 ocfs2_wait_on_quotas(osb);
1271
1272 la_dinode = item->lri_la_dinode;
1273 tl_dinode = item->lri_tl_dinode;
1274 qrec = item->lri_qrec;
1275 orphan_reco_type = item->lri_orphan_reco_type;
1276
1277 trace_ocfs2_complete_recovery_slot(item->lri_slot,
1278 la_dinode ? le64_to_cpu(la_dinode->i_blkno) : 0,
1279 tl_dinode ? le64_to_cpu(tl_dinode->i_blkno) : 0,
1280 qrec);
1281
1282 if (la_dinode) {
1283 ret = ocfs2_complete_local_alloc_recovery(osb,
1284 la_dinode);
1285 if (ret < 0)
1286 mlog_errno(ret);
1287
1288 kfree(la_dinode);
1289 }
1290
1291 if (tl_dinode) {
1292 ret = ocfs2_complete_truncate_log_recovery(osb,
1293 tl_dinode);
1294 if (ret < 0)
1295 mlog_errno(ret);
1296
1297 kfree(tl_dinode);
1298 }
1299
1300 ret = ocfs2_recover_orphans(osb, item->lri_slot,
1301 orphan_reco_type);
1302 if (ret < 0)
1303 mlog_errno(ret);
1304
1305 if (qrec) {
1306 ret = ocfs2_finish_quota_recovery(osb, qrec,
1307 item->lri_slot);
1308 if (ret < 0)
1309 mlog_errno(ret);
1310
1311 }
1312
1313 kfree(item);
1314 }
1315
1316 trace_ocfs2_complete_recovery_end(ret);
1317 }
1318
1319
1320
1321
1322 static void ocfs2_queue_recovery_completion(struct ocfs2_journal *journal,
1323 int slot_num,
1324 struct ocfs2_dinode *la_dinode,
1325 struct ocfs2_dinode *tl_dinode,
1326 struct ocfs2_quota_recovery *qrec,
1327 enum ocfs2_orphan_reco_type orphan_reco_type)
1328 {
1329 struct ocfs2_la_recovery_item *item;
1330
1331 item = kmalloc(sizeof(struct ocfs2_la_recovery_item), GFP_NOFS);
1332 if (!item) {
1333
1334
1335
1336 kfree(la_dinode);
1337 kfree(tl_dinode);
1338
1339 if (qrec)
1340 ocfs2_free_quota_recovery(qrec);
1341
1342 mlog_errno(-ENOMEM);
1343 return;
1344 }
1345
1346 INIT_LIST_HEAD(&item->lri_list);
1347 item->lri_la_dinode = la_dinode;
1348 item->lri_slot = slot_num;
1349 item->lri_tl_dinode = tl_dinode;
1350 item->lri_qrec = qrec;
1351 item->lri_orphan_reco_type = orphan_reco_type;
1352
1353 spin_lock(&journal->j_lock);
1354 list_add_tail(&item->lri_list, &journal->j_la_cleanups);
1355 queue_work(journal->j_osb->ocfs2_wq, &journal->j_recovery_work);
1356 spin_unlock(&journal->j_lock);
1357 }
1358
1359
1360
1361 void ocfs2_complete_mount_recovery(struct ocfs2_super *osb)
1362 {
1363 struct ocfs2_journal *journal = osb->journal;
1364
1365 if (ocfs2_is_hard_readonly(osb))
1366 return;
1367
1368
1369
1370 ocfs2_queue_recovery_completion(journal, osb->slot_num,
1371 osb->local_alloc_copy, NULL, NULL,
1372 ORPHAN_NEED_TRUNCATE);
1373 ocfs2_schedule_truncate_log_flush(osb, 0);
1374
1375 osb->local_alloc_copy = NULL;
1376
1377
1378 ocfs2_replay_map_set_state(osb, REPLAY_NEEDED);
1379 ocfs2_queue_replay_slots(osb, ORPHAN_NEED_TRUNCATE);
1380 ocfs2_free_replay_slots(osb);
1381 }
1382
1383 void ocfs2_complete_quota_recovery(struct ocfs2_super *osb)
1384 {
1385 if (osb->quota_rec) {
1386 ocfs2_queue_recovery_completion(osb->journal,
1387 osb->slot_num,
1388 NULL,
1389 NULL,
1390 osb->quota_rec,
1391 ORPHAN_NEED_TRUNCATE);
1392 osb->quota_rec = NULL;
1393 }
1394 }
1395
1396 static int __ocfs2_recovery_thread(void *arg)
1397 {
1398 int status, node_num, slot_num;
1399 struct ocfs2_super *osb = arg;
1400 struct ocfs2_recovery_map *rm = osb->recovery_map;
1401 int *rm_quota = NULL;
1402 int rm_quota_used = 0, i;
1403 struct ocfs2_quota_recovery *qrec;
1404
1405
1406 int quota_enabled = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb,
1407 OCFS2_FEATURE_RO_COMPAT_USRQUOTA)
1408 || OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb,
1409 OCFS2_FEATURE_RO_COMPAT_GRPQUOTA);
1410
1411 status = ocfs2_wait_on_mount(osb);
1412 if (status < 0) {
1413 goto bail;
1414 }
1415
1416 if (quota_enabled) {
1417 rm_quota = kcalloc(osb->max_slots, sizeof(int), GFP_NOFS);
1418 if (!rm_quota) {
1419 status = -ENOMEM;
1420 goto bail;
1421 }
1422 }
1423 restart:
1424 status = ocfs2_super_lock(osb, 1);
1425 if (status < 0) {
1426 mlog_errno(status);
1427 goto bail;
1428 }
1429
1430 status = ocfs2_compute_replay_slots(osb);
1431 if (status < 0)
1432 mlog_errno(status);
1433
1434
1435 ocfs2_queue_recovery_completion(osb->journal, osb->slot_num, NULL,
1436 NULL, NULL, ORPHAN_NO_NEED_TRUNCATE);
1437
1438 spin_lock(&osb->osb_lock);
1439 while (rm->rm_used) {
1440
1441
1442 node_num = rm->rm_entries[0];
1443 spin_unlock(&osb->osb_lock);
1444 slot_num = ocfs2_node_num_to_slot(osb, node_num);
1445 trace_ocfs2_recovery_thread_node(node_num, slot_num);
1446 if (slot_num == -ENOENT) {
1447 status = 0;
1448 goto skip_recovery;
1449 }
1450
1451
1452
1453
1454
1455
1456
1457 if (quota_enabled) {
1458 for (i = 0; i < rm_quota_used
1459 && rm_quota[i] != slot_num; i++)
1460 ;
1461
1462 if (i == rm_quota_used)
1463 rm_quota[rm_quota_used++] = slot_num;
1464 }
1465
1466 status = ocfs2_recover_node(osb, node_num, slot_num);
1467 skip_recovery:
1468 if (!status) {
1469 ocfs2_recovery_map_clear(osb, node_num);
1470 } else {
1471 mlog(ML_ERROR,
1472 "Error %d recovering node %d on device (%u,%u)!\n",
1473 status, node_num,
1474 MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
1475 mlog(ML_ERROR, "Volume requires unmount.\n");
1476 }
1477
1478 spin_lock(&osb->osb_lock);
1479 }
1480 spin_unlock(&osb->osb_lock);
1481 trace_ocfs2_recovery_thread_end(status);
1482
1483
1484 status = ocfs2_check_journals_nolocks(osb);
1485 status = (status == -EROFS) ? 0 : status;
1486 if (status < 0)
1487 mlog_errno(status);
1488
1489
1490
1491
1492 if (quota_enabled) {
1493 for (i = 0; i < rm_quota_used; i++) {
1494 qrec = ocfs2_begin_quota_recovery(osb, rm_quota[i]);
1495 if (IS_ERR(qrec)) {
1496 status = PTR_ERR(qrec);
1497 mlog_errno(status);
1498 continue;
1499 }
1500 ocfs2_queue_recovery_completion(osb->journal,
1501 rm_quota[i],
1502 NULL, NULL, qrec,
1503 ORPHAN_NEED_TRUNCATE);
1504 }
1505 }
1506
1507 ocfs2_super_unlock(osb, 1);
1508
1509
1510 ocfs2_queue_replay_slots(osb, ORPHAN_NEED_TRUNCATE);
1511
1512 bail:
1513 mutex_lock(&osb->recovery_lock);
1514 if (!status && !ocfs2_recovery_completed(osb)) {
1515 mutex_unlock(&osb->recovery_lock);
1516 goto restart;
1517 }
1518
1519 ocfs2_free_replay_slots(osb);
1520 osb->recovery_thread_task = NULL;
1521 mb();
1522 wake_up(&osb->recovery_event);
1523
1524 mutex_unlock(&osb->recovery_lock);
1525
1526 if (quota_enabled)
1527 kfree(rm_quota);
1528
1529 return status;
1530 }
1531
1532 void ocfs2_recovery_thread(struct ocfs2_super *osb, int node_num)
1533 {
1534 mutex_lock(&osb->recovery_lock);
1535
1536 trace_ocfs2_recovery_thread(node_num, osb->node_num,
1537 osb->disable_recovery, osb->recovery_thread_task,
1538 osb->disable_recovery ?
1539 -1 : ocfs2_recovery_map_set(osb, node_num));
1540
1541 if (osb->disable_recovery)
1542 goto out;
1543
1544 if (osb->recovery_thread_task)
1545 goto out;
1546
1547 osb->recovery_thread_task = kthread_run(__ocfs2_recovery_thread, osb,
1548 "ocfs2rec-%s", osb->uuid_str);
1549 if (IS_ERR(osb->recovery_thread_task)) {
1550 mlog_errno((int)PTR_ERR(osb->recovery_thread_task));
1551 osb->recovery_thread_task = NULL;
1552 }
1553
1554 out:
1555 mutex_unlock(&osb->recovery_lock);
1556 wake_up(&osb->recovery_event);
1557 }
1558
1559 static int ocfs2_read_journal_inode(struct ocfs2_super *osb,
1560 int slot_num,
1561 struct buffer_head **bh,
1562 struct inode **ret_inode)
1563 {
1564 int status = -EACCES;
1565 struct inode *inode = NULL;
1566
1567 BUG_ON(slot_num >= osb->max_slots);
1568
1569 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
1570 slot_num);
1571 if (!inode || is_bad_inode(inode)) {
1572 mlog_errno(status);
1573 goto bail;
1574 }
1575 SET_INODE_JOURNAL(inode);
1576
1577 status = ocfs2_read_inode_block_full(inode, bh, OCFS2_BH_IGNORE_CACHE);
1578 if (status < 0) {
1579 mlog_errno(status);
1580 goto bail;
1581 }
1582
1583 status = 0;
1584
1585 bail:
1586 if (inode) {
1587 if (status || !ret_inode)
1588 iput(inode);
1589 else
1590 *ret_inode = inode;
1591 }
1592 return status;
1593 }
1594
1595
1596
1597 static int ocfs2_replay_journal(struct ocfs2_super *osb,
1598 int node_num,
1599 int slot_num)
1600 {
1601 int status;
1602 int got_lock = 0;
1603 unsigned int flags;
1604 struct inode *inode = NULL;
1605 struct ocfs2_dinode *fe;
1606 journal_t *journal = NULL;
1607 struct buffer_head *bh = NULL;
1608 u32 slot_reco_gen;
1609
1610 status = ocfs2_read_journal_inode(osb, slot_num, &bh, &inode);
1611 if (status) {
1612 mlog_errno(status);
1613 goto done;
1614 }
1615
1616 fe = (struct ocfs2_dinode *)bh->b_data;
1617 slot_reco_gen = ocfs2_get_recovery_generation(fe);
1618 brelse(bh);
1619 bh = NULL;
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629 if (osb->slot_recovery_generations[slot_num] != slot_reco_gen) {
1630 trace_ocfs2_replay_journal_recovered(slot_num,
1631 osb->slot_recovery_generations[slot_num], slot_reco_gen);
1632 osb->slot_recovery_generations[slot_num] = slot_reco_gen;
1633 status = -EBUSY;
1634 goto done;
1635 }
1636
1637
1638
1639 status = ocfs2_inode_lock_full(inode, &bh, 1, OCFS2_META_LOCK_RECOVERY);
1640 if (status < 0) {
1641 trace_ocfs2_replay_journal_lock_err(status);
1642 if (status != -ERESTARTSYS)
1643 mlog(ML_ERROR, "Could not lock journal!\n");
1644 goto done;
1645 }
1646 got_lock = 1;
1647
1648 fe = (struct ocfs2_dinode *) bh->b_data;
1649
1650 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
1651 slot_reco_gen = ocfs2_get_recovery_generation(fe);
1652
1653 if (!(flags & OCFS2_JOURNAL_DIRTY_FL)) {
1654 trace_ocfs2_replay_journal_skip(node_num);
1655
1656 osb->slot_recovery_generations[slot_num] = slot_reco_gen;
1657 goto done;
1658 }
1659
1660
1661 ocfs2_replay_map_set_state(osb, REPLAY_NEEDED);
1662
1663 printk(KERN_NOTICE "ocfs2: Begin replay journal (node %d, slot %d) on "\
1664 "device (%u,%u)\n", node_num, slot_num, MAJOR(osb->sb->s_dev),
1665 MINOR(osb->sb->s_dev));
1666
1667 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters);
1668
1669 status = ocfs2_force_read_journal(inode);
1670 if (status < 0) {
1671 mlog_errno(status);
1672 goto done;
1673 }
1674
1675 journal = jbd2_journal_init_inode(inode);
1676 if (journal == NULL) {
1677 mlog(ML_ERROR, "Linux journal layer error\n");
1678 status = -EIO;
1679 goto done;
1680 }
1681
1682 status = jbd2_journal_load(journal);
1683 if (status < 0) {
1684 mlog_errno(status);
1685 BUG_ON(!igrab(inode));
1686 jbd2_journal_destroy(journal);
1687 goto done;
1688 }
1689
1690 ocfs2_clear_journal_error(osb->sb, journal, slot_num);
1691
1692
1693 jbd2_journal_lock_updates(journal);
1694 status = jbd2_journal_flush(journal, 0);
1695 jbd2_journal_unlock_updates(journal);
1696 if (status < 0)
1697 mlog_errno(status);
1698
1699
1700 flags = le32_to_cpu(fe->id1.journal1.ij_flags);
1701 flags &= ~OCFS2_JOURNAL_DIRTY_FL;
1702 fe->id1.journal1.ij_flags = cpu_to_le32(flags);
1703
1704
1705 ocfs2_bump_recovery_generation(fe);
1706 osb->slot_recovery_generations[slot_num] =
1707 ocfs2_get_recovery_generation(fe);
1708
1709 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &fe->i_check);
1710 status = ocfs2_write_block(osb, bh, INODE_CACHE(inode));
1711 if (status < 0)
1712 mlog_errno(status);
1713
1714 BUG_ON(!igrab(inode));
1715
1716 jbd2_journal_destroy(journal);
1717
1718 printk(KERN_NOTICE "ocfs2: End replay journal (node %d, slot %d) on "\
1719 "device (%u,%u)\n", node_num, slot_num, MAJOR(osb->sb->s_dev),
1720 MINOR(osb->sb->s_dev));
1721 done:
1722
1723 if (got_lock)
1724 ocfs2_inode_unlock(inode, 1);
1725
1726 iput(inode);
1727 brelse(bh);
1728
1729 return status;
1730 }
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744 static int ocfs2_recover_node(struct ocfs2_super *osb,
1745 int node_num, int slot_num)
1746 {
1747 int status = 0;
1748 struct ocfs2_dinode *la_copy = NULL;
1749 struct ocfs2_dinode *tl_copy = NULL;
1750
1751 trace_ocfs2_recover_node(node_num, slot_num, osb->node_num);
1752
1753
1754
1755 BUG_ON(osb->node_num == node_num);
1756
1757 status = ocfs2_replay_journal(osb, node_num, slot_num);
1758 if (status < 0) {
1759 if (status == -EBUSY) {
1760 trace_ocfs2_recover_node_skip(slot_num, node_num);
1761 status = 0;
1762 goto done;
1763 }
1764 mlog_errno(status);
1765 goto done;
1766 }
1767
1768
1769 status = ocfs2_begin_local_alloc_recovery(osb, slot_num, &la_copy);
1770 if (status < 0) {
1771 mlog_errno(status);
1772 goto done;
1773 }
1774
1775
1776
1777
1778 status = ocfs2_begin_truncate_log_recovery(osb, slot_num, &tl_copy);
1779 if (status < 0)
1780 mlog_errno(status);
1781
1782
1783
1784 status = ocfs2_clear_slot(osb, slot_num);
1785 if (status < 0)
1786 mlog_errno(status);
1787
1788
1789 ocfs2_queue_recovery_completion(osb->journal, slot_num, la_copy,
1790 tl_copy, NULL, ORPHAN_NEED_TRUNCATE);
1791
1792 status = 0;
1793 done:
1794
1795 return status;
1796 }
1797
1798
1799
1800
1801 static int ocfs2_trylock_journal(struct ocfs2_super *osb,
1802 int slot_num)
1803 {
1804 int status, flags;
1805 struct inode *inode = NULL;
1806
1807 inode = ocfs2_get_system_file_inode(osb, JOURNAL_SYSTEM_INODE,
1808 slot_num);
1809 if (inode == NULL) {
1810 mlog(ML_ERROR, "access error\n");
1811 status = -EACCES;
1812 goto bail;
1813 }
1814 if (is_bad_inode(inode)) {
1815 mlog(ML_ERROR, "access error (bad inode)\n");
1816 iput(inode);
1817 inode = NULL;
1818 status = -EACCES;
1819 goto bail;
1820 }
1821 SET_INODE_JOURNAL(inode);
1822
1823 flags = OCFS2_META_LOCK_RECOVERY | OCFS2_META_LOCK_NOQUEUE;
1824 status = ocfs2_inode_lock_full(inode, NULL, 1, flags);
1825 if (status < 0) {
1826 if (status != -EAGAIN)
1827 mlog_errno(status);
1828 goto bail;
1829 }
1830
1831 ocfs2_inode_unlock(inode, 1);
1832 bail:
1833 iput(inode);
1834
1835 return status;
1836 }
1837
1838
1839
1840 int ocfs2_mark_dead_nodes(struct ocfs2_super *osb)
1841 {
1842 unsigned int node_num;
1843 int status, i;
1844 u32 gen;
1845 struct buffer_head *bh = NULL;
1846 struct ocfs2_dinode *di;
1847
1848
1849
1850
1851 for (i = 0; i < osb->max_slots; i++) {
1852
1853 status = ocfs2_read_journal_inode(osb, i, &bh, NULL);
1854 if (status) {
1855 mlog_errno(status);
1856 goto bail;
1857 }
1858 di = (struct ocfs2_dinode *)bh->b_data;
1859 gen = ocfs2_get_recovery_generation(di);
1860 brelse(bh);
1861 bh = NULL;
1862
1863 spin_lock(&osb->osb_lock);
1864 osb->slot_recovery_generations[i] = gen;
1865
1866 trace_ocfs2_mark_dead_nodes(i,
1867 osb->slot_recovery_generations[i]);
1868
1869 if (i == osb->slot_num) {
1870 spin_unlock(&osb->osb_lock);
1871 continue;
1872 }
1873
1874 status = ocfs2_slot_to_node_num_locked(osb, i, &node_num);
1875 if (status == -ENOENT) {
1876 spin_unlock(&osb->osb_lock);
1877 continue;
1878 }
1879
1880 if (__ocfs2_recovery_map_test(osb, node_num)) {
1881 spin_unlock(&osb->osb_lock);
1882 continue;
1883 }
1884 spin_unlock(&osb->osb_lock);
1885
1886
1887
1888
1889 status = ocfs2_trylock_journal(osb, i);
1890 if (!status) {
1891
1892
1893
1894 ocfs2_recovery_thread(osb, node_num);
1895 } else if ((status < 0) && (status != -EAGAIN)) {
1896 mlog_errno(status);
1897 goto bail;
1898 }
1899 }
1900
1901 status = 0;
1902 bail:
1903 return status;
1904 }
1905
1906
1907
1908
1909
1910
1911 static inline unsigned long ocfs2_orphan_scan_timeout(void)
1912 {
1913 unsigned long time;
1914
1915 get_random_bytes(&time, sizeof(time));
1916 time = ORPHAN_SCAN_SCHEDULE_TIMEOUT + (time % 5000);
1917 return msecs_to_jiffies(time);
1918 }
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947 static void ocfs2_queue_orphan_scan(struct ocfs2_super *osb)
1948 {
1949 struct ocfs2_orphan_scan *os;
1950 int status, i;
1951 u32 seqno = 0;
1952
1953 os = &osb->osb_orphan_scan;
1954
1955 if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE)
1956 goto out;
1957
1958 trace_ocfs2_queue_orphan_scan_begin(os->os_count, os->os_seqno,
1959 atomic_read(&os->os_state));
1960
1961 status = ocfs2_orphan_scan_lock(osb, &seqno);
1962 if (status < 0) {
1963 if (status != -EAGAIN)
1964 mlog_errno(status);
1965 goto out;
1966 }
1967
1968
1969 if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE)
1970 goto unlock;
1971
1972 if (os->os_seqno != seqno) {
1973 os->os_seqno = seqno;
1974 goto unlock;
1975 }
1976
1977 for (i = 0; i < osb->max_slots; i++)
1978 ocfs2_queue_recovery_completion(osb->journal, i, NULL, NULL,
1979 NULL, ORPHAN_NO_NEED_TRUNCATE);
1980
1981
1982
1983
1984 seqno++;
1985 os->os_count++;
1986 os->os_scantime = ktime_get_seconds();
1987 unlock:
1988 ocfs2_orphan_scan_unlock(osb, seqno);
1989 out:
1990 trace_ocfs2_queue_orphan_scan_end(os->os_count, os->os_seqno,
1991 atomic_read(&os->os_state));
1992 return;
1993 }
1994
1995
1996 static void ocfs2_orphan_scan_work(struct work_struct *work)
1997 {
1998 struct ocfs2_orphan_scan *os;
1999 struct ocfs2_super *osb;
2000
2001 os = container_of(work, struct ocfs2_orphan_scan,
2002 os_orphan_scan_work.work);
2003 osb = os->os_osb;
2004
2005 mutex_lock(&os->os_lock);
2006 ocfs2_queue_orphan_scan(osb);
2007 if (atomic_read(&os->os_state) == ORPHAN_SCAN_ACTIVE)
2008 queue_delayed_work(osb->ocfs2_wq, &os->os_orphan_scan_work,
2009 ocfs2_orphan_scan_timeout());
2010 mutex_unlock(&os->os_lock);
2011 }
2012
2013 void ocfs2_orphan_scan_stop(struct ocfs2_super *osb)
2014 {
2015 struct ocfs2_orphan_scan *os;
2016
2017 os = &osb->osb_orphan_scan;
2018 if (atomic_read(&os->os_state) == ORPHAN_SCAN_ACTIVE) {
2019 atomic_set(&os->os_state, ORPHAN_SCAN_INACTIVE);
2020 mutex_lock(&os->os_lock);
2021 cancel_delayed_work(&os->os_orphan_scan_work);
2022 mutex_unlock(&os->os_lock);
2023 }
2024 }
2025
2026 void ocfs2_orphan_scan_init(struct ocfs2_super *osb)
2027 {
2028 struct ocfs2_orphan_scan *os;
2029
2030 os = &osb->osb_orphan_scan;
2031 os->os_osb = osb;
2032 os->os_count = 0;
2033 os->os_seqno = 0;
2034 mutex_init(&os->os_lock);
2035 INIT_DELAYED_WORK(&os->os_orphan_scan_work, ocfs2_orphan_scan_work);
2036 }
2037
2038 void ocfs2_orphan_scan_start(struct ocfs2_super *osb)
2039 {
2040 struct ocfs2_orphan_scan *os;
2041
2042 os = &osb->osb_orphan_scan;
2043 os->os_scantime = ktime_get_seconds();
2044 if (ocfs2_is_hard_readonly(osb) || ocfs2_mount_local(osb))
2045 atomic_set(&os->os_state, ORPHAN_SCAN_INACTIVE);
2046 else {
2047 atomic_set(&os->os_state, ORPHAN_SCAN_ACTIVE);
2048 queue_delayed_work(osb->ocfs2_wq, &os->os_orphan_scan_work,
2049 ocfs2_orphan_scan_timeout());
2050 }
2051 }
2052
2053 struct ocfs2_orphan_filldir_priv {
2054 struct dir_context ctx;
2055 struct inode *head;
2056 struct ocfs2_super *osb;
2057 enum ocfs2_orphan_reco_type orphan_reco_type;
2058 };
2059
2060 static int ocfs2_orphan_filldir(struct dir_context *ctx, const char *name,
2061 int name_len, loff_t pos, u64 ino,
2062 unsigned type)
2063 {
2064 struct ocfs2_orphan_filldir_priv *p =
2065 container_of(ctx, struct ocfs2_orphan_filldir_priv, ctx);
2066 struct inode *iter;
2067
2068 if (name_len == 1 && !strncmp(".", name, 1))
2069 return 0;
2070 if (name_len == 2 && !strncmp("..", name, 2))
2071 return 0;
2072
2073
2074 if ((p->orphan_reco_type == ORPHAN_NO_NEED_TRUNCATE) &&
2075 (!strncmp(name, OCFS2_DIO_ORPHAN_PREFIX,
2076 OCFS2_DIO_ORPHAN_PREFIX_LEN)))
2077 return 0;
2078
2079
2080 iter = ocfs2_iget(p->osb, ino,
2081 OCFS2_FI_FLAG_ORPHAN_RECOVERY, 0);
2082 if (IS_ERR(iter))
2083 return 0;
2084
2085 if (!strncmp(name, OCFS2_DIO_ORPHAN_PREFIX,
2086 OCFS2_DIO_ORPHAN_PREFIX_LEN))
2087 OCFS2_I(iter)->ip_flags |= OCFS2_INODE_DIO_ORPHAN_ENTRY;
2088
2089
2090
2091 if (OCFS2_I(iter)->ip_next_orphan) {
2092 iput(iter);
2093 return 0;
2094 }
2095
2096 trace_ocfs2_orphan_filldir((unsigned long long)OCFS2_I(iter)->ip_blkno);
2097
2098
2099 OCFS2_I(iter)->ip_next_orphan = p->head;
2100 p->head = iter;
2101
2102 return 0;
2103 }
2104
2105 static int ocfs2_queue_orphans(struct ocfs2_super *osb,
2106 int slot,
2107 struct inode **head,
2108 enum ocfs2_orphan_reco_type orphan_reco_type)
2109 {
2110 int status;
2111 struct inode *orphan_dir_inode = NULL;
2112 struct ocfs2_orphan_filldir_priv priv = {
2113 .ctx.actor = ocfs2_orphan_filldir,
2114 .osb = osb,
2115 .head = *head,
2116 .orphan_reco_type = orphan_reco_type
2117 };
2118
2119 orphan_dir_inode = ocfs2_get_system_file_inode(osb,
2120 ORPHAN_DIR_SYSTEM_INODE,
2121 slot);
2122 if (!orphan_dir_inode) {
2123 status = -ENOENT;
2124 mlog_errno(status);
2125 return status;
2126 }
2127
2128 inode_lock(orphan_dir_inode);
2129 status = ocfs2_inode_lock(orphan_dir_inode, NULL, 0);
2130 if (status < 0) {
2131 mlog_errno(status);
2132 goto out;
2133 }
2134
2135 status = ocfs2_dir_foreach(orphan_dir_inode, &priv.ctx);
2136 if (status) {
2137 mlog_errno(status);
2138 goto out_cluster;
2139 }
2140
2141 *head = priv.head;
2142
2143 out_cluster:
2144 ocfs2_inode_unlock(orphan_dir_inode, 0);
2145 out:
2146 inode_unlock(orphan_dir_inode);
2147 iput(orphan_dir_inode);
2148 return status;
2149 }
2150
2151 static int ocfs2_orphan_recovery_can_continue(struct ocfs2_super *osb,
2152 int slot)
2153 {
2154 int ret;
2155
2156 spin_lock(&osb->osb_lock);
2157 ret = !osb->osb_orphan_wipes[slot];
2158 spin_unlock(&osb->osb_lock);
2159 return ret;
2160 }
2161
2162 static void ocfs2_mark_recovering_orphan_dir(struct ocfs2_super *osb,
2163 int slot)
2164 {
2165 spin_lock(&osb->osb_lock);
2166
2167
2168 ocfs2_node_map_set_bit(osb, &osb->osb_recovering_orphan_dirs, slot);
2169 while (osb->osb_orphan_wipes[slot]) {
2170
2171
2172
2173 spin_unlock(&osb->osb_lock);
2174 wait_event_interruptible(osb->osb_wipe_event,
2175 ocfs2_orphan_recovery_can_continue(osb, slot));
2176 spin_lock(&osb->osb_lock);
2177 }
2178 spin_unlock(&osb->osb_lock);
2179 }
2180
2181 static void ocfs2_clear_recovering_orphan_dir(struct ocfs2_super *osb,
2182 int slot)
2183 {
2184 ocfs2_node_map_clear_bit(osb, &osb->osb_recovering_orphan_dirs, slot);
2185 }
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205 static int ocfs2_recover_orphans(struct ocfs2_super *osb,
2206 int slot,
2207 enum ocfs2_orphan_reco_type orphan_reco_type)
2208 {
2209 int ret = 0;
2210 struct inode *inode = NULL;
2211 struct inode *iter;
2212 struct ocfs2_inode_info *oi;
2213 struct buffer_head *di_bh = NULL;
2214 struct ocfs2_dinode *di = NULL;
2215
2216 trace_ocfs2_recover_orphans(slot);
2217
2218 ocfs2_mark_recovering_orphan_dir(osb, slot);
2219 ret = ocfs2_queue_orphans(osb, slot, &inode, orphan_reco_type);
2220 ocfs2_clear_recovering_orphan_dir(osb, slot);
2221
2222
2223
2224 if (ret)
2225 mlog_errno(ret);
2226
2227 while (inode) {
2228 oi = OCFS2_I(inode);
2229 trace_ocfs2_recover_orphans_iput(
2230 (unsigned long long)oi->ip_blkno);
2231
2232 iter = oi->ip_next_orphan;
2233 oi->ip_next_orphan = NULL;
2234
2235 if (oi->ip_flags & OCFS2_INODE_DIO_ORPHAN_ENTRY) {
2236 inode_lock(inode);
2237 ret = ocfs2_rw_lock(inode, 1);
2238 if (ret < 0) {
2239 mlog_errno(ret);
2240 goto unlock_mutex;
2241 }
2242
2243
2244
2245
2246 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2247 if (ret) {
2248 mlog_errno(ret);
2249 goto unlock_rw;
2250 }
2251
2252 di = (struct ocfs2_dinode *)di_bh->b_data;
2253
2254 if (di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL)) {
2255 ret = ocfs2_truncate_file(inode, di_bh,
2256 i_size_read(inode));
2257 if (ret < 0) {
2258 if (ret != -ENOSPC)
2259 mlog_errno(ret);
2260 goto unlock_inode;
2261 }
2262
2263 ret = ocfs2_del_inode_from_orphan(osb, inode,
2264 di_bh, 0, 0);
2265 if (ret)
2266 mlog_errno(ret);
2267 }
2268 unlock_inode:
2269 ocfs2_inode_unlock(inode, 1);
2270 brelse(di_bh);
2271 di_bh = NULL;
2272 unlock_rw:
2273 ocfs2_rw_unlock(inode, 1);
2274 unlock_mutex:
2275 inode_unlock(inode);
2276
2277
2278 oi->ip_flags &= ~OCFS2_INODE_DIO_ORPHAN_ENTRY;
2279 } else {
2280 spin_lock(&oi->ip_lock);
2281
2282
2283 oi->ip_flags |= OCFS2_INODE_MAYBE_ORPHANED;
2284 spin_unlock(&oi->ip_lock);
2285 }
2286
2287 iput(inode);
2288 inode = iter;
2289 }
2290
2291 return ret;
2292 }
2293
2294 static int __ocfs2_wait_on_mount(struct ocfs2_super *osb, int quota)
2295 {
2296
2297
2298
2299 wait_event(osb->osb_mount_event,
2300 (!quota && atomic_read(&osb->vol_state) == VOLUME_MOUNTED) ||
2301 atomic_read(&osb->vol_state) == VOLUME_MOUNTED_QUOTAS ||
2302 atomic_read(&osb->vol_state) == VOLUME_DISABLED);
2303
2304
2305
2306
2307 if (atomic_read(&osb->vol_state) == VOLUME_DISABLED) {
2308 trace_ocfs2_wait_on_mount(VOLUME_DISABLED);
2309 mlog(0, "mount error, exiting!\n");
2310 return -EBUSY;
2311 }
2312
2313 return 0;
2314 }
2315
2316 static int ocfs2_commit_thread(void *arg)
2317 {
2318 int status;
2319 struct ocfs2_super *osb = arg;
2320 struct ocfs2_journal *journal = osb->journal;
2321
2322
2323
2324
2325
2326 while (!(kthread_should_stop() &&
2327 atomic_read(&journal->j_num_trans) == 0)) {
2328
2329 wait_event_interruptible(osb->checkpoint_event,
2330 atomic_read(&journal->j_num_trans)
2331 || kthread_should_stop());
2332
2333 status = ocfs2_commit_cache(osb);
2334 if (status < 0) {
2335 static unsigned long abort_warn_time;
2336
2337
2338 if (printk_timed_ratelimit(&abort_warn_time, 60*HZ))
2339 mlog(ML_ERROR, "status = %d, journal is "
2340 "already aborted.\n", status);
2341
2342
2343
2344
2345
2346 msleep_interruptible(1000);
2347 }
2348
2349 if (kthread_should_stop() && atomic_read(&journal->j_num_trans)){
2350 mlog(ML_KTHREAD,
2351 "commit_thread: %u transactions pending on "
2352 "shutdown\n",
2353 atomic_read(&journal->j_num_trans));
2354 }
2355 }
2356
2357 return 0;
2358 }
2359
2360
2361
2362
2363
2364
2365 int ocfs2_check_journals_nolocks(struct ocfs2_super *osb)
2366 {
2367 int ret = 0;
2368 unsigned int slot;
2369 struct buffer_head *di_bh = NULL;
2370 struct ocfs2_dinode *di;
2371 int journal_dirty = 0;
2372
2373 for(slot = 0; slot < osb->max_slots; slot++) {
2374 ret = ocfs2_read_journal_inode(osb, slot, &di_bh, NULL);
2375 if (ret) {
2376 mlog_errno(ret);
2377 goto out;
2378 }
2379
2380 di = (struct ocfs2_dinode *) di_bh->b_data;
2381
2382 osb->slot_recovery_generations[slot] =
2383 ocfs2_get_recovery_generation(di);
2384
2385 if (le32_to_cpu(di->id1.journal1.ij_flags) &
2386 OCFS2_JOURNAL_DIRTY_FL)
2387 journal_dirty = 1;
2388
2389 brelse(di_bh);
2390 di_bh = NULL;
2391 }
2392
2393 out:
2394 if (journal_dirty)
2395 ret = -EROFS;
2396 return ret;
2397 }