Lines Matching refs:iomap

586 			  struct metapath *mp, struct iomap *iomap)  in gfs2_hole_size()  argument
601 iomap->length = hole_size << inode->i_blkbits; in gfs2_hole_size()
663 static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap, in gfs2_iomap_alloc() argument
671 size_t dblks = iomap->length >> inode->i_blkbits; in gfs2_iomap_alloc()
767 iomap->addr = bn << inode->i_blkbits; in gfs2_iomap_alloc()
768 iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW; in gfs2_iomap_alloc()
773 } while (iomap->addr == IOMAP_NULL_ADDR); in gfs2_iomap_alloc()
775 iomap->type = IOMAP_MAPPED; in gfs2_iomap_alloc()
776 iomap->length = (u64)dblks << inode->i_blkbits; in gfs2_iomap_alloc()
843 unsigned flags, struct iomap *iomap, in gfs2_iomap_get() argument
874 iomap->length = max_size; in gfs2_iomap_get()
881 iomap->offset = pos; in gfs2_iomap_get()
882 iomap->length = length; in gfs2_iomap_get()
886 iomap->length = size; in gfs2_iomap_get()
888 iomap->addr = (ip->i_no_addr << inode->i_blkbits) + in gfs2_iomap_get()
890 iomap->type = IOMAP_INLINE; in gfs2_iomap_get()
891 iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode); in gfs2_iomap_get()
897 iomap->offset = lblock << inode->i_blkbits; in gfs2_iomap_get()
900 iomap->length = len << inode->i_blkbits; in gfs2_iomap_get()
923 iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits; in gfs2_iomap_get()
924 iomap->length = len << inode->i_blkbits; in gfs2_iomap_get()
925 iomap->type = IOMAP_MAPPED; in gfs2_iomap_get()
926 iomap->flags |= IOMAP_F_MERGED; in gfs2_iomap_get()
928 iomap->flags |= IOMAP_F_GFS2_BOUNDARY; in gfs2_iomap_get()
931 iomap->bdev = inode->i_sb->s_bdev; in gfs2_iomap_get()
941 ret = gfs2_hole_size(inode, lblock, len, mp, iomap); in gfs2_iomap_get()
943 iomap->length = size - pos; in gfs2_iomap_get()
952 if (alloc_size < iomap->length) in gfs2_iomap_get()
953 iomap->length = alloc_size; in gfs2_iomap_get()
956 ret = gfs2_hole_size(inode, lblock, len, mp, iomap); in gfs2_iomap_get()
959 iomap->addr = IOMAP_NULL_ADDR; in gfs2_iomap_get()
960 iomap->type = IOMAP_HOLE; in gfs2_iomap_get()
977 struct iomap iomap = { }; in gfs2_lblk_to_dblk() local
982 ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), 0, &iomap, &mp); in gfs2_lblk_to_dblk()
985 *dblock = iomap.addr >> inode->i_blkbits; in gfs2_lblk_to_dblk()
1031 unsigned len, struct iomap *iomap) in gfs2_iomap_page_prepare() argument
1043 struct iomap *iomap) in gfs2_iomap_page_done() argument
1065 struct iomap *iomap, in gfs2_iomap_begin_write() argument
1076 if (unstuff || iomap->type == IOMAP_HOLE) { in gfs2_iomap_begin_write()
1082 gfs2_write_calc_reserv(ip, iomap->length, &data_blocks, in gfs2_iomap_begin_write()
1103 iomap->length >> inode->i_blkbits); in gfs2_iomap_begin_write()
1112 ret = gfs2_iomap_get(inode, iomap->offset, in gfs2_iomap_begin_write()
1113 iomap->length, flags, iomap, mp); in gfs2_iomap_begin_write()
1118 if (iomap->type == IOMAP_HOLE) { in gfs2_iomap_begin_write()
1119 ret = gfs2_iomap_alloc(inode, iomap, mp); in gfs2_iomap_begin_write()
1123 punch_hole(ip, iomap->offset, iomap->length); in gfs2_iomap_begin_write()
1136 iomap->page_ops = &gfs2_iomap_page_ops; in gfs2_iomap_begin_write()
1154 unsigned flags, struct iomap *iomap, in gfs2_iomap_begin() argument
1155 struct iomap *srcmap) in gfs2_iomap_begin()
1162 iomap->flags |= IOMAP_F_BUFFER_HEAD; in gfs2_iomap_begin()
1171 ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp); in gfs2_iomap_begin()
1182 if (iomap->type != IOMAP_MAPPED) in gfs2_iomap_begin()
1188 if (iomap->type == IOMAP_HOLE) in gfs2_iomap_begin()
1195 ret = gfs2_iomap_begin_write(inode, pos, length, flags, iomap, &mp); in gfs2_iomap_begin()
1202 trace_gfs2_iomap_end(ip, iomap, ret); in gfs2_iomap_begin()
1207 ssize_t written, unsigned flags, struct iomap *iomap) in gfs2_iomap_end() argument
1218 if (iomap->type == IOMAP_HOLE) in gfs2_iomap_end()
1233 if (length != written && (iomap->flags & IOMAP_F_NEW)) { in gfs2_iomap_end()
1251 if (iomap->flags & IOMAP_F_SIZE_CHANGED) in gfs2_iomap_end()
1294 struct iomap iomap = { }; in gfs2_block_map() local
1303 ret = gfs2_iomap_get(inode, pos, length, flags, &iomap, &mp); in gfs2_block_map()
1304 if (create && !ret && iomap.type == IOMAP_HOLE) in gfs2_block_map()
1305 ret = gfs2_iomap_alloc(inode, &iomap, &mp); in gfs2_block_map()
1310 if (iomap.length > bh_map->b_size) { in gfs2_block_map()
1311 iomap.length = bh_map->b_size; in gfs2_block_map()
1312 iomap.flags &= ~IOMAP_F_GFS2_BOUNDARY; in gfs2_block_map()
1314 if (iomap.addr != IOMAP_NULL_ADDR) in gfs2_block_map()
1315 map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits); in gfs2_block_map()
1316 bh_map->b_size = iomap.length; in gfs2_block_map()
1317 if (iomap.flags & IOMAP_F_GFS2_BOUNDARY) in gfs2_block_map()
1319 if (iomap.flags & IOMAP_F_NEW) in gfs2_block_map()
1465 struct iomap *iomap) in gfs2_iomap_get_alloc() argument
1470 ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp); in gfs2_iomap_get_alloc()
1471 if (!ret && iomap->type == IOMAP_HOLE) in gfs2_iomap_get_alloc()
1472 ret = gfs2_iomap_alloc(inode, iomap, &mp); in gfs2_iomap_get_alloc()
2528 if (offset >= wpc->iomap.offset && in gfs2_map_blocks()
2529 offset < wpc->iomap.offset + wpc->iomap.length) in gfs2_map_blocks()
2532 memset(&wpc->iomap, 0, sizeof(wpc->iomap)); in gfs2_map_blocks()
2533 ret = gfs2_iomap_get(inode, offset, INT_MAX, 0, &wpc->iomap, &mp); in gfs2_map_blocks()