Lines Matching refs:ip

41 				struct xfs_perag *pag, struct xfs_inode *ip);
51 struct xfs_inode *ip; in xfs_inode_alloc() local
58 ip = kmem_zone_alloc(xfs_inode_zone, KM_SLEEP); in xfs_inode_alloc()
59 if (!ip) in xfs_inode_alloc()
61 if (inode_init_always(mp->m_super, VFS_I(ip))) { in xfs_inode_alloc()
62 kmem_zone_free(xfs_inode_zone, ip); in xfs_inode_alloc()
67 ASSERT(atomic_read(&ip->i_pincount) == 0); in xfs_inode_alloc()
68 ASSERT(!spin_is_locked(&ip->i_flags_lock)); in xfs_inode_alloc()
69 ASSERT(!xfs_isiflocked(ip)); in xfs_inode_alloc()
70 ASSERT(ip->i_ino == 0); in xfs_inode_alloc()
72 mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); in xfs_inode_alloc()
75 ip->i_ino = ino; in xfs_inode_alloc()
76 ip->i_mount = mp; in xfs_inode_alloc()
77 memset(&ip->i_imap, 0, sizeof(struct xfs_imap)); in xfs_inode_alloc()
78 ip->i_afp = NULL; in xfs_inode_alloc()
79 memset(&ip->i_df, 0, sizeof(xfs_ifork_t)); in xfs_inode_alloc()
80 ip->i_flags = 0; in xfs_inode_alloc()
81 ip->i_delayed_blks = 0; in xfs_inode_alloc()
82 memset(&ip->i_d, 0, sizeof(xfs_icdinode_t)); in xfs_inode_alloc()
84 return ip; in xfs_inode_alloc()
92 struct xfs_inode *ip = XFS_I(inode); in xfs_inode_free_callback() local
94 kmem_zone_free(xfs_inode_zone, ip); in xfs_inode_free_callback()
99 struct xfs_inode *ip) in xfs_inode_free() argument
101 switch (ip->i_d.di_mode & S_IFMT) { in xfs_inode_free()
105 xfs_idestroy_fork(ip, XFS_DATA_FORK); in xfs_inode_free()
109 if (ip->i_afp) in xfs_inode_free()
110 xfs_idestroy_fork(ip, XFS_ATTR_FORK); in xfs_inode_free()
112 if (ip->i_itemp) { in xfs_inode_free()
113 ASSERT(!(ip->i_itemp->ili_item.li_flags & XFS_LI_IN_AIL)); in xfs_inode_free()
114 xfs_inode_item_destroy(ip); in xfs_inode_free()
115 ip->i_itemp = NULL; in xfs_inode_free()
124 spin_lock(&ip->i_flags_lock); in xfs_inode_free()
125 ip->i_flags = XFS_IRECLAIM; in xfs_inode_free()
126 ip->i_ino = 0; in xfs_inode_free()
127 spin_unlock(&ip->i_flags_lock); in xfs_inode_free()
130 ASSERT(atomic_read(&ip->i_pincount) == 0); in xfs_inode_free()
131 ASSERT(!xfs_isiflocked(ip)); in xfs_inode_free()
134 call_rcu(&VFS_I(ip)->i_rcu, xfs_inode_free_callback); in xfs_inode_free()
143 struct xfs_inode *ip, in xfs_iget_cache_hit() argument
148 struct inode *inode = VFS_I(ip); in xfs_iget_cache_hit()
149 struct xfs_mount *mp = ip->i_mount; in xfs_iget_cache_hit()
159 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
160 if (ip->i_ino != ino) { in xfs_iget_cache_hit()
161 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
178 if (ip->i_flags & (XFS_INEW|XFS_IRECLAIM)) { in xfs_iget_cache_hit()
179 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
188 if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { in xfs_iget_cache_hit()
197 if (ip->i_flags & XFS_IRECLAIMABLE) { in xfs_iget_cache_hit()
198 trace_xfs_iget_reclaim(ip); in xfs_iget_cache_hit()
206 ip->i_flags |= XFS_IRECLAIM; in xfs_iget_cache_hit()
208 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
218 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
220 ip->i_flags &= ~(XFS_INEW | XFS_IRECLAIM); in xfs_iget_cache_hit()
221 ASSERT(ip->i_flags & XFS_IRECLAIMABLE); in xfs_iget_cache_hit()
222 trace_xfs_iget_reclaim_fail(ip); in xfs_iget_cache_hit()
227 spin_lock(&ip->i_flags_lock); in xfs_iget_cache_hit()
234 ip->i_flags &= ~XFS_IRECLAIM_RESET_FLAGS; in xfs_iget_cache_hit()
235 ip->i_flags |= XFS_INEW; in xfs_iget_cache_hit()
236 __xfs_inode_clear_reclaim_tag(mp, pag, ip); in xfs_iget_cache_hit()
239 ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock)); in xfs_iget_cache_hit()
240 mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); in xfs_iget_cache_hit()
242 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
247 trace_xfs_iget_skip(ip); in xfs_iget_cache_hit()
253 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
255 trace_xfs_iget_hit(ip); in xfs_iget_cache_hit()
259 xfs_ilock(ip, lock_flags); in xfs_iget_cache_hit()
261 xfs_iflags_clear(ip, XFS_ISTALE | XFS_IDONTCACHE); in xfs_iget_cache_hit()
267 spin_unlock(&ip->i_flags_lock); in xfs_iget_cache_hit()
283 struct xfs_inode *ip; in xfs_iget_cache_miss() local
288 ip = xfs_inode_alloc(mp, ino); in xfs_iget_cache_miss()
289 if (!ip) in xfs_iget_cache_miss()
292 error = xfs_iread(mp, tp, ip, flags); in xfs_iget_cache_miss()
296 trace_xfs_iget_miss(ip); in xfs_iget_cache_miss()
298 if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { in xfs_iget_cache_miss()
319 if (!xfs_ilock_nowait(ip, lock_flags)) in xfs_iget_cache_miss()
335 ip->i_udquot = NULL; in xfs_iget_cache_miss()
336 ip->i_gdquot = NULL; in xfs_iget_cache_miss()
337 ip->i_pdquot = NULL; in xfs_iget_cache_miss()
338 xfs_iflags_set(ip, iflags); in xfs_iget_cache_miss()
342 error = radix_tree_insert(&pag->pag_ici_root, agino, ip); in xfs_iget_cache_miss()
352 *ipp = ip; in xfs_iget_cache_miss()
359 xfs_iunlock(ip, lock_flags); in xfs_iget_cache_miss()
361 __destroy_inode(VFS_I(ip)); in xfs_iget_cache_miss()
362 xfs_inode_free(ip); in xfs_iget_cache_miss()
397 xfs_inode_t *ip; in xfs_iget() local
422 ip = radix_tree_lookup(&pag->pag_ici_root, agino); in xfs_iget()
424 if (ip) { in xfs_iget()
425 error = xfs_iget_cache_hit(pag, ip, ino, flags, lock_flags); in xfs_iget()
432 error = xfs_iget_cache_miss(mp, pag, tp, ino, &ip, in xfs_iget()
439 *ipp = ip; in xfs_iget()
445 if (xfs_iflags_test(ip, XFS_INEW) && ip->i_d.di_mode != 0) in xfs_iget()
446 xfs_setup_existing_inode(ip); in xfs_iget()
468 struct xfs_inode *ip) in xfs_inode_ag_walk_grab() argument
470 struct inode *inode = VFS_I(ip); in xfs_inode_ag_walk_grab()
483 spin_lock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
484 if (!ip->i_ino) in xfs_inode_ag_walk_grab()
488 if (__xfs_iflags_test(ip, XFS_INEW | XFS_IRECLAIMABLE | XFS_IRECLAIM)) in xfs_inode_ag_walk_grab()
490 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
493 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) in xfs_inode_ag_walk_grab()
504 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
512 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_walk() argument
556 struct xfs_inode *ip = batch[i]; in xfs_inode_ag_walk() local
558 if (done || xfs_inode_ag_walk_grab(ip)) in xfs_inode_ag_walk()
573 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != pag->pag_agno) in xfs_inode_ag_walk()
575 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_inode_ag_walk()
576 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_inode_ag_walk()
640 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_iterator() argument
667 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_iterator_tag() argument
733 struct xfs_inode *ip) in __xfs_inode_set_reclaim_tag() argument
736 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
741 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
742 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in __xfs_inode_set_reclaim_tag()
743 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
745 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
748 xfs_reclaim_work_queue(ip->i_mount); in __xfs_inode_set_reclaim_tag()
750 trace_xfs_perag_set_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_set_reclaim_tag()
763 xfs_inode_t *ip) in xfs_inode_set_reclaim_tag() argument
765 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_reclaim_tag()
768 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_reclaim_tag()
770 spin_lock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
771 __xfs_inode_set_reclaim_tag(pag, ip); in xfs_inode_set_reclaim_tag()
772 __xfs_iflags_set(ip, XFS_IRECLAIMABLE); in xfs_inode_set_reclaim_tag()
773 spin_unlock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
781 xfs_inode_t *ip) in __xfs_inode_clear_reclaim() argument
786 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
787 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in __xfs_inode_clear_reclaim()
788 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_clear_reclaim()
790 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
791 trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_clear_reclaim()
800 xfs_inode_t *ip) in __xfs_inode_clear_reclaim_tag() argument
803 XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); in __xfs_inode_clear_reclaim_tag()
804 __xfs_inode_clear_reclaim(pag, ip); in __xfs_inode_clear_reclaim_tag()
813 struct xfs_inode *ip, in xfs_reclaim_inode_grab() argument
819 if (!ip->i_ino) in xfs_reclaim_inode_grab()
828 __xfs_iflags_test(ip, XFS_IFLOCK | XFS_IRECLAIM)) in xfs_reclaim_inode_grab()
841 spin_lock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
842 if (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) || in xfs_reclaim_inode_grab()
843 __xfs_iflags_test(ip, XFS_IRECLAIM)) { in xfs_reclaim_inode_grab()
845 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
848 __xfs_iflags_set(ip, XFS_IRECLAIM); in xfs_reclaim_inode_grab()
849 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
894 struct xfs_inode *ip, in xfs_reclaim_inode() argument
903 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
904 if (!xfs_iflock_nowait(ip)) { in xfs_reclaim_inode()
907 xfs_iflock(ip); in xfs_reclaim_inode()
910 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { in xfs_reclaim_inode()
911 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
912 xfs_iflush_abort(ip, false); in xfs_reclaim_inode()
915 if (xfs_ipincount(ip)) { in xfs_reclaim_inode()
918 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
920 if (xfs_iflags_test(ip, XFS_ISTALE)) in xfs_reclaim_inode()
922 if (xfs_inode_clean(ip)) in xfs_reclaim_inode()
948 error = xfs_iflush(ip, &bp); in xfs_reclaim_inode()
950 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
961 xfs_iflock(ip); in xfs_reclaim_inode()
963 xfs_ifunlock(ip); in xfs_reclaim_inode()
964 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
976 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino))) in xfs_reclaim_inode()
978 __xfs_inode_clear_reclaim(pag, ip); in xfs_reclaim_inode()
989 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
990 xfs_qm_dqdetach(ip); in xfs_reclaim_inode()
991 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
993 xfs_inode_free(ip); in xfs_reclaim_inode()
997 xfs_ifunlock(ip); in xfs_reclaim_inode()
999 xfs_iflags_clear(ip, XFS_IRECLAIM); in xfs_reclaim_inode()
1000 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
1071 struct xfs_inode *ip = batch[i]; in xfs_reclaim_inodes_ag() local
1073 if (done || xfs_reclaim_inode_grab(ip, flags)) in xfs_reclaim_inodes_ag()
1090 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != in xfs_reclaim_inodes_ag()
1093 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_reclaim_inodes_ag()
1094 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_reclaim_inodes_ag()
1190 struct xfs_inode *ip, in xfs_inode_match_id() argument
1194 !uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid)) in xfs_inode_match_id()
1198 !gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid)) in xfs_inode_match_id()
1202 xfs_get_projid(ip) != eofb->eof_prid) in xfs_inode_match_id()
1214 struct xfs_inode *ip, in xfs_inode_match_id_union() argument
1218 uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid)) in xfs_inode_match_id_union()
1222 gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid)) in xfs_inode_match_id_union()
1226 xfs_get_projid(ip) == eofb->eof_prid) in xfs_inode_match_id_union()
1234 struct xfs_inode *ip, in xfs_inode_free_eofblocks() argument
1245 if (!xfs_can_free_eofblocks(ip, false)) { in xfs_inode_free_eofblocks()
1247 trace_xfs_inode_free_eofblocks_invalid(ip); in xfs_inode_free_eofblocks()
1248 xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_free_eofblocks()
1257 mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY)) in xfs_inode_free_eofblocks()
1262 match = xfs_inode_match_id_union(ip, eofb); in xfs_inode_free_eofblocks()
1264 match = xfs_inode_match_id(ip, eofb); in xfs_inode_free_eofblocks()
1270 XFS_ISIZE(ip) < eofb->eof_min_file_size) in xfs_inode_free_eofblocks()
1278 if (eofb->eof_scan_owner == ip->i_ino) in xfs_inode_free_eofblocks()
1282 ret = xfs_free_eofblocks(ip->i_mount, ip, need_iolock); in xfs_inode_free_eofblocks()
1313 struct xfs_inode *ip) in xfs_inode_free_quota_eofblocks() argument
1319 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_inode_free_quota_eofblocks()
1327 eofb.eof_scan_owner = ip->i_ino; in xfs_inode_free_quota_eofblocks()
1330 if (XFS_IS_UQUOTA_ENFORCED(ip->i_mount)) { in xfs_inode_free_quota_eofblocks()
1331 dq = xfs_inode_dquot(ip, XFS_DQ_USER); in xfs_inode_free_quota_eofblocks()
1333 eofb.eof_uid = VFS_I(ip)->i_uid; in xfs_inode_free_quota_eofblocks()
1339 if (XFS_IS_GQUOTA_ENFORCED(ip->i_mount)) { in xfs_inode_free_quota_eofblocks()
1340 dq = xfs_inode_dquot(ip, XFS_DQ_GROUP); in xfs_inode_free_quota_eofblocks()
1342 eofb.eof_gid = VFS_I(ip)->i_gid; in xfs_inode_free_quota_eofblocks()
1349 xfs_icache_free_eofblocks(ip->i_mount, &eofb); in xfs_inode_free_quota_eofblocks()
1356 xfs_inode_t *ip) in xfs_inode_set_eofblocks_tag() argument
1358 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_eofblocks_tag()
1362 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_eofblocks_tag()
1364 trace_xfs_inode_set_eofblocks_tag(ip); in xfs_inode_set_eofblocks_tag()
1369 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1373 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1374 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in xfs_inode_set_eofblocks_tag()
1375 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1377 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1380 xfs_queue_eofblocks(ip->i_mount); in xfs_inode_set_eofblocks_tag()
1382 trace_xfs_perag_set_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_set_eofblocks_tag()
1392 xfs_inode_t *ip) in xfs_inode_clear_eofblocks_tag() argument
1394 struct xfs_mount *mp = ip->i_mount; in xfs_inode_clear_eofblocks_tag()
1397 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_clear_eofblocks_tag()
1399 trace_xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_clear_eofblocks_tag()
1402 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1406 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1407 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in xfs_inode_clear_eofblocks_tag()
1408 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1410 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1411 trace_xfs_perag_clear_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_clear_eofblocks_tag()