Lines Matching full:sdp

55  * @sdp: The GFS2 superblock
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 down_write(&sdp->sd_log_flush_lock); in gfs2_jindex_free()
71 sdp->sd_jdesc = NULL; in gfs2_jindex_free()
72 up_write(&sdp->sd_log_flush_lock); in gfs2_jindex_free()
96 struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid) in gfs2_jdesc_find() argument
100 spin_lock(&sdp->sd_jindex_spin); in gfs2_jdesc_find()
101 jd = jdesc_find_i(&sdp->sd_jindex_list, jid); in gfs2_jdesc_find()
102 spin_unlock(&sdp->sd_jindex_spin); in gfs2_jdesc_find()
110 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); in gfs2_jdesc_check() local
116 jd->jd_blocks = size >> sdp->sd_sb.sb_bsize_shift; in gfs2_jdesc_check()
128 * @sdp: the filesystem
133 int gfs2_make_fs_rw(struct gfs2_sbd *sdp) in gfs2_make_fs_rw() argument
135 struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode); in gfs2_make_fs_rw()
141 if (gfs2_withdrawing_or_withdrawn(sdp)) in gfs2_make_fs_rw()
144 error = gfs2_find_jhead(sdp->sd_jdesc, &head, false); in gfs2_make_fs_rw()
146 gfs2_consist(sdp); in gfs2_make_fs_rw()
151 gfs2_consist(sdp); in gfs2_make_fs_rw()
156 sdp->sd_log_sequence = head.lh_sequence + 1; in gfs2_make_fs_rw()
157 gfs2_log_pointers_init(sdp, head.lh_blkno); in gfs2_make_fs_rw()
159 error = gfs2_quota_init(sdp); in gfs2_make_fs_rw()
160 if (!error && gfs2_withdrawing_or_withdrawn(sdp)) in gfs2_make_fs_rw()
163 set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_make_fs_rw()
185 int gfs2_statfs_init(struct gfs2_sbd *sdp) in gfs2_statfs_init() argument
187 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in gfs2_statfs_init()
188 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_init()
189 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_init()
203 if (sdp->sd_args.ar_spectator) { in gfs2_statfs_init()
204 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
207 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
209 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
212 gfs2_statfs_change_in(l_sc, sdp->sd_sc_bh->b_data + in gfs2_statfs_init()
214 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_init()
224 void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free, in gfs2_statfs_change() argument
227 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in gfs2_statfs_change()
228 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_change()
229 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_change()
233 gfs2_trans_add_meta(l_ip->i_gl, sdp->sd_sc_bh); in gfs2_statfs_change()
235 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_change()
239 gfs2_statfs_change_out(l_sc, sdp->sd_sc_bh->b_data + in gfs2_statfs_change()
241 if (sdp->sd_args.ar_statfs_percent) { in gfs2_statfs_change()
243 y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent; in gfs2_statfs_change()
247 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_change()
250 gfs2_wake_up_statfs(sdp); in gfs2_statfs_change()
253 void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh) in update_statfs() argument
255 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in update_statfs()
256 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); in update_statfs()
257 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in update_statfs()
258 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in update_statfs()
260 gfs2_trans_add_meta(l_ip->i_gl, sdp->sd_sc_bh); in update_statfs()
263 spin_lock(&sdp->sd_statfs_spin); in update_statfs()
268 memset(sdp->sd_sc_bh->b_data + sizeof(struct gfs2_dinode), in update_statfs()
271 spin_unlock(&sdp->sd_statfs_spin); in update_statfs()
276 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_statfs_sync() local
277 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); in gfs2_statfs_sync()
278 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_sync()
279 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_sync()
293 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
297 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
300 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
302 error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0); in gfs2_statfs_sync()
306 update_statfs(sdp, m_bh); in gfs2_statfs_sync()
307 sdp->sd_statfs_force_sync = 0; in gfs2_statfs_sync()
309 gfs2_trans_end(sdp); in gfs2_statfs_sync()
327 * @sdp: the file system
332 static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp) in gfs2_lock_fs_check_clean() argument
346 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_lock_fs_check_clean()
361 gfs2_freeze_unlock(sdp); in gfs2_lock_fs_check_clean()
363 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_EXCLUSIVE, in gfs2_lock_fs_check_clean()
365 &sdp->sd_freeze_gh); in gfs2_lock_fs_check_clean()
369 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_lock_fs_check_clean()
385 gfs2_freeze_unlock(sdp); in gfs2_lock_fs_check_clean()
388 error2 = gfs2_freeze_lock_shared(sdp); in gfs2_lock_fs_check_clean()
389 gfs2_assert_withdraw(sdp, !error2); in gfs2_lock_fs_check_clean()
450 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_write_inode() local
461 gfs2_ail1_flush(sdp, wbc); in gfs2_write_inode()
493 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_dirty_inode() local
506 if (gfs2_withdrawing_or_withdrawn(sdp)) in gfs2_dirty_inode()
511 fs_err(sdp, "dirty_inode: glock %d\n", ret); in gfs2_dirty_inode()
520 ret = gfs2_trans_begin(sdp, RES_DINODE, 0); in gfs2_dirty_inode()
522 fs_err(sdp, "dirty_inode: gfs2_trans_begin %d\n", ret); in gfs2_dirty_inode()
536 gfs2_trans_end(sdp); in gfs2_dirty_inode()
544 * @sdp: the filesystem
549 void gfs2_make_fs_ro(struct gfs2_sbd *sdp) in gfs2_make_fs_ro() argument
551 int log_write_allowed = test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_make_fs_ro()
553 if (!test_bit(SDF_KILL, &sdp->sd_flags)) in gfs2_make_fs_ro()
554 gfs2_flush_delete_work(sdp); in gfs2_make_fs_ro()
556 gfs2_destroy_threads(sdp); in gfs2_make_fs_ro()
559 gfs2_quota_sync(sdp->sd_vfs, 0); in gfs2_make_fs_ro()
560 gfs2_statfs_sync(sdp->sd_vfs, 0); in gfs2_make_fs_ro()
570 gfs2_log_flush(sdp, NULL, GFS2_LFC_MAKE_FS_RO); in gfs2_make_fs_ro()
571 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_SHUTDOWN | in gfs2_make_fs_ro()
573 wait_event_timeout(sdp->sd_log_waitq, in gfs2_make_fs_ro()
574 gfs2_log_is_empty(sdp), in gfs2_make_fs_ro()
576 gfs2_assert_warn(sdp, gfs2_log_is_empty(sdp)); in gfs2_make_fs_ro()
578 gfs2_quota_cleanup(sdp); in gfs2_make_fs_ro()
589 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_put_super() local
593 set_bit(SDF_NORECOVERY, &sdp->sd_flags); in gfs2_put_super()
598 spin_lock(&sdp->sd_jindex_spin); in gfs2_put_super()
599 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_put_super()
602 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
607 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
610 gfs2_make_fs_ro(sdp); in gfs2_put_super()
612 if (gfs2_withdrawing_or_withdrawn(sdp)) in gfs2_put_super()
613 gfs2_destroy_threads(sdp); in gfs2_put_super()
615 gfs2_quota_cleanup(sdp); in gfs2_put_super()
618 WARN_ON(gfs2_withdrawing(sdp)); in gfs2_put_super()
624 gfs2_freeze_unlock(sdp); in gfs2_put_super()
626 iput(sdp->sd_jindex); in gfs2_put_super()
627 iput(sdp->sd_statfs_inode); in gfs2_put_super()
628 iput(sdp->sd_rindex); in gfs2_put_super()
629 iput(sdp->sd_quota_inode); in gfs2_put_super()
631 gfs2_glock_put(sdp->sd_rename_gl); in gfs2_put_super()
632 gfs2_glock_put(sdp->sd_freeze_gl); in gfs2_put_super()
634 if (!sdp->sd_args.ar_spectator) { in gfs2_put_super()
635 if (gfs2_holder_initialized(&sdp->sd_journal_gh)) in gfs2_put_super()
636 gfs2_glock_dq_uninit(&sdp->sd_journal_gh); in gfs2_put_super()
637 if (gfs2_holder_initialized(&sdp->sd_jinode_gh)) in gfs2_put_super()
638 gfs2_glock_dq_uninit(&sdp->sd_jinode_gh); in gfs2_put_super()
639 brelse(sdp->sd_sc_bh); in gfs2_put_super()
640 gfs2_glock_dq_uninit(&sdp->sd_sc_gh); in gfs2_put_super()
641 gfs2_glock_dq_uninit(&sdp->sd_qc_gh); in gfs2_put_super()
642 free_local_statfs_inodes(sdp); in gfs2_put_super()
643 iput(sdp->sd_qc_inode); in gfs2_put_super()
646 gfs2_glock_dq_uninit(&sdp->sd_live_gh); in gfs2_put_super()
647 gfs2_clear_rgrpd(sdp); in gfs2_put_super()
648 gfs2_jindex_free(sdp); in gfs2_put_super()
650 gfs2_gl_hash_clear(sdp); in gfs2_put_super()
651 truncate_inode_pages_final(&sdp->sd_aspace); in gfs2_put_super()
652 gfs2_delete_debugfs_file(sdp); in gfs2_put_super()
654 gfs2_sys_fs_del(sdp); in gfs2_put_super()
655 free_sbd(sdp); in gfs2_put_super()
668 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_sync_fs() local
672 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL | in gfs2_sync_fs()
674 return sdp->sd_log_error; in gfs2_sync_fs()
677 static int gfs2_do_thaw(struct gfs2_sbd *sdp) in gfs2_do_thaw() argument
679 struct super_block *sb = sdp->sd_vfs; in gfs2_do_thaw()
682 error = gfs2_freeze_lock_shared(sdp); in gfs2_do_thaw()
690 fs_info(sdp, "GFS2: couldn't thaw filesystem: %d\n", error); in gfs2_do_thaw()
691 gfs2_assert_withdraw(sdp, 0); in gfs2_do_thaw()
697 struct gfs2_sbd *sdp = container_of(work, struct gfs2_sbd, sd_freeze_work); in gfs2_freeze_func() local
698 struct super_block *sb = sdp->sd_vfs; in gfs2_freeze_func()
701 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_freeze_func()
703 if (test_bit(SDF_FROZEN, &sdp->sd_flags)) in gfs2_freeze_func()
710 gfs2_freeze_unlock(sdp); in gfs2_freeze_func()
711 set_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_func()
713 error = gfs2_do_thaw(sdp); in gfs2_freeze_func()
717 clear_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_func()
721 fs_info(sdp, "GFS2: couldn't freeze filesystem: %d\n", error); in gfs2_freeze_func()
724 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze_func()
736 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_freeze_super() local
739 if (!mutex_trylock(&sdp->sd_freeze_mutex)) in gfs2_freeze_super()
741 if (test_bit(SDF_FROZEN, &sdp->sd_flags)) { in gfs2_freeze_super()
742 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze_super()
749 fs_info(sdp, "GFS2: couldn't freeze filesystem: %d\n", in gfs2_freeze_super()
754 error = gfs2_lock_fs_check_clean(sdp); in gfs2_freeze_super()
756 set_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags); in gfs2_freeze_super()
757 set_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_super()
761 error = gfs2_do_thaw(sdp); in gfs2_freeze_super()
766 fs_err(sdp, "waiting for recovery before freeze\n"); in gfs2_freeze_super()
768 fs_err(sdp, "Fatal IO error: cannot freeze gfs2 due " in gfs2_freeze_super()
772 fs_err(sdp, "error freezing FS: %d\n", error); in gfs2_freeze_super()
774 fs_err(sdp, "retrying...\n"); in gfs2_freeze_super()
779 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze_super()
785 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_freeze_fs() local
787 if (test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) { in gfs2_freeze_fs()
788 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_FREEZE | in gfs2_freeze_fs()
790 if (gfs2_withdrawing_or_withdrawn(sdp)) in gfs2_freeze_fs()
804 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_thaw_super() local
807 if (!mutex_trylock(&sdp->sd_freeze_mutex)) in gfs2_thaw_super()
809 if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags)) { in gfs2_thaw_super()
810 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_thaw_super()
815 gfs2_freeze_unlock(sdp); in gfs2_thaw_super()
817 error = gfs2_do_thaw(sdp); in gfs2_thaw_super()
820 clear_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags); in gfs2_thaw_super()
821 clear_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_thaw_super()
823 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_thaw_super()
830 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_thaw_freeze_initiator() local
832 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_thaw_freeze_initiator()
833 if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags)) in gfs2_thaw_freeze_initiator()
836 gfs2_freeze_unlock(sdp); in gfs2_thaw_freeze_initiator()
839 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_thaw_freeze_initiator()
862 * @sdp: the filesystem
873 static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_slow() argument
889 rgd_next = gfs2_rgrpd_get_first(sdp); in gfs2_statfs_slow()
940 * @sdp: the filesystem
946 static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_i() argument
948 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_i()
949 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_i()
951 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
958 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
981 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_statfs() local
985 error = gfs2_rindex_update(sdp); in gfs2_statfs()
989 if (gfs2_tune_get(sdp, gt_statfs_slow)) in gfs2_statfs()
990 error = gfs2_statfs_slow(sdp, &sc); in gfs2_statfs()
992 error = gfs2_statfs_i(sdp, &sc); in gfs2_statfs()
998 buf->f_bsize = sdp->sd_sb.sb_bsize; in gfs2_statfs()
1028 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_drop_inode() local
1056 if (test_bit(SDF_EVICTING, &sdp->sd_flags)) in gfs2_drop_inode()
1072 struct gfs2_sbd *sdp = root->d_sb->s_fs_info; in gfs2_show_options() local
1073 struct gfs2_args *args = &sdp->sd_args; in gfs2_show_options()
1076 spin_lock(&sdp->sd_tune.gt_spin); in gfs2_show_options()
1077 logd_secs = sdp->sd_tune.gt_logd_secs; in gfs2_show_options()
1078 quota_quantum = sdp->sd_tune.gt_quota_quantum; in gfs2_show_options()
1079 statfs_quantum = sdp->sd_tune.gt_statfs_quantum; in gfs2_show_options()
1080 statfs_slow = sdp->sd_tune.gt_statfs_slow; in gfs2_show_options()
1081 spin_unlock(&sdp->sd_tune.gt_spin); in gfs2_show_options()
1083 if (is_subdir(root, sdp->sd_master_dir)) in gfs2_show_options()
1165 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) in gfs2_show_options()
1167 if (test_bit(SDF_DEMOTE, &sdp->sd_flags)) in gfs2_show_options()
1198 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_dinode_dealloc() local
1208 gfs2_rindex_update(sdp); in gfs2_dinode_dealloc()
1214 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1); in gfs2_dinode_dealloc()
1226 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, in gfs2_dinode_dealloc()
1227 sdp->sd_jdesc->jd_blocks); in gfs2_dinode_dealloc()
1235 gfs2_trans_end(sdp); in gfs2_dinode_dealloc()
1263 struct gfs2_sbd *sdp = GFS2_SB(inode); in gfs2_upgrade_iopen_glock() local
1295 wait_event_interruptible_timeout(sdp->sd_async_glock_wait, in gfs2_upgrade_iopen_glock()
1321 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_should_delete() local
1345 ret = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED); in evict_should_delete()
1425 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_linked_inode() local
1430 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL | in evict_linked_inode()
1440 ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); in evict_linked_inode()
1447 gfs2_trans_end(sdp); in evict_linked_inode()
1475 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_evict_inode() local
1488 if (!sdp->sd_jdesc) in gfs2_evict_inode()
1506 fs_warn(sdp, "gfs2_evict_inode: %d\n", ret); in gfs2_evict_inode()
1510 gfs2_assert_warn(sdp, ip->i_qadata->qa_ref == 0); in gfs2_evict_inode()
1554 void free_local_statfs_inodes(struct gfs2_sbd *sdp) in free_local_statfs_inodes() argument
1559 list_for_each_entry_safe(lsi, safe, &sdp->sd_sc_inodes_list, si_list) { in free_local_statfs_inodes()
1560 if (lsi->si_jid == sdp->sd_jdesc->jd_jid) in free_local_statfs_inodes()
1561 sdp->sd_sc_inode = NULL; /* belongs to this node */ in free_local_statfs_inodes()
1569 struct inode *find_local_statfs_inode(struct gfs2_sbd *sdp, in find_local_statfs_inode() argument
1575 * sdp->sd_sc_inodes_list corresponding to the 'index'. */ in find_local_statfs_inode()
1576 list_for_each_entry(lsi, &sdp->sd_sc_inodes_list, si_list) { in find_local_statfs_inode()