Lines Matching refs:iomap
13 #include <linux/iomap.h>
575 * @iomap: The iomap to store the hole size in
582 struct metapath *mp, struct iomap *iomap)
597 iomap->length = hole_size << inode->i_blkbits;
632 * @iomap: The iomap structure
651 * allocations, we would probably still want to limit the iomap size we
653 * iomap iteration would then find the blocks already allocated.
658 static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
666 size_t dblks = iomap->length >> inode->i_blkbits;
762 iomap->addr = bn << inode->i_blkbits;
763 iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW;
768 } while (iomap->addr == IOMAP_NULL_ADDR);
770 iomap->type = IOMAP_MAPPED;
771 iomap->length = (u64)dblks << inode->i_blkbits;
831 * @flags: iomap flags
832 * @iomap: The iomap structure
838 unsigned flags, struct iomap *iomap,
869 iomap->length = max_size;
876 iomap->offset = pos;
877 iomap->length = length;
881 iomap->length = size;
883 iomap->addr = (ip->i_no_addr << inode->i_blkbits) +
885 iomap->type = IOMAP_INLINE;
886 iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode);
892 iomap->offset = lblock << inode->i_blkbits;
895 iomap->length = len << inode->i_blkbits;
918 iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits;
919 iomap->length = len << inode->i_blkbits;
920 iomap->type = IOMAP_MAPPED;
921 iomap->flags |= IOMAP_F_MERGED;
923 iomap->flags |= IOMAP_F_GFS2_BOUNDARY;
926 iomap->bdev = inode->i_sb->s_bdev;
936 ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
938 iomap->length = size - iomap->offset;
947 if (alloc_size < iomap->length)
948 iomap->length = alloc_size;
951 ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
954 iomap->addr = IOMAP_NULL_ADDR;
955 iomap->type = IOMAP_HOLE;
1007 struct iomap *iomap,
1018 if (unstuff || iomap->type == IOMAP_HOLE) {
1024 gfs2_write_calc_reserv(ip, iomap->length, &data_blocks,
1045 iomap->length >> inode->i_blkbits);
1054 ret = __gfs2_iomap_get(inode, iomap->offset,
1055 iomap->length, flags, iomap, mp);
1060 if (iomap->type == IOMAP_HOLE) {
1061 ret = __gfs2_iomap_alloc(inode, iomap, mp);
1065 punch_hole(ip, iomap->offset, iomap->length);
1078 iomap->folio_ops = &gfs2_iomap_folio_ops;
1091 unsigned flags, struct iomap *iomap,
1092 struct iomap *srcmap)
1099 iomap->flags |= IOMAP_F_BUFFER_HEAD;
1102 ret = __gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
1113 if (iomap->type != IOMAP_MAPPED)
1119 if (iomap->type == IOMAP_HOLE)
1126 ret = gfs2_iomap_begin_write(inode, pos, length, flags, iomap, &mp);
1130 trace_gfs2_iomap_end(ip, iomap, ret);
1135 ssize_t written, unsigned flags, struct iomap *iomap)
1146 if (iomap->type == IOMAP_HOLE)
1164 if (length != written && (iomap->flags & IOMAP_F_NEW)) {
1167 loff_t hend = iomap->offset + iomap->length;
1178 if (iomap->flags & IOMAP_F_SIZE_CHANGED)
1216 struct iomap iomap = { };
1225 ret = gfs2_iomap_get(inode, pos, length, &iomap);
1227 ret = gfs2_iomap_alloc(inode, pos, length, &iomap);
1231 if (iomap.length > bh_map->b_size) {
1232 iomap.length = bh_map->b_size;
1233 iomap.flags &= ~IOMAP_F_GFS2_BOUNDARY;
1235 if (iomap.addr != IOMAP_NULL_ADDR)
1236 map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits);
1237 bh_map->b_size = iomap.length;
1238 if (iomap.flags & IOMAP_F_GFS2_BOUNDARY)
1240 if (iomap.flags & IOMAP_F_NEW)
1252 struct iomap iomap = { };
1257 &iomap);
1260 if (iomap.type != IOMAP_MAPPED)
1262 *dblock = iomap.addr >> blkbits;
1263 len = iomap.length >> blkbits;
1273 struct iomap iomap = { };
1278 &iomap);
1281 if (iomap.type != IOMAP_MAPPED)
1283 *dblock = iomap.addr >> blkbits;
1284 len = iomap.length >> blkbits;
1287 *new = iomap.flags & IOMAP_F_NEW;
1293 * uses iomap write to perform its actions, which begin their own transactions
1405 struct iomap *iomap)
1410 ret = __gfs2_iomap_get(inode, pos, length, 0, iomap, &mp);
1416 struct iomap *iomap)
1421 ret = __gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
1422 if (!ret && iomap->type == IOMAP_HOLE)
1423 ret = __gfs2_iomap_alloc(inode, iomap, &mp);
2472 if (offset >= wpc->iomap.offset &&
2473 offset < wpc->iomap.offset + wpc->iomap.length)
2476 memset(&wpc->iomap, 0, sizeof(wpc->iomap));
2477 ret = gfs2_iomap_get(inode, offset, INT_MAX, &wpc->iomap);