On 17/09/2014 23:52, Matthew Ahrens wrote:
> 
> 
> On Wed, Sep 17, 2014 at 1:08 PM, Andriy Gapon <[email protected]
> <mailto:[email protected]>> wrote:
> 
> 
>     It seems that dead code removing is a hot topic :-)
>     I think that the following commit has introduced a little bit of such 
> code:
>     commit 5d7b4d438c4a51eccc95e77a83a437b4d48380eb
>     Author: Matthew Ahrens <[email protected] <mailto:[email protected]>>
>     Date:   Thu Jun 5 13:19:08 2014 -0800
> 
>         4757 ZFS embedded-data block pointers ("zero block compression")
>         4913 zfs release should not be subject to space checks
>         Reviewed by: [many]
> 
>     In the following snippet psize == lsize condition is taken care of in the 
> first
>     if-block, so that condition can never be true within the else-block.
> 
> 
> That's not true.  When we check psize==lsize in the "else" block, psize may 
> not
> be the same value that was checked earlier.  It is modified 2 lines above, to
> round it up to a multiple of SPA_MINBLOCKSIZE.

Ah, sorry for the noise, I overlooked the roundup.

>     +                       /*
>     +                        * Round up compressed size to MINBLOCKSIZE and
>     +                        * zero the tail.
>     +                        */
>     +                       size_t rounded =
>     +                           P2ROUNDUP(psize, (size_t)SPA_MINBLOCKSIZE);
>     +                       if (rounded > psize) {
>     +                               bzero((char *)cbuf + psize, rounded - 
> psize);
>     +                               psize = rounded;
>     +                       }
>     +                       if (psize == lsize) {
>     +                               compress = ZIO_COMPRESS_OFF;
>     +                               zio_buf_free(cbuf, lsize);

Last note, I think that it would be logical to assert that rounded is not
greater than lsize and also move bzero() calls to be after a check that rounded
== lsize.  Otherwise, in a case when psize < rounded && rounded == lsize we are
calling bzero() on a buffer that we subsequently discard.


-- 
Andriy Gapon
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to