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()
132 XFS_STATS_DEC(ip->i_mount, vn_active); 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
424 ip = radix_tree_lookup(&pag->pag_ici_root, agino); in xfs_iget()
426 if (ip) { in xfs_iget()
427 error = xfs_iget_cache_hit(pag, ip, ino, flags, lock_flags); in xfs_iget()
434 error = xfs_iget_cache_miss(mp, pag, tp, ino, &ip, in xfs_iget()
441 *ipp = ip; in xfs_iget()
447 if (xfs_iflags_test(ip, XFS_INEW) && ip->i_d.di_mode != 0) in xfs_iget()
448 xfs_setup_existing_inode(ip); in xfs_iget()
470 struct xfs_inode *ip) in xfs_inode_ag_walk_grab() argument
472 struct inode *inode = VFS_I(ip); in xfs_inode_ag_walk_grab()
485 spin_lock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
486 if (!ip->i_ino) in xfs_inode_ag_walk_grab()
490 if (__xfs_iflags_test(ip, XFS_INEW | XFS_IRECLAIMABLE | XFS_IRECLAIM)) in xfs_inode_ag_walk_grab()
492 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
495 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) in xfs_inode_ag_walk_grab()
506 spin_unlock(&ip->i_flags_lock); in xfs_inode_ag_walk_grab()
514 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_walk() argument
558 struct xfs_inode *ip = batch[i]; in xfs_inode_ag_walk() local
560 if (done || xfs_inode_ag_walk_grab(ip)) in xfs_inode_ag_walk()
575 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != pag->pag_agno) in xfs_inode_ag_walk()
577 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_inode_ag_walk()
578 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_inode_ag_walk()
642 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_iterator() argument
669 int (*execute)(struct xfs_inode *ip, int flags, in xfs_inode_ag_iterator_tag() argument
735 struct xfs_inode *ip) in __xfs_inode_set_reclaim_tag() argument
738 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
743 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
744 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in __xfs_inode_set_reclaim_tag()
745 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_set_reclaim_tag()
747 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_set_reclaim_tag()
750 xfs_reclaim_work_queue(ip->i_mount); in __xfs_inode_set_reclaim_tag()
752 trace_xfs_perag_set_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_set_reclaim_tag()
765 xfs_inode_t *ip) in xfs_inode_set_reclaim_tag() argument
767 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_reclaim_tag()
770 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_reclaim_tag()
772 spin_lock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
773 __xfs_inode_set_reclaim_tag(pag, ip); in xfs_inode_set_reclaim_tag()
774 __xfs_iflags_set(ip, XFS_IRECLAIMABLE); in xfs_inode_set_reclaim_tag()
775 spin_unlock(&ip->i_flags_lock); in xfs_inode_set_reclaim_tag()
783 xfs_inode_t *ip) in __xfs_inode_clear_reclaim() argument
788 spin_lock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
789 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in __xfs_inode_clear_reclaim()
790 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in __xfs_inode_clear_reclaim()
792 spin_unlock(&ip->i_mount->m_perag_lock); in __xfs_inode_clear_reclaim()
793 trace_xfs_perag_clear_reclaim(ip->i_mount, pag->pag_agno, in __xfs_inode_clear_reclaim()
802 xfs_inode_t *ip) in __xfs_inode_clear_reclaim_tag() argument
805 XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); in __xfs_inode_clear_reclaim_tag()
806 __xfs_inode_clear_reclaim(pag, ip); in __xfs_inode_clear_reclaim_tag()
815 struct xfs_inode *ip, in xfs_reclaim_inode_grab() argument
821 if (!ip->i_ino) in xfs_reclaim_inode_grab()
830 __xfs_iflags_test(ip, XFS_IFLOCK | XFS_IRECLAIM)) in xfs_reclaim_inode_grab()
843 spin_lock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
844 if (!__xfs_iflags_test(ip, XFS_IRECLAIMABLE) || in xfs_reclaim_inode_grab()
845 __xfs_iflags_test(ip, XFS_IRECLAIM)) { in xfs_reclaim_inode_grab()
847 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
850 __xfs_iflags_set(ip, XFS_IRECLAIM); in xfs_reclaim_inode_grab()
851 spin_unlock(&ip->i_flags_lock); in xfs_reclaim_inode_grab()
896 struct xfs_inode *ip, in xfs_reclaim_inode() argument
905 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
906 if (!xfs_iflock_nowait(ip)) { in xfs_reclaim_inode()
909 xfs_iflock(ip); in xfs_reclaim_inode()
912 if (XFS_FORCED_SHUTDOWN(ip->i_mount)) { in xfs_reclaim_inode()
913 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
914 xfs_iflush_abort(ip, false); in xfs_reclaim_inode()
917 if (xfs_ipincount(ip)) { in xfs_reclaim_inode()
920 xfs_iunpin_wait(ip); in xfs_reclaim_inode()
922 if (xfs_iflags_test(ip, XFS_ISTALE)) in xfs_reclaim_inode()
924 if (xfs_inode_clean(ip)) in xfs_reclaim_inode()
950 error = xfs_iflush(ip, &bp); in xfs_reclaim_inode()
952 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
963 xfs_iflock(ip); in xfs_reclaim_inode()
965 xfs_ifunlock(ip); in xfs_reclaim_inode()
966 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
968 XFS_STATS_INC(ip->i_mount, xs_ig_reclaims); in xfs_reclaim_inode()
978 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino))) in xfs_reclaim_inode()
980 __xfs_inode_clear_reclaim(pag, ip); in xfs_reclaim_inode()
991 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
992 xfs_qm_dqdetach(ip); in xfs_reclaim_inode()
993 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
995 xfs_inode_free(ip); in xfs_reclaim_inode()
999 xfs_ifunlock(ip); in xfs_reclaim_inode()
1001 xfs_iflags_clear(ip, XFS_IRECLAIM); in xfs_reclaim_inode()
1002 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reclaim_inode()
1073 struct xfs_inode *ip = batch[i]; in xfs_reclaim_inodes_ag() local
1075 if (done || xfs_reclaim_inode_grab(ip, flags)) in xfs_reclaim_inodes_ag()
1092 if (XFS_INO_TO_AGNO(mp, ip->i_ino) != in xfs_reclaim_inodes_ag()
1095 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino + 1); in xfs_reclaim_inodes_ag()
1096 if (first_index < XFS_INO_TO_AGINO(mp, ip->i_ino)) in xfs_reclaim_inodes_ag()
1192 struct xfs_inode *ip, in xfs_inode_match_id() argument
1196 !uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid)) in xfs_inode_match_id()
1200 !gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid)) in xfs_inode_match_id()
1204 xfs_get_projid(ip) != eofb->eof_prid) in xfs_inode_match_id()
1216 struct xfs_inode *ip, in xfs_inode_match_id_union() argument
1220 uid_eq(VFS_I(ip)->i_uid, eofb->eof_uid)) in xfs_inode_match_id_union()
1224 gid_eq(VFS_I(ip)->i_gid, eofb->eof_gid)) in xfs_inode_match_id_union()
1228 xfs_get_projid(ip) == eofb->eof_prid) in xfs_inode_match_id_union()
1236 struct xfs_inode *ip, in xfs_inode_free_eofblocks() argument
1247 if (!xfs_can_free_eofblocks(ip, false)) { in xfs_inode_free_eofblocks()
1249 trace_xfs_inode_free_eofblocks_invalid(ip); in xfs_inode_free_eofblocks()
1250 xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_free_eofblocks()
1259 mapping_tagged(VFS_I(ip)->i_mapping, PAGECACHE_TAG_DIRTY)) in xfs_inode_free_eofblocks()
1264 match = xfs_inode_match_id_union(ip, eofb); in xfs_inode_free_eofblocks()
1266 match = xfs_inode_match_id(ip, eofb); in xfs_inode_free_eofblocks()
1272 XFS_ISIZE(ip) < eofb->eof_min_file_size) in xfs_inode_free_eofblocks()
1280 if (eofb->eof_scan_owner == ip->i_ino) in xfs_inode_free_eofblocks()
1284 ret = xfs_free_eofblocks(ip->i_mount, ip, need_iolock); in xfs_inode_free_eofblocks()
1315 struct xfs_inode *ip) in xfs_inode_free_quota_eofblocks() argument
1321 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_inode_free_quota_eofblocks()
1329 eofb.eof_scan_owner = ip->i_ino; in xfs_inode_free_quota_eofblocks()
1332 if (XFS_IS_UQUOTA_ENFORCED(ip->i_mount)) { in xfs_inode_free_quota_eofblocks()
1333 dq = xfs_inode_dquot(ip, XFS_DQ_USER); in xfs_inode_free_quota_eofblocks()
1335 eofb.eof_uid = VFS_I(ip)->i_uid; in xfs_inode_free_quota_eofblocks()
1341 if (XFS_IS_GQUOTA_ENFORCED(ip->i_mount)) { in xfs_inode_free_quota_eofblocks()
1342 dq = xfs_inode_dquot(ip, XFS_DQ_GROUP); in xfs_inode_free_quota_eofblocks()
1344 eofb.eof_gid = VFS_I(ip)->i_gid; in xfs_inode_free_quota_eofblocks()
1351 xfs_icache_free_eofblocks(ip->i_mount, &eofb); in xfs_inode_free_quota_eofblocks()
1358 xfs_inode_t *ip) in xfs_inode_set_eofblocks_tag() argument
1360 struct xfs_mount *mp = ip->i_mount; in xfs_inode_set_eofblocks_tag()
1364 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_set_eofblocks_tag()
1366 trace_xfs_inode_set_eofblocks_tag(ip); in xfs_inode_set_eofblocks_tag()
1371 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1375 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1376 radix_tree_tag_set(&ip->i_mount->m_perag_tree, in xfs_inode_set_eofblocks_tag()
1377 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_set_eofblocks_tag()
1379 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_set_eofblocks_tag()
1382 xfs_queue_eofblocks(ip->i_mount); in xfs_inode_set_eofblocks_tag()
1384 trace_xfs_perag_set_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_set_eofblocks_tag()
1394 xfs_inode_t *ip) in xfs_inode_clear_eofblocks_tag() argument
1396 struct xfs_mount *mp = ip->i_mount; in xfs_inode_clear_eofblocks_tag()
1399 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_inode_clear_eofblocks_tag()
1401 trace_xfs_inode_clear_eofblocks_tag(ip); in xfs_inode_clear_eofblocks_tag()
1404 XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1408 spin_lock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1409 radix_tree_tag_clear(&ip->i_mount->m_perag_tree, in xfs_inode_clear_eofblocks_tag()
1410 XFS_INO_TO_AGNO(ip->i_mount, ip->i_ino), in xfs_inode_clear_eofblocks_tag()
1412 spin_unlock(&ip->i_mount->m_perag_lock); in xfs_inode_clear_eofblocks_tag()
1413 trace_xfs_perag_clear_eofblocks(ip->i_mount, pag->pag_agno, in xfs_inode_clear_eofblocks_tag()