Lines Matching refs:ip
69 struct xfs_inode *ip) in xfs_get_extsz_hint() argument
71 if ((ip->i_d.di_flags & XFS_DIFLAG_EXTSIZE) && ip->i_d.di_extsize) in xfs_get_extsz_hint()
72 return ip->i_d.di_extsize; in xfs_get_extsz_hint()
73 if (XFS_IS_REALTIME_INODE(ip)) in xfs_get_extsz_hint()
74 return ip->i_mount->m_sb.sb_rextsize; in xfs_get_extsz_hint()
95 struct xfs_inode *ip) in xfs_ilock_data_map_shared() argument
99 if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE && in xfs_ilock_data_map_shared()
100 (ip->i_df.if_flags & XFS_IFEXTENTS) == 0) in xfs_ilock_data_map_shared()
102 xfs_ilock(ip, lock_mode); in xfs_ilock_data_map_shared()
108 struct xfs_inode *ip) in xfs_ilock_attr_map_shared() argument
112 if (ip->i_d.di_aformat == XFS_DINODE_FMT_BTREE && in xfs_ilock_attr_map_shared()
113 (ip->i_afp->if_flags & XFS_IFEXTENTS) == 0) in xfs_ilock_attr_map_shared()
115 xfs_ilock(ip, lock_mode); in xfs_ilock_attr_map_shared()
151 xfs_inode_t *ip, in xfs_ilock() argument
154 trace_xfs_ilock(ip, lock_flags, _RET_IP_); in xfs_ilock()
170 mrupdate_nested(&ip->i_iolock, XFS_IOLOCK_DEP(lock_flags)); in xfs_ilock()
172 mraccess_nested(&ip->i_iolock, XFS_IOLOCK_DEP(lock_flags)); in xfs_ilock()
175 mrupdate_nested(&ip->i_mmaplock, XFS_MMAPLOCK_DEP(lock_flags)); in xfs_ilock()
177 mraccess_nested(&ip->i_mmaplock, XFS_MMAPLOCK_DEP(lock_flags)); in xfs_ilock()
180 mrupdate_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); in xfs_ilock()
182 mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); in xfs_ilock()
199 xfs_inode_t *ip, in xfs_ilock_nowait() argument
202 trace_xfs_ilock_nowait(ip, lock_flags, _RET_IP_); in xfs_ilock_nowait()
218 if (!mrtryupdate(&ip->i_iolock)) in xfs_ilock_nowait()
221 if (!mrtryaccess(&ip->i_iolock)) in xfs_ilock_nowait()
226 if (!mrtryupdate(&ip->i_mmaplock)) in xfs_ilock_nowait()
229 if (!mrtryaccess(&ip->i_mmaplock)) in xfs_ilock_nowait()
234 if (!mrtryupdate(&ip->i_lock)) in xfs_ilock_nowait()
237 if (!mrtryaccess(&ip->i_lock)) in xfs_ilock_nowait()
244 mrunlock_excl(&ip->i_mmaplock); in xfs_ilock_nowait()
246 mrunlock_shared(&ip->i_mmaplock); in xfs_ilock_nowait()
249 mrunlock_excl(&ip->i_iolock); in xfs_ilock_nowait()
251 mrunlock_shared(&ip->i_iolock); in xfs_ilock_nowait()
270 xfs_inode_t *ip, in xfs_iunlock() argument
288 mrunlock_excl(&ip->i_iolock); in xfs_iunlock()
290 mrunlock_shared(&ip->i_iolock); in xfs_iunlock()
293 mrunlock_excl(&ip->i_mmaplock); in xfs_iunlock()
295 mrunlock_shared(&ip->i_mmaplock); in xfs_iunlock()
298 mrunlock_excl(&ip->i_lock); in xfs_iunlock()
300 mrunlock_shared(&ip->i_lock); in xfs_iunlock()
302 trace_xfs_iunlock(ip, lock_flags, _RET_IP_); in xfs_iunlock()
311 xfs_inode_t *ip, in xfs_ilock_demote() argument
319 mrdemote(&ip->i_lock); in xfs_ilock_demote()
321 mrdemote(&ip->i_mmaplock); in xfs_ilock_demote()
323 mrdemote(&ip->i_iolock); in xfs_ilock_demote()
325 trace_xfs_ilock_demote(ip, lock_flags, _RET_IP_); in xfs_ilock_demote()
331 xfs_inode_t *ip, in xfs_isilocked() argument
336 return !!ip->i_lock.mr_writer; in xfs_isilocked()
337 return rwsem_is_locked(&ip->i_lock.mr_lock); in xfs_isilocked()
342 return !!ip->i_mmaplock.mr_writer; in xfs_isilocked()
343 return rwsem_is_locked(&ip->i_mmaplock.mr_lock); in xfs_isilocked()
348 return !!ip->i_iolock.mr_writer; in xfs_isilocked()
349 return rwsem_is_locked(&ip->i_iolock.mr_lock); in xfs_isilocked()
597 struct xfs_inode *ip) in __xfs_iflock() argument
599 wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_IFLOCK_BIT); in __xfs_iflock()
600 DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_IFLOCK_BIT); in __xfs_iflock()
604 if (xfs_isiflocked(ip)) in __xfs_iflock()
606 } while (!xfs_iflock_nowait(ip)); in __xfs_iflock()
653 xfs_inode_t *ip) in xfs_ip2xflags() argument
655 xfs_icdinode_t *dic = &ip->i_d; in xfs_ip2xflags()
658 (XFS_IFORK_Q(ip) ? XFS_XFLAG_HASATTR : 0); in xfs_ip2xflags()
756 xfs_inode_t *ip; in xfs_ialloc() local
781 XFS_ILOCK_EXCL, &ip); in xfs_ialloc()
784 ASSERT(ip != NULL); in xfs_ialloc()
791 if (ip->i_d.di_version == 1) in xfs_ialloc()
792 ip->i_d.di_version = 2; in xfs_ialloc()
794 ip->i_d.di_mode = mode; in xfs_ialloc()
795 ip->i_d.di_onlink = 0; in xfs_ialloc()
796 ip->i_d.di_nlink = nlink; in xfs_ialloc()
797 ASSERT(ip->i_d.di_nlink == nlink); in xfs_ialloc()
798 ip->i_d.di_uid = xfs_kuid_to_uid(current_fsuid()); in xfs_ialloc()
799 ip->i_d.di_gid = xfs_kgid_to_gid(current_fsgid()); in xfs_ialloc()
800 xfs_set_projid(ip, prid); in xfs_ialloc()
801 memset(&(ip->i_d.di_pad[0]), 0, sizeof(ip->i_d.di_pad)); in xfs_ialloc()
804 ip->i_d.di_gid = pip->i_d.di_gid; in xfs_ialloc()
806 ip->i_d.di_mode |= S_ISGID; in xfs_ialloc()
816 (ip->i_d.di_mode & S_ISGID) && in xfs_ialloc()
817 (!in_group_p(xfs_gid_to_kgid(ip->i_d.di_gid)))) { in xfs_ialloc()
818 ip->i_d.di_mode &= ~S_ISGID; in xfs_ialloc()
821 ip->i_d.di_size = 0; in xfs_ialloc()
822 ip->i_d.di_nextents = 0; in xfs_ialloc()
823 ASSERT(ip->i_d.di_nblocks == 0); in xfs_ialloc()
826 ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec; in xfs_ialloc()
827 ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec; in xfs_ialloc()
828 ip->i_d.di_atime = ip->i_d.di_mtime; in xfs_ialloc()
829 ip->i_d.di_ctime = ip->i_d.di_mtime; in xfs_ialloc()
834 ip->i_d.di_extsize = 0; in xfs_ialloc()
835 ip->i_d.di_dmevmask = 0; in xfs_ialloc()
836 ip->i_d.di_dmstate = 0; in xfs_ialloc()
837 ip->i_d.di_flags = 0; in xfs_ialloc()
839 if (ip->i_d.di_version == 3) { in xfs_ialloc()
840 ASSERT(ip->i_d.di_ino == ino); in xfs_ialloc()
841 ASSERT(uuid_equal(&ip->i_d.di_uuid, &mp->m_sb.sb_meta_uuid)); in xfs_ialloc()
842 ip->i_d.di_crc = 0; in xfs_ialloc()
843 ip->i_d.di_changecount = 1; in xfs_ialloc()
844 ip->i_d.di_lsn = 0; in xfs_ialloc()
845 ip->i_d.di_flags2 = 0; in xfs_ialloc()
846 memset(&(ip->i_d.di_pad2[0]), 0, sizeof(ip->i_d.di_pad2)); in xfs_ialloc()
847 ip->i_d.di_crtime = ip->i_d.di_mtime; in xfs_ialloc()
857 ip->i_d.di_format = XFS_DINODE_FMT_DEV; in xfs_ialloc()
858 ip->i_df.if_u2.if_rdev = rdev; in xfs_ialloc()
859 ip->i_df.if_flags = 0; in xfs_ialloc()
872 ip->i_d.di_extsize = pip->i_d.di_extsize; in xfs_ialloc()
881 ip->i_d.di_extsize = pip->i_d.di_extsize; in xfs_ialloc()
901 ip->i_d.di_flags |= di_flags; in xfs_ialloc()
905 ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; in xfs_ialloc()
906 ip->i_df.if_flags = XFS_IFEXTENTS; in xfs_ialloc()
907 ip->i_df.if_bytes = ip->i_df.if_real_bytes = 0; in xfs_ialloc()
908 ip->i_df.if_u1.if_extents = NULL; in xfs_ialloc()
916 ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; in xfs_ialloc()
917 ip->i_d.di_anextents = 0; in xfs_ialloc()
922 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_ialloc()
923 xfs_trans_log_inode(tp, ip, flags); in xfs_ialloc()
926 xfs_setup_inode(ip); in xfs_ialloc()
928 *ipp = ip; in xfs_ialloc()
959 xfs_inode_t *ip; in xfs_dir_ialloc() local
984 &ialloc_context, &ip); in xfs_dir_ialloc()
995 if (!ialloc_context && !ip) { in xfs_dir_ialloc()
1056 okalloc, &ialloc_context, &ip); in xfs_dir_ialloc()
1067 ASSERT(!ialloc_context && ip); in xfs_dir_ialloc()
1074 *ipp = ip; in xfs_dir_ialloc()
1088 xfs_inode_t *ip) in xfs_droplink() argument
1092 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); in xfs_droplink()
1094 ASSERT (ip->i_d.di_nlink > 0); in xfs_droplink()
1095 ip->i_d.di_nlink--; in xfs_droplink()
1096 drop_nlink(VFS_I(ip)); in xfs_droplink()
1097 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_droplink()
1100 if (ip->i_d.di_nlink == 0) { in xfs_droplink()
1107 error = xfs_iunlink(tp, ip); in xfs_droplink()
1118 xfs_inode_t *ip) in xfs_bumplink() argument
1120 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); in xfs_bumplink()
1122 ASSERT(ip->i_d.di_version > 1); in xfs_bumplink()
1123 ASSERT(ip->i_d.di_nlink > 0 || (VFS_I(ip)->i_state & I_LINKABLE)); in xfs_bumplink()
1124 ip->i_d.di_nlink++; in xfs_bumplink()
1125 inc_nlink(VFS_I(ip)); in xfs_bumplink()
1126 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_bumplink()
1140 struct xfs_inode *ip = NULL; in xfs_create() local
1229 prid, resblks > 0, &ip, &committed); in xfs_create()
1243 error = xfs_dir_createname(tp, dp, name, ip->i_ino, in xfs_create()
1254 error = xfs_dir_init(tp, ip, dp); in xfs_create()
1276 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); in xfs_create()
1290 *ipp = ip; in xfs_create()
1303 if (ip) { in xfs_create()
1304 xfs_finish_inode_setup(ip); in xfs_create()
1305 IRELE(ip); in xfs_create()
1325 struct xfs_inode *ip = NULL; in xfs_create_tmpfile() local
1369 prid, resblks > 0, &ip, NULL); in xfs_create_tmpfile()
1381 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); in xfs_create_tmpfile()
1383 ip->i_d.di_nlink--; in xfs_create_tmpfile()
1384 error = xfs_iunlink(tp, ip); in xfs_create_tmpfile()
1396 *ipp = ip; in xfs_create_tmpfile()
1407 if (ip) { in xfs_create_tmpfile()
1408 xfs_finish_inode_setup(ip); in xfs_create_tmpfile()
1409 IRELE(ip); in xfs_create_tmpfile()
1547 struct xfs_inode *ip, in xfs_itruncate_extents() argument
1551 struct xfs_mount *mp = ip->i_mount; in xfs_itruncate_extents()
1562 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); in xfs_itruncate_extents()
1563 ASSERT(!atomic_read(&VFS_I(ip)->i_count) || in xfs_itruncate_extents()
1564 xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_itruncate_extents()
1565 ASSERT(new_size <= XFS_ISIZE(ip)); in xfs_itruncate_extents()
1567 ASSERT(ip->i_itemp != NULL); in xfs_itruncate_extents()
1568 ASSERT(ip->i_itemp->ili_lock_flags == 0); in xfs_itruncate_extents()
1569 ASSERT(!XFS_NOT_DQATTACHED(mp, ip)); in xfs_itruncate_extents()
1571 trace_xfs_itruncate_extents_start(ip, new_size); in xfs_itruncate_extents()
1591 error = xfs_bunmapi(tp, ip, in xfs_itruncate_extents()
1606 xfs_trans_ijoin(tp, ip, 0); in xfs_itruncate_extents()
1610 error = xfs_trans_roll(&tp, ip); in xfs_itruncate_extents()
1619 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_itruncate_extents()
1621 trace_xfs_itruncate_extents_end(ip, new_size); in xfs_itruncate_extents()
1638 xfs_inode_t *ip) in xfs_release() argument
1640 xfs_mount_t *mp = ip->i_mount; in xfs_release()
1643 if (!S_ISREG(ip->i_d.di_mode) || (ip->i_d.di_mode == 0)) in xfs_release()
1663 truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); in xfs_release()
1665 xfs_iflags_clear(ip, XFS_IDIRTY_RELEASE); in xfs_release()
1666 if (ip->i_delayed_blks > 0) { in xfs_release()
1667 error = filemap_flush(VFS_I(ip)->i_mapping); in xfs_release()
1674 if (ip->i_d.di_nlink == 0) in xfs_release()
1677 if (xfs_can_free_eofblocks(ip, false)) { in xfs_release()
1700 if (xfs_iflags_test(ip, XFS_IDIRTY_RELEASE)) in xfs_release()
1703 error = xfs_free_eofblocks(mp, ip, true); in xfs_release()
1708 if (ip->i_delayed_blks) in xfs_release()
1709 xfs_iflags_set(ip, XFS_IDIRTY_RELEASE); in xfs_release()
1721 struct xfs_inode *ip) in xfs_inactive_truncate() argument
1723 struct xfs_mount *mp = ip->i_mount; in xfs_inactive_truncate()
1735 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_inactive_truncate()
1736 xfs_trans_ijoin(tp, ip, 0); in xfs_inactive_truncate()
1743 ip->i_d.di_size = 0; in xfs_inactive_truncate()
1744 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_inactive_truncate()
1746 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); in xfs_inactive_truncate()
1750 ASSERT(ip->i_d.di_nextents == 0); in xfs_inactive_truncate()
1756 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive_truncate()
1762 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive_truncate()
1773 struct xfs_inode *ip) in xfs_inactive_ifree() argument
1778 struct xfs_mount *mp = ip->i_mount; in xfs_inactive_ifree()
1814 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_inactive_ifree()
1815 xfs_trans_ijoin(tp, ip, 0); in xfs_inactive_ifree()
1818 error = xfs_ifree(tp, ip, &free_list); in xfs_inactive_ifree()
1831 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive_ifree()
1838 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_ICOUNT, -1); in xfs_inactive_ifree()
1855 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive_ifree()
1869 xfs_inode_t *ip) in xfs_inactive() argument
1879 if (ip->i_d.di_mode == 0) { in xfs_inactive()
1880 ASSERT(ip->i_df.if_real_bytes == 0); in xfs_inactive()
1881 ASSERT(ip->i_df.if_broot_bytes == 0); in xfs_inactive()
1885 mp = ip->i_mount; in xfs_inactive()
1891 if (ip->i_d.di_nlink != 0) { in xfs_inactive()
1897 if (xfs_can_free_eofblocks(ip, true)) in xfs_inactive()
1898 xfs_free_eofblocks(mp, ip, false); in xfs_inactive()
1903 if (S_ISREG(ip->i_d.di_mode) && in xfs_inactive()
1904 (ip->i_d.di_size != 0 || XFS_ISIZE(ip) != 0 || in xfs_inactive()
1905 ip->i_d.di_nextents > 0 || ip->i_delayed_blks > 0)) in xfs_inactive()
1908 error = xfs_qm_dqattach(ip, 0); in xfs_inactive()
1912 if (S_ISLNK(ip->i_d.di_mode)) in xfs_inactive()
1913 error = xfs_inactive_symlink(ip); in xfs_inactive()
1915 error = xfs_inactive_truncate(ip); in xfs_inactive()
1924 if (XFS_IFORK_Q(ip)) { in xfs_inactive()
1925 error = xfs_attr_inactive(ip); in xfs_inactive()
1930 ASSERT(!ip->i_afp); in xfs_inactive()
1931 ASSERT(ip->i_d.di_anextents == 0); in xfs_inactive()
1932 ASSERT(ip->i_d.di_forkoff == 0); in xfs_inactive()
1937 error = xfs_inactive_ifree(ip); in xfs_inactive()
1944 xfs_qm_dqdetach(ip); in xfs_inactive()
1955 xfs_inode_t *ip) in xfs_iunlink() argument
1967 ASSERT(ip->i_d.di_nlink == 0); in xfs_iunlink()
1968 ASSERT(ip->i_d.di_mode != 0); in xfs_iunlink()
1976 error = xfs_read_agi(mp, tp, XFS_INO_TO_AGNO(mp, ip->i_ino), &agibp); in xfs_iunlink()
1985 agino = XFS_INO_TO_AGINO(mp, ip->i_ino); in xfs_iunlink()
1998 error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &ibp, in xfs_iunlink()
2005 offset = ip->i_imap.im_boffset + in xfs_iunlink()
2036 xfs_inode_t *ip) in xfs_iunlink_remove() argument
2054 agno = XFS_INO_TO_AGNO(mp, ip->i_ino); in xfs_iunlink_remove()
2070 agino = XFS_INO_TO_AGINO(mp, ip->i_ino); in xfs_iunlink_remove()
2084 error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &ibp, in xfs_iunlink_remove()
2095 offset = ip->i_imap.im_boffset + in xfs_iunlink_remove()
2161 error = xfs_imap_to_bp(mp, tp, &ip->i_imap, &dip, &ibp, in xfs_iunlink_remove()
2173 offset = ip->i_imap.im_boffset + in xfs_iunlink_remove()
2223 xfs_inode_t *ip; in xfs_ifree_cluster() local
2311 ip = radix_tree_lookup(&pag->pag_ici_root, in xfs_ifree_cluster()
2315 if (!ip) { in xfs_ifree_cluster()
2327 spin_lock(&ip->i_flags_lock); in xfs_ifree_cluster()
2328 if (ip->i_ino != inum + i || in xfs_ifree_cluster()
2329 __xfs_iflags_test(ip, XFS_ISTALE)) { in xfs_ifree_cluster()
2330 spin_unlock(&ip->i_flags_lock); in xfs_ifree_cluster()
2334 spin_unlock(&ip->i_flags_lock); in xfs_ifree_cluster()
2343 if (ip != free_ip && in xfs_ifree_cluster()
2344 !xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { in xfs_ifree_cluster()
2351 xfs_iflock(ip); in xfs_ifree_cluster()
2352 xfs_iflags_set(ip, XFS_ISTALE); in xfs_ifree_cluster()
2358 iip = ip->i_itemp; in xfs_ifree_cluster()
2359 if (!iip || xfs_inode_clean(ip)) { in xfs_ifree_cluster()
2360 ASSERT(ip != free_ip); in xfs_ifree_cluster()
2361 xfs_ifunlock(ip); in xfs_ifree_cluster()
2362 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_ifree_cluster()
2376 if (ip != free_ip) in xfs_ifree_cluster()
2377 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_ifree_cluster()
2401 xfs_inode_t *ip, in xfs_ifree() argument
2407 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); in xfs_ifree()
2408 ASSERT(ip->i_d.di_nlink == 0); in xfs_ifree()
2409 ASSERT(ip->i_d.di_nextents == 0); in xfs_ifree()
2410 ASSERT(ip->i_d.di_anextents == 0); in xfs_ifree()
2411 ASSERT(ip->i_d.di_size == 0 || !S_ISREG(ip->i_d.di_mode)); in xfs_ifree()
2412 ASSERT(ip->i_d.di_nblocks == 0); in xfs_ifree()
2417 error = xfs_iunlink_remove(tp, ip); in xfs_ifree()
2421 error = xfs_difree(tp, ip->i_ino, flist, &xic); in xfs_ifree()
2425 ip->i_d.di_mode = 0; /* mark incore inode as free */ in xfs_ifree()
2426 ip->i_d.di_flags = 0; in xfs_ifree()
2427 ip->i_d.di_dmevmask = 0; in xfs_ifree()
2428 ip->i_d.di_forkoff = 0; /* mark the attr fork not in use */ in xfs_ifree()
2429 ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; in xfs_ifree()
2430 ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS; in xfs_ifree()
2435 ip->i_d.di_gen++; in xfs_ifree()
2436 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_ifree()
2439 error = xfs_ifree_cluster(ip, tp, &xic); in xfs_ifree()
2451 struct xfs_inode *ip) in xfs_iunpin() argument
2453 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); in xfs_iunpin()
2455 trace_xfs_inode_unpin_nowait(ip, _RET_IP_); in xfs_iunpin()
2458 xfs_log_force_lsn(ip->i_mount, ip->i_itemp->ili_last_lsn, 0); in xfs_iunpin()
2464 struct xfs_inode *ip) in __xfs_iunpin_wait() argument
2466 wait_queue_head_t *wq = bit_waitqueue(&ip->i_flags, __XFS_IPINNED_BIT); in __xfs_iunpin_wait()
2467 DEFINE_WAIT_BIT(wait, &ip->i_flags, __XFS_IPINNED_BIT); in __xfs_iunpin_wait()
2469 xfs_iunpin(ip); in __xfs_iunpin_wait()
2473 if (xfs_ipincount(ip)) in __xfs_iunpin_wait()
2475 } while (xfs_ipincount(ip)); in __xfs_iunpin_wait()
2481 struct xfs_inode *ip) in xfs_iunpin_wait() argument
2483 if (xfs_ipincount(ip)) in xfs_iunpin_wait()
2484 __xfs_iunpin_wait(ip); in xfs_iunpin_wait()
2518 xfs_inode_t *ip) in xfs_remove() argument
2522 int is_dir = S_ISDIR(ip->i_d.di_mode); in xfs_remove()
2538 error = xfs_qm_dqattach(ip, 0); in xfs_remove()
2568 xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); in xfs_remove()
2571 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_remove()
2577 ASSERT(ip->i_d.di_nlink >= 2); in xfs_remove()
2578 if (ip->i_d.di_nlink != 2) { in xfs_remove()
2582 if (!xfs_dir_isempty(ip)) { in xfs_remove()
2593 error = xfs_droplink(tp, ip); in xfs_remove()
2607 error = xfs_droplink(tp, ip); in xfs_remove()
2612 error = xfs_dir_removename(tp, dp, name, ip->i_ino, in xfs_remove()
2635 if (is_dir && xfs_inode_is_filestream(ip)) in xfs_remove()
2636 xfs_filestream_deassociate(ip); in xfs_remove()
3180 xfs_inode_t *ip, in xfs_iflush_cluster() argument
3183 xfs_mount_t *mp = ip->i_mount; in xfs_iflush_cluster()
3195 pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); in xfs_iflush_cluster()
3204 first_index = XFS_INO_TO_AGINO(mp, ip->i_ino) & mask; in xfs_iflush_cluster()
3214 if (iq == ip) in xfs_iflush_cluster()
3342 struct xfs_inode *ip, in xfs_iflush() argument
3345 struct xfs_mount *mp = ip->i_mount; in xfs_iflush()
3352 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); in xfs_iflush()
3353 ASSERT(xfs_isiflocked(ip)); in xfs_iflush()
3354 ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE || in xfs_iflush()
3355 ip->i_d.di_nextents > XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)); in xfs_iflush()
3359 xfs_iunpin_wait(ip); in xfs_iflush()
3369 if (xfs_iflags_test(ip, XFS_ISTALE)) { in xfs_iflush()
3370 xfs_ifunlock(ip); in xfs_iflush()
3396 error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &dip, &bp, XBF_TRYLOCK, in xfs_iflush()
3399 xfs_ifunlock(ip); in xfs_iflush()
3408 error = xfs_iflush_int(ip, bp); in xfs_iflush()
3423 error = xfs_iflush_cluster(ip, bp); in xfs_iflush()
3440 xfs_iflush_abort(ip, false); in xfs_iflush()
3446 struct xfs_inode *ip, in xfs_iflush_int() argument
3449 struct xfs_inode_log_item *iip = ip->i_itemp; in xfs_iflush_int()
3451 struct xfs_mount *mp = ip->i_mount; in xfs_iflush_int()
3453 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); in xfs_iflush_int()
3454 ASSERT(xfs_isiflocked(ip)); in xfs_iflush_int()
3455 ASSERT(ip->i_d.di_format != XFS_DINODE_FMT_BTREE || in xfs_iflush_int()
3456 ip->i_d.di_nextents > XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)); in xfs_iflush_int()
3458 ASSERT(ip->i_d.di_version > 1); in xfs_iflush_int()
3461 dip = xfs_buf_offset(bp, ip->i_imap.im_boffset); in xfs_iflush_int()
3467 __func__, ip->i_ino, be16_to_cpu(dip->di_magic), dip); in xfs_iflush_int()
3470 if (XFS_TEST_ERROR(ip->i_d.di_magic != XFS_DINODE_MAGIC, in xfs_iflush_int()
3474 __func__, ip->i_ino, ip, ip->i_d.di_magic); in xfs_iflush_int()
3477 if (S_ISREG(ip->i_d.di_mode)) { in xfs_iflush_int()
3479 (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS) && in xfs_iflush_int()
3480 (ip->i_d.di_format != XFS_DINODE_FMT_BTREE), in xfs_iflush_int()
3484 __func__, ip->i_ino, ip); in xfs_iflush_int()
3487 } else if (S_ISDIR(ip->i_d.di_mode)) { in xfs_iflush_int()
3489 (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS) && in xfs_iflush_int()
3490 (ip->i_d.di_format != XFS_DINODE_FMT_BTREE) && in xfs_iflush_int()
3491 (ip->i_d.di_format != XFS_DINODE_FMT_LOCAL), in xfs_iflush_int()
3495 __func__, ip->i_ino, ip); in xfs_iflush_int()
3499 if (XFS_TEST_ERROR(ip->i_d.di_nextents + ip->i_d.di_anextents > in xfs_iflush_int()
3500 ip->i_d.di_nblocks, mp, XFS_ERRTAG_IFLUSH_5, in xfs_iflush_int()
3505 __func__, ip->i_ino, in xfs_iflush_int()
3506 ip->i_d.di_nextents + ip->i_d.di_anextents, in xfs_iflush_int()
3507 ip->i_d.di_nblocks, ip); in xfs_iflush_int()
3510 if (XFS_TEST_ERROR(ip->i_d.di_forkoff > mp->m_sb.sb_inodesize, in xfs_iflush_int()
3514 __func__, ip->i_ino, ip->i_d.di_forkoff, ip); in xfs_iflush_int()
3527 if (ip->i_d.di_version < 3) in xfs_iflush_int()
3528 ip->i_d.di_flushiter++; in xfs_iflush_int()
3536 xfs_dinode_to_disk(dip, &ip->i_d); in xfs_iflush_int()
3539 if (ip->i_d.di_flushiter == DI_MAX_FLUSH) in xfs_iflush_int()
3540 ip->i_d.di_flushiter = 0; in xfs_iflush_int()
3542 xfs_iflush_fork(ip, dip, iip, XFS_DATA_FORK); in xfs_iflush_int()
3543 if (XFS_IFORK_Q(ip)) in xfs_iflush_int()
3544 xfs_iflush_fork(ip, dip, iip, XFS_ATTR_FORK); in xfs_iflush_int()
3589 if (ip->i_d.di_version == 3) in xfs_iflush_int()