Lines Matching refs:ip
45 struct xfs_perag *pag, struct xfs_inode *ip);
55 struct xfs_inode *ip; in xfs_inode_alloc() local
62 ip = kmem_zone_alloc(xfs_inode_zone, KM_SLEEP); in xfs_inode_alloc()
63 if (!ip) in xfs_inode_alloc()
65 if (inode_init_always(mp->m_super, VFS_I(ip))) { in xfs_inode_alloc()
66 kmem_zone_free(xfs_inode_zone, ip); in xfs_inode_alloc()
70 ASSERT(atomic_read(&ip->i_pincount) == 0); in xfs_inode_alloc()
71 ASSERT(!spin_is_locked(&ip->i_flags_lock)); in xfs_inode_alloc()
72 ASSERT(!xfs_isiflocked(ip)); in xfs_inode_alloc()
73 ASSERT(ip->i_ino == 0); in xfs_inode_alloc()
75 mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); in xfs_inode_alloc()
78 ip->i_ino = ino; in xfs_inode_alloc()
79 ip->i_mount = mp; in xfs_inode_alloc()
80 memset(&ip->i_imap, 0, sizeof(struct xfs_imap)); in xfs_inode_alloc()
81 ip->i_afp = NULL; in xfs_inode_alloc()
82 memset(&ip->i_df, 0, sizeof(xfs_ifork_t)); in xfs_inode_alloc()
83 ip->i_flags = 0; in xfs_inode_alloc()
84 ip->i_delayed_blks = 0; in xfs_inode_alloc()
85 memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); in xfs_inode_alloc()
87 return ip; in xfs_inode_alloc()
95 struct xfs_inode *ip = XFS_I(inode); in xfs_inode_free_callback() local
97 kmem_zone_free(xfs_inode_zone, ip); in xfs_inode_free_callback()
102 struct xfs_inode *ip) in xfs_inode_free() argument
104 switch (ip->i_d.di_mode & S_IFMT) { in xfs_inode_free()
108 xfs_idestroy_fork(ip, XFS_DATA_FORK); in xfs_inode_free()
112 if (ip->i_afp) in xfs_inode_free()
113 xfs_idestroy_fork(ip, XFS_ATTR_FORK); in xfs_inode_free()
115 if (ip->i_itemp) { in xfs_inode_free()
116 ASSERT(!(ip->i_itemp->ili_item.li_flags & XFS_LI_IN_AIL)); in xfs_inode_free()
117 xfs_inode_item_destroy(ip); in xfs_inode_free()
118 ip->i_itemp = NULL; in xfs_inode_free()
122 ASSERT(atomic_read(&ip->i_pincount) == 0); in xfs_inode_free()
123 ASSERT(!spin_is_locked(&ip->i_flags_lock)); in xfs_inode_free()
124 ASSERT(!xfs_isiflocked(ip)); in xfs_inode_free()
132 spin_lock(&ip->i_flags_lock); in xfs_inode_free()
133 ip->i_flags = XFS_IRECLAIM; in xfs_inode_free()
134 ip->i_ino = 0; in xfs_inode_free()
135 spin_unlock(&ip->i_flags_lock); in xfs_inode_free()
137 call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback); in xfs_inode_free()
146 struct xfs_inode *ip, in xfs_iget_cache_hit() argument
151 struct inode *inode = VFS_I(ip); in xfs_iget_cache_hit()
152 struct xfs_mount *mp = ip->i_mount; in xfs_iget_cache_hit()
162 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
163 if (ip->i_ino != ino) { in xfs_iget_cache_hit()
164 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
181 if (ip->i_flags & (XFS_INEW|XFS_IRECLAIM)) { in xfs_iget_cache_hit()
182 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
191 if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { in xfs_iget_cache_hit()
200 if (ip->i_flags & XFS_IRECLAIMABLE) { in xfs_iget_cache_hit()
201 trace_xfs_iget_reclaim(ip); in xfs_iget_cache_hit()
209 ip->i_flags |= XFS_IRECLAIM; in xfs_iget_cache_hit()
211 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
221 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
223 ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM); in xfs_iget_cache_hit()
224 ASSERT(ip->i_flags & XFS_IRECLAIMABLE); in xfs_iget_cache_hit()
225 trace_xfs_iget_reclaim_fail(ip); in xfs_iget_cache_hit()
230 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
237 ip->i_flags &= ~XFS_IRECLAIM_RESET_FLAGS; in xfs_iget_cache_hit()
238 ip->i_flags |= XFS_INEW; in xfs_iget_cache_hit()
239 __xfs_inode_clear_reclaim_tag(mp, pag, ip); in xfs_iget_cache_hit()
242 ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock)); in xfs_iget_cache_hit()
243 mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); in xfs_iget_cache_hit()
245 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
250 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
256 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
258 trace_xfs_iget_hit(ip); in xfs_iget_cache_hit()
262 xfs_ilock(ip, lock_flags); in xfs_iget_cache_hit()
264 xfs_iflags_clear(ip, XFS_ISTALE | XFS_IDONTCACHE); in xfs_iget_cache_hit()
270 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
286 struct xfs_inode *ip; in xfs_iget_cache_miss() local
291 ip = xfs_inode_alloc(mp, ino); in xfs_iget_cache_miss()
292 if (!ip) in xfs_iget_cache_miss()
295 error = xfs_iread(mp, tp, ip, flags); in xfs_iget_cache_miss()
299 trace_xfs_iget_miss(ip); in xfs_iget_cache_miss()
301 if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { in xfs_iget_cache_miss()
322 if (!xfs_ilock_nowait(ip, lock_flags)) in xfs_iget_cache_miss()
338 ip->i_udquot = ip->i_gdquot = NULL; in xfs_iget_cache_miss()
339 xfs_iflags_set(ip, iflags); in xfs_iget_cache_miss()
343 error = radix_tree_insert(&pag->pag_ici_root, agino, ip); in xfs_iget_cache_miss()
353 *ipp = ip; in xfs_iget_cache_miss()
360 xfs_iunlock(ip, lock_flags); in xfs_iget_cache_miss()
362 __destroy_inode(VFS_I(ip)); in xfs_iget_cache_miss()
363 xfs_inode_free(ip); in xfs_iget_cache_miss()
398 xfs_inode_t *ip; in xfs_iget() local
423 ip = radix_tree_lookup(&pag->pag_ici_root, agino); in xfs_iget()
425 if (ip) { in xfs_iget()
426 error = xfs_iget_cache_hit(pag, ip, ino, flags, lock_flags); in xfs_iget()
433 error = xfs_iget_cache_miss(mp, pag, tp, ino, &ip, in xfs_iget()
440 *ipp = ip; in xfs_iget()
446 if (xfs_iflags_test(ip, XFS_INEW) && ip->i_d.di_mode != 0) in xfs_iget()
447 xfs_setup_inode(ip); in xfs_iget()
469 struct xfs_inode *ip) in xfs_inode_ag_walk_grab() argument
471 struct inode *inode = VFS_I(ip); in xfs_inode_ag_walk_grab()
484 spin_lock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
485 if (!ip->i_ino) in xfs_inode_ag_walk_grab()
489 if (__xfs_iflags_test(ip, XFS_INEW | XFS_IRECLAIMABLE | XFS_IRECLAIM)) in xfs_inode_ag_walk_grab()
491 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
494 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) in xfs_inode_ag_walk_grab()
502 IRELE(ip); in xfs_inode_ag_walk_grab()
510 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
518 int (*execute)(struct xfs_inode *ip, in xfs_inode_ag_walk() argument
563 struct xfs_inode *ip = batch[i]; in xfs_inode_ag_walk() local
565 if (done || xfs_inode_ag_walk_grab(ip)) in xfs_inode_ag_walk()
580 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != pag->pag_agno) in xfs_inode_ag_walk()
582 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_inode_ag_walk()
583 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_inode_ag_walk()
647 int (*execute)(struct xfs_inode *ip, in xfs_inode_ag_iterator() argument
675 int (*execute)(struct xfs_inode *ip, in xfs_inode_ag_iterator_tag() argument
742 struct xfs_inode *ip) in __xfs_inode_set_reclaim_tag() argument
745 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
750 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
751 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in __xfs_inode_set_reclaim_tag()
752 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
754 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
757 xfs_reclaim_work_queue(ip->i_mount); in __xfs_inode_set_reclaim_tag()
759 trace_xfs_perag_set_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_set_reclaim_tag()
772 xfs_inode_t *ip) in xfs_inode_set_reclaim_tag() argument
774 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_reclaim_tag()
777 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_reclaim_tag()
779 spin_lock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
780 __xfs_inode_set_reclaim_tag(pag, ip); in xfs_inode_set_reclaim_tag()
781 __xfs_iflags_set(ip, XFS_IRECLAIMABLE); in xfs_inode_set_reclaim_tag()
782 spin_unlock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
790 xfs_inode_t *ip) in __xfs_inode_clear_reclaim() argument
795 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
796 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in __xfs_inode_clear_reclaim()
797 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_clear_reclaim()
799 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
800 trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_clear_reclaim()
809 xfs_inode_t *ip) in __xfs_inode_clear_reclaim_tag() argument
812 XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); in __xfs_inode_clear_reclaim_tag()
813 __xfs_inode_clear_reclaim(pag, ip); in __xfs_inode_clear_reclaim_tag()
822 struct xfs_inode *ip, in xfs_reclaim_inode_grab() argument
828 if (!ip->i_ino) in xfs_reclaim_inode_grab()
837 __xfs_iflags_test(ip, XFS_IFLOCK | XFS_IRECLAIM)) in xfs_reclaim_inode_grab()
850 spin_lock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
851 if (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) || in xfs_reclaim_inode_grab()
852 __xfs_iflags_test(ip, XFS_IRECLAIM)) { in xfs_reclaim_inode_grab()
854 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
857 __xfs_iflags_set(ip, XFS_IRECLAIM); in xfs_reclaim_inode_grab()
858 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
903 struct xfs_inode *ip, in xfs_reclaim_inode() argument
912 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
913 if (!xfs_iflock_nowait(ip)) { in xfs_reclaim_inode()
916 xfs_iflock(ip); in xfs_reclaim_inode()
919 if (is_bad_inode(VFS_I(ip))) in xfs_reclaim_inode()
921 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { in xfs_reclaim_inode()
922 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
923 xfs_iflush_abort(ip, false); in xfs_reclaim_inode()
926 if (xfs_ipincount(ip)) { in xfs_reclaim_inode()
929 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
931 if (xfs_iflags_test(ip, XFS_ISTALE)) in xfs_reclaim_inode()
933 if (xfs_inode_clean(ip)) in xfs_reclaim_inode()
959 error = xfs_iflush(ip, &bp); in xfs_reclaim_inode()
961 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
972 xfs_iflock(ip); in xfs_reclaim_inode()
974 xfs_ifunlock(ip); in xfs_reclaim_inode()
975 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
987 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino))) in xfs_reclaim_inode()
989 __xfs_inode_clear_reclaim(pag, ip); in xfs_reclaim_inode()
1000 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
1001 xfs_qm_dqdetach(ip); in xfs_reclaim_inode()
1002 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
1004 xfs_inode_free(ip); in xfs_reclaim_inode()
1008 xfs_ifunlock(ip); in xfs_reclaim_inode()
1010 xfs_iflags_clear(ip, XFS_IRECLAIM); in xfs_reclaim_inode()
1011 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
1082 struct xfs_inode *ip = batch[i]; in xfs_reclaim_inodes_ag() local
1084 if (done || xfs_reclaim_inode_grab(ip, flags)) in xfs_reclaim_inodes_ag()
1101 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != in xfs_reclaim_inodes_ag()
1104 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_reclaim_inodes_ag()
1105 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_reclaim_inodes_ag()
1201 struct xfs_inode *ip, in xfs_inode_match_id() argument
1205 ip->i_d.di_uid != eofb->eof_uid) in xfs_inode_match_id()
1209 ip->i_d.di_gid != eofb->eof_gid) in xfs_inode_match_id()
1213 xfs_get_projid(ip) != eofb->eof_prid) in xfs_inode_match_id()
1221 struct xfs_inode *ip, in xfs_inode_free_eofblocks() argument
1229 if (!xfs_can_free_eofblocks(ip, false)) { in xfs_inode_free_eofblocks()
1231 trace_xfs_inode_free_eofblocks_invalid(ip); in xfs_inode_free_eofblocks()
1232 xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_free_eofblocks()
1241 mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY)) in xfs_inode_free_eofblocks()
1245 if (!xfs_inode_match_id(ip, eofb)) in xfs_inode_free_eofblocks()
1250 XFS_ISIZE(ip) < eofb->eof_min_file_size) in xfs_inode_free_eofblocks()
1254 ret = xfs_free_eofblocks(ip->i_mount, ip, true); in xfs_inode_free_eofblocks()
1279 xfs_inode_t *ip) in xfs_inode_set_eofblocks_tag() argument
1281 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_eofblocks_tag()
1285 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_eofblocks_tag()
1287 trace_xfs_inode_set_eofblocks_tag(ip); in xfs_inode_set_eofblocks_tag()
1292 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1296 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1297 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in xfs_inode_set_eofblocks_tag()
1298 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1300 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1303 xfs_queue_eofblocks(ip->i_mount); in xfs_inode_set_eofblocks_tag()
1305 trace_xfs_perag_set_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_set_eofblocks_tag()
1315 xfs_inode_t *ip) in xfs_inode_clear_eofblocks_tag() argument
1317 struct xfs_mount *mp = ip->i_mount; in xfs_inode_clear_eofblocks_tag()
1320 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_clear_eofblocks_tag()
1322 trace_xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_clear_eofblocks_tag()
1325 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1329 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1330 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in xfs_inode_clear_eofblocks_tag()
1331 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1333 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1334 trace_xfs_perag_clear_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_clear_eofblocks_tag()