Lines Matching refs:ip
169 struct xfs_inode *ip, in xfs_reflink_trim_around_shared() argument
173 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_trim_around_shared()
182 if (!xfs_is_cow_inode(ip) || !xfs_bmap_is_written_extent(irec)) { in xfs_reflink_trim_around_shared()
187 trace_xfs_reflink_trim_around_shared(ip, irec); in xfs_reflink_trim_around_shared()
229 struct xfs_inode *ip, in xfs_bmap_trim_cow() argument
234 if (xfs_is_always_cow_inode(ip) && in xfs_bmap_trim_cow()
241 return xfs_reflink_trim_around_shared(ip, imap, shared); in xfs_bmap_trim_cow()
246 struct xfs_inode *ip, in xfs_reflink_convert_cow_locked() argument
256 if (!xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, &got)) in xfs_reflink_convert_cow_locked()
272 error = xfs_bmap_add_extent_unwritten_real(NULL, ip, in xfs_reflink_convert_cow_locked()
277 } while (xfs_iext_next_extent(ip->i_cowfp, &icur, &got)); in xfs_reflink_convert_cow_locked()
285 struct xfs_inode *ip, in xfs_reflink_convert_cow() argument
289 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_convert_cow()
297 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reflink_convert_cow()
298 error = xfs_reflink_convert_cow_locked(ip, offset_fsb, count_fsb); in xfs_reflink_convert_cow()
299 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_convert_cow()
310 struct xfs_inode *ip, in xfs_find_trim_cow_extent() argument
326 if (!xfs_iext_lookup_extent(ip, ip->i_cowfp, offset_fsb, &icur, cmap)) in xfs_find_trim_cow_extent()
331 return xfs_bmap_trim_cow(ip, imap, shared); in xfs_find_trim_cow_extent()
348 struct xfs_inode *ip, in xfs_reflink_convert_unwritten() argument
370 trace_xfs_reflink_convert_cow(ip, cmap); in xfs_reflink_convert_unwritten()
372 error = xfs_reflink_convert_cow_locked(ip, offset_fsb, count_fsb); in xfs_reflink_convert_unwritten()
381 struct xfs_inode *ip, in xfs_reflink_fill_cow_hole() argument
388 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_fill_cow_hole()
397 imap->br_blockcount, xfs_get_cowextsz_hint(ip)); in xfs_reflink_fill_cow_hole()
400 xfs_iunlock(ip, *lockmode); in xfs_reflink_fill_cow_hole()
403 error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, resblks, 0, in xfs_reflink_fill_cow_hole()
410 error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); in xfs_reflink_fill_cow_hole()
423 error = xfs_bmapi_write(tp, ip, imap->br_startoff, imap->br_blockcount, in xfs_reflink_fill_cow_hole()
429 xfs_inode_set_cowblocks_tag(ip); in xfs_reflink_fill_cow_hole()
442 return xfs_reflink_convert_unwritten(ip, imap, cmap, convert_now); in xfs_reflink_fill_cow_hole()
451 struct xfs_inode *ip, in xfs_reflink_fill_delalloc() argument
458 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_fill_delalloc()
465 xfs_iunlock(ip, *lockmode); in xfs_reflink_fill_delalloc()
468 error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, 0, 0, in xfs_reflink_fill_delalloc()
475 error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, in xfs_reflink_fill_delalloc()
492 error = xfs_bmapi_write(tp, ip, cmap->br_startoff, in xfs_reflink_fill_delalloc()
499 xfs_inode_set_cowblocks_tag(ip); in xfs_reflink_fill_delalloc()
512 return xfs_reflink_convert_unwritten(ip, imap, cmap, convert_now); in xfs_reflink_fill_delalloc()
522 struct xfs_inode *ip, in xfs_reflink_allocate_cow() argument
532 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); in xfs_reflink_allocate_cow()
533 if (!ip->i_cowfp) { in xfs_reflink_allocate_cow()
534 ASSERT(!xfs_is_reflink_inode(ip)); in xfs_reflink_allocate_cow()
535 xfs_ifork_init_cow(ip); in xfs_reflink_allocate_cow()
538 error = xfs_find_trim_cow_extent(ip, imap, cmap, shared, &found); in xfs_reflink_allocate_cow()
544 return xfs_reflink_convert_unwritten(ip, imap, cmap, in xfs_reflink_allocate_cow()
552 return xfs_reflink_fill_cow_hole(ip, imap, cmap, shared, in xfs_reflink_allocate_cow()
561 return xfs_reflink_fill_delalloc(ip, imap, cmap, shared, in xfs_reflink_allocate_cow()
580 struct xfs_inode *ip, in xfs_reflink_cancel_cow_blocks() argument
586 struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_COW_FORK); in xfs_reflink_cancel_cow_blocks()
591 if (!xfs_inode_has_cow_data(ip)) in xfs_reflink_cancel_cow_blocks()
593 if (!xfs_iext_lookup_extent_before(ip, ifp, &end_fsb, &icur, &got)) in xfs_reflink_cancel_cow_blocks()
607 trace_xfs_reflink_cancel_cow(ip, &del); in xfs_reflink_cancel_cow_blocks()
610 error = xfs_bmap_del_extent_delay(ip, XFS_COW_FORK, in xfs_reflink_cancel_cow_blocks()
630 xfs_bmap_del_extent_cow(ip, &icur, &got, &del); in xfs_reflink_cancel_cow_blocks()
633 error = xfs_quota_unreserve_blkres(ip, in xfs_reflink_cancel_cow_blocks()
648 xfs_inode_clear_cowblocks_tag(ip); in xfs_reflink_cancel_cow_blocks()
660 struct xfs_inode *ip, in xfs_reflink_cancel_cow_range() argument
670 trace_xfs_reflink_cancel_cow_range(ip, offset, count); in xfs_reflink_cancel_cow_range()
671 ASSERT(ip->i_cowfp); in xfs_reflink_cancel_cow_range()
673 offset_fsb = XFS_B_TO_FSBT(ip->i_mount, offset); in xfs_reflink_cancel_cow_range()
677 end_fsb = XFS_B_TO_FSB(ip->i_mount, offset + count); in xfs_reflink_cancel_cow_range()
680 error = xfs_trans_alloc(ip->i_mount, &M_RES(ip->i_mount)->tr_write, in xfs_reflink_cancel_cow_range()
685 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reflink_cancel_cow_range()
686 xfs_trans_ijoin(tp, ip, 0); in xfs_reflink_cancel_cow_range()
689 error = xfs_reflink_cancel_cow_blocks(ip, &tp, offset_fsb, end_fsb, in xfs_reflink_cancel_cow_range()
696 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_cancel_cow_range()
701 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_cancel_cow_range()
703 trace_xfs_reflink_cancel_cow_range_error(ip, error, _RET_IP_); in xfs_reflink_cancel_cow_range()
719 struct xfs_inode *ip, in xfs_reflink_end_cow_extent() argument
725 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_end_cow_extent()
727 struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_COW_FORK); in xfs_reflink_end_cow_extent()
749 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reflink_end_cow_extent()
750 xfs_trans_ijoin(tp, ip, 0); in xfs_reflink_end_cow_extent()
752 error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK, in xfs_reflink_end_cow_extent()
755 error = xfs_iext_count_upgrade(tp, ip, in xfs_reflink_end_cow_extent()
765 if (!xfs_iext_lookup_extent(ip, ifp, *offset_fsb, &icur, &got) || in xfs_reflink_end_cow_extent()
789 error = xfs_bmapi_read(ip, del.br_startoff, del.br_blockcount, &data, in xfs_reflink_end_cow_extent()
798 trace_xfs_reflink_cow_remap_from(ip, &del); in xfs_reflink_end_cow_extent()
799 trace_xfs_reflink_cow_remap_to(ip, &data); in xfs_reflink_end_cow_extent()
806 xfs_bmap_unmap_extent(tp, ip, &data); in xfs_reflink_end_cow_extent()
808 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, in xfs_reflink_end_cow_extent()
819 error = xfs_bunmapi(NULL, ip, data.br_startoff, in xfs_reflink_end_cow_extent()
830 xfs_bmap_map_extent(tp, ip, &del); in xfs_reflink_end_cow_extent()
833 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_DELBCOUNT, in xfs_reflink_end_cow_extent()
837 xfs_bmap_del_extent_cow(ip, &icur, &got, &del); in xfs_reflink_end_cow_extent()
840 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_end_cow_extent()
850 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_end_cow_extent()
859 struct xfs_inode *ip, in xfs_reflink_end_cow() argument
867 trace_xfs_reflink_end_cow(ip, offset, count); in xfs_reflink_end_cow()
869 offset_fsb = XFS_B_TO_FSBT(ip->i_mount, offset); in xfs_reflink_end_cow()
870 end_fsb = XFS_B_TO_FSB(ip->i_mount, offset + count); in xfs_reflink_end_cow()
905 error = xfs_reflink_end_cow_extent(ip, &offset_fsb, end_fsb); in xfs_reflink_end_cow()
908 trace_xfs_reflink_end_cow_error(ip, error, _RET_IP_); in xfs_reflink_end_cow()
1151 struct xfs_inode *ip, in xfs_reflink_remap_extent() argument
1156 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_remap_extent()
1190 error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, in xfs_reflink_remap_extent()
1194 error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, in xfs_reflink_remap_extent()
1206 error = xfs_bmapi_read(ip, dmap->br_startoff, dmap->br_blockcount, in xfs_reflink_remap_extent()
1220 trace_xfs_reflink_remap_extent_dest(ip, &smap); in xfs_reflink_remap_extent()
1269 error = xfs_trans_reserve_quota_nblks(tp, ip, in xfs_reflink_remap_extent()
1281 error = xfs_iext_count_may_overflow(ip, XFS_DATA_FORK, iext_delta); in xfs_reflink_remap_extent()
1283 error = xfs_iext_count_upgrade(tp, ip, iext_delta); in xfs_reflink_remap_extent()
1292 xfs_bmap_unmap_extent(tp, ip, &smap); in xfs_reflink_remap_extent()
1304 error = xfs_bunmapi(NULL, ip, smap.br_startoff, in xfs_reflink_remap_extent()
1317 xfs_bmap_map_extent(tp, ip, dmap); in xfs_reflink_remap_extent()
1321 xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, qdelta); in xfs_reflink_remap_extent()
1326 if (newlen > i_size_read(VFS_I(ip))) { in xfs_reflink_remap_extent()
1327 trace_xfs_reflink_update_inode_size(ip, newlen); in xfs_reflink_remap_extent()
1328 i_size_write(VFS_I(ip), newlen); in xfs_reflink_remap_extent()
1329 ip->i_disk_size = newlen; in xfs_reflink_remap_extent()
1330 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_reflink_remap_extent()
1340 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_remap_extent()
1343 trace_xfs_reflink_remap_extent_error(ip, error, _RET_IP_); in xfs_reflink_remap_extent()
1430 struct xfs_inode *ip, in xfs_reflink_zero_posteof() argument
1433 loff_t isize = i_size_read(VFS_I(ip)); in xfs_reflink_zero_posteof()
1438 trace_xfs_zero_eof(ip, isize, pos - isize); in xfs_reflink_zero_posteof()
1439 return xfs_zero_range(ip, isize, pos - isize, NULL); in xfs_reflink_zero_posteof()
1552 struct xfs_inode *ip, in xfs_reflink_inode_has_shared_extents() argument
1556 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_inode_has_shared_extents()
1562 ifp = xfs_ifork_ptr(ip, XFS_DATA_FORK); in xfs_reflink_inode_has_shared_extents()
1563 error = xfs_iread_extents(tp, ip, XFS_DATA_FORK); in xfs_reflink_inode_has_shared_extents()
1568 found = xfs_iext_lookup_extent(ip, ifp, 0, &icur, &got); in xfs_reflink_inode_has_shared_extents()
1609 struct xfs_inode *ip, in xfs_reflink_clear_inode_flag() argument
1615 ASSERT(xfs_is_reflink_inode(ip)); in xfs_reflink_clear_inode_flag()
1617 error = xfs_reflink_inode_has_shared_extents(*tpp, ip, &needs_flag); in xfs_reflink_clear_inode_flag()
1625 error = xfs_reflink_cancel_cow_blocks(ip, tpp, 0, XFS_MAX_FILEOFF, in xfs_reflink_clear_inode_flag()
1631 trace_xfs_reflink_unset_inode_flag(ip); in xfs_reflink_clear_inode_flag()
1632 ip->i_diflags2 &= ~XFS_DIFLAG2_REFLINK; in xfs_reflink_clear_inode_flag()
1633 xfs_inode_clear_cowblocks_tag(ip); in xfs_reflink_clear_inode_flag()
1634 xfs_trans_log_inode(*tpp, ip, XFS_ILOG_CORE); in xfs_reflink_clear_inode_flag()
1645 struct xfs_inode *ip) in xfs_reflink_try_clear_inode_flag() argument
1647 struct xfs_mount *mp = ip->i_mount; in xfs_reflink_try_clear_inode_flag()
1656 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_reflink_try_clear_inode_flag()
1657 xfs_trans_ijoin(tp, ip, 0); in xfs_reflink_try_clear_inode_flag()
1659 error = xfs_reflink_clear_inode_flag(ip, &tp); in xfs_reflink_try_clear_inode_flag()
1667 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_try_clear_inode_flag()
1672 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_reflink_try_clear_inode_flag()
1682 struct xfs_inode *ip, in xfs_reflink_unshare() argument
1686 struct inode *inode = VFS_I(ip); in xfs_reflink_unshare()
1689 if (!xfs_is_reflink_inode(ip)) in xfs_reflink_unshare()
1692 trace_xfs_reflink_unshare(ip, offset, len); in xfs_reflink_unshare()
1707 error = xfs_reflink_try_clear_inode_flag(ip); in xfs_reflink_unshare()
1713 trace_xfs_reflink_unshare_error(ip, error, _RET_IP_); in xfs_reflink_unshare()