Lines Matching full:ip

74 	struct xfs_inode	*ip;  in xfs_inode_alloc()  local
80 ip = kmem_cache_alloc(xfs_inode_zone, GFP_KERNEL | __GFP_NOFAIL); in xfs_inode_alloc()
82 if (inode_init_always(mp->m_super, VFS_I(ip))) { in xfs_inode_alloc()
83 kmem_cache_free(xfs_inode_zone, ip); in xfs_inode_alloc()
88 VFS_I(ip)->i_mode = 0; in xfs_inode_alloc()
89 VFS_I(ip)->i_state = 0; in xfs_inode_alloc()
92 ASSERT(atomic_read(&ip->i_pincount) == 0); in xfs_inode_alloc()
93 ASSERT(ip->i_ino == 0); in xfs_inode_alloc()
96 ip->i_ino = ino; in xfs_inode_alloc()
97 ip->i_mount = mp; in xfs_inode_alloc()
98 memset(&ip->i_imap, 0, sizeof(struct xfs_imap)); in xfs_inode_alloc()
99 ip->i_afp = NULL; in xfs_inode_alloc()
100 ip->i_cowfp = NULL; in xfs_inode_alloc()
101 memset(&ip->i_df, 0, sizeof(ip->i_df)); in xfs_inode_alloc()
102 ip->i_flags = 0; in xfs_inode_alloc()
103 ip->i_delayed_blks = 0; in xfs_inode_alloc()
104 ip->i_diflags2 = mp->m_ino_geo.new_diflags2; in xfs_inode_alloc()
105 ip->i_nblocks = 0; in xfs_inode_alloc()
106 ip->i_forkoff = 0; in xfs_inode_alloc()
107 ip->i_sick = 0; in xfs_inode_alloc()
108 ip->i_checked = 0; in xfs_inode_alloc()
109 INIT_WORK(&ip->i_ioend_work, xfs_end_io); in xfs_inode_alloc()
110 INIT_LIST_HEAD(&ip->i_ioend_list); in xfs_inode_alloc()
111 spin_lock_init(&ip->i_ioend_lock); in xfs_inode_alloc()
113 return ip; in xfs_inode_alloc()
121 struct xfs_inode *ip = XFS_I(inode); in xfs_inode_free_callback() local
123 switch (VFS_I(ip)->i_mode & S_IFMT) { in xfs_inode_free_callback()
127 xfs_idestroy_fork(&ip->i_df); in xfs_inode_free_callback()
131 if (ip->i_afp) { in xfs_inode_free_callback()
132 xfs_idestroy_fork(ip->i_afp); in xfs_inode_free_callback()
133 kmem_cache_free(xfs_ifork_zone, ip->i_afp); in xfs_inode_free_callback()
135 if (ip->i_cowfp) { in xfs_inode_free_callback()
136 xfs_idestroy_fork(ip->i_cowfp); in xfs_inode_free_callback()
137 kmem_cache_free(xfs_ifork_zone, ip->i_cowfp); in xfs_inode_free_callback()
139 if (ip->i_itemp) { in xfs_inode_free_callback()
141 &ip->i_itemp->ili_item.li_flags)); in xfs_inode_free_callback()
142 xfs_inode_item_destroy(ip); in xfs_inode_free_callback()
143 ip->i_itemp = NULL; in xfs_inode_free_callback()
146 kmem_cache_free(xfs_inode_zone, ip); in xfs_inode_free_callback()
151 struct xfs_inode *ip) in __xfs_inode_free() argument
154 ASSERT(atomic_read(&ip->i_pincount) == 0); in __xfs_inode_free()
155 ASSERT(!ip->i_itemp || list_empty(&ip->i_itemp->ili_item.li_bio_list)); in __xfs_inode_free()
156 XFS_STATS_DEC(ip->i_mount, vn_active); in __xfs_inode_free()
158 call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback); in __xfs_inode_free()
163 struct xfs_inode *ip) in xfs_inode_free() argument
165 ASSERT(!xfs_iflags_test(ip, XFS_IFLUSHING)); in xfs_inode_free()
170 * free state. The ip->i_flags_lock provides the barrier against lookup in xfs_inode_free()
173 spin_lock(&ip->i_flags_lock); in xfs_inode_free()
174 ip->i_flags = XFS_IRECLAIM; in xfs_inode_free()
175 ip->i_ino = 0; in xfs_inode_free()
176 spin_unlock(&ip->i_flags_lock); in xfs_inode_free()
178 __xfs_inode_free(ip); in xfs_inode_free()
294 struct xfs_inode *ip) in xfs_inew_wait() argument
296 wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_INEW_BIT); in xfs_inew_wait()
297 DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_INEW_BIT); in xfs_inew_wait()
301 if (!xfs_iflags_test(ip, XFS_INEW)) in xfs_inew_wait()
349 struct xfs_inode *ip) __releases(&ip->i_flags_lock) in xfs_iget_recycle() argument
351 struct xfs_mount *mp = ip->i_mount; in xfs_iget_recycle()
352 struct inode *inode = VFS_I(ip); in xfs_iget_recycle()
355 trace_xfs_iget_recycle(ip); in xfs_iget_recycle()
363 ip->i_flags |= XFS_IRECLAIM; in xfs_iget_recycle()
365 spin_unlock(&ip->i_flags_lock); in xfs_iget_recycle()
378 spin_lock(&ip->i_flags_lock); in xfs_iget_recycle()
379 wake = !!__xfs_iflags_test(ip, XFS_INEW); in xfs_iget_recycle()
380 ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM); in xfs_iget_recycle()
382 wake_up_bit(&ip->i_flags, __XFS_INEW_BIT); in xfs_iget_recycle()
383 ASSERT(ip->i_flags & XFS_IRECLAIMABLE); in xfs_iget_recycle()
384 spin_unlock(&ip->i_flags_lock); in xfs_iget_recycle()
387 trace_xfs_iget_recycle_fail(ip); in xfs_iget_recycle()
392 spin_lock(&ip->i_flags_lock); in xfs_iget_recycle()
399 ip->i_flags &= ~XFS_IRECLAIM_RESET_FLAGS; in xfs_iget_recycle()
400 ip->i_flags |= XFS_INEW; in xfs_iget_recycle()
401 xfs_perag_clear_inode_tag(pag, XFS_INO_TO_AGINO(mp, ip->i_ino), in xfs_iget_recycle()
404 spin_unlock(&ip->i_flags_lock); in xfs_iget_recycle()
422 struct xfs_inode *ip, in xfs_iget_check_free_state() argument
427 if (VFS_I(ip)->i_mode != 0) { in xfs_iget_check_free_state()
428 xfs_warn(ip->i_mount, in xfs_iget_check_free_state()
430 ip->i_ino, VFS_I(ip)->i_mode); in xfs_iget_check_free_state()
434 if (ip->i_nblocks != 0) { in xfs_iget_check_free_state()
435 xfs_warn(ip->i_mount, in xfs_iget_check_free_state()
437 ip->i_ino); in xfs_iget_check_free_state()
444 if (VFS_I(ip)->i_mode == 0) in xfs_iget_check_free_state()
471 struct xfs_inode *ip, in xfs_iget_cache_hit() argument
476 struct inode *inode = VFS_I(ip); in xfs_iget_cache_hit()
477 struct xfs_mount *mp = ip->i_mount; in xfs_iget_cache_hit()
487 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
488 if (ip->i_ino != ino) in xfs_iget_cache_hit()
509 if (ip->i_flags & (XFS_INEW | XFS_IRECLAIM | XFS_INACTIVATING)) in xfs_iget_cache_hit()
512 if (ip->i_flags & XFS_NEED_INACTIVE) { in xfs_iget_cache_hit()
514 if (VFS_I(ip)->i_nlink == 0) { in xfs_iget_cache_hit()
525 error = xfs_iget_check_free_state(ip, flags); in xfs_iget_cache_hit()
531 (ip->i_flags & XFS_IRECLAIMABLE)) in xfs_iget_cache_hit()
535 if (ip->i_flags & XFS_IRECLAIMABLE) { in xfs_iget_cache_hit()
537 error = xfs_iget_recycle(pag, ip); in xfs_iget_cache_hit()
546 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
548 trace_xfs_iget_hit(ip); in xfs_iget_cache_hit()
552 xfs_ilock(ip, lock_flags); in xfs_iget_cache_hit()
555 xfs_iflags_clear(ip, XFS_ISTALE); in xfs_iget_cache_hit()
561 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
565 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
570 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
591 struct xfs_inode *ip; in xfs_iget_cache_miss() local
596 ip = xfs_inode_alloc(mp, ino); in xfs_iget_cache_miss()
597 if (!ip) in xfs_iget_cache_miss()
600 error = xfs_imap(mp, tp, ip->i_ino, &ip->i_imap, flags); in xfs_iget_cache_miss()
616 VFS_I(ip)->i_generation = prandom_u32(); in xfs_iget_cache_miss()
620 error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &bp); in xfs_iget_cache_miss()
624 error = xfs_inode_from_disk(ip, in xfs_iget_cache_miss()
625 xfs_buf_offset(bp, ip->i_imap.im_boffset)); in xfs_iget_cache_miss()
634 trace_xfs_iget_miss(ip); in xfs_iget_cache_miss()
640 error = xfs_iget_check_free_state(ip, flags); in xfs_iget_cache_miss()
660 if (!xfs_ilock_nowait(ip, lock_flags)) in xfs_iget_cache_miss()
669 * The ip->i_flags_lock that protects the XFS_INEW flag forms the in xfs_iget_cache_miss()
675 d_mark_dontcache(VFS_I(ip)); in xfs_iget_cache_miss()
676 ip->i_udquot = NULL; in xfs_iget_cache_miss()
677 ip->i_gdquot = NULL; in xfs_iget_cache_miss()
678 ip->i_pdquot = NULL; in xfs_iget_cache_miss()
679 xfs_iflags_set(ip, iflags); in xfs_iget_cache_miss()
683 error = radix_tree_insert(&pag->pag_ici_root, agino, ip); in xfs_iget_cache_miss()
693 *ipp = ip; in xfs_iget_cache_miss()
700 xfs_iunlock(ip, lock_flags); in xfs_iget_cache_miss()
702 __destroy_inode(VFS_I(ip)); in xfs_iget_cache_miss()
703 xfs_inode_free(ip); in xfs_iget_cache_miss()
728 struct xfs_inode *ip; in xfs_iget() local
748 ip = radix_tree_lookup(&pag->pag_ici_root, agino); in xfs_iget()
750 if (ip) { in xfs_iget()
751 error = xfs_iget_cache_hit(pag, ip, ino, flags, lock_flags); in xfs_iget()
762 error = xfs_iget_cache_miss(mp, pag, tp, ino, &ip, in xfs_iget()
769 *ipp = ip; in xfs_iget()
775 if (xfs_iflags_test(ip, XFS_INEW) && VFS_I(ip)->i_mode != 0) in xfs_iget()
776 xfs_setup_existing_inode(ip); in xfs_iget()
814 struct xfs_inode *ip; in xfs_icache_inode_is_allocated() local
817 error = xfs_iget(mp, tp, ino, XFS_IGET_INCORE, 0, &ip); in xfs_icache_inode_is_allocated()
821 *inuse = !!(VFS_I(ip)->i_mode); in xfs_icache_inode_is_allocated()
822 xfs_irele(ip); in xfs_icache_inode_is_allocated()
845 struct xfs_inode *ip, in xfs_reclaim_igrab() argument
850 spin_lock(&ip->i_flags_lock); in xfs_reclaim_igrab()
851 if (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) || in xfs_reclaim_igrab()
852 __xfs_iflags_test(ip, XFS_IRECLAIM)) { in xfs_reclaim_igrab()
854 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_igrab()
859 if (ip->i_sick && in xfs_reclaim_igrab()
861 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_igrab()
865 __xfs_iflags_set(ip, XFS_IRECLAIM); in xfs_reclaim_igrab()
866 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_igrab()
884 struct xfs_inode *ip, in xfs_reclaim_inode() argument
887 xfs_ino_t ino = ip->i_ino; /* for radix_tree_delete */ in xfs_reclaim_inode()
889 if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) in xfs_reclaim_inode()
891 if (xfs_iflags_test_and_set(ip, XFS_IFLUSHING)) in xfs_reclaim_inode()
894 if (xfs_is_shutdown(ip->i_mount)) { in xfs_reclaim_inode()
895 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
896 xfs_iflush_abort(ip); in xfs_reclaim_inode()
899 if (xfs_ipincount(ip)) in xfs_reclaim_inode()
901 if (!xfs_inode_clean(ip)) in xfs_reclaim_inode()
904 xfs_iflags_clear(ip, XFS_IFLUSHING); in xfs_reclaim_inode()
906 trace_xfs_inode_reclaiming(ip); in xfs_reclaim_inode()
918 spin_lock(&ip->i_flags_lock); in xfs_reclaim_inode()
919 ip->i_flags = XFS_IRECLAIM; in xfs_reclaim_inode()
920 ip->i_ino = 0; in xfs_reclaim_inode()
921 ip->i_sick = 0; in xfs_reclaim_inode()
922 ip->i_checked = 0; in xfs_reclaim_inode()
923 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode()
925 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
927 XFS_STATS_INC(ip->i_mount, xs_ig_reclaims); in xfs_reclaim_inode()
937 XFS_INO_TO_AGINO(ip->i_mount, ino))) in xfs_reclaim_inode()
950 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
951 ASSERT(!ip->i_udquot && !ip->i_gdquot && !ip->i_pdquot); in xfs_reclaim_inode()
952 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
953 ASSERT(xfs_inode_clean(ip)); in xfs_reclaim_inode()
955 __xfs_inode_free(ip); in xfs_reclaim_inode()
959 xfs_iflags_clear(ip, XFS_IFLUSHING); in xfs_reclaim_inode()
961 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
963 xfs_iflags_clear(ip, XFS_IRECLAIM); in xfs_reclaim_inode()
1042 struct xfs_inode *ip, in xfs_icwalk_match_id() argument
1046 !uid_eq(VFS_I(ip)->i_uid, icw->icw_uid)) in xfs_icwalk_match_id()
1050 !gid_eq(VFS_I(ip)->i_gid, icw->icw_gid)) in xfs_icwalk_match_id()
1054 ip->i_projid != icw->icw_prid) in xfs_icwalk_match_id()
1066 struct xfs_inode *ip, in xfs_icwalk_match_id_union() argument
1070 uid_eq(VFS_I(ip)->i_uid, icw->icw_uid)) in xfs_icwalk_match_id_union()
1074 gid_eq(VFS_I(ip)->i_gid, icw->icw_gid)) in xfs_icwalk_match_id_union()
1078 ip->i_projid == icw->icw_prid) in xfs_icwalk_match_id_union()
1085 * Is this inode @ip eligible for eof/cow block reclamation, given some
1091 struct xfs_inode *ip, in xfs_icwalk_match() argument
1100 match = xfs_icwalk_match_id_union(ip, icw); in xfs_icwalk_match()
1102 match = xfs_icwalk_match_id(ip, icw); in xfs_icwalk_match()
1108 XFS_ISIZE(ip) < icw->icw_min_file_size) in xfs_icwalk_match()
1133 struct xfs_inode *ip, in xfs_inode_free_eofblocks() argument
1141 if (!xfs_iflags_test(ip, XFS_IEOFBLOCKS)) in xfs_inode_free_eofblocks()
1148 if (!wait && mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY)) in xfs_inode_free_eofblocks()
1151 if (!xfs_icwalk_match(ip, icw)) in xfs_inode_free_eofblocks()
1158 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { in xfs_inode_free_eofblocks()
1165 if (xfs_can_free_eofblocks(ip, false)) in xfs_inode_free_eofblocks()
1166 return xfs_free_eofblocks(ip); in xfs_inode_free_eofblocks()
1169 trace_xfs_inode_free_eofblocks_invalid(ip); in xfs_inode_free_eofblocks()
1170 xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_free_eofblocks()
1176 struct xfs_inode *ip, in xfs_blockgc_set_iflag() argument
1179 struct xfs_mount *mp = ip->i_mount; in xfs_blockgc_set_iflag()
1188 if (ip->i_flags & iflag) in xfs_blockgc_set_iflag()
1190 spin_lock(&ip->i_flags_lock); in xfs_blockgc_set_iflag()
1191 ip->i_flags |= iflag; in xfs_blockgc_set_iflag()
1192 spin_unlock(&ip->i_flags_lock); in xfs_blockgc_set_iflag()
1194 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_blockgc_set_iflag()
1197 xfs_perag_set_inode_tag(pag, XFS_INO_TO_AGINO(mp, ip->i_ino), in xfs_blockgc_set_iflag()
1206 xfs_inode_t *ip) in xfs_inode_set_eofblocks_tag() argument
1208 trace_xfs_inode_set_eofblocks_tag(ip); in xfs_inode_set_eofblocks_tag()
1209 return xfs_blockgc_set_iflag(ip, XFS_IEOFBLOCKS); in xfs_inode_set_eofblocks_tag()
1214 struct xfs_inode *ip, in xfs_blockgc_clear_iflag() argument
1217 struct xfs_mount *mp = ip->i_mount; in xfs_blockgc_clear_iflag()
1223 spin_lock(&ip->i_flags_lock); in xfs_blockgc_clear_iflag()
1224 ip->i_flags &= ~iflag; in xfs_blockgc_clear_iflag()
1225 clear_tag = (ip->i_flags & (XFS_IEOFBLOCKS | XFS_ICOWBLOCKS)) == 0; in xfs_blockgc_clear_iflag()
1226 spin_unlock(&ip->i_flags_lock); in xfs_blockgc_clear_iflag()
1231 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_blockgc_clear_iflag()
1234 xfs_perag_clear_inode_tag(pag, XFS_INO_TO_AGINO(mp, ip->i_ino), in xfs_blockgc_clear_iflag()
1243 xfs_inode_t *ip) in xfs_inode_clear_eofblocks_tag() argument
1245 trace_xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_clear_eofblocks_tag()
1246 return xfs_blockgc_clear_iflag(ip, XFS_IEOFBLOCKS); in xfs_inode_clear_eofblocks_tag()
1256 struct xfs_inode *ip) in xfs_prep_free_cowblocks() argument
1262 if (!xfs_inode_has_cow_data(ip)) { in xfs_prep_free_cowblocks()
1263 trace_xfs_inode_free_cowblocks_invalid(ip); in xfs_prep_free_cowblocks()
1264 xfs_inode_clear_cowblocks_tag(ip); in xfs_prep_free_cowblocks()
1272 if ((VFS_I(ip)->i_state & I_DIRTY_PAGES) || in xfs_prep_free_cowblocks()
1273 mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY) || in xfs_prep_free_cowblocks()
1274 mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_WRITEBACK) || in xfs_prep_free_cowblocks()
1275 atomic_read(&VFS_I(ip)->i_dio_count)) in xfs_prep_free_cowblocks()
1295 struct xfs_inode *ip, in xfs_inode_free_cowblocks() argument
1304 if (!xfs_iflags_test(ip, XFS_ICOWBLOCKS)) in xfs_inode_free_cowblocks()
1307 if (!xfs_prep_free_cowblocks(ip)) in xfs_inode_free_cowblocks()
1310 if (!xfs_icwalk_match(ip, icw)) in xfs_inode_free_cowblocks()
1318 !xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { in xfs_inode_free_cowblocks()
1325 if (!xfs_ilock_nowait(ip, XFS_MMAPLOCK_EXCL)) { in xfs_inode_free_cowblocks()
1336 if (xfs_prep_free_cowblocks(ip)) in xfs_inode_free_cowblocks()
1337 ret = xfs_reflink_cancel_cow_range(ip, 0, NULLFILEOFF, false); in xfs_inode_free_cowblocks()
1343 xfs_inode_t *ip) in xfs_inode_set_cowblocks_tag() argument
1345 trace_xfs_inode_set_cowblocks_tag(ip); in xfs_inode_set_cowblocks_tag()
1346 return xfs_blockgc_set_iflag(ip, XFS_ICOWBLOCKS); in xfs_inode_set_cowblocks_tag()
1351 xfs_inode_t *ip) in xfs_inode_clear_cowblocks_tag() argument
1353 trace_xfs_inode_clear_cowblocks_tag(ip); in xfs_inode_clear_cowblocks_tag()
1354 return xfs_blockgc_clear_iflag(ip, XFS_ICOWBLOCKS); in xfs_inode_clear_cowblocks_tag()
1396 * Decide if the given @ip is eligible for garbage collection of speculative
1402 struct xfs_inode *ip) in xfs_blockgc_igrab() argument
1404 struct inode *inode = VFS_I(ip); in xfs_blockgc_igrab()
1409 spin_lock(&ip->i_flags_lock); in xfs_blockgc_igrab()
1410 if (!ip->i_ino) in xfs_blockgc_igrab()
1413 if (ip->i_flags & XFS_BLOCKGC_NOGRAB_IFLAGS) in xfs_blockgc_igrab()
1415 spin_unlock(&ip->i_flags_lock); in xfs_blockgc_igrab()
1418 if (xfs_is_shutdown(ip->i_mount)) in xfs_blockgc_igrab()
1429 spin_unlock(&ip->i_flags_lock); in xfs_blockgc_igrab()
1436 struct xfs_inode *ip, in xfs_blockgc_scan_inode() argument
1442 error = xfs_inode_free_eofblocks(ip, icw, &lockflags); in xfs_blockgc_scan_inode()
1446 error = xfs_inode_free_cowblocks(ip, icw, &lockflags); in xfs_blockgc_scan_inode()
1449 xfs_iunlock(ip, lockflags); in xfs_blockgc_scan_inode()
1450 xfs_irele(ip); in xfs_blockgc_scan_inode()
1579 struct xfs_inode *ip, in xfs_blockgc_free_quota() argument
1582 return xfs_blockgc_free_dquots(ip->i_mount, in xfs_blockgc_free_quota()
1583 xfs_inode_dquot(ip, XFS_DQTYPE_USER), in xfs_blockgc_free_quota()
1584 xfs_inode_dquot(ip, XFS_DQTYPE_GROUP), in xfs_blockgc_free_quota()
1585 xfs_inode_dquot(ip, XFS_DQTYPE_PROJ), iwalk_flags); in xfs_blockgc_free_quota()
1606 struct xfs_inode *ip, in xfs_icwalk_igrab() argument
1611 return xfs_blockgc_igrab(ip); in xfs_icwalk_igrab()
1613 return xfs_reclaim_igrab(ip, icw); in xfs_icwalk_igrab()
1626 struct xfs_inode *ip, in xfs_icwalk_process_inode() argument
1634 error = xfs_blockgc_scan_inode(ip, icw); in xfs_icwalk_process_inode()
1637 xfs_reclaim_inode(ip, pag); in xfs_icwalk_process_inode()
1689 struct xfs_inode *ip = batch[i]; in xfs_icwalk_ag() local
1691 if (done || !xfs_icwalk_igrab(goal, ip, icw)) in xfs_icwalk_ag()
1706 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != pag->pag_agno) in xfs_icwalk_ag()
1708 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_icwalk_ag()
1709 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_icwalk_ag()
1784 struct xfs_inode *ip, in xfs_check_delalloc() argument
1787 struct xfs_ifork *ifp = XFS_IFORK_PTR(ip, whichfork); in xfs_check_delalloc()
1791 if (!ifp || !xfs_iext_lookup_extent(ip, ifp, 0, &icur, &got)) in xfs_check_delalloc()
1795 xfs_warn(ip->i_mount, in xfs_check_delalloc()
1797 ip->i_ino, in xfs_check_delalloc()
1804 #define xfs_check_delalloc(ip, whichfork) do { } while (0) argument
1810 struct xfs_inode *ip) in xfs_inodegc_set_reclaimable() argument
1812 struct xfs_mount *mp = ip->i_mount; in xfs_inodegc_set_reclaimable()
1815 if (!xfs_is_shutdown(mp) && ip->i_delayed_blks) { in xfs_inodegc_set_reclaimable()
1816 xfs_check_delalloc(ip, XFS_DATA_FORK); in xfs_inodegc_set_reclaimable()
1817 xfs_check_delalloc(ip, XFS_COW_FORK); in xfs_inodegc_set_reclaimable()
1821 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inodegc_set_reclaimable()
1823 spin_lock(&ip->i_flags_lock); in xfs_inodegc_set_reclaimable()
1825 trace_xfs_inode_set_reclaimable(ip); in xfs_inodegc_set_reclaimable()
1826 ip->i_flags &= ~(XFS_NEED_INACTIVE | XFS_INACTIVATING); in xfs_inodegc_set_reclaimable()
1827 ip->i_flags |= XFS_IRECLAIMABLE; in xfs_inodegc_set_reclaimable()
1828 xfs_perag_set_inode_tag(pag, XFS_INO_TO_AGINO(mp, ip->i_ino), in xfs_inodegc_set_reclaimable()
1831 spin_unlock(&ip->i_flags_lock); in xfs_inodegc_set_reclaimable()
1843 struct xfs_inode *ip) in xfs_inodegc_inactivate() argument
1845 trace_xfs_inode_inactivating(ip); in xfs_inodegc_inactivate()
1846 xfs_inactive(ip); in xfs_inodegc_inactivate()
1847 xfs_inodegc_set_reclaimable(ip); in xfs_inodegc_inactivate()
1857 struct xfs_inode *ip, *n; in xfs_inodegc_worker() local
1864 ip = llist_entry(node, struct xfs_inode, i_gclist); in xfs_inodegc_worker()
1865 trace_xfs_inodegc_worker(ip->i_mount, READ_ONCE(gc->shrinker_hits)); in xfs_inodegc_worker()
1868 llist_for_each_entry_safe(ip, n, node, i_gclist) { in xfs_inodegc_worker()
1869 xfs_iflags_set(ip, XFS_INACTIVATING); in xfs_inodegc_worker()
1870 xfs_inodegc_inactivate(ip); in xfs_inodegc_worker()
1940 struct xfs_inode *ip) in xfs_inodegc_want_queue_rt_file() argument
1942 struct xfs_mount *mp = ip->i_mount; in xfs_inodegc_want_queue_rt_file()
1945 if (!XFS_IS_REALTIME_INODE(ip)) in xfs_inodegc_want_queue_rt_file()
1952 # define xfs_inodegc_want_queue_rt_file(ip) (false) argument
1964 struct xfs_inode *ip, in xfs_inodegc_want_queue_work() argument
1967 struct xfs_mount *mp = ip->i_mount; in xfs_inodegc_want_queue_work()
1977 if (xfs_inodegc_want_queue_rt_file(ip)) in xfs_inodegc_want_queue_work()
1980 if (xfs_inode_near_dquot_enforcement(ip, XFS_DQTYPE_USER)) in xfs_inodegc_want_queue_work()
1983 if (xfs_inode_near_dquot_enforcement(ip, XFS_DQTYPE_GROUP)) in xfs_inodegc_want_queue_work()
1986 if (xfs_inode_near_dquot_enforcement(ip, XFS_DQTYPE_PROJ)) in xfs_inodegc_want_queue_work()
2009 struct xfs_inode *ip, in xfs_inodegc_want_flush_work() argument
2032 struct xfs_inode *ip) in xfs_inodegc_queue() argument
2034 struct xfs_mount *mp = ip->i_mount; in xfs_inodegc_queue()
2039 trace_xfs_inode_set_need_inactive(ip); in xfs_inodegc_queue()
2040 spin_lock(&ip->i_flags_lock); in xfs_inodegc_queue()
2041 ip->i_flags |= XFS_NEED_INACTIVE; in xfs_inodegc_queue()
2042 spin_unlock(&ip->i_flags_lock); in xfs_inodegc_queue()
2045 llist_add(&ip->i_gclist, &gc->list); in xfs_inodegc_queue()
2054 if (xfs_inodegc_want_queue_work(ip, items)) { in xfs_inodegc_queue()
2059 if (xfs_inodegc_want_flush_work(ip, items, shrinker_hits)) { in xfs_inodegc_queue()
2117 struct xfs_inode *ip) in xfs_inode_mark_reclaimable() argument
2119 struct xfs_mount *mp = ip->i_mount; in xfs_inode_mark_reclaimable()
2127 ASSERT_ALWAYS(!xfs_iflags_test(ip, XFS_ALL_IRECLAIM_FLAGS)); in xfs_inode_mark_reclaimable()
2129 need_inactive = xfs_inode_needs_inactive(ip); in xfs_inode_mark_reclaimable()
2131 xfs_inodegc_queue(ip); in xfs_inode_mark_reclaimable()
2136 xfs_qm_dqdetach(ip); in xfs_inode_mark_reclaimable()
2137 xfs_inodegc_set_reclaimable(ip); in xfs_inode_mark_reclaimable()