Lines Matching refs:iomap

560 			  struct metapath *mp, struct iomap *iomap)  in gfs2_hole_size()  argument
567 iomap->length = args.blocks << inode->i_blkbits; in gfs2_hole_size()
626 static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap, in gfs2_iomap_alloc() argument
634 size_t dblks = iomap->length >> inode->i_blkbits; in gfs2_iomap_alloc()
730 iomap->addr = bn << inode->i_blkbits; in gfs2_iomap_alloc()
731 iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW; in gfs2_iomap_alloc()
736 } while (iomap->addr == IOMAP_NULL_ADDR); in gfs2_iomap_alloc()
738 iomap->type = IOMAP_MAPPED; in gfs2_iomap_alloc()
739 iomap->length = (u64)dblks << inode->i_blkbits; in gfs2_iomap_alloc()
806 unsigned flags, struct iomap *iomap, in gfs2_iomap_get() argument
829 iomap->private = dibh; in gfs2_iomap_get()
837 iomap->length = max_size; in gfs2_iomap_get()
845 iomap->offset = pos; in gfs2_iomap_get()
846 iomap->length = length; in gfs2_iomap_get()
850 iomap->length = size; in gfs2_iomap_get()
852 iomap->addr = (ip->i_no_addr << inode->i_blkbits) + in gfs2_iomap_get()
854 iomap->type = IOMAP_INLINE; in gfs2_iomap_get()
855 iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode); in gfs2_iomap_get()
861 iomap->offset = lblock << inode->i_blkbits; in gfs2_iomap_get()
864 iomap->length = len << inode->i_blkbits; in gfs2_iomap_get()
890 iomap->addr = be64_to_cpu(*ptr) << inode->i_blkbits; in gfs2_iomap_get()
891 iomap->length = len << inode->i_blkbits; in gfs2_iomap_get()
892 iomap->type = IOMAP_MAPPED; in gfs2_iomap_get()
893 iomap->flags |= IOMAP_F_MERGED; in gfs2_iomap_get()
895 iomap->flags |= IOMAP_F_GFS2_BOUNDARY; in gfs2_iomap_get()
898 iomap->bdev = inode->i_sb->s_bdev; in gfs2_iomap_get()
906 iomap->addr = IOMAP_NULL_ADDR; in gfs2_iomap_get()
907 iomap->type = IOMAP_HOLE; in gfs2_iomap_get()
912 ret = gfs2_hole_size(inode, lblock, len, mp, iomap); in gfs2_iomap_get()
914 iomap->length = size - pos; in gfs2_iomap_get()
923 if (alloc_size < iomap->length) in gfs2_iomap_get()
924 iomap->length = alloc_size; in gfs2_iomap_get()
927 ret = gfs2_hole_size(inode, lblock, len, mp, iomap); in gfs2_iomap_get()
974 struct iomap *iomap) in gfs2_iomap_journaled_page_done() argument
983 struct iomap *iomap) in gfs2_iomap_begin_write() argument
999 ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp); in gfs2_iomap_begin_write()
1003 alloc_required = unstuff || iomap->type == IOMAP_HOLE; in gfs2_iomap_begin_write()
1006 gfs2_write_calc_reserv(ip, iomap->length, &data_blocks, in gfs2_iomap_begin_write()
1033 ret = gfs2_trans_begin(sdp, rblocks, iomap->length >> inode->i_blkbits); in gfs2_iomap_begin_write()
1042 brelse(iomap->private); in gfs2_iomap_begin_write()
1043 iomap->private = NULL; in gfs2_iomap_begin_write()
1044 ret = gfs2_iomap_get(inode, iomap->offset, iomap->length, in gfs2_iomap_begin_write()
1045 flags, iomap, &mp); in gfs2_iomap_begin_write()
1050 if (iomap->type == IOMAP_HOLE) { in gfs2_iomap_begin_write()
1051 ret = gfs2_iomap_alloc(inode, iomap, flags, &mp); in gfs2_iomap_begin_write()
1055 punch_hole(ip, iomap->offset, iomap->length); in gfs2_iomap_begin_write()
1061 iomap->page_done = gfs2_iomap_journaled_page_done; in gfs2_iomap_begin_write()
1073 if (iomap->private) in gfs2_iomap_begin_write()
1074 brelse(iomap->private); in gfs2_iomap_begin_write()
1081 unsigned flags, struct iomap *iomap) in gfs2_iomap_begin() argument
1087 iomap->flags |= IOMAP_F_BUFFER_HEAD; in gfs2_iomap_begin()
1091 ret = gfs2_iomap_begin_write(inode, pos, length, flags, iomap); in gfs2_iomap_begin()
1093 ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp); in gfs2_iomap_begin()
1100 iomap->type != IOMAP_MAPPED) in gfs2_iomap_begin()
1103 trace_gfs2_iomap_end(ip, iomap, ret); in gfs2_iomap_begin()
1108 ssize_t written, unsigned flags, struct iomap *iomap) in gfs2_iomap_end() argument
1113 struct buffer_head *dibh = iomap->private; in gfs2_iomap_end()
1118 if (iomap->type != IOMAP_INLINE) { in gfs2_iomap_end()
1135 if (length != written && (iomap->flags & IOMAP_F_NEW)) { in gfs2_iomap_end()
1190 struct iomap iomap = { }; in gfs2_block_map() local
1199 ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, &iomap, &mp); in gfs2_block_map()
1200 if (!ret && iomap.type == IOMAP_HOLE) in gfs2_block_map()
1201 ret = gfs2_iomap_alloc(inode, &iomap, IOMAP_WRITE, &mp); in gfs2_block_map()
1204 ret = gfs2_iomap_get(inode, pos, length, 0, &iomap, &mp); in gfs2_block_map()
1210 if (iomap.length > bh_map->b_size) { in gfs2_block_map()
1211 iomap.length = bh_map->b_size; in gfs2_block_map()
1212 iomap.flags &= ~IOMAP_F_GFS2_BOUNDARY; in gfs2_block_map()
1214 if (iomap.addr != IOMAP_NULL_ADDR) in gfs2_block_map()
1215 map_bh(bh_map, inode->i_sb, iomap.addr >> inode->i_blkbits); in gfs2_block_map()
1216 bh_map->b_size = iomap.length; in gfs2_block_map()
1217 if (iomap.flags & IOMAP_F_GFS2_BOUNDARY) in gfs2_block_map()
1219 if (iomap.flags & IOMAP_F_NEW) in gfs2_block_map()
1424 struct iomap *iomap) in gfs2_iomap_get_alloc() argument
1429 ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp); in gfs2_iomap_get_alloc()
1430 if (!ret && iomap->type == IOMAP_HOLE) in gfs2_iomap_get_alloc()
1431 ret = gfs2_iomap_alloc(inode, iomap, IOMAP_WRITE, &mp); in gfs2_iomap_get_alloc()