On Mon 27-05-19 16:25:41, Shiyang Ruan wrote:
On 5/23/19 7:51 PM, Goldwyn Rodrigues wrote:
> > Hi,
> > I'm working on reflink & dax in XFS, here are some thoughts on this:
> > As mentioned above: the second iomap's offset and length must match the
> > first. I thought so at the beginning, but later found that the only
> > difference between these two iomaps is @addr. So, what about adding a
> > @saddr, which means the source address of COW extent, into the struct iomap.
> > The ->iomap_begin() fills @saddr if the extent is COW, and 0 if not. Then
> > handle this @saddr in each ->actor(). No more modifications in other
> > functions.
> Yes, I started of with the exact idea before being recommended this by Dave.
> I used two fields instead of one namely cow_pos and cow_addr which defined
> the source details. I had put it as a iomap flag as opposed to a type
> which of course did not appeal well.
> We may want to use iomaps for cases where two inodes are involved.
> An example of the other scenario where offset may be different is file
> comparison for dedup: vfs_dedup_file_range_compare(). However, it would
> need two inodes in iomap as well.
Yes, it is reasonable. Thanks for your explanation.
One more thing RFC:
I'd like to add an end-io callback argument in ->dax_iomap_actor() to update
the metadata after one whole COW operation is completed. The end-io can
also be called in ->iomap_end(). But one COW operation may call
->iomap_apply() many times, and so does the end-io. Thus, I think it would
be nice to move it to the bottom of ->dax_iomap_actor(), called just once in
each COW operation.
I'm sorry but I don't follow what you suggest. One COW operation is a call
to dax_iomap_rw(), isn't it? That may call iomap_apply() several times,
each invocation calls ->iomap_begin(), ->actor() (dax_iomap_actor()),
->iomap_end() once. So I don't see a difference between doing something in
->actor() and ->iomap_end() (besides the passed arguments but that does not
seem to be your concern). So what do you exactly want to do?
Jan Kara <jack(a)suse.com>
SUSE Labs, CR