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()
157 mp = ap->ip->i_mount; in xfs_bmap_rtalloc()
158 align = xfs_get_extsz_hint(ap->ip); in xfs_bmap_rtalloc()
231 ap->ip->i_d.di_nblocks += ralen; in xfs_bmap_rtalloc()
232 xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE); in xfs_bmap_rtalloc()
234 ap->ip->i_delayed_blks -= ralen; in xfs_bmap_rtalloc()
239 xfs_trans_mod_dquot_byino(ap->tp, ap->ip, in xfs_bmap_rtalloc()
255 struct xfs_inode *ip, in xfs_bmap_eof() argument
263 error = xfs_bmap_last_extent(NULL, ip, whichfork, &rec, eof); in xfs_bmap_eof()
396 xfs_inode_t *ip, /* incore inode */ in xfs_bmap_count_blocks() argument
408 mp = ip->i_mount; in xfs_bmap_count_blocks()
409 ifp = XFS_IFORK_PTR(ip, whichfork); in xfs_bmap_count_blocks()
410 if ( XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_EXTENTS ) { in xfs_bmap_count_blocks()
443 xfs_inode_t *ip, /* xfs incore inode pointer */ in xfs_getbmapx_fix_eof_hole() argument
457 mp = ip->i_mount; in xfs_getbmapx_fix_eof_hole()
459 fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, XFS_ISIZE(ip))); in xfs_getbmapx_fix_eof_hole()
471 out->bmv_block = xfs_fsb_to_db(ip, startblock); in xfs_getbmapx_fix_eof_hole()
472 fileblock = XFS_BB_TO_FSB(ip->i_mount, out->bmv_offset); in xfs_getbmapx_fix_eof_hole()
473 ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK); in xfs_getbmapx_fix_eof_hole()
491 xfs_inode_t *ip, in xfs_getbmap() argument
515 mp = ip->i_mount; in xfs_getbmap()
520 if (XFS_IFORK_Q(ip)) { in xfs_getbmap()
521 if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && in xfs_getbmap()
522 ip->i_d.di_aformat != XFS_DINODE_FMT_BTREE && in xfs_getbmap()
523 ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL) in xfs_getbmap()
526 ip->i_d.di_aformat != 0 && in xfs_getbmap()
527 ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS)) { in xfs_getbmap()
529 ip->i_mount); in xfs_getbmap()
536 if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && in xfs_getbmap()
537 ip->i_d.di_format != XFS_DINODE_FMT_BTREE && in xfs_getbmap()
538 ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) in xfs_getbmap()
541 if (xfs_get_extsz_hint(ip) || in xfs_getbmap()
542 ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ in xfs_getbmap()
547 fixlen = XFS_ISIZE(ip); in xfs_getbmap()
574 xfs_ilock(ip, XFS_IOLOCK_SHARED); in xfs_getbmap()
577 (ip->i_delayed_blks || XFS_ISIZE(ip) > ip->i_d.di_size)) { in xfs_getbmap()
578 error = filemap_write_and_wait(VFS_I(ip)->i_mapping); in xfs_getbmap()
592 lock = xfs_ilock_data_map_shared(ip); in xfs_getbmap()
594 lock = xfs_ilock_attr_map_shared(ip); in xfs_getbmap()
601 if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1) in xfs_getbmap()
602 nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1; in xfs_getbmap()
619 if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 && in xfs_getbmap()
629 error = xfs_bmapi_read(ip, XFS_BB_TO_FSBT(mp, bmv->bmv_offset), in xfs_getbmap()
659 map[i].br_startoff <= XFS_B_TO_FSB(mp, XFS_ISIZE(ip))) in xfs_getbmap()
669 if (!xfs_getbmapx_fix_eof_hole(ip, &out[cur_ext], in xfs_getbmap()
700 xfs_iunlock(ip, lock); in xfs_getbmap()
702 xfs_iunlock(ip, XFS_IOLOCK_SHARED); in xfs_getbmap()
727 struct xfs_inode *ip, in xfs_bmap_punch_delalloc_range() argument
734 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); in xfs_bmap_punch_delalloc_range()
749 error = xfs_bmapi_read(ip, start_fsb, 1, &imap, &nimaps, in xfs_bmap_punch_delalloc_range()
754 if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) { in xfs_bmap_punch_delalloc_range()
755 xfs_alert(ip->i_mount, in xfs_bmap_punch_delalloc_range()
757 ip->i_ino, start_fsb); in xfs_bmap_punch_delalloc_range()
778 error = xfs_bunmapi(NULL, ip, start_fsb, 1, 0, 1, &firstblock, in xfs_bmap_punch_delalloc_range()
798 xfs_can_free_eofblocks(struct xfs_inode *ip, bool force) in xfs_can_free_eofblocks() argument
801 if (!S_ISREG(ip->i_d.di_mode)) in xfs_can_free_eofblocks()
808 if (VFS_I(ip)->i_size == 0 && in xfs_can_free_eofblocks()
809 VFS_I(ip)->i_mapping->nrpages == 0 && in xfs_can_free_eofblocks()
810 ip->i_delayed_blks == 0) in xfs_can_free_eofblocks()
814 if (!(ip->i_df.if_flags & XFS_IFEXTENTS)) in xfs_can_free_eofblocks()
821 if (ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC | XFS_DIFLAG_APPEND)) in xfs_can_free_eofblocks()
822 if (!force || ip->i_delayed_blks == 0) in xfs_can_free_eofblocks()
836 xfs_inode_t *ip, in xfs_free_eofblocks() argument
851 end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip)); in xfs_free_eofblocks()
858 xfs_ilock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
859 error = xfs_bmapi_read(ip, end_fsb, map_len, &imap, &nimaps, 0); in xfs_free_eofblocks()
860 xfs_iunlock(ip, XFS_ILOCK_SHARED); in xfs_free_eofblocks()
864 ip->i_delayed_blks)) { in xfs_free_eofblocks()
868 error = xfs_qm_dqattach(ip, 0); in xfs_free_eofblocks()
880 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_EXCL)) { in xfs_free_eofblocks()
891 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
895 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
896 xfs_trans_ijoin(tp, ip, 0); in xfs_free_eofblocks()
904 error = xfs_itruncate_extents(&tp, ip, XFS_DATA_FORK, in xfs_free_eofblocks()
905 XFS_ISIZE(ip)); in xfs_free_eofblocks()
918 xfs_inode_clear_eofblocks_tag(ip); in xfs_free_eofblocks()
921 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_eofblocks()
923 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_free_eofblocks()
930 struct xfs_inode *ip, in xfs_alloc_file_space() argument
935 xfs_mount_t *mp = ip->i_mount; in xfs_alloc_file_space()
952 trace_xfs_alloc_file_space(ip); in xfs_alloc_file_space()
957 error = xfs_qm_dqattach(ip, 0); in xfs_alloc_file_space()
964 rt = XFS_IS_REALTIME_INODE(ip); in xfs_alloc_file_space()
965 extsz = xfs_get_extsz_hint(ip); in xfs_alloc_file_space()
1032 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1033 error = xfs_trans_reserve_quota_nblks(tp, ip, qblocks, in xfs_alloc_file_space()
1038 xfs_trans_ijoin(tp, ip, 0); in xfs_alloc_file_space()
1041 error = xfs_bmapi_write(tp, ip, startoffset_fsb, in xfs_alloc_file_space()
1057 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1077 xfs_trans_unreserve_quota_nblks(tp, ip, (long)qblocks, 0, quota_flag); in xfs_alloc_file_space()
1081 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_alloc_file_space()
1098 xfs_inode_t *ip, in xfs_zero_remaining_bytes() argument
1107 xfs_mount_t *mp = ip->i_mount; in xfs_zero_remaining_bytes()
1116 if (startoff >= XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1119 if (endoff > XFS_ISIZE(ip)) in xfs_zero_remaining_bytes()
1120 endoff = XFS_ISIZE(ip); in xfs_zero_remaining_bytes()
1128 lock_mode = xfs_ilock_data_map_shared(ip); in xfs_zero_remaining_bytes()
1129 error = xfs_bmapi_read(ip, offset_fsb, 1, &imap, &nimap, 0); in xfs_zero_remaining_bytes()
1130 xfs_iunlock(ip, lock_mode); in xfs_zero_remaining_bytes()
1145 error = xfs_buf_read_uncached(XFS_IS_REALTIME_INODE(ip) ? in xfs_zero_remaining_bytes()
1147 xfs_fsb_to_db(ip, imap.br_startblock), in xfs_zero_remaining_bytes()
1167 struct xfs_inode *ip, in xfs_free_file_space() argument
1189 mp = ip->i_mount; in xfs_free_file_space()
1191 trace_xfs_free_file_space(ip); in xfs_free_file_space()
1193 error = xfs_qm_dqattach(ip, 0); in xfs_free_file_space()
1200 rt = XFS_IS_REALTIME_INODE(ip); in xfs_free_file_space()
1205 inode_dio_wait(VFS_I(ip)); in xfs_free_file_space()
1210 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, ioffset, in xfs_free_file_space()
1214 truncate_pagecache_range(VFS_I(ip), ioffset, iendoffset); in xfs_free_file_space()
1224 error = xfs_bmapi_read(ip, startoffset_fsb, 1, in xfs_free_file_space()
1239 error = xfs_bmapi_read(ip, endoffset_fsb - 1, 1, in xfs_free_file_space()
1255 error = xfs_zero_remaining_bytes(ip, offset, offset + len - 1); in xfs_free_file_space()
1261 error = xfs_zero_remaining_bytes(ip, offset, in xfs_free_file_space()
1265 error = xfs_zero_remaining_bytes(ip, in xfs_free_file_space()
1295 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1297 ip->i_udquot, ip->i_gdquot, ip->i_pdquot, in xfs_free_file_space()
1302 xfs_trans_ijoin(tp, ip, 0); in xfs_free_file_space()
1308 error = xfs_bunmapi(tp, ip, startoffset_fsb, in xfs_free_file_space()
1324 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1334 xfs_iunlock(ip, XFS_ILOCK_EXCL); in xfs_free_file_space()
1344 struct xfs_inode *ip, in xfs_zero_file_space() argument
1348 struct xfs_mount *mp = ip->i_mount; in xfs_zero_file_space()
1352 trace_xfs_zero_file_space(ip); in xfs_zero_file_space()
1365 error = xfs_free_file_space(ip, offset, len); in xfs_zero_file_space()
1369 error = xfs_alloc_file_space(ip, round_down(offset, blksize), in xfs_zero_file_space()
1388 struct xfs_inode *ip, in xfs_shift_file_space() argument
1394 struct xfs_mount *mp = ip->i_mount; in xfs_shift_file_space()
1408 stop_fsb = XFS_B_TO_FSB(mp, VFS_I(ip)->i_size); in xfs_shift_file_space()
1424 if (xfs_can_free_eofblocks(ip, true)) { in xfs_shift_file_space()
1425 error = xfs_free_eofblocks(mp, ip, false); in xfs_shift_file_space()
1434 error = filemap_write_and_wait_range(VFS_I(ip)->i_mapping, in xfs_shift_file_space()
1438 error = invalidate_inode_pages2_range(VFS_I(ip)->i_mapping, in xfs_shift_file_space()
1449 error = xfs_bmap_split_extent(ip, stop_fsb); in xfs_shift_file_space()
1469 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_shift_file_space()
1470 error = xfs_trans_reserve_quota(tp, mp, ip->i_udquot, in xfs_shift_file_space()
1471 ip->i_gdquot, ip->i_pdquot, in xfs_shift_file_space()
1477 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_shift_file_space()
1485 error = xfs_bmap_shift_extents(tp, ip, &next_fsb, shift_fsb, in xfs_shift_file_space()
1519 struct xfs_inode *ip, in xfs_collapse_file_space() argument
1525 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_collapse_file_space()
1526 trace_xfs_collapse_file_space(ip); in xfs_collapse_file_space()
1528 error = xfs_free_file_space(ip, offset, len); in xfs_collapse_file_space()
1532 return xfs_shift_file_space(ip, offset, len, SHIFT_LEFT); in xfs_collapse_file_space()
1549 struct xfs_inode *ip, in xfs_insert_file_space() argument
1553 ASSERT(xfs_isilocked(ip, XFS_IOLOCK_EXCL)); in xfs_insert_file_space()
1554 trace_xfs_insert_file_space(ip); in xfs_insert_file_space()
1556 return xfs_shift_file_space(ip, offset, len, SHIFT_RIGHT); in xfs_insert_file_space()
1581 xfs_inode_t *ip, /* target inode */ in xfs_swap_extents_check_format() argument
1586 if (ip->i_d.di_format == XFS_DINODE_FMT_LOCAL || in xfs_swap_extents_check_format()
1594 if (ip->i_d.di_nextents < tip->i_d.di_nextents) in xfs_swap_extents_check_format()
1602 if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && in xfs_swap_extents_check_format()
1609 XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) in xfs_swap_extents_check_format()
1613 if (ip->i_d.di_format == XFS_DINODE_FMT_EXTENTS && in xfs_swap_extents_check_format()
1614 XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) > in xfs_swap_extents_check_format()
1628 if (XFS_IFORK_BOFF(ip) && in xfs_swap_extents_check_format()
1629 XFS_BMAP_BMDR_SPACE(tip->i_df.if_broot) > XFS_IFORK_BOFF(ip)) in xfs_swap_extents_check_format()
1632 XFS_IFORK_MAXEXT(ip, XFS_DATA_FORK)) in xfs_swap_extents_check_format()
1637 if (ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { in xfs_swap_extents_check_format()
1639 XFS_BMAP_BMDR_SPACE(ip->i_df.if_broot) > XFS_IFORK_BOFF(tip)) in xfs_swap_extents_check_format()
1641 if (XFS_IFORK_NEXTENTS(ip, XFS_DATA_FORK) <= in xfs_swap_extents_check_format()
1651 struct xfs_inode *ip) in xfs_swap_extent_flush() argument
1655 error = filemap_write_and_wait(VFS_I(ip)->i_mapping); in xfs_swap_extent_flush()
1658 truncate_pagecache_range(VFS_I(ip), 0, -1); in xfs_swap_extent_flush()
1661 if (VFS_I(ip)->i_mapping->nrpages) in xfs_swap_extent_flush()
1668 xfs_inode_t *ip, /* target inode */ in xfs_swap_extents() argument
1672 xfs_mount_t *mp = ip->i_mount; in xfs_swap_extents()
1696 xfs_lock_two_inodes(ip, tip, XFS_IOLOCK_EXCL); in xfs_swap_extents()
1697 xfs_lock_two_inodes(ip, tip, XFS_MMAPLOCK_EXCL); in xfs_swap_extents()
1700 if ((ip->i_d.di_mode & S_IFMT) != (tip->i_d.di_mode & S_IFMT)) { in xfs_swap_extents()
1706 if (XFS_IS_REALTIME_INODE(ip) != XFS_IS_REALTIME_INODE(tip)) { in xfs_swap_extents()
1711 error = xfs_swap_extent_flush(ip); in xfs_swap_extents()
1729 xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL); in xfs_swap_extents()
1731 xfs_trans_ijoin(tp, ip, lock_flags); in xfs_swap_extents()
1737 sxp->sx_length != ip->i_d.di_size || in xfs_swap_extents()
1743 trace_xfs_swap_extent_before(ip, 0); in xfs_swap_extents()
1747 error = xfs_swap_extents_check_format(ip, tip); in xfs_swap_extents()
1751 __func__, ip->i_ino); in xfs_swap_extents()
1762 if ((sbp->bs_ctime.tv_sec != VFS_I(ip)->i_ctime.tv_sec) || in xfs_swap_extents()
1763 (sbp->bs_ctime.tv_nsec != VFS_I(ip)->i_ctime.tv_nsec) || in xfs_swap_extents()
1764 (sbp->bs_mtime.tv_sec != VFS_I(ip)->i_mtime.tv_sec) || in xfs_swap_extents()
1765 (sbp->bs_mtime.tv_nsec != VFS_I(ip)->i_mtime.tv_nsec)) { in xfs_swap_extents()
1772 if ( ((XFS_IFORK_Q(ip) != 0) && (ip->i_d.di_anextents > 0)) && in xfs_swap_extents()
1773 (ip->i_d.di_aformat != XFS_DINODE_FMT_LOCAL)) { in xfs_swap_extents()
1774 error = xfs_bmap_count_blocks(tp, ip, XFS_ATTR_FORK, &aforkblks); in xfs_swap_extents()
1801 if (ip->i_d.di_version == 3 && in xfs_swap_extents()
1802 ip->i_d.di_format == XFS_DINODE_FMT_BTREE) { in xfs_swap_extents()
1804 error = xfs_bmbt_change_owner(tp, ip, XFS_DATA_FORK, in xfs_swap_extents()
1814 ip->i_ino, NULL); in xfs_swap_extents()
1822 ifp = &ip->i_df; in xfs_swap_extents()
1831 tmp = (__uint64_t)ip->i_d.di_nblocks; in xfs_swap_extents()
1832 ip->i_d.di_nblocks = tip->i_d.di_nblocks - taforkblks + aforkblks; in xfs_swap_extents()
1835 tmp = (__uint64_t) ip->i_d.di_nextents; in xfs_swap_extents()
1836 ip->i_d.di_nextents = tip->i_d.di_nextents; in xfs_swap_extents()
1839 tmp = (__uint64_t) ip->i_d.di_format; in xfs_swap_extents()
1840 ip->i_d.di_format = tip->i_d.di_format; in xfs_swap_extents()
1853 tip->i_delayed_blks = ip->i_delayed_blks; in xfs_swap_extents()
1854 ip->i_delayed_blks = 0; in xfs_swap_extents()
1856 switch (ip->i_d.di_format) { in xfs_swap_extents()
1862 if (ip->i_d.di_nextents <= XFS_INLINE_EXTS) { in xfs_swap_extents()
1869 ASSERT(ip->i_d.di_version < 3 || in xfs_swap_extents()
1894 xfs_trans_log_inode(tp, ip, src_log_flags); in xfs_swap_extents()
1906 trace_xfs_swap_extent_after(ip, 0); in xfs_swap_extents()
1913 xfs_iunlock(ip, lock_flags); in xfs_swap_extents()