Hi,

----- Original Message -----
(snip)
> +static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos, loff_t
> length,
> +                               unsigned flags, struct iomap *iomap)
(snip)
> +{
> +     struct metapath mp = { .mp_aheight = 1, };
> +     struct gfs2_inode *ip = GFS2_I(inode);
> +     struct gfs2_sbd *sdp = GFS2_SB(inode);
> +     unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
> +     bool unstuff, alloc_required;
> +     int ret;
> +
> +     ret = gfs2_write_lock(inode);
> +     if (ret)
> +             return ret;
> +
> +     unstuff = gfs2_is_stuffed(ip) &&
> +               pos + length > gfs2_max_stuffed_size(ip);
> +
> +     ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
> +     if (ret)
> +             goto out_release;
> +
> +     alloc_required = unstuff || iomap->type != IOMAP_MAPPED;
> +
> +     if (alloc_required || gfs2_is_jdata(ip))
> +             gfs2_write_calc_reserv(ip, iomap->length, &data_blocks, 
> &ind_blocks);

It would be ideal if the iomap_get could tell us how many blocks are mapped
and how many are unmapped, if it wouldn't cause unnecessary IO.
If we could use the number of unmapped blocks rather than iomap->length, it 
could
potentially save us from reserving unnecessary journal space, for example, on
rewrites (iow where the metadata for the writes already exists).
(snip)

Bob Peterson

Reply via email to