]> granicus.if.org Git - zfs/commitdiff
Increment zil_itx_needcopy_bytes properly
authorchrisrd <chris@onthe.net.au>
Fri, 2 Mar 2018 18:01:53 +0000 (05:01 +1100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 2 Mar 2018 18:01:53 +0000 (10:01 -0800)
In zil_lwb_commit() with TX_WRITE, we copy the log write record (lrw)
into the log write block (lwb) and send it off using zil_lwb_add_txg().
If we also have WR_NEED_COPY, we additionally copy the lwr's data into
the lwb to be sent off.  If the lwr + data doesn't fit into the lwb, we
send the lrw and as much data as will fit (dnow bytes), then go back
and do the same with the remaining data.

Each time through this loop we're sending dnow data bytes. I.e.
zil_itx_needcopy_bytes should be incremented by dnow.

Reviewed-by: Richard Elling <Richard.Elling@RichardElling.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Chris Dunlop <chris@onthe.net.au>
Closes #6988
Closes #7176

module/zfs/zil.c

index d7bb33ab05089c61c0e4e28ba9ab6a39e51fa1be..d9ae1f413e944b8524ca3ca67faf4e609b5f590d 100644 (file)
@@ -1461,8 +1461,7 @@ cont:
                                lrw->lr_offset += dnow;
                                lrw->lr_length -= dnow;
                                ZIL_STAT_BUMP(zil_itx_needcopy_count);
-                               ZIL_STAT_INCR(zil_itx_needcopy_bytes,
-                                   lrw->lr_length);
+                               ZIL_STAT_INCR(zil_itx_needcopy_bytes, dnow);
                        } else {
                                ASSERT3S(itx->itx_wr_state, ==, WR_INDIRECT);
                                dbuf = NULL;