Lines Matching refs:ioend
36 static inline bool xfs_ioend_is_append(struct iomap_ioend *ioend) in xfs_ioend_is_append() argument
38 return ioend->io_offset + ioend->io_size > in xfs_ioend_is_append()
39 XFS_I(ioend->io_inode)->i_d.di_size; in xfs_ioend_is_append()
44 struct iomap_ioend *ioend) in xfs_setfilesize_trans_alloc() argument
46 struct xfs_mount *mp = XFS_I(ioend->io_inode)->i_mount; in xfs_setfilesize_trans_alloc()
54 ioend->io_private = tp; in xfs_setfilesize_trans_alloc()
60 __sb_writers_release(ioend->io_inode->i_sb, SB_FREEZE_FS); in xfs_setfilesize_trans_alloc()
117 struct iomap_ioend *ioend, in xfs_setfilesize_ioend() argument
120 struct xfs_inode *ip = XFS_I(ioend->io_inode); in xfs_setfilesize_ioend()
121 struct xfs_trans *tp = ioend->io_private; in xfs_setfilesize_ioend()
137 return __xfs_setfilesize(ip, tp, ioend->io_offset, ioend->io_size); in xfs_setfilesize_ioend()
145 struct iomap_ioend *ioend) in xfs_end_ioend() argument
147 struct xfs_inode *ip = XFS_I(ioend->io_inode); in xfs_end_ioend()
149 xfs_off_t offset = ioend->io_offset; in xfs_end_ioend()
150 size_t size = ioend->io_size; in xfs_end_ioend()
176 error = blk_status_to_errno(ioend->io_bio->bi_status); in xfs_end_ioend()
178 if (ioend->io_flags & IOMAP_F_SHARED) { in xfs_end_ioend()
190 if (ioend->io_flags & IOMAP_F_SHARED) in xfs_end_ioend()
192 else if (ioend->io_type == IOMAP_UNWRITTEN) in xfs_end_ioend()
195 ASSERT(!xfs_ioend_is_append(ioend) || ioend->io_private); in xfs_end_ioend()
198 if (ioend->io_private) in xfs_end_ioend()
199 error = xfs_setfilesize_ioend(ioend, error); in xfs_end_ioend()
200 iomap_finish_ioends(ioend, error); in xfs_end_ioend()
212 struct iomap_ioend *ioend, in xfs_ioend_merge_private() argument
215 if (!ioend->io_private) { in xfs_ioend_merge_private()
216 ioend->io_private = next->io_private; in xfs_ioend_merge_private()
230 struct iomap_ioend *ioend; in xfs_end_io() local
239 while ((ioend = list_first_entry_or_null(&tmp, struct iomap_ioend, in xfs_end_io()
241 list_del_init(&ioend->io_list); in xfs_end_io()
242 iomap_ioend_try_merge(ioend, &tmp, xfs_ioend_merge_private); in xfs_end_io()
243 xfs_end_ioend(ioend); in xfs_end_io()
247 static inline bool xfs_ioend_needs_workqueue(struct iomap_ioend *ioend) in xfs_ioend_needs_workqueue() argument
249 return ioend->io_private || in xfs_ioend_needs_workqueue()
250 ioend->io_type == IOMAP_UNWRITTEN || in xfs_ioend_needs_workqueue()
251 (ioend->io_flags & IOMAP_F_SHARED); in xfs_ioend_needs_workqueue()
258 struct iomap_ioend *ioend = bio->bi_private; in xfs_end_bio() local
259 struct xfs_inode *ip = XFS_I(ioend->io_inode); in xfs_end_bio()
262 ASSERT(xfs_ioend_needs_workqueue(ioend)); in xfs_end_bio()
268 list_add_tail(&ioend->io_list, &ip->i_ioend_list); in xfs_end_bio()
495 struct iomap_ioend *ioend, in xfs_prepare_ioend() argument
508 if (!status && (ioend->io_flags & IOMAP_F_SHARED)) { in xfs_prepare_ioend()
509 status = xfs_reflink_convert_cow(XFS_I(ioend->io_inode), in xfs_prepare_ioend()
510 ioend->io_offset, ioend->io_size); in xfs_prepare_ioend()
515 ((ioend->io_flags & IOMAP_F_SHARED) || in xfs_prepare_ioend()
516 ioend->io_type != IOMAP_UNWRITTEN) && in xfs_prepare_ioend()
517 xfs_ioend_is_append(ioend) && in xfs_prepare_ioend()
518 !ioend->io_private) in xfs_prepare_ioend()
519 status = xfs_setfilesize_trans_alloc(ioend); in xfs_prepare_ioend()
523 if (xfs_ioend_needs_workqueue(ioend)) in xfs_prepare_ioend()
524 ioend->io_bio->bi_end_io = xfs_end_bio; in xfs_prepare_ioend()