On 06/22/2016 09:50 AM, Eric Blake wrote: > Another step towards byte-based interfaces everywhere. Replace > the sector-based bdrv_co_discard() with a new byte-based > bdrv_co_pdiscard(), which silently ignores any unaligned head > or tail. Driver callbacks will be converted in followup patches. > > By calculating the alignment outside of the loop, and clamping > the max discard to an aligned value, we can simplify the actions > done within the loop. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > ---
> +++ b/block/io.c > +int coroutine_fn bdrv_co_pdiscard(BlockDriverState *bs, int64_t offset, > + int count) > - tracked_request_begin(&req, bs, sector_num << BDRV_SECTOR_BITS, > - nb_sectors << BDRV_SECTOR_BITS, > BDRV_TRACKED_DISCARD); > + /* Discard is advisory, so ignore any unaligned head or tail */ > + align = MAX(BDRV_SECTOR_SIZE, > + MAX(bs->bl.pdiscard_alignment, bs->bl.request_alignment)); > + assert(is_power_of_2(align)); And this further ingrains the already existing problem with iscsi devices that advertise 15M for discard alignment. Is it more important for me to fix that regression first then base this series on top of that, or is it acceptable for me to repost this series and then work on the regression fix? I'd prefer the latter course of action, as a regression fix is good material for post-hardfreeze. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature