[dm-devel] [PATCH 0/4] dm: zoned block device fixes

Damien Le Moal damien.lemoal at wdc.com
Mon Jun 5 10:48:36 UTC 2017


Mike,

Thank you very much for the very detailed review and all the cleanup.

On 6/2/17 09:36, Mike Snitzer wrote:
> On Wed, May 31 2017 at 10:39am -0400,
> Mike Snitzer <snitzer at redhat.com> wrote:
>  
>> FYI: my review of dm-zoned will be focused on DM target correctness
>> (suspend/resume quirks, no allocations in the IO path that aren't backed
>> by a mempool, coding style nits, etc).  I don't know enough about zoned
>> block devices to weigh-in on those details.  Ultimately I'll be
>> deferring to you, others on your team, and others in the community that
>> are more invested in zoned block devices to steer and stabilize this
>> target.
>>
>> Anyway, hopefully my review will be fairly quick and I can get dm-zoned
>> staged for 4.13 by end of day tomorrow.
> 
> I made a go of it but I'm getting hung up on quite a lot of code that
> doesn't conform to, what I'd like to think is, the cleaner nature of how
> DM targets that are split across multiple files should be.
> 
> You basically slammed everything into 'struct dmz_target' and passed dmz
> everywhere.  I tried to split out a 'struct dmz_metadata' (and got quite
> far!) but finally gave up because affecting that churn was killing me
> slowly.  Anyway, here is where I left off:
> https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/log/?h=dm-zoned
> 
> In hindsight, maybe I should've just responded with the laundry list of
> things I saw so that you could fix them.  But if you see changes that
> you like in that branch feel free to pull them in to a new version of
> dm-zoned that you resubmit.
> 
> As for splitting out a 'struct dmz_metadata'.. I'd really prefer _some_
> separation but there is little point with doing so if we're going to
> just half-ass it and add in a back-pointer to the 'struct dmz_target' to
> access certain members.  I was left unhappy with my attempt.. again, was
> a shit-show of churn.

I continued and finished the separation. There is no back-pointer
anymore. All functions in dm-zoned-metadata.c take the metadata struct
pointer as argument. Other functions in dm-zoned-target.c and
dm-zoned-reclaim.c take the dmz_target pointer as argument. To do this,
I had to add a "struct dmz_dev" to store the static information about
the device being used (bdev, name, capacity, number of zones, zone
size). This does cleanup further the initialization and tear-down path.
I also moved around and renamed some functions to further cleanup the
code and make it easier to read. At this point, I think it would be easy
to also separate all fields needed for reclaim from the dmz_target
structure. But I have not pushed changes this far as the amount of data
needed for reclaim is rather small.

> I think this target needs a more critical eye on the various places IO
> is being submitted and where allocations are occuring.  I allowed myself
> to get hung up on code movement when I should've focused on more
> constructive design choices you made.

I did address some of the "FIXME" notes you added. The main one is the
BIO cloning in the I/O path. I removed most of that and added a .end_io
method for completion processing. The only place were I do not see how
to remove the call to bio_clone() is during read BIO processing: since a
read BIO may end up being split between buffer zone, sequential zone and
simple buffer zero-out, fragmentation of the read BIO is sometimes
necessary and so need a clone.

There is one "FIXME" that I did not address: the allocation of metadata
blocks on cache miss. This is in the I/O path, but called only from the
context of the chunk workers, so a different context than the BIO submit
one. I do not see a problem with this. Please let me know if you would
prefer another solution.

I am running tests against the new version created with all these
changes. If everything goes well, I will send it out tomorrow.

Best regards.

-- 
Damien Le Moal,
Western Digital




More information about the dm-devel mailing list