Lines Matching refs:ip
63 xfs_inode_t *ip, in xfs_free_eofblocks() argument
78 end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip)); in xfs_free_eofblocks()
85 xfs_ilock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
86 error = xfs_bmapi_read(ip, end_fsb, map_len, &imap, &nimaps, 0); in xfs_free_eofblocks()
87 xfs_iunlock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
91 ip->i_delayed_blks)) { in xfs_free_eofblocks()
95 error = xfs_qm_dqattach(ip, 0); in xfs_free_eofblocks()
107 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { in xfs_free_eofblocks()
121 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
125 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
126 xfs_trans_ijoin(tp, ip, 0); in xfs_free_eofblocks()
134 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, in xfs_free_eofblocks()
135 XFS_ISIZE(ip)); in xfs_free_eofblocks()
148 xfs_inode_clear_eofblocks_tag(ip); in xfs_free_eofblocks()
151 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
153 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
160 xfs_inode_t *ip) in xfs_release() argument
162 xfs_mount_t *mp = ip->i_mount; in xfs_release()
165 if (!S_ISREG(ip->i_d.di_mode) || (ip->i_d.di_mode == 0)) in xfs_release()
182 if ((ip->i_d.di_nlink == 0) && xfs_inode_is_filestream(ip)) in xfs_release()
183 xfs_filestream_deassociate(ip); in xfs_release()
195 truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED); in xfs_release()
197 xfs_iflags_clear(ip, XFS_IDIRTY_RELEASE); in xfs_release()
198 if (VN_DIRTY(VFS_I(ip)) && ip->i_delayed_blks > 0) { in xfs_release()
199 error = -filemap_flush(VFS_I(ip)->i_mapping); in xfs_release()
206 if (ip->i_d.di_nlink == 0) in xfs_release()
209 if (xfs_can_free_eofblocks(ip, false)) { in xfs_release()
232 if (xfs_iflags_test(ip, XFS_IDIRTY_RELEASE)) in xfs_release()
235 error = xfs_free_eofblocks(mp, ip, true); in xfs_release()
240 if (ip->i_delayed_blks) in xfs_release()
241 xfs_iflags_set(ip, XFS_IDIRTY_RELEASE); in xfs_release()
256 xfs_inode_t *ip) in xfs_inactive() argument
270 if (ip->i_d.di_mode == 0 || is_bad_inode(VFS_I(ip))) { in xfs_inactive()
271 ASSERT(ip->i_df.if_real_bytes == 0); in xfs_inactive()
272 ASSERT(ip->i_df.if_broot_bytes == 0); in xfs_inactive()
276 mp = ip->i_mount; in xfs_inactive()
284 if (ip->i_d.di_nlink != 0) { in xfs_inactive()
290 if (xfs_can_free_eofblocks(ip, true)) { in xfs_inactive()
291 error = xfs_free_eofblocks(mp, ip, false); in xfs_inactive()
298 if (S_ISREG(ip->i_d.di_mode) && in xfs_inactive()
299 (ip->i_d.di_size != 0 || XFS_ISIZE(ip) != 0 || in xfs_inactive()
300 ip->i_d.di_nextents > 0 || ip->i_delayed_blks > 0)) in xfs_inactive()
303 error = xfs_qm_dqattach(ip, 0); in xfs_inactive()
309 (truncate || S_ISLNK(ip->i_d.di_mode)) ? in xfs_inactive()
321 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_inactive()
322 xfs_trans_ijoin(tp, ip, 0); in xfs_inactive()
324 if (S_ISLNK(ip->i_d.di_mode)) { in xfs_inactive()
328 if (ip->i_d.di_size > XFS_IFORK_DSIZE(ip)) { in xfs_inactive()
329 error = xfs_inactive_symlink_rmt(ip, &tp); in xfs_inactive()
332 } else if (ip->i_df.if_bytes > 0) { in xfs_inactive()
333 xfs_idata_realloc(ip, -(ip->i_df.if_bytes), in xfs_inactive()
335 ASSERT(ip->i_df.if_bytes == 0); in xfs_inactive()
338 ip->i_d.di_size = 0; in xfs_inactive()
339 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_inactive()
341 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, 0); in xfs_inactive()
345 ASSERT(ip->i_d.di_nextents == 0); in xfs_inactive()
354 if (ip->i_d.di_anextents > 0) { in xfs_inactive()
355 ASSERT(ip->i_d.di_forkoff != 0); in xfs_inactive()
361 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive()
363 error = xfs_attr_inactive(ip); in xfs_inactive()
377 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_inactive()
378 xfs_trans_ijoin(tp, ip, 0); in xfs_inactive()
381 if (ip->i_afp) in xfs_inactive()
382 xfs_idestroy_fork(ip, XFS_ATTR_FORK); in xfs_inactive()
384 ASSERT(ip->i_d.di_anextents == 0); in xfs_inactive()
390 error = xfs_ifree(tp, ip, &free_list); in xfs_inactive()
407 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_ICOUNT, -1); in xfs_inactive()
427 xfs_qm_dqdetach(ip); in xfs_inactive()
429 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_inactive()
490 struct xfs_inode *ip = NULL; in xfs_create() local
585 prid, resblks > 0, &ip, &committed); in xfs_create()
602 error = xfs_dir_createname(tp, dp, name, ip->i_ino, in xfs_create()
613 error = xfs_dir_init(tp, ip, dp); in xfs_create()
635 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp); in xfs_create()
648 *ipp = ip; in xfs_create()
663 if (ip) in xfs_create()
664 IRELE(ip); in xfs_create()
859 xfs_inode_t *ip) in xfs_remove() argument
863 int is_dir = S_ISDIR(ip->i_d.di_mode); in xfs_remove()
882 error = xfs_qm_dqattach(ip, 0); in xfs_remove()
918 xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); in xfs_remove()
921 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_remove()
927 ASSERT(ip->i_d.di_nlink >= 2); in xfs_remove()
928 if (ip->i_d.di_nlink != 2) { in xfs_remove()
932 if (!xfs_dir_isempty(ip)) { in xfs_remove()
939 error = xfs_dir_removename(tp, dp, name, ip->i_ino, in xfs_remove()
958 error = xfs_droplink(tp, ip); in xfs_remove()
973 error = xfs_droplink(tp, ip); in xfs_remove()
981 link_zero = (ip->i_d.di_nlink == 0); in xfs_remove()
1005 if (!is_dir && link_zero && xfs_inode_is_filestream(ip)) in xfs_remove()
1006 xfs_filestream_deassociate(ip); in xfs_remove()
1124 xfs_inode_t *ip, in xfs_set_dmattrs() argument
1128 xfs_mount_t *mp = ip->i_mount; in xfs_set_dmattrs()
1144 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_set_dmattrs()
1145 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_set_dmattrs()
1147 ip->i_d.di_dmevmask = evmask; in xfs_set_dmattrs()
1148 ip->i_d.di_dmstate = state; in xfs_set_dmattrs()
1150 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_set_dmattrs()
1177 xfs_inode_t *ip, in xfs_alloc_file_space() argument
1183 xfs_mount_t *mp = ip->i_mount; in xfs_alloc_file_space()
1200 trace_xfs_alloc_file_space(ip); in xfs_alloc_file_space()
1205 error = xfs_qm_dqattach(ip, 0); in xfs_alloc_file_space()
1212 rt = XFS_IS_REALTIME_INODE(ip); in xfs_alloc_file_space()
1213 extsz = xfs_get_extsz_hint(ip); in xfs_alloc_file_space()
1282 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1283 error = xfs_trans_reserve_quota_nblks(tp, ip, qblocks, in xfs_alloc_file_space()
1288 xfs_trans_ijoin(tp, ip, 0); in xfs_alloc_file_space()
1291 error = xfs_bmapi_write(tp, ip, startoffset_fsb, in xfs_alloc_file_space()
1307 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1327 xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag); in xfs_alloc_file_space()
1331 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1348 xfs_inode_t *ip, in xfs_zero_remaining_bytes() argument
1357 xfs_mount_t *mp = ip->i_mount; in xfs_zero_remaining_bytes()
1366 if (startoff >= XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1369 if (endoff > XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1370 endoff = XFS_ISIZE(ip); in xfs_zero_remaining_bytes()
1372 bp = xfs_buf_get_uncached(XFS_IS_REALTIME_INODE(ip) ? in xfs_zero_remaining_bytes()
1383 error = xfs_bmapi_read(ip, offset_fsb, 1, &imap, &nimap, 0); in xfs_zero_remaining_bytes()
1399 XFS_BUF_SET_ADDR(bp, xfs_fsb_to_db(ip, imap.br_startblock)); in xfs_zero_remaining_bytes()
1439 xfs_inode_t *ip, in xfs_free_file_space() argument
1462 mp = ip->i_mount; in xfs_free_file_space()
1464 trace_xfs_free_file_space(ip); in xfs_free_file_space()
1466 error = xfs_qm_dqattach(ip, 0); in xfs_free_file_space()
1473 rt = XFS_IS_REALTIME_INODE(ip); in xfs_free_file_space()
1480 xfs_ilock(ip, XFS_IOLOCK_EXCL); in xfs_free_file_space()
1482 inode_dio_wait(VFS_I(ip)); in xfs_free_file_space()
1487 error = -filemap_write_and_wait_range(VFS_I(ip)->i_mapping, in xfs_free_file_space()
1491 truncate_pagecache_range(VFS_I(ip), ioffset, -1); in xfs_free_file_space()
1501 error = xfs_bmapi_read(ip, startoffset_fsb, 1, in xfs_free_file_space()
1516 error = xfs_bmapi_read(ip, endoffset_fsb - 1, 1, in xfs_free_file_space()
1532 error = xfs_zero_remaining_bytes(ip, offset, offset + len - 1); in xfs_free_file_space()
1538 error = xfs_zero_remaining_bytes(ip, offset, in xfs_free_file_space()
1542 error = xfs_zero_remaining_bytes(ip, in xfs_free_file_space()
1578 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1580 ip->i_udquot, ip->i_gdquot, in xfs_free_file_space()
1585 xfs_trans_ijoin(tp, ip, 0); in xfs_free_file_space()
1591 error = xfs_bunmapi(tp, ip, startoffset_fsb, in xfs_free_file_space()
1607 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1612 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_file_space()
1619 xfs_iunlock(ip, need_iolock ? (XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL) : in xfs_free_file_space()
1627 struct xfs_inode *ip, in xfs_zero_file_space() argument
1632 struct xfs_mount *mp = ip->i_mount; in xfs_zero_file_space()
1652 xfs_ilock(ip, XFS_IOLOCK_EXCL); in xfs_zero_file_space()
1656 truncate_pagecache_range(VFS_I(ip), start_boundary, in xfs_zero_file_space()
1659 error = xfs_alloc_file_space(ip, start_boundary, in xfs_zero_file_space()
1668 error = xfs_iozero(ip, offset, start_boundary - offset); in xfs_zero_file_space()
1673 error = xfs_iozero(ip, end_boundary, in xfs_zero_file_space()
1681 error = xfs_iozero(ip, offset, len); in xfs_zero_file_space()
1686 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_zero_file_space()
1704 xfs_inode_t *ip, in xfs_change_file_space() argument
1710 xfs_mount_t *mp = ip->i_mount; in xfs_change_file_space()
1719 if (!S_ISREG(ip->i_d.di_mode)) in xfs_change_file_space()
1729 bf->l_start += XFS_ISIZE(ip); in xfs_change_file_space()
1764 fsize = XFS_ISIZE(ip); in xfs_change_file_space()
1769 error = xfs_zero_file_space(ip, startoffset, bf->l_len, in xfs_change_file_space()
1778 error = xfs_alloc_file_space(ip, startoffset, bf->l_len, in xfs_change_file_space()
1787 if ((error = xfs_free_file_space(ip, startoffset, bf->l_len, in xfs_change_file_space()
1806 xfs_ilock(ip, XFS_IOLOCK_EXCL); in xfs_change_file_space()
1808 error = xfs_alloc_file_space(ip, fsize, in xfs_change_file_space()
1812 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_change_file_space()
1820 error = xfs_setattr_size(ip, &iattr, in xfs_change_file_space()
1822 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_change_file_space()
1847 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_change_file_space()
1848 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_change_file_space()
1851 ip->i_d.di_mode &= ~S_ISUID; in xfs_change_file_space()
1860 if (ip->i_d.di_mode & S_IXGRP) in xfs_change_file_space()
1861 ip->i_d.di_mode &= ~S_ISGID; in xfs_change_file_space()
1863 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); in xfs_change_file_space()
1866 ip->i_d.di_flags |= XFS_DIFLAG_PREALLOC; in xfs_change_file_space()
1868 ip->i_d.di_flags &= ~XFS_DIFLAG_PREALLOC; in xfs_change_file_space()
1870 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_change_file_space()