Lines Matching +full:sc +full:- +full:resource
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
4 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
25 #include <linux/backing-dev.h>
54 * gfs2_jindex_free - Clear all the journal index information
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()
76 BUG_ON(jd->jd_log_bio); in gfs2_jindex_free()
78 list_del(&jd->jd_list); in gfs2_jindex_free()
79 iput(jd->jd_inode); in gfs2_jindex_free()
80 jd->jd_inode = NULL; in gfs2_jindex_free()
90 if (jd->jd_jid == jid) in jdesc_find_i()
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()
109 struct gfs2_inode *ip = GFS2_I(jd->jd_inode); in gfs2_jdesc_check()
110 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode); in gfs2_jdesc_check()
111 u64 size = i_size_read(jd->jd_inode); in gfs2_jdesc_check()
113 if (gfs2_check_internal_file_size(jd->jd_inode, 8 << 20, BIT(30))) in gfs2_jdesc_check()
114 return -EIO; in gfs2_jdesc_check()
116 jd->jd_blocks = size >> sdp->sd_sb.sb_bsize_shift; in gfs2_jdesc_check()
120 return -EIO; in gfs2_jdesc_check()
127 * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
135 struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode); in gfs2_make_fs_rw()
136 struct gfs2_glock *j_gl = ip->i_gl; in gfs2_make_fs_rw()
140 j_gl->gl_ops->go_inval(j_gl, DIO_METADATA); in gfs2_make_fs_rw()
142 return -EIO; in gfs2_make_fs_rw()
144 error = gfs2_find_jhead(sdp->sd_jdesc, &head, false); in gfs2_make_fs_rw()
152 return -EIO; in gfs2_make_fs_rw()
156 sdp->sd_log_sequence = head.lh_sequence + 1; in gfs2_make_fs_rw()
161 error = -EIO; in gfs2_make_fs_rw()
163 set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags); in gfs2_make_fs_rw()
167 void gfs2_statfs_change_in(struct gfs2_statfs_change_host *sc, const void *buf) in gfs2_statfs_change_in() argument
171 sc->sc_total = be64_to_cpu(str->sc_total); in gfs2_statfs_change_in()
172 sc->sc_free = be64_to_cpu(str->sc_free); in gfs2_statfs_change_in()
173 sc->sc_dinodes = be64_to_cpu(str->sc_dinodes); in gfs2_statfs_change_in()
176 void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf) in gfs2_statfs_change_out() argument
180 str->sc_total = cpu_to_be64(sc->sc_total); in gfs2_statfs_change_out()
181 str->sc_free = cpu_to_be64(sc->sc_free); in gfs2_statfs_change_out()
182 str->sc_dinodes = cpu_to_be64(sc->sc_dinodes); in gfs2_statfs_change_out()
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()
194 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE, 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()
205 gfs2_statfs_change_in(m_sc, m_bh->b_data + 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()
210 gfs2_statfs_change_in(m_sc, m_bh->b_data + 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()
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()
236 l_sc->sc_total += total; in gfs2_statfs_change()
237 l_sc->sc_free += free; in gfs2_statfs_change()
238 l_sc->sc_dinodes += dinodes; 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()
242 x = 100 * l_sc->sc_free; in gfs2_statfs_change()
243 y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent; in gfs2_statfs_change()
244 if (x >= y || x <= -y) in gfs2_statfs_change()
247 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_change()
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()
261 gfs2_trans_add_meta(m_ip->i_gl, m_bh); in update_statfs()
263 spin_lock(&sdp->sd_statfs_spin); in update_statfs()
264 m_sc->sc_total += l_sc->sc_total; in update_statfs()
265 m_sc->sc_free += l_sc->sc_free; in update_statfs()
266 m_sc->sc_dinodes += l_sc->sc_dinodes; in update_statfs()
268 memset(sdp->sd_sc_bh->b_data + sizeof(struct gfs2_dinode), in update_statfs()
270 gfs2_statfs_change_out(m_sc, m_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()
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()
284 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE, in gfs2_statfs_sync()
293 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_sync()
294 gfs2_statfs_change_in(m_sc, m_bh->b_data + in gfs2_statfs_sync()
296 if (!l_sc->sc_total && !l_sc->sc_free && !l_sc->sc_dinodes) { 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()
307 sdp->sd_statfs_force_sync = 0; in gfs2_statfs_sync()
325 * gfs2_lock_fs_check_clean - Stop all writes to the FS and check that all
346 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { in gfs2_lock_fs_check_clean()
349 error = -ENOMEM; in gfs2_lock_fs_check_clean()
352 ip = GFS2_I(jd->jd_inode); in gfs2_lock_fs_check_clean()
353 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &lfcc->gh); in gfs2_lock_fs_check_clean()
358 list_add(&lfcc->list, &list); in gfs2_lock_fs_check_clean()
361 gfs2_freeze_unlock(&sdp->sd_freeze_gh); 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()
377 error = -EBUSY; in gfs2_lock_fs_check_clean()
385 gfs2_freeze_unlock(&sdp->sd_freeze_gh); in gfs2_lock_fs_check_clean()
394 list_del(&lfcc->list); in gfs2_lock_fs_check_clean()
395 gfs2_glock_dq_uninit(&lfcc->gh); in gfs2_lock_fs_check_clean()
403 const struct inode *inode = &ip->i_inode; in gfs2_dinode_out()
406 str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC); in gfs2_dinode_out()
407 str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI); in gfs2_dinode_out()
408 str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI); in gfs2_dinode_out()
409 str->di_num.no_addr = cpu_to_be64(ip->i_no_addr); in gfs2_dinode_out()
410 str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino); in gfs2_dinode_out()
411 str->di_mode = cpu_to_be32(inode->i_mode); in gfs2_dinode_out()
412 str->di_uid = cpu_to_be32(i_uid_read(inode)); in gfs2_dinode_out()
413 str->di_gid = cpu_to_be32(i_gid_read(inode)); in gfs2_dinode_out()
414 str->di_nlink = cpu_to_be32(inode->i_nlink); in gfs2_dinode_out()
415 str->di_size = cpu_to_be64(i_size_read(inode)); in gfs2_dinode_out()
416 str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(inode)); in gfs2_dinode_out()
417 str->di_atime = cpu_to_be64(inode->i_atime.tv_sec); in gfs2_dinode_out()
418 str->di_mtime = cpu_to_be64(inode->i_mtime.tv_sec); in gfs2_dinode_out()
419 str->di_ctime = cpu_to_be64(inode_get_ctime(inode).tv_sec); in gfs2_dinode_out()
421 str->di_goal_meta = cpu_to_be64(ip->i_goal); in gfs2_dinode_out()
422 str->di_goal_data = cpu_to_be64(ip->i_goal); in gfs2_dinode_out()
423 str->di_generation = cpu_to_be64(ip->i_generation); in gfs2_dinode_out()
425 str->di_flags = cpu_to_be32(ip->i_diskflags); in gfs2_dinode_out()
426 str->di_height = cpu_to_be16(ip->i_height); in gfs2_dinode_out()
427 str->di_payload_format = cpu_to_be32(S_ISDIR(inode->i_mode) && in gfs2_dinode_out()
428 !(ip->i_diskflags & GFS2_DIF_EXHASH) ? in gfs2_dinode_out()
430 str->di_depth = cpu_to_be16(ip->i_depth); in gfs2_dinode_out()
431 str->di_entries = cpu_to_be32(ip->i_entries); in gfs2_dinode_out()
433 str->di_eattr = cpu_to_be64(ip->i_eattr); in gfs2_dinode_out()
434 str->di_atime_nsec = cpu_to_be32(inode->i_atime.tv_nsec); in gfs2_dinode_out()
435 str->di_mtime_nsec = cpu_to_be32(inode->i_mtime.tv_nsec); in gfs2_dinode_out()
436 str->di_ctime_nsec = cpu_to_be32(inode_get_ctime(inode).tv_nsec); in gfs2_dinode_out()
440 * gfs2_write_inode - Make sure the inode is stable on the disk
451 struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); in gfs2_write_inode()
452 struct backing_dev_info *bdi = inode_to_bdi(metamapping->host); in gfs2_write_inode()
454 bool flush_all = (wbc->sync_mode == WB_SYNC_ALL || gfs2_is_jdata(ip)); in gfs2_write_inode()
457 gfs2_log_flush(GFS2_SB(inode), ip->i_gl, in gfs2_write_inode()
460 if (bdi->wb.dirty_exceeded) in gfs2_write_inode()
469 spin_lock(&inode->i_lock); in gfs2_write_inode()
470 if (!(inode->i_flags & I_DIRTY)) in gfs2_write_inode()
472 spin_unlock(&inode->i_lock); in gfs2_write_inode()
478 * gfs2_dirty_inode - check for atime updates
485 * At the moment this deals only with atime - it should be possible
500 if (unlikely(!ip->i_gl)) { in gfs2_dirty_inode()
502 BUG_ON(!test_bit(GIF_ALLOC_FAILED, &ip->i_flags)); in gfs2_dirty_inode()
508 if (!gfs2_glock_is_locked_by_me(ip->i_gl)) { in gfs2_dirty_inode()
509 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); in gfs2_dirty_inode()
512 gfs2_dump_glock(NULL, ip->i_gl, true); in gfs2_dirty_inode()
516 } else if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE)) in gfs2_dirty_inode()
519 if (current->journal_info == NULL) { in gfs2_dirty_inode()
530 gfs2_trans_add_meta(ip->i_gl, bh); in gfs2_dirty_inode()
531 gfs2_dinode_out(ip, bh->b_data); in gfs2_dirty_inode()
543 * gfs2_make_fs_ro - Turn a Read-Write FS into a Read-Only one
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()
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()
573 wait_event_timeout(sdp->sd_log_waitq, in gfs2_make_fs_ro()
582 * gfs2_put_super - Unmount the filesystem
589 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_put_super()
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()
600 if (!test_bit(JDF_RECOVERY, &jd->jd_flags)) in gfs2_put_super()
602 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
603 wait_on_bit(&jd->jd_flags, JDF_RECOVERY, in gfs2_put_super()
607 spin_unlock(&sdp->sd_jindex_spin); in gfs2_put_super()
624 gfs2_freeze_unlock(&sdp->sd_freeze_gh); 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()
643 iput(sdp->sd_qc_inode); in gfs2_put_super()
646 gfs2_glock_dq_uninit(&sdp->sd_live_gh); in gfs2_put_super()
651 truncate_inode_pages_final(&sdp->sd_aspace); in gfs2_put_super()
659 * gfs2_sync_fs - sync the filesystem
668 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_sync_fs()
670 gfs2_quota_sync(sb, -1); in gfs2_sync_fs()
674 return sdp->sd_log_error; in gfs2_sync_fs()
679 struct super_block *sb = sdp->sd_vfs; in gfs2_freeze_locally()
686 if (test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) { in gfs2_freeze_locally()
693 return -EIO; in gfs2_freeze_locally()
701 struct super_block *sb = sdp->sd_vfs; in gfs2_do_thaw()
720 struct super_block *sb = sdp->sd_vfs; in gfs2_freeze_func()
723 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_freeze_func()
724 error = -EBUSY; in gfs2_freeze_func()
725 if (test_bit(SDF_FROZEN, &sdp->sd_flags)) in gfs2_freeze_func()
732 gfs2_freeze_unlock(&sdp->sd_freeze_gh); in gfs2_freeze_func()
733 set_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_func()
739 clear_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_func()
746 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze_func()
751 * gfs2_freeze_super - prevent further writes to the filesystem
758 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_freeze_super()
761 if (!mutex_trylock(&sdp->sd_freeze_mutex)) in gfs2_freeze_super()
762 return -EBUSY; in gfs2_freeze_super()
763 error = -EBUSY; in gfs2_freeze_super()
764 if (test_bit(SDF_FROZEN, &sdp->sd_flags)) in gfs2_freeze_super()
783 if (error == -EBUSY) in gfs2_freeze_super()
785 else if (error == -EIO) { in gfs2_freeze_super()
798 set_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags); in gfs2_freeze_super()
799 set_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_freeze_super()
801 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_freeze_super()
806 * gfs2_thaw_super - reallow writes to the filesystem
813 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_thaw_super()
816 if (!mutex_trylock(&sdp->sd_freeze_mutex)) in gfs2_thaw_super()
817 return -EBUSY; in gfs2_thaw_super()
818 error = -EINVAL; in gfs2_thaw_super()
819 if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags)) in gfs2_thaw_super()
822 atomic_inc(&sb->s_active); in gfs2_thaw_super()
823 gfs2_freeze_unlock(&sdp->sd_freeze_gh); in gfs2_thaw_super()
828 clear_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags); in gfs2_thaw_super()
829 clear_bit(SDF_FROZEN, &sdp->sd_flags); in gfs2_thaw_super()
832 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_thaw_super()
839 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_thaw_freeze_initiator()
841 mutex_lock(&sdp->sd_freeze_mutex); in gfs2_thaw_freeze_initiator()
842 if (!test_bit(SDF_FREEZE_INITIATOR, &sdp->sd_flags)) in gfs2_thaw_freeze_initiator()
845 gfs2_freeze_unlock(&sdp->sd_freeze_gh); in gfs2_thaw_freeze_initiator()
848 mutex_unlock(&sdp->sd_freeze_mutex); in gfs2_thaw_freeze_initiator()
852 * statfs_slow_fill - fill in the sg for a given RG
854 * @sc: the sc structure
856 * Returns: 0 on success, -ESTALE if the LVB is invalid
860 struct gfs2_statfs_change_host *sc) in statfs_slow_fill() argument
863 sc->sc_total += rgd->rd_data; in statfs_slow_fill()
864 sc->sc_free += rgd->rd_free; in statfs_slow_fill()
865 sc->sc_dinodes += rgd->rd_dinodes; in statfs_slow_fill()
870 * gfs2_statfs_slow - Stat a filesystem using asynchronous locking
872 * @sc: the sc info that will be returned
882 static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_slow() argument
891 memset(sc, 0, sizeof(struct gfs2_statfs_change_host)); in gfs2_statfs_slow()
894 return -ENOMEM; in gfs2_statfs_slow()
914 gfs2_glock2rgrp(gh->gh_gl); in gfs2_statfs_slow()
916 error = statfs_slow_fill(rgd, sc); in gfs2_statfs_slow()
925 error = gfs2_glock_nq_init(rgd_next->rd_gl, in gfs2_statfs_slow()
934 error = -ERESTARTSYS; in gfs2_statfs_slow()
948 * gfs2_statfs_i - Do a statfs
950 * @sc: the sc structure
955 static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc) in gfs2_statfs_i() argument
957 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; in gfs2_statfs_i()
958 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; in gfs2_statfs_i()
960 spin_lock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
962 *sc = *m_sc; in gfs2_statfs_i()
963 sc->sc_total += l_sc->sc_total; in gfs2_statfs_i()
964 sc->sc_free += l_sc->sc_free; in gfs2_statfs_i()
965 sc->sc_dinodes += l_sc->sc_dinodes; in gfs2_statfs_i()
967 spin_unlock(&sdp->sd_statfs_spin); in gfs2_statfs_i()
969 if (sc->sc_free < 0) in gfs2_statfs_i()
970 sc->sc_free = 0; in gfs2_statfs_i()
971 if (sc->sc_free > sc->sc_total) in gfs2_statfs_i()
972 sc->sc_free = sc->sc_total; in gfs2_statfs_i()
973 if (sc->sc_dinodes < 0) in gfs2_statfs_i()
974 sc->sc_dinodes = 0; in gfs2_statfs_i()
980 * gfs2_statfs - Gather and return stats about the filesystem
989 struct super_block *sb = dentry->d_sb; in gfs2_statfs()
990 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_statfs()
991 struct gfs2_statfs_change_host sc; in gfs2_statfs() local
999 error = gfs2_statfs_slow(sdp, &sc); in gfs2_statfs()
1001 error = gfs2_statfs_i(sdp, &sc); in gfs2_statfs()
1006 buf->f_type = GFS2_MAGIC; in gfs2_statfs()
1007 buf->f_bsize = sdp->sd_sb.sb_bsize; in gfs2_statfs()
1008 buf->f_blocks = sc.sc_total; in gfs2_statfs()
1009 buf->f_bfree = sc.sc_free; in gfs2_statfs()
1010 buf->f_bavail = sc.sc_free; in gfs2_statfs()
1011 buf->f_files = sc.sc_dinodes + sc.sc_free; in gfs2_statfs()
1012 buf->f_ffree = sc.sc_free; in gfs2_statfs()
1013 buf->f_namelen = GFS2_FNAMESIZE; in gfs2_statfs()
1019 * gfs2_drop_inode - Drop an inode (test for remote unlink)
1038 if (inode->i_nlink && in gfs2_drop_inode()
1039 gfs2_holder_initialized(&ip->i_iopen_gh)) { in gfs2_drop_inode()
1040 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl; in gfs2_drop_inode()
1041 if (test_bit(GLF_DEMOTE, &gl->gl_flags)) in gfs2_drop_inode()
1050 if (!inode->i_nlink && in gfs2_drop_inode()
1051 unlikely(current->flags & PF_MEMALLOC) && in gfs2_drop_inode()
1052 gfs2_holder_initialized(&ip->i_iopen_gh)) { in gfs2_drop_inode()
1053 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl; in gfs2_drop_inode()
1064 if (test_bit(SDF_EVICTING, &sdp->sd_flags)) in gfs2_drop_inode()
1075 d1 = d1->d_parent; in is_ancestor()
1081 * gfs2_show_options - Show mount options for /proc/mounts
1090 struct gfs2_sbd *sdp = root->d_sb->s_fs_info; in gfs2_show_options()
1091 struct gfs2_args *args = &sdp->sd_args; in gfs2_show_options()
1094 spin_lock(&sdp->sd_tune.gt_spin); in gfs2_show_options()
1095 logd_secs = sdp->sd_tune.gt_logd_secs; in gfs2_show_options()
1096 quota_quantum = sdp->sd_tune.gt_quota_quantum; in gfs2_show_options()
1097 statfs_quantum = sdp->sd_tune.gt_statfs_quantum; in gfs2_show_options()
1098 statfs_slow = sdp->sd_tune.gt_statfs_slow; in gfs2_show_options()
1099 spin_unlock(&sdp->sd_tune.gt_spin); in gfs2_show_options()
1101 if (is_ancestor(root, sdp->sd_master_dir)) in gfs2_show_options()
1103 if (args->ar_lockproto[0]) in gfs2_show_options()
1104 seq_show_option(s, "lockproto", args->ar_lockproto); in gfs2_show_options()
1105 if (args->ar_locktable[0]) in gfs2_show_options()
1106 seq_show_option(s, "locktable", args->ar_locktable); in gfs2_show_options()
1107 if (args->ar_hostdata[0]) in gfs2_show_options()
1108 seq_show_option(s, "hostdata", args->ar_hostdata); in gfs2_show_options()
1109 if (args->ar_spectator) in gfs2_show_options()
1111 if (args->ar_localflocks) in gfs2_show_options()
1113 if (args->ar_debug) in gfs2_show_options()
1115 if (args->ar_posix_acl) in gfs2_show_options()
1117 if (args->ar_quota != GFS2_QUOTA_DEFAULT) { in gfs2_show_options()
1119 switch (args->ar_quota) { in gfs2_show_options()
1138 if (args->ar_suiddir) in gfs2_show_options()
1140 if (args->ar_data != GFS2_DATA_DEFAULT) { in gfs2_show_options()
1142 switch (args->ar_data) { in gfs2_show_options()
1155 if (args->ar_discard) in gfs2_show_options()
1165 if (args->ar_statfs_percent) in gfs2_show_options()
1166 seq_printf(s, ",statfs_percent=%d", args->ar_statfs_percent); in gfs2_show_options()
1167 if (args->ar_errors != GFS2_ERRORS_DEFAULT) { in gfs2_show_options()
1170 switch (args->ar_errors) { in gfs2_show_options()
1183 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags)) in gfs2_show_options()
1185 if (test_bit(SDF_DEMOTE, &sdp->sd_flags)) in gfs2_show_options()
1187 if (args->ar_rgrplvb) in gfs2_show_options()
1189 if (args->ar_loccookie) in gfs2_show_options()
1196 struct inode *inode = &ip->i_inode; in gfs2_final_release_pages()
1197 struct gfs2_glock *gl = ip->i_gl; in gfs2_final_release_pages()
1201 BUG_ON(!test_bit(GIF_ALLOC_FAILED, &ip->i_flags)); in gfs2_final_release_pages()
1206 truncate_inode_pages(&inode->i_data, 0); in gfs2_final_release_pages()
1208 if (atomic_read(&gl->gl_revokes) == 0) { in gfs2_final_release_pages()
1209 clear_bit(GLF_LFLUSH, &gl->gl_flags); in gfs2_final_release_pages()
1210 clear_bit(GLF_DIRTY, &gl->gl_flags); in gfs2_final_release_pages()
1216 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); in gfs2_dinode_dealloc()
1221 if (gfs2_get_inode_blocks(&ip->i_inode) != 1) { in gfs2_dinode_dealloc()
1223 return -EIO; in gfs2_dinode_dealloc()
1232 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1); in gfs2_dinode_dealloc()
1235 error = -EIO; in gfs2_dinode_dealloc()
1239 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, in gfs2_dinode_dealloc()
1245 sdp->sd_jdesc->jd_blocks); in gfs2_dinode_dealloc()
1272 if (current->flags & PF_MEMALLOC) in gfs2_glock_put_eventually()
1282 struct gfs2_holder *gh = &ip->i_iopen_gh; in gfs2_upgrade_iopen_glock()
1286 gh->gh_flags |= GL_NOCACHE; in gfs2_upgrade_iopen_glock()
1324 timeout = wait_event_interruptible_timeout(sdp->sd_async_glock_wait, in gfs2_upgrade_iopen_glock()
1325 !test_bit(HIF_WAIT, &gh->gh_iflags) || in gfs2_upgrade_iopen_glock()
1326 test_bit(GLF_DEMOTE, &ip->i_gl->gl_flags), in gfs2_upgrade_iopen_glock()
1328 if (!test_bit(HIF_HOLDER, &gh->gh_iflags)) { in gfs2_upgrade_iopen_glock()
1336 * evict_should_delete - determine whether the inode is eligible for deletion
1349 struct super_block *sb = inode->i_sb; in evict_should_delete()
1350 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_should_delete()
1353 if (unlikely(test_bit(GIF_ALLOC_FAILED, &ip->i_flags))) in evict_should_delete()
1356 if (test_bit(GIF_DEFERRED_DELETE, &ip->i_flags)) in evict_should_delete()
1360 if (WARN_ON_ONCE(current->flags & PF_MEMALLOC)) in evict_should_delete()
1364 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, gh); in evict_should_delete()
1366 glock_clear_object(ip->i_iopen_gh.gh_gl, ip); in evict_should_delete()
1367 ip->i_iopen_gh.gh_flags |= GL_NOCACHE; in evict_should_delete()
1368 gfs2_glock_dq_uninit(&ip->i_iopen_gh); in evict_should_delete()
1372 if (gfs2_inode_already_deleted(ip->i_gl, ip->i_no_formal_ino)) in evict_should_delete()
1374 ret = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED); in evict_should_delete()
1385 if (inode->i_nlink) in evict_should_delete()
1389 if (gfs2_holder_initialized(&ip->i_iopen_gh) && in evict_should_delete()
1390 test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) { in evict_should_delete()
1392 gfs2_holder_uninit(&ip->i_iopen_gh); in evict_should_delete()
1400 * evict_unlinked_inode - delete the pieces of an unlinked evicted inode
1408 if (S_ISDIR(inode->i_mode) && in evict_unlinked_inode()
1409 (ip->i_diskflags & GFS2_DIF_EXHASH)) { in evict_unlinked_inode()
1415 if (ip->i_eattr) { in evict_unlinked_inode()
1434 * ->evict_inode() returns. The new inode is attached to its inode and in evict_unlinked_inode()
1440 if (!ret && ip->i_gl) in evict_unlinked_inode()
1441 gfs2_inode_remember_delete(ip->i_gl, ip->i_no_formal_ino); in evict_unlinked_inode()
1448 * evict_linked_inode - evict an inode whose dinode has not been unlinked
1453 struct super_block *sb = inode->i_sb; in evict_linked_inode()
1454 struct gfs2_sbd *sdp = sb->s_fs_info; in evict_linked_inode()
1459 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL | in evict_linked_inode()
1461 metamapping = gfs2_glock2aspace(ip->i_gl); in evict_linked_inode()
1462 if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) { in evict_linked_inode()
1467 gfs2_ail_flush(ip->i_gl, 0); in evict_linked_inode()
1469 ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); in evict_linked_inode()
1474 truncate_inode_pages(&inode->i_data, 0); in evict_linked_inode()
1481 * gfs2_evict_inode - Remove an inode from cache
1492 * in the same resource group
1496 * taking the exclusive lock. I'd rather do a shared -> exclusive
1503 struct super_block *sb = inode->i_sb; in gfs2_evict_inode()
1504 struct gfs2_sbd *sdp = sb->s_fs_info; in gfs2_evict_inode()
1509 if (inode->i_nlink || sb_rdonly(sb) || !ip->i_no_addr) in gfs2_evict_inode()
1517 if (!sdp->sd_jdesc) in gfs2_evict_inode()
1529 if (gfs2_rs_active(&ip->i_res)) in gfs2_evict_inode()
1530 gfs2_rs_deltree(&ip->i_res); in gfs2_evict_inode()
1534 if (ret && ret != GLR_TRYFAILED && ret != -EROFS) in gfs2_evict_inode()
1537 truncate_inode_pages_final(&inode->i_data); in gfs2_evict_inode()
1538 if (ip->i_qadata) in gfs2_evict_inode()
1539 gfs2_assert_warn(sdp, ip->i_qadata->qa_ref == 0); in gfs2_evict_inode()
1540 gfs2_rs_deltree(&ip->i_res); in gfs2_evict_inode()
1544 if (gfs2_holder_initialized(&ip->i_iopen_gh)) { in gfs2_evict_inode()
1545 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl; in gfs2_evict_inode()
1549 ip->i_iopen_gh.gh_flags |= GL_NOCACHE; in gfs2_evict_inode()
1550 gfs2_glock_dq_uninit(&ip->i_iopen_gh); in gfs2_evict_inode()
1553 if (ip->i_gl) { in gfs2_evict_inode()
1554 glock_clear_object(ip->i_gl, ip); in gfs2_evict_inode()
1555 wait_on_bit_io(&ip->i_flags, GIF_GLOP_PENDING, TASK_UNINTERRUPTIBLE); in gfs2_evict_inode()
1556 gfs2_glock_add_to_lru(ip->i_gl); in gfs2_evict_inode()
1557 gfs2_glock_put_eventually(ip->i_gl); in gfs2_evict_inode()
1558 rcu_assign_pointer(ip->i_gl, NULL); in gfs2_evict_inode()
1569 ip->i_no_addr = 0; in gfs2_alloc_inode()
1570 ip->i_no_formal_ino = 0; in gfs2_alloc_inode()
1571 ip->i_flags = 0; in gfs2_alloc_inode()
1572 ip->i_gl = NULL; in gfs2_alloc_inode()
1573 gfs2_holder_mark_uninitialized(&ip->i_iopen_gh); in gfs2_alloc_inode()
1574 memset(&ip->i_res, 0, sizeof(ip->i_res)); in gfs2_alloc_inode()
1575 RB_CLEAR_NODE(&ip->i_res.rs_node); in gfs2_alloc_inode()
1576 ip->i_diskflags = 0; in gfs2_alloc_inode()
1577 ip->i_rahead = 0; in gfs2_alloc_inode()
1578 return &ip->i_inode; in gfs2_alloc_inode()
1591 list_for_each_entry_safe(lsi, safe, &sdp->sd_sc_inodes_list, si_list) { in free_local_statfs_inodes()
1592 if (lsi->si_jid == sdp->sd_jdesc->jd_jid) in free_local_statfs_inodes()
1593 sdp->sd_sc_inode = NULL; /* belongs to this node */ in free_local_statfs_inodes()
1594 if (lsi->si_sc_inode) in free_local_statfs_inodes()
1595 iput(lsi->si_sc_inode); in free_local_statfs_inodes()
1596 list_del(&lsi->si_list); in free_local_statfs_inodes()
1607 * sdp->sd_sc_inodes_list corresponding to the 'index'. */ in find_local_statfs_inode()
1608 list_for_each_entry(lsi, &sdp->sd_sc_inodes_list, si_list) { in find_local_statfs_inode()
1609 if (lsi->si_jid == index) in find_local_statfs_inode()
1610 return lsi->si_sc_inode; in find_local_statfs_inode()