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]>
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.  BTW, not
sure why psize < lsize assertion was removed.


@@ -1045,9 +1079,38 @@ zio_write_bp_init(zio_t *zio)
                if (psize == 0 || psize == lsize) {
                        compress = ZIO_COMPRESS_OFF;
                        zio_buf_free(cbuf, lsize);
+               } else if (!zp->zp_dedup && psize <= BPE_PAYLOAD_SIZE &&
+                   zp->zp_level == 0 && !DMU_OT_HAS_FILL(zp->zp_type) &&
+                   spa_feature_is_enabled(spa, SPA_FEATURE_EMBEDDED_DATA)) {
+                       encode_embedded_bp_compressed(bp,
+                           cbuf, compress, lsize, psize);
+                       BPE_SET_ETYPE(bp, BP_EMBEDDED_TYPE_DATA);
+                       BP_SET_TYPE(bp, zio->io_prop.zp_type);
+                       BP_SET_LEVEL(bp, zio->io_prop.zp_level);
+                       zio_buf_free(cbuf, lsize);
+                       bp->blk_birth = zio->io_txg;
+                       zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
+                       ASSERT(spa_feature_is_active(spa,
+                           SPA_FEATURE_EMBEDDED_DATA));
+                       return (ZIO_PIPELINE_CONTINUE);
                } else {
-                       ASSERT(psize < lsize);
-                       zio_push_transform(zio, cbuf, psize, lsize, NULL);
+                       /*
+                        * 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);
+                       } else {
+                               zio_push_transform(zio, cbuf,
+                                   psize, lsize, NULL);
+                       }
                }
        }
-- 
Andriy Gapon
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to