Lines Matching +full:ip +full:- +full:blocks
1 // SPDX-License-Identifier: GPL-2.0
20 * before every operation that can remove blocks from the extent map.
22 * about exposing unallocated blocks but just want to provide basic
33 struct xfs_inode *ip = XFS_I(inode); in xfs_break_leased_layouts() local
36 while ((error = break_layout(inode, false)) == -EWOULDBLOCK) { in xfs_break_leased_layouts()
37 xfs_iunlock(ip, *iolock); in xfs_break_leased_layouts()
42 xfs_ilock(ip, *iolock); in xfs_break_leased_layouts()
65 return -EINVAL; in xfs_fs_get_uuid()
67 memcpy(buf, &mp->m_sb.sb_uuid, sizeof(uuid_t)); in xfs_fs_get_uuid()
85 struct xfs_inode *ip = XFS_I(inode); in xfs_fs_map_blocks() local
86 struct xfs_mount *mp = ip->i_mount; in xfs_fs_map_blocks()
96 return -EIO; in xfs_fs_map_blocks()
103 if (XFS_IS_REALTIME_INODE(ip)) in xfs_fs_map_blocks()
104 return -ENXIO; in xfs_fs_map_blocks()
110 if (xfs_is_reflink_inode(ip)) in xfs_fs_map_blocks()
111 return -ENXIO; in xfs_fs_map_blocks()
120 xfs_ilock(ip, XFS_IOLOCK_EXCL); in xfs_fs_map_blocks()
122 error = -EINVAL; in xfs_fs_map_blocks()
123 limit = mp->m_super->s_maxbytes; in xfs_fs_map_blocks()
126 inode->i_sb->s_blocksize)); in xfs_fs_map_blocks()
129 if (offset > limit - length) in xfs_fs_map_blocks()
130 length = limit - offset; in xfs_fs_map_blocks()
132 error = filemap_write_and_wait(inode->i_mapping); in xfs_fs_map_blocks()
135 error = invalidate_inode_pages2(inode->i_mapping); in xfs_fs_map_blocks()
142 lock_flags = xfs_ilock_data_map_shared(ip); in xfs_fs_map_blocks()
143 error = xfs_bmapi_read(ip, offset_fsb, end_fsb - offset_fsb, in xfs_fs_map_blocks()
150 if (offset + length > XFS_ISIZE(ip)) in xfs_fs_map_blocks()
151 end_fsb = xfs_iomap_eof_align_last_fsb(ip, end_fsb); in xfs_fs_map_blocks()
155 xfs_iunlock(ip, lock_flags); in xfs_fs_map_blocks()
157 error = xfs_iomap_write_direct(ip, offset_fsb, in xfs_fs_map_blocks()
158 end_fsb - offset_fsb, &imap); in xfs_fs_map_blocks()
164 * that the blocks allocated and handed out to the client are in xfs_fs_map_blocks()
167 error = xfs_update_prealloc_flags(ip, in xfs_fs_map_blocks()
172 xfs_iunlock(ip, lock_flags); in xfs_fs_map_blocks()
174 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_fs_map_blocks()
176 error = xfs_bmbt_to_iomap(ip, iomap, &imap, 0); in xfs_fs_map_blocks()
177 *device_generation = mp->m_generation; in xfs_fs_map_blocks()
180 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_fs_map_blocks()
189 struct xfs_inode *ip, in xfs_pnfs_validate_isize() argument
196 xfs_ilock(ip, XFS_ILOCK_SHARED); in xfs_pnfs_validate_isize()
197 error = xfs_bmapi_read(ip, XFS_B_TO_FSBT(ip->i_mount, isize - 1), 1, in xfs_pnfs_validate_isize()
199 xfs_iunlock(ip, XFS_ILOCK_SHARED); in xfs_pnfs_validate_isize()
206 return -EIO; in xfs_pnfs_validate_isize()
211 * Make sure the blocks described by maps are stable on disk. This includes
227 struct xfs_inode *ip = XFS_I(inode); in xfs_fs_commit_blocks() local
228 struct xfs_mount *mp = ip->i_mount; in xfs_fs_commit_blocks()
234 ASSERT(iattr->ia_valid & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME)); in xfs_fs_commit_blocks()
236 xfs_ilock(ip, XFS_IOLOCK_EXCL); in xfs_fs_commit_blocks()
239 if ((iattr->ia_valid & ATTR_SIZE) && iattr->ia_size > size) { in xfs_fs_commit_blocks()
241 size = iattr->ia_size; in xfs_fs_commit_blocks()
255 length = end - start; in xfs_fs_commit_blocks()
262 error = invalidate_inode_pages2_range(inode->i_mapping, in xfs_fs_commit_blocks()
264 (end - 1) >> PAGE_SHIFT); in xfs_fs_commit_blocks()
267 error = xfs_iomap_write_unwritten(ip, start, length, false); in xfs_fs_commit_blocks()
273 error = xfs_pnfs_validate_isize(ip, size); in xfs_fs_commit_blocks()
278 error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 0, 0, 0, &tp); in xfs_fs_commit_blocks()
282 xfs_ilock(ip, XFS_ILOCK_EXCL); in xfs_fs_commit_blocks()
283 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); in xfs_fs_commit_blocks()
284 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); in xfs_fs_commit_blocks()
286 xfs_setattr_time(ip, iattr); in xfs_fs_commit_blocks()
288 i_size_write(inode, iattr->ia_size); in xfs_fs_commit_blocks()
289 ip->i_d.di_size = iattr->ia_size; in xfs_fs_commit_blocks()
296 xfs_iunlock(ip, XFS_IOLOCK_EXCL); in xfs_fs_commit_blocks()