Lines Matching refs:ip

52 xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb)  in xfs_fsb_to_db()  argument
54 return (XFS_IS_REALTIME_INODE(ip) ? \ in xfs_fsb_to_db()
55 (xfs_daddr_t)XFS_FSB_TO_BB((ip)->i_mount, (fsb)) : \ in xfs_fsb_to_db()
56 XFS_FSB_TO_DADDR((ip)->i_mount, (fsb))); in xfs_fsb_to_db()
68 struct xfs_inode *ip, in xfs_zero_extent() argument
72 struct xfs_mount *mp = ip->i_mount; in xfs_zero_extent()
73 xfs_daddr_t sector = xfs_fsb_to_db(ip, start_fsb); in xfs_zero_extent()
77 if (IS_DAX(VFS_I(ip))) in xfs_zero_extent()
78 return dax_clear_blocks(VFS_I(ip), block, size); in xfs_zero_extent()
176 mp = ap->ip->i_mount; in xfs_bmap_rtalloc()
177 align = xfs_get_extsz_hint(ap->ip); in xfs_bmap_rtalloc()
250 ap->ip->i_d.di_nblocks += ralen; in xfs_bmap_rtalloc()
251 xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); in xfs_bmap_rtalloc()
253 ap->ip->i_delayed_blks -= ralen; in xfs_bmap_rtalloc()
258 xfs_trans_mod_dquot_byino(ap->tp, ap->ip, in xfs_bmap_rtalloc()
264 error = xfs_zero_extent(ap->ip, ap->blkno, ap->length); in xfs_bmap_rtalloc()
281 struct xfs_inode *ip, in xfs_bmap_eof() argument
289 error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, eof); in xfs_bmap_eof()
422 xfs_inode_t *ip, /* incore inode */ in xfs_bmap_count_blocks() argument
434 mp = ip->i_mount; in xfs_bmap_count_blocks()
435 ifp = XFS_IFORK_PTR(ip, whichfork); in xfs_bmap_count_blocks()
436 if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) { in xfs_bmap_count_blocks()
469 xfs_inode_t *ip, /* xfs incore inode pointer */ in xfs_getbmapx_fix_eof_hole() argument
483 mp = ip->i_mount; in xfs_getbmapx_fix_eof_hole()
485 fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, XFS_ISIZE(ip))); in xfs_getbmapx_fix_eof_hole()
497 out->bmv_block = xfs_fsb_to_db(ip, startblock); in xfs_getbmapx_fix_eof_hole()
498 fileblock = XFS_BB_TO_FSB(ip->i_mount, out->bmv_offset); in xfs_getbmapx_fix_eof_hole()
499 ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); in xfs_getbmapx_fix_eof_hole()
517 xfs_inode_t *ip, in xfs_getbmap() argument
541 mp = ip->i_mount; in xfs_getbmap()
546 if (XFS_IFORK_Q(ip)) { in xfs_getbmap()
547 if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && in xfs_getbmap()
548 ip->i_d.di_aformat != XFS_DINODE_FMT_BTREE && in xfs_getbmap()
549 ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) in xfs_getbmap()
552 ip->i_d.di_aformat != 0 && in xfs_getbmap()
553 ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS)) { in xfs_getbmap()
555 ip->i_mount); in xfs_getbmap()
562 if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && in xfs_getbmap()
563 ip->i_d.di_format != XFS_DINODE_FMT_BTREE && in xfs_getbmap()
564 ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) in xfs_getbmap()
567 if (xfs_get_extsz_hint(ip) || in xfs_getbmap()
568 ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ in xfs_getbmap()
573 fixlen = XFS_ISIZE(ip); in xfs_getbmap()
600 xfs_ilock(ip, XFS_IOLOCK_SHARED); in xfs_getbmap()
603 (ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size)) { in xfs_getbmap()
604 error = filemap_write_and_wait(VFS_I(ip)->i_mapping); in xfs_getbmap()
618 lock = xfs_ilock_data_map_shared(ip); in xfs_getbmap()
620 lock = xfs_ilock_attr_map_shared(ip); in xfs_getbmap()
627 if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1) in xfs_getbmap()
628 nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1; in xfs_getbmap()
645 if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 && in xfs_getbmap()
655 error = xfs_bmapi_read(ip, XFS_BB_TO_FSBT(mp, bmv->bmv_offset), in xfs_getbmap()
685 map[i].br_startoff <= XFS_B_TO_FSB(mp, XFS_ISIZE(ip))) in xfs_getbmap()
695 if (!xfs_getbmapx_fix_eof_hole(ip, &out[cur_ext], in xfs_getbmap()
726 xfs_iunlock(ip, lock); in xfs_getbmap()
728 xfs_iunlock(ip, XFS_IOLOCK_SHARED); in xfs_getbmap()
753 struct xfs_inode *ip, in xfs_bmap_punch_delalloc_range() argument
760 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); in xfs_bmap_punch_delalloc_range()
775 error = xfs_bmapi_read(ip, start_fsb, 1, &imap, &nimaps, in xfs_bmap_punch_delalloc_range()
780 if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) { in xfs_bmap_punch_delalloc_range()
781 xfs_alert(ip->i_mount, in xfs_bmap_punch_delalloc_range()
783 ip->i_ino, start_fsb); in xfs_bmap_punch_delalloc_range()
804 error = xfs_bunmapi(NULL, ip, start_fsb, 1, 0, 1, &firstblock, in xfs_bmap_punch_delalloc_range()
824 xfs_can_free_eofblocks(struct xfs_inode *ip, bool force) in xfs_can_free_eofblocks() argument
827 if (!S_ISREG(ip->i_d.di_mode)) in xfs_can_free_eofblocks()
834 if (VFS_I(ip)->i_size == 0 && in xfs_can_free_eofblocks()
835 VFS_I(ip)->i_mapping->nrpages == 0 && in xfs_can_free_eofblocks()
836 ip->i_delayed_blks == 0) in xfs_can_free_eofblocks()
840 if (!(ip->i_df.if_flags & XFS_IFEXTENTS)) in xfs_can_free_eofblocks()
847 if (ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)) in xfs_can_free_eofblocks()
848 if (!force || ip->i_delayed_blks == 0) in xfs_can_free_eofblocks()
862 xfs_inode_t *ip, in xfs_free_eofblocks() argument
877 end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip)); in xfs_free_eofblocks()
884 xfs_ilock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
885 error = xfs_bmapi_read(ip, end_fsb, map_len, &imap, &nimaps, 0); in xfs_free_eofblocks()
886 xfs_iunlock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
890 ip->i_delayed_blks)) { in xfs_free_eofblocks()
894 error = xfs_qm_dqattach(ip, 0); in xfs_free_eofblocks()
906 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { in xfs_free_eofblocks()
917 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
921 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
922 xfs_trans_ijoin(tp, ip, 0); in xfs_free_eofblocks()
930 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, in xfs_free_eofblocks()
931 XFS_ISIZE(ip)); in xfs_free_eofblocks()
941 xfs_inode_clear_eofblocks_tag(ip); in xfs_free_eofblocks()
944 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
946 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
953 struct xfs_inode *ip, in xfs_alloc_file_space() argument
958 xfs_mount_t *mp = ip->i_mount; in xfs_alloc_file_space()
975 trace_xfs_alloc_file_space(ip); in xfs_alloc_file_space()
980 error = xfs_qm_dqattach(ip, 0); in xfs_alloc_file_space()
987 rt = XFS_IS_REALTIME_INODE(ip); in xfs_alloc_file_space()
988 extsz = xfs_get_extsz_hint(ip); in xfs_alloc_file_space()
1055 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1056 error = xfs_trans_reserve_quota_nblks(tp, ip, qblocks, in xfs_alloc_file_space()
1061 xfs_trans_ijoin(tp, ip, 0); in xfs_alloc_file_space()
1064 error = xfs_bmapi_write(tp, ip, startoffset_fsb, in xfs_alloc_file_space()
1080 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1100 xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag); in xfs_alloc_file_space()
1104 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1121 xfs_inode_t *ip, in xfs_zero_remaining_bytes() argument
1130 xfs_mount_t *mp = ip->i_mount; in xfs_zero_remaining_bytes()
1139 if (startoff >= XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1142 if (endoff > XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1143 endoff = XFS_ISIZE(ip); in xfs_zero_remaining_bytes()
1151 lock_mode = xfs_ilock_data_map_shared(ip); in xfs_zero_remaining_bytes()
1152 error = xfs_bmapi_read(ip, offset_fsb, 1, &imap, &nimap, 0); in xfs_zero_remaining_bytes()
1153 xfs_iunlock(ip, lock_mode); in xfs_zero_remaining_bytes()
1174 if (IS_DAX(VFS_I(ip))) { in xfs_zero_remaining_bytes()
1175 error = dax_zero_page_range(VFS_I(ip), offset, in xfs_zero_remaining_bytes()
1183 error = xfs_buf_read_uncached(XFS_IS_REALTIME_INODE(ip) ? in xfs_zero_remaining_bytes()
1185 xfs_fsb_to_db(ip, imap.br_startblock), in xfs_zero_remaining_bytes()
1205 struct xfs_inode *ip, in xfs_free_file_space() argument
1227 mp = ip->i_mount; in xfs_free_file_space()
1229 trace_xfs_free_file_space(ip); in xfs_free_file_space()
1231 error = xfs_qm_dqattach(ip, 0); in xfs_free_file_space()
1238 rt = XFS_IS_REALTIME_INODE(ip); in xfs_free_file_space()
1243 inode_dio_wait(VFS_I(ip)); in xfs_free_file_space()
1248 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, in xfs_free_file_space()
1252 truncate_pagecache_range(VFS_I(ip), ioffset, iendoffset); in xfs_free_file_space()
1262 error = xfs_bmapi_read(ip, startoffset_fsb, 1, in xfs_free_file_space()
1277 error = xfs_bmapi_read(ip, endoffset_fsb - 1, 1, in xfs_free_file_space()
1293 error = xfs_zero_remaining_bytes(ip, offset, offset + len - 1); in xfs_free_file_space()
1299 error = xfs_zero_remaining_bytes(ip, offset, in xfs_free_file_space()
1303 error = xfs_zero_remaining_bytes(ip, in xfs_free_file_space()
1333 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1335 ip->i_udquot, ip->i_gdquot, ip->i_pdquot, in xfs_free_file_space()
1340 xfs_trans_ijoin(tp, ip, 0); in xfs_free_file_space()
1346 error = xfs_bunmapi(tp, ip, startoffset_fsb, in xfs_free_file_space()
1362 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1372 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1382 struct xfs_inode *ip, in xfs_zero_file_space() argument
1386 struct xfs_mount *mp = ip->i_mount; in xfs_zero_file_space()
1390 trace_xfs_zero_file_space(ip); in xfs_zero_file_space()
1403 error = xfs_free_file_space(ip, offset, len); in xfs_zero_file_space()
1407 error = xfs_alloc_file_space(ip, round_down(offset, blksize), in xfs_zero_file_space()
1426 struct xfs_inode *ip, in xfs_shift_file_space() argument
1432 struct xfs_mount *mp = ip->i_mount; in xfs_shift_file_space()
1446 stop_fsb = XFS_B_TO_FSB(mp, VFS_I(ip)->i_size); in xfs_shift_file_space()
1462 if (xfs_can_free_eofblocks(ip, true)) { in xfs_shift_file_space()
1463 error = xfs_free_eofblocks(mp, ip, false); in xfs_shift_file_space()
1472 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, in xfs_shift_file_space()
1476 error = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping, in xfs_shift_file_space()
1487 error = xfs_bmap_split_extent(ip, stop_fsb); in xfs_shift_file_space()
1507 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_shift_file_space()
1508 error = xfs_trans_reserve_quota(tp, mp, ip->i_udquot, in xfs_shift_file_space()
1509 ip->i_gdquot, ip->i_pdquot, in xfs_shift_file_space()
1515 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_shift_file_space()
1523 error = xfs_bmap_shift_extents(tp, ip, &next_fsb, shift_fsb, in xfs_shift_file_space()
1559 struct xfs_inode *ip, in xfs_collapse_file_space() argument
1565 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_collapse_file_space()
1566 trace_xfs_collapse_file_space(ip); in xfs_collapse_file_space()
1568 error = xfs_free_file_space(ip, offset, len); in xfs_collapse_file_space()
1572 return xfs_shift_file_space(ip, offset, len, SHIFT_LEFT); in xfs_collapse_file_space()
1589 struct xfs_inode *ip, in xfs_insert_file_space() argument
1593 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_insert_file_space()
1594 trace_xfs_insert_file_space(ip); in xfs_insert_file_space()
1596 return xfs_shift_file_space(ip, offset, len, SHIFT_RIGHT); in xfs_insert_file_space()
1621 xfs_inode_t *ip, /* target inode */ in xfs_swap_extents_check_format() argument
1626 if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || in xfs_swap_extents_check_format()
1634 if (ip->i_d.di_nextents < tip->i_d.di_nextents) in xfs_swap_extents_check_format()
1642 if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && in xfs_swap_extents_check_format()
1649 XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) in xfs_swap_extents_check_format()
1653 if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && in xfs_swap_extents_check_format()
1654 XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) > in xfs_swap_extents_check_format()
1668 if (XFS_IFORK_BOFF(ip) && in xfs_swap_extents_check_format()
1669 XFS_BMAP_BMDR_SPACE(tip->i_df.if_broot) > XFS_IFORK_BOFF(ip)) in xfs_swap_extents_check_format()
1672 XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) in xfs_swap_extents_check_format()
1677 if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { in xfs_swap_extents_check_format()
1679 XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip)) in xfs_swap_extents_check_format()
1681 if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <= in xfs_swap_extents_check_format()
1691 struct xfs_inode *ip) in xfs_swap_extent_flush() argument
1695 error = filemap_write_and_wait(VFS_I(ip)->i_mapping); in xfs_swap_extent_flush()
1698 truncate_pagecache_range(VFS_I(ip), 0, -1); in xfs_swap_extent_flush()
1701 if (VFS_I(ip)->i_mapping->nrpages) in xfs_swap_extent_flush()
1708 xfs_inode_t *ip, /* target inode */ in xfs_swap_extents() argument
1712 xfs_mount_t *mp = ip->i_mount; in xfs_swap_extents()
1736 xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL); in xfs_swap_extents()
1737 xfs_lock_two_inodes(ip, tip, XFS_MMAPLOCK_EXCL); in xfs_swap_extents()
1740 if ((ip->i_d.di_mode & S_IFMT) != (tip->i_d.di_mode & S_IFMT)) { in xfs_swap_extents()
1746 if (XFS_IS_REALTIME_INODE(ip) != XFS_IS_REALTIME_INODE(tip)) { in xfs_swap_extents()
1751 error = xfs_swap_extent_flush(ip); in xfs_swap_extents()
1769 xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL); in xfs_swap_extents()
1771 xfs_trans_ijoin(tp, ip, lock_flags); in xfs_swap_extents()
1777 sxp->sx_length != ip->i_d.di_size || in xfs_swap_extents()
1783 trace_xfs_swap_extent_before(ip, 0); in xfs_swap_extents()
1787 error = xfs_swap_extents_check_format(ip, tip); in xfs_swap_extents()
1791 __func__, ip->i_ino); in xfs_swap_extents()
1802 if ((sbp->bs_ctime.tv_sec != VFS_I(ip)->i_ctime.tv_sec) || in xfs_swap_extents()
1803 (sbp->bs_ctime.tv_nsec != VFS_I(ip)->i_ctime.tv_nsec) || in xfs_swap_extents()
1804 (sbp->bs_mtime.tv_sec != VFS_I(ip)->i_mtime.tv_sec) || in xfs_swap_extents()
1805 (sbp->bs_mtime.tv_nsec != VFS_I(ip)->i_mtime.tv_nsec)) { in xfs_swap_extents()
1812 if ( ((XFS_IFORK_Q(ip) != 0) && (ip->i_d.di_anextents > 0)) && in xfs_swap_extents()
1813 (ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)) { in xfs_swap_extents()
1814 error = xfs_bmap_count_blocks(tp, ip, XFS_ATTR_FORK, &aforkblks); in xfs_swap_extents()
1841 if (ip->i_d.di_version == 3 && in xfs_swap_extents()
1842 ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { in xfs_swap_extents()
1844 error = xfs_bmbt_change_owner(tp, ip, XFS_DATA_FORK, in xfs_swap_extents()
1854 ip->i_ino, NULL); in xfs_swap_extents()
1862 ifp = &ip->i_df; in xfs_swap_extents()
1871 tmp = (__uint64_t)ip->i_d.di_nblocks; in xfs_swap_extents()
1872 ip->i_d.di_nblocks = tip->i_d.di_nblocks - taforkblks + aforkblks; in xfs_swap_extents()
1875 tmp = (__uint64_t) ip->i_d.di_nextents; in xfs_swap_extents()
1876 ip->i_d.di_nextents = tip->i_d.di_nextents; in xfs_swap_extents()
1879 tmp = (__uint64_t) ip->i_d.di_format; in xfs_swap_extents()
1880 ip->i_d.di_format = tip->i_d.di_format; in xfs_swap_extents()
1893 tip->i_delayed_blks = ip->i_delayed_blks; in xfs_swap_extents()
1894 ip->i_delayed_blks = 0; in xfs_swap_extents()
1896 switch (ip->i_d.di_format) { in xfs_swap_extents()
1902 if (ip->i_d.di_nextents <= XFS_INLINE_EXTS) { in xfs_swap_extents()
1909 ASSERT(ip->i_d.di_version < 3 || in xfs_swap_extents()
1934 xfs_trans_log_inode(tp, ip, src_log_flags); in xfs_swap_extents()
1946 trace_xfs_swap_extent_after(ip, 0); in xfs_swap_extents()
1953 xfs_iunlock(ip, lock_flags); in xfs_swap_extents()