Lines Matching refs:sdp
59 void gfs2_jindex_free(struct gfs2_sbd *sdp) in gfs2_jindex_free() argument
64 spin_lock(&sdp->sd_jindex_spin); in gfs2_jindex_free()
65 list_add(&list, &sdp->sd_jindex_list); in gfs2_jindex_free()
66 list_del_init(&sdp->sd_jindex_list); in gfs2_jindex_free()
67 sdp->sd_journals = 0; in gfs2_jindex_free()
68 spin_unlock(&sdp->sd_jindex_spin); in gfs2_jindex_free()
70 sdp->sd_jdesc = NULL; in gfs2_jindex_free()
99 struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid) in gfs2_jdesc_find() argument
103 spin_lock(&sdp->sd_jindex_spin); in gfs2_jdesc_find()
104 jd = jdesc_find_i(&sdp->sd_jindex_list, jid); in gfs2_jdesc_find()
105 spin_unlock(&sdp->sd_jindex_spin); in gfs2_jdesc_find()
113 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); in gfs2_jdesc_check() local
119 jd->jd_blocks = size >> sdp->sd_sb.sb_bsize_shift; in gfs2_jdesc_check()
129 static int init_threads(struct gfs2_sbd *sdp) in init_threads() argument
134 p = kthread_run(gfs2_logd, sdp, "gfs2_logd"); in init_threads()
137 fs_err(sdp, "can't start logd thread: %d\n", error); in init_threads()
140 sdp->sd_logd_process = p; in init_threads()
142 p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad"); in init_threads()
145 fs_err(sdp, "can't start quotad thread: %d\n", error); in init_threads()
148 sdp->sd_quotad_process = p; in init_threads()
152 kthread_stop(sdp->sd_logd_process); in init_threads()
153 sdp->sd_logd_process = NULL; in init_threads()
164 int gfs2_make_fs_rw(struct gfs2_sbd *sdp) in gfs2_make_fs_rw() argument
166 struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode); in gfs2_make_fs_rw()
172 error = init_threads(sdp); in gfs2_make_fs_rw()
176 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, in gfs2_make_fs_rw()
183 if (gfs2_withdrawn(sdp)) { in gfs2_make_fs_rw()
188 error = gfs2_find_jhead(sdp->sd_jdesc, &head, false); in gfs2_make_fs_rw()
189 if (error || gfs2_withdrawn(sdp)) in gfs2_make_fs_rw()
193 gfs2_consist(sdp); in gfs2_make_fs_rw()
199 sdp->sd_log_sequence = head.lh_sequence + 1; in gfs2_make_fs_rw()
200 gfs2_log_pointers_init(sdp, head.lh_blkno); in gfs2_make_fs_rw()
202 error = gfs2_quota_init(sdp); in gfs2_make_fs_rw()
203 if (error || gfs2_withdrawn(sdp)) in gfs2_make_fs_rw()
206 set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_make_fs_rw()
215 if (sdp->sd_quotad_process) in gfs2_make_fs_rw()
216 kthread_stop(sdp->sd_quotad_process); in gfs2_make_fs_rw()
217 sdp->sd_quotad_process = NULL; in gfs2_make_fs_rw()
218 if (sdp->sd_logd_process) in gfs2_make_fs_rw()
219 kthread_stop(sdp->sd_logd_process); in gfs2_make_fs_rw()
220 sdp->sd_logd_process = NULL; in gfs2_make_fs_rw()
242 int gfs2_statfs_init(struct gfs2_sbd *sdp) in gfs2_statfs_init() argument
244 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in gfs2_statfs_init()
245 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_init()
246 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in gfs2_statfs_init()
247 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_init()
261 if (sdp->sd_args.ar_spectator) { in gfs2_statfs_init()
262 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
265 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
271 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
276 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
288 void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free, in gfs2_statfs_change() argument
291 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in gfs2_statfs_change()
292 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_change()
293 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_change()
305 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_change()
310 if (sdp->sd_args.ar_statfs_percent) { in gfs2_statfs_change()
312 y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent; in gfs2_statfs_change()
316 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_change()
320 gfs2_wake_up_statfs(sdp); in gfs2_statfs_change()
323 void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh, in update_statfs() argument
326 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in update_statfs()
327 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in update_statfs()
328 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in update_statfs()
329 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in update_statfs()
334 spin_lock(&sdp->sd_statfs_spin); in update_statfs()
342 spin_unlock(&sdp->sd_statfs_spin); in update_statfs()
347 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_statfs_sync() local
348 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in gfs2_statfs_sync()
349 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in gfs2_statfs_sync()
350 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_sync()
351 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_sync()
366 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
370 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
373 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
379 error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0); in gfs2_statfs_sync()
383 update_statfs(sdp, m_bh, l_bh); in gfs2_statfs_sync()
384 sdp->sd_statfs_force_sync = 0; in gfs2_statfs_sync()
386 gfs2_trans_end(sdp); in gfs2_statfs_sync()
414 static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp) in gfs2_lock_fs_check_clean() argument
423 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_lock_fs_check_clean()
438 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_EXCLUSIVE, in gfs2_lock_fs_check_clean()
439 LM_FLAG_NOEXP, &sdp->sd_freeze_gh); in gfs2_lock_fs_check_clean()
443 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_lock_fs_check_clean()
457 gfs2_glock_dq_uninit(&sdp->sd_freeze_gh); in gfs2_lock_fs_check_clean()
517 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_write_inode() local
528 gfs2_ail1_flush(sdp, wbc); in gfs2_write_inode()
560 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_dirty_inode() local
569 if (unlikely(gfs2_withdrawn(sdp))) in gfs2_dirty_inode()
574 fs_err(sdp, "dirty_inode: glock %d\n", ret); in gfs2_dirty_inode()
583 ret = gfs2_trans_begin(sdp, RES_DINODE, 0); in gfs2_dirty_inode()
585 fs_err(sdp, "dirty_inode: gfs2_trans_begin %d\n", ret); in gfs2_dirty_inode()
599 gfs2_trans_end(sdp); in gfs2_dirty_inode()
612 int gfs2_make_fs_ro(struct gfs2_sbd *sdp) in gfs2_make_fs_ro() argument
616 int log_write_allowed = test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_make_fs_ro()
619 if (sdp->sd_freeze_gl && in gfs2_make_fs_ro()
620 !gfs2_glock_is_locked_by_me(sdp->sd_freeze_gl)) { in gfs2_make_fs_ro()
622 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, in gfs2_make_fs_ro()
629 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, in gfs2_make_fs_ro()
633 if (error && !gfs2_withdrawn(sdp)) in gfs2_make_fs_ro()
638 gfs2_flush_delete_work(sdp); in gfs2_make_fs_ro()
639 if (!log_write_allowed && current == sdp->sd_quotad_process) in gfs2_make_fs_ro()
640 fs_warn(sdp, "The quotad daemon is withdrawing.\n"); in gfs2_make_fs_ro()
641 else if (sdp->sd_quotad_process) in gfs2_make_fs_ro()
642 kthread_stop(sdp->sd_quotad_process); in gfs2_make_fs_ro()
643 sdp->sd_quotad_process = NULL; in gfs2_make_fs_ro()
645 if (!log_write_allowed && current == sdp->sd_logd_process) in gfs2_make_fs_ro()
646 fs_warn(sdp, "The logd daemon is withdrawing.\n"); in gfs2_make_fs_ro()
647 else if (sdp->sd_logd_process) in gfs2_make_fs_ro()
648 kthread_stop(sdp->sd_logd_process); in gfs2_make_fs_ro()
649 sdp->sd_logd_process = NULL; in gfs2_make_fs_ro()
652 gfs2_quota_sync(sdp->sd_vfs, 0); in gfs2_make_fs_ro()
653 gfs2_statfs_sync(sdp->sd_vfs, 0); in gfs2_make_fs_ro()
655 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_SHUTDOWN | in gfs2_make_fs_ro()
657 wait_event(sdp->sd_reserving_log_wait, in gfs2_make_fs_ro()
658 atomic_read(&sdp->sd_reserving_log) == 0); in gfs2_make_fs_ro()
659 gfs2_assert_warn(sdp, atomic_read(&sdp->sd_log_blks_free) == in gfs2_make_fs_ro()
660 sdp->sd_jdesc->jd_blocks); in gfs2_make_fs_ro()
662 wait_event_timeout(sdp->sd_reserving_log_wait, in gfs2_make_fs_ro()
663 atomic_read(&sdp->sd_reserving_log) == 0, in gfs2_make_fs_ro()
669 gfs2_quota_cleanup(sdp); in gfs2_make_fs_ro()
672 sdp->sd_vfs->s_flags |= SB_RDONLY; in gfs2_make_fs_ro()
685 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_put_super() local
690 set_bit(SDF_NORECOVERY, &sdp->sd_flags); in gfs2_put_super()
695 spin_lock(&sdp->sd_jindex_spin); in gfs2_put_super()
696 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_put_super()
699 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
704 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
707 error = gfs2_make_fs_ro(sdp); in gfs2_put_super()
709 gfs2_io_error(sdp); in gfs2_put_super()
711 WARN_ON(gfs2_withdrawing(sdp)); in gfs2_put_super()
717 iput(sdp->sd_jindex); in gfs2_put_super()
718 iput(sdp->sd_statfs_inode); in gfs2_put_super()
719 iput(sdp->sd_rindex); in gfs2_put_super()
720 iput(sdp->sd_quota_inode); in gfs2_put_super()
722 gfs2_glock_put(sdp->sd_rename_gl); in gfs2_put_super()
723 gfs2_glock_put(sdp->sd_freeze_gl); in gfs2_put_super()
725 if (!sdp->sd_args.ar_spectator) { in gfs2_put_super()
726 if (gfs2_holder_initialized(&sdp->sd_journal_gh)) in gfs2_put_super()
727 gfs2_glock_dq_uninit(&sdp->sd_journal_gh); in gfs2_put_super()
728 if (gfs2_holder_initialized(&sdp->sd_jinode_gh)) in gfs2_put_super()
729 gfs2_glock_dq_uninit(&sdp->sd_jinode_gh); in gfs2_put_super()
730 gfs2_glock_dq_uninit(&sdp->sd_sc_gh); in gfs2_put_super()
731 gfs2_glock_dq_uninit(&sdp->sd_qc_gh); in gfs2_put_super()
732 free_local_statfs_inodes(sdp); in gfs2_put_super()
733 iput(sdp->sd_qc_inode); in gfs2_put_super()
736 gfs2_glock_dq_uninit(&sdp->sd_live_gh); in gfs2_put_super()
737 gfs2_clear_rgrpd(sdp); in gfs2_put_super()
738 gfs2_jindex_free(sdp); in gfs2_put_super()
740 gfs2_gl_hash_clear(sdp); in gfs2_put_super()
741 truncate_inode_pages_final(&sdp->sd_aspace); in gfs2_put_super()
742 gfs2_delete_debugfs_file(sdp); in gfs2_put_super()
744 gfs2_lm_unmount(sdp); in gfs2_put_super()
747 gfs2_sys_fs_del(sdp); in gfs2_put_super()
748 free_sbd(sdp); in gfs2_put_super()
760 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_sync_fs() local
764 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL | in gfs2_sync_fs()
766 return sdp->sd_log_error; in gfs2_sync_fs()
773 struct gfs2_sbd *sdp = container_of(work, struct gfs2_sbd, sd_freeze_work); in gfs2_freeze_func() local
774 struct super_block *sb = sdp->sd_vfs; in gfs2_freeze_func()
777 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, in gfs2_freeze_func()
780 fs_info(sdp, "GFS2: couldn't get freeze lock : %d\n", error); in gfs2_freeze_func()
781 gfs2_assert_withdraw(sdp, 0); in gfs2_freeze_func()
783 atomic_set(&sdp->sd_freeze_state, SFS_UNFROZEN); in gfs2_freeze_func()
786 fs_info(sdp, "GFS2: couldn't thaw filesystem: %d\n", in gfs2_freeze_func()
788 gfs2_assert_withdraw(sdp, 0); in gfs2_freeze_func()
793 clear_bit_unlock(SDF_FS_FROZEN, &sdp->sd_flags); in gfs2_freeze_func()
794 wake_up_bit(&sdp->sd_flags, SDF_FS_FROZEN); in gfs2_freeze_func()
806 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_freeze() local
809 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_freeze()
810 if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN) in gfs2_freeze()
814 if (gfs2_withdrawn(sdp)) { in gfs2_freeze()
819 error = gfs2_lock_fs_check_clean(sdp); in gfs2_freeze()
824 fs_err(sdp, "waiting for recovery before freeze\n"); in gfs2_freeze()
826 fs_err(sdp, "Fatal IO error: cannot freeze gfs2 due " in gfs2_freeze()
830 fs_err(sdp, "error freezing FS: %d\n", error); in gfs2_freeze()
832 fs_err(sdp, "retrying...\n"); in gfs2_freeze()
835 set_bit(SDF_FS_FROZEN, &sdp->sd_flags); in gfs2_freeze()
837 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze()
849 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_unfreeze() local
851 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_unfreeze()
852 if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN || in gfs2_unfreeze()
853 !gfs2_holder_initialized(&sdp->sd_freeze_gh)) { in gfs2_unfreeze()
854 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_unfreeze()
858 gfs2_glock_dq_uninit(&sdp->sd_freeze_gh); in gfs2_unfreeze()
859 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_unfreeze()
860 return wait_on_bit(&sdp->sd_flags, SDF_FS_FROZEN, TASK_INTERRUPTIBLE); in gfs2_unfreeze()
894 static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_slow() argument
910 rgd_next = gfs2_rgrpd_get_first(sdp); in gfs2_statfs_slow()
967 static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_i() argument
969 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_i()
970 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_i()
972 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
979 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
1002 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_statfs() local
1006 error = gfs2_rindex_update(sdp); in gfs2_statfs()
1010 if (gfs2_tune_get(sdp, gt_statfs_slow)) in gfs2_statfs()
1011 error = gfs2_statfs_slow(sdp, &sc); in gfs2_statfs()
1013 error = gfs2_statfs_i(sdp, &sc); in gfs2_statfs()
1019 buf->f_bsize = sdp->sd_sb.sb_bsize; in gfs2_statfs()
1096 struct gfs2_sbd *sdp = root->d_sb->s_fs_info; in gfs2_show_options() local
1097 struct gfs2_args *args = &sdp->sd_args; in gfs2_show_options()
1100 if (is_ancestor(root, sdp->sd_master_dir)) in gfs2_show_options()
1153 val = sdp->sd_tune.gt_logd_secs; in gfs2_show_options()
1156 val = sdp->sd_tune.gt_statfs_quantum; in gfs2_show_options()
1159 else if (sdp->sd_tune.gt_statfs_slow) in gfs2_show_options()
1161 val = sdp->sd_tune.gt_quota_quantum; in gfs2_show_options()
1182 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) in gfs2_show_options()
1184 if (test_bit(SDF_DEMOTE, &sdp->sd_flags)) in gfs2_show_options()
1209 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_dinode_dealloc() local
1219 error = gfs2_rindex_update(sdp); in gfs2_dinode_dealloc()
1227 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1); in gfs2_dinode_dealloc()
1238 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, in gfs2_dinode_dealloc()
1239 sdp->sd_jdesc->jd_blocks); in gfs2_dinode_dealloc()
1247 gfs2_trans_end(sdp); in gfs2_dinode_dealloc()
1275 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_upgrade_iopen_glock() local
1310 timeout = wait_event_interruptible_timeout(sdp->sd_async_glock_wait, in gfs2_upgrade_iopen_glock()
1335 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_should_delete() local
1361 ret = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED); in evict_should_delete()
1434 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_linked_inode() local
1439 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL | in evict_linked_inode()
1449 ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); in evict_linked_inode()
1456 gfs2_trans_end(sdp); in evict_linked_inode()
1484 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_evict_inode() local
1514 fs_warn(sdp, "gfs2_evict_inode: %d\n", ret); in gfs2_evict_inode()
1518 gfs2_assert_warn(sdp, ip->i_qadata->qa_ref == 0); in gfs2_evict_inode()
1565 extern void free_local_statfs_inodes(struct gfs2_sbd *sdp) in free_local_statfs_inodes() argument
1570 list_for_each_entry_safe(lsi, safe, &sdp->sd_sc_inodes_list, si_list) { in free_local_statfs_inodes()
1571 if (lsi->si_jid == sdp->sd_jdesc->jd_jid) in free_local_statfs_inodes()
1572 sdp->sd_sc_inode = NULL; /* belongs to this node */ in free_local_statfs_inodes()
1580 extern struct inode *find_local_statfs_inode(struct gfs2_sbd *sdp, in find_local_statfs_inode() argument
1587 list_for_each_entry(lsi, &sdp->sd_sc_inodes_list, si_list) { in find_local_statfs_inode()