Lines Matching refs:iomap

13 #include <linux/iomap.h>
576 * @iomap: The iomap to store the hole size in
583 struct metapath *mp, struct iomap *iomap)
598 iomap->length = hole_size << inode->i_blkbits;
634 * @iomap: The iomap structure
653 * allocations, we would probably still want to limit the iomap size we
655 * iomap iteration would then find the blocks already allocated.
660 static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
668 size_t dblks = iomap->length >> inode->i_blkbits;
764 iomap->addr = bn << inode->i_blkbits;
765 iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW;
770 } while (iomap->addr == IOMAP_NULL_ADDR);
772 iomap->type = IOMAP_MAPPED;
773 iomap->length = (u64)dblks << inode->i_blkbits;
833 * @flags: iomap flags
834 * @iomap: The iomap structure
840 unsigned flags, struct iomap *iomap,
871 iomap->length = max_size;
878 iomap->offset = pos;
879 iomap->length = length;
883 iomap->length = size;
885 iomap->addr = (ip->i_no_addr << inode->i_blkbits) +
887 iomap->type = IOMAP_INLINE;
888 iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode);
894 iomap->offset = lblock << inode->i_blkbits;
897 iomap->length = len << inode->i_blkbits;
920 iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits;
921 iomap->length = len << inode->i_blkbits;
922 iomap->type = IOMAP_MAPPED;
923 iomap->flags |= IOMAP_F_MERGED;
925 iomap->flags |= IOMAP_F_GFS2_BOUNDARY;
928 iomap->bdev = inode->i_sb->s_bdev;
938 ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
940 iomap->length = size - iomap->offset;
949 if (alloc_size < iomap->length)
950 iomap->length = alloc_size;
953 ret = gfs2_hole_size(inode, lblock, len, mp, iomap);
956 iomap->addr = IOMAP_NULL_ADDR;
957 iomap->type = IOMAP_HOLE;
968 * the start of the file) to a file system absolute block using iomap.
974 struct iomap iomap = { };
979 ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), 0, &iomap, &mp);
982 *dblock = iomap.addr >> inode->i_blkbits;
1028 unsigned len, struct iomap *iomap)
1040 struct iomap *iomap)
1062 struct iomap *iomap,
1073 if (unstuff || iomap->type == IOMAP_HOLE) {
1079 gfs2_write_calc_reserv(ip, iomap->length, &data_blocks,
1100 iomap->length >> inode->i_blkbits);
1109 ret = gfs2_iomap_get(inode, iomap->offset,
1110 iomap->length, flags, iomap, mp);
1115 if (iomap->type == IOMAP_HOLE) {
1116 ret = gfs2_iomap_alloc(inode, iomap, mp);
1120 punch_hole(ip, iomap->offset, iomap->length);
1133 iomap->page_ops = &gfs2_iomap_page_ops;
1151 unsigned flags, struct iomap *iomap,
1152 struct iomap *srcmap)
1159 iomap->flags |= IOMAP_F_BUFFER_HEAD;
1168 ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
1179 if (iomap->type != IOMAP_MAPPED)
1185 if (iomap->type == IOMAP_HOLE)
1192 ret = gfs2_iomap_begin_write(inode, pos, length, flags, iomap, &mp);
1199 trace_gfs2_iomap_end(ip, iomap, ret);
1204 ssize_t written, unsigned flags, struct iomap *iomap)
1215 if (iomap->type == IOMAP_HOLE)
1233 if (length != written && (iomap->flags & IOMAP_F_NEW)) {
1236 loff_t hend = iomap->offset + iomap->length;
1247 if (iomap->flags & IOMAP_F_SIZE_CHANGED)
1290 struct iomap iomap = { };
1299 ret = gfs2_iomap_get(inode, pos, length, flags, &iomap, &mp);
1300 if (create && !ret && iomap.type == IOMAP_HOLE)
1301 ret = gfs2_iomap_alloc(inode, &iomap, &mp);
1306 if (iomap.length > bh_map->b_size) {
1307 iomap.length = bh_map->b_size;
1308 iomap.flags &= ~IOMAP_F_GFS2_BOUNDARY;
1310 if (iomap.addr != IOMAP_NULL_ADDR)
1311 map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits);
1312 bh_map->b_size = iomap.length;
1313 if (iomap.flags & IOMAP_F_GFS2_BOUNDARY)
1315 if (iomap.flags & IOMAP_F_NEW)
1349 * uses iomap write to perform its actions, which begin their own transactions
1461 struct iomap *iomap)
1466 ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
1467 if (!ret && iomap->type == IOMAP_HOLE)
1468 ret = gfs2_iomap_alloc(inode, iomap, &mp);
2524 if (offset >= wpc->iomap.offset &&
2525 offset < wpc->iomap.offset + wpc->iomap.length)
2528 memset(&wpc->iomap, 0, sizeof(wpc->iomap));
2529 ret = gfs2_iomap_get(inode, offset, INT_MAX, 0, &wpc->iomap, &mp);