Re: svn commit: r308782 - in head: cddl/contrib/opensolaris/cmd/ztest sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys

2016-11-17 Thread Alexander Motin
Rebased, but that is not the first time.  What it really needs is reviews.

On 17.11.2016 14:22, Steven Hartland wrote:
> Thanks, looks like the PR needs a rebase before it can be merged.
> 
> On 17/11/2016 22:11, Alexander Motin wrote:
>> It is in OpenZFS review queue now:
>> https://github.com/openzfs/openzfs/pull/219  Welcome to comment there to
>> speed up the process.
>>
>> On 17.11.2016 13:43, Steven Hartland wrote:
>>> Is this something that should be upstreamed?
>>>
>>> On 17/11/2016 21:01, Alexander Motin wrote:
 Author: mav
 Date: Thu Nov 17 21:01:27 2016
 New Revision: 308782
 URL: https://svnweb.freebsd.org/changeset/base/308782

 Log:
   After some ZIL changes 6 years ago zil_slog_limit got partially broken
   due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
   Actually because of other changes about that time zl_itx_list_sz is not
   really required to implement the functionality, so this patch removes
   some unneeded broken code and variables.
   
   Original idea of zil_slog_limit was to reduce chance of SLOG abuse by
   single heavy logger, that increased latency for other (more latency 
 critical)
   loggers, by pushing heavy log out into the main pool instead of SLOG. 
 Beside
   huge latency increase for heavy writers, this implementation caused 
 double
   write of all data, since the log records were explicitly prepared for 
 SLOG.
   Since we now have I/O scheduler, I've found it can be much more efficient
   to reduce priority of heavy logger SLOG writes from 
 ZIO_PRIORITY_SYNC_WRITE
   to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
   
   Existing ZIL implementation had problem with space efficiency when it
   has to write large chunks of data into log blocks of limited size. In 
 some
   cases efficiency stopped to almost as low as 50%. In case of ZIL stored 
 on
   spinning rust, that also reduced log write speed in half, since head had 
 to
   uselessly fly over allocated but not written areas. This change improves
   the situation by offloading problematic operations from z*_log_write() to
   zil_lwb_commit(), which knows real situation of log blocks allocation and
   can split large requests into pieces much more efficiently. Also as side
   effect it removes one of two data copy operations done by ZIL code 
 WR_COPIED
   case.
   
   While there, untangle and unify code of z*_log_write() functions.
   Also zfs_log_write() alike to zvol_log_write() can now handle writes 
 crossing
   block boundary, that may also improve efficiency if ZPL is made to do 
 that.
   
   Sponsored by:iXsystems, Inc.

 Modified:
   head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c

 Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
 ==
 --- head/cddl/contrib/opensolaris/cmd/ztest/ztest.cThu Nov 17 
 20:44:51 2016(r308781)
 +++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.cThu Nov 17 
 21:01:27 2016(r308782)
 @@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t
itx->itx_private = zd;
itx->itx_wr_state = write_state;
itx->itx_sync = (ztest_random(8) == 0);
 -  itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0);
  
bcopy(>lr_common + 1, >itx_lr + 1,
sizeof (*lr) - sizeof (lr_t));

 Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
 ==
 --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h  Thu Nov 
 17 20:44:51 2016(r308781)
 +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h  Thu Nov 
 17 21:01:27 2016(r308782)
 @@ -369,7 +369,6 @@ typedef struct itx {
void*itx_private;   /* type-specific opaque data */
itx_wr_state_t  itx_wr_state;   /* write state */
uint8_t itx_sync;   /* synchronous transaction */
 -  uint64_titx_sod;/* record size on disk */
uint64_titx_oid;/* object id */
lr_titx_lr; /* common part of log record */
/* followed by type-specific part of lr_xx_t and its 

Re: svn commit: r308782 - in head: cddl/contrib/opensolaris/cmd/ztest sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys

2016-11-17 Thread Steven Hartland

Thanks, looks like the PR needs a rebase before it can be merged.

On 17/11/2016 22:11, Alexander Motin wrote:

It is in OpenZFS review queue now:
https://github.com/openzfs/openzfs/pull/219  Welcome to comment there to
speed up the process.

On 17.11.2016 13:43, Steven Hartland wrote:

Is this something that should be upstreamed?

On 17/11/2016 21:01, Alexander Motin wrote:

Author: mav
Date: Thu Nov 17 21:01:27 2016
New Revision: 308782
URL: https://svnweb.freebsd.org/changeset/base/308782

Log:
   After some ZIL changes 6 years ago zil_slog_limit got partially broken
   due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
   Actually because of other changes about that time zl_itx_list_sz is not
   really required to implement the functionality, so this patch removes
   some unneeded broken code and variables.
   
   Original idea of zil_slog_limit was to reduce chance of SLOG abuse by

   single heavy logger, that increased latency for other (more latency critical)
   loggers, by pushing heavy log out into the main pool instead of SLOG. Beside
   huge latency increase for heavy writers, this implementation caused double
   write of all data, since the log records were explicitly prepared for SLOG.
   Since we now have I/O scheduler, I've found it can be much more efficient
   to reduce priority of heavy logger SLOG writes from ZIO_PRIORITY_SYNC_WRITE
   to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
   
   Existing ZIL implementation had problem with space efficiency when it

   has to write large chunks of data into log blocks of limited size. In some
   cases efficiency stopped to almost as low as 50%. In case of ZIL stored on
   spinning rust, that also reduced log write speed in half, since head had to
   uselessly fly over allocated but not written areas. This change improves
   the situation by offloading problematic operations from z*_log_write() to
   zil_lwb_commit(), which knows real situation of log blocks allocation and
   can split large requests into pieces much more efficiently. Also as side
   effect it removes one of two data copy operations done by ZIL code WR_COPIED
   case.
   
   While there, untangle and unify code of z*_log_write() functions.

   Also zfs_log_write() alike to zvol_log_write() can now handle writes crossing
   block boundary, that may also improve efficiency if ZPL is made to do that.
   
   Sponsored by:	iXsystems, Inc.


Modified:
   head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c

Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
==
--- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 20:44:51 
2016(r308781)
+++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 21:01:27 
2016(r308782)
@@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t
itx->itx_private = zd;
itx->itx_wr_state = write_state;
itx->itx_sync = (ztest_random(8) == 0);
-   itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0);
  
  	bcopy(>lr_common + 1, >itx_lr + 1,

sizeof (*lr) - sizeof (lr_t));

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 21:01:27 2016(r308782)
@@ -369,7 +369,6 @@ typedef struct itx {
void*itx_private;   /* type-specific opaque data */
itx_wr_state_t  itx_wr_state;   /* write state */
uint8_t itx_sync;   /* synchronous transaction */
-   uint64_titx_sod;/* record size on disk */
uint64_titx_oid;/* object id */
lr_titx_lr; /* common part of log record */
/* followed by type-specific part of lr_xx_t and its immediate data */

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 21:01:27 2016(r308782)
@@ -42,6 +42,7 @@ extern "C" {
  typedef struct lwb {
zilog_t 

Re: svn commit: r308782 - in head: cddl/contrib/opensolaris/cmd/ztest sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys

2016-11-17 Thread Alexander Motin
It is in OpenZFS review queue now:
https://github.com/openzfs/openzfs/pull/219  Welcome to comment there to
speed up the process.

On 17.11.2016 13:43, Steven Hartland wrote:
> Is this something that should be upstreamed?
> 
> On 17/11/2016 21:01, Alexander Motin wrote:
>> Author: mav
>> Date: Thu Nov 17 21:01:27 2016
>> New Revision: 308782
>> URL: https://svnweb.freebsd.org/changeset/base/308782
>>
>> Log:
>>   After some ZIL changes 6 years ago zil_slog_limit got partially broken
>>   due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
>>   Actually because of other changes about that time zl_itx_list_sz is not
>>   really required to implement the functionality, so this patch removes
>>   some unneeded broken code and variables.
>>   
>>   Original idea of zil_slog_limit was to reduce chance of SLOG abuse by
>>   single heavy logger, that increased latency for other (more latency 
>> critical)
>>   loggers, by pushing heavy log out into the main pool instead of SLOG. 
>> Beside
>>   huge latency increase for heavy writers, this implementation caused double
>>   write of all data, since the log records were explicitly prepared for SLOG.
>>   Since we now have I/O scheduler, I've found it can be much more efficient
>>   to reduce priority of heavy logger SLOG writes from ZIO_PRIORITY_SYNC_WRITE
>>   to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
>>   
>>   Existing ZIL implementation had problem with space efficiency when it
>>   has to write large chunks of data into log blocks of limited size. In some
>>   cases efficiency stopped to almost as low as 50%. In case of ZIL stored on
>>   spinning rust, that also reduced log write speed in half, since head had to
>>   uselessly fly over allocated but not written areas. This change improves
>>   the situation by offloading problematic operations from z*_log_write() to
>>   zil_lwb_commit(), which knows real situation of log blocks allocation and
>>   can split large requests into pieces much more efficiently. Also as side
>>   effect it removes one of two data copy operations done by ZIL code 
>> WR_COPIED
>>   case.
>>   
>>   While there, untangle and unify code of z*_log_write() functions.
>>   Also zfs_log_write() alike to zvol_log_write() can now handle writes 
>> crossing
>>   block boundary, that may also improve efficiency if ZPL is made to do that.
>>   
>>   Sponsored by:  iXsystems, Inc.
>>
>> Modified:
>>   head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
>>   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
>>
>> Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
>> ==
>> --- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c  Thu Nov 17 20:44:51 
>> 2016(r308781)
>> +++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c  Thu Nov 17 21:01:27 
>> 2016(r308782)
>> @@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t
>>  itx->itx_private = zd;
>>  itx->itx_wr_state = write_state;
>>  itx->itx_sync = (ztest_random(8) == 0);
>> -itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0);
>>  
>>  bcopy(>lr_common + 1, >itx_lr + 1,
>>  sizeof (*lr) - sizeof (lr_t));
>>
>> Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
>> ==
>> --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.hThu Nov 
>> 17 20:44:51 2016(r308781)
>> +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.hThu Nov 
>> 17 21:01:27 2016(r308782)
>> @@ -369,7 +369,6 @@ typedef struct itx {
>>  void*itx_private;   /* type-specific opaque data */
>>  itx_wr_state_t  itx_wr_state;   /* write state */
>>  uint8_t itx_sync;   /* synchronous transaction */
>> -uint64_titx_sod;/* record size on disk */
>>  uint64_titx_oid;/* object id */
>>  lr_titx_lr; /* common part of log record */
>>  /* followed by type-specific part of lr_xx_t and its immediate data */
>>
>> Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
>> ==
>> --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h   
>> Thu Nov 17 20:44:51 2016(r308781)
>> +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h   
>> Thu Nov 17 21:01:27 2016(r308782)
>> @@ 

Re: svn commit: r308782 - in head: cddl/contrib/opensolaris/cmd/ztest sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys

2016-11-17 Thread Steven Hartland

Is this something that should be upstreamed?

On 17/11/2016 21:01, Alexander Motin wrote:

Author: mav
Date: Thu Nov 17 21:01:27 2016
New Revision: 308782
URL: https://svnweb.freebsd.org/changeset/base/308782

Log:
   After some ZIL changes 6 years ago zil_slog_limit got partially broken
   due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
   Actually because of other changes about that time zl_itx_list_sz is not
   really required to implement the functionality, so this patch removes
   some unneeded broken code and variables.
   
   Original idea of zil_slog_limit was to reduce chance of SLOG abuse by

   single heavy logger, that increased latency for other (more latency critical)
   loggers, by pushing heavy log out into the main pool instead of SLOG. Beside
   huge latency increase for heavy writers, this implementation caused double
   write of all data, since the log records were explicitly prepared for SLOG.
   Since we now have I/O scheduler, I've found it can be much more efficient
   to reduce priority of heavy logger SLOG writes from ZIO_PRIORITY_SYNC_WRITE
   to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
   
   Existing ZIL implementation had problem with space efficiency when it

   has to write large chunks of data into log blocks of limited size. In some
   cases efficiency stopped to almost as low as 50%. In case of ZIL stored on
   spinning rust, that also reduced log write speed in half, since head had to
   uselessly fly over allocated but not written areas. This change improves
   the situation by offloading problematic operations from z*_log_write() to
   zil_lwb_commit(), which knows real situation of log blocks allocation and
   can split large requests into pieces much more efficiently. Also as side
   effect it removes one of two data copy operations done by ZIL code WR_COPIED
   case.
   
   While there, untangle and unify code of z*_log_write() functions.

   Also zfs_log_write() alike to zvol_log_write() can now handle writes crossing
   block boundary, that may also improve efficiency if ZPL is made to do that.
   
   Sponsored by:	iXsystems, Inc.


Modified:
   head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
   head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c

Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
==
--- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 20:44:51 
2016(r308781)
+++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 21:01:27 
2016(r308782)
@@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t
itx->itx_private = zd;
itx->itx_wr_state = write_state;
itx->itx_sync = (ztest_random(8) == 0);
-   itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0);
  
  	bcopy(>lr_common + 1, >itx_lr + 1,

sizeof (*lr) - sizeof (lr_t));

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 21:01:27 2016(r308782)
@@ -369,7 +369,6 @@ typedef struct itx {
void*itx_private;   /* type-specific opaque data */
itx_wr_state_t  itx_wr_state;   /* write state */
uint8_t itx_sync;   /* synchronous transaction */
-   uint64_titx_sod;/* record size on disk */
uint64_titx_oid;/* object id */
lr_titx_lr; /* common part of log record */
/* followed by type-specific part of lr_xx_t and its immediate data */

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 21:01:27 2016(r308782)
@@ -42,6 +42,7 @@ extern "C" {
  typedef struct lwb {
zilog_t *lwb_zilog; /* back pointer to log struct */
blkptr_tlwb_blk;/* on disk address of this log blk */
+   boolean_t   lwb_slog;   /* lwb_blk is on SLOG device */
int lwb_nused;  /* # used bytes in buffer */
int 

svn commit: r308782 - in head: cddl/contrib/opensolaris/cmd/ztest sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys

2016-11-17 Thread Alexander Motin
Author: mav
Date: Thu Nov 17 21:01:27 2016
New Revision: 308782
URL: https://svnweb.freebsd.org/changeset/base/308782

Log:
  After some ZIL changes 6 years ago zil_slog_limit got partially broken
  due to zl_itx_list_sz not updated when async itx'es upgraded to sync.
  Actually because of other changes about that time zl_itx_list_sz is not
  really required to implement the functionality, so this patch removes
  some unneeded broken code and variables.
  
  Original idea of zil_slog_limit was to reduce chance of SLOG abuse by
  single heavy logger, that increased latency for other (more latency critical)
  loggers, by pushing heavy log out into the main pool instead of SLOG. Beside
  huge latency increase for heavy writers, this implementation caused double
  write of all data, since the log records were explicitly prepared for SLOG.
  Since we now have I/O scheduler, I've found it can be much more efficient
  to reduce priority of heavy logger SLOG writes from ZIO_PRIORITY_SYNC_WRITE
  to ZIO_PRIORITY_ASYNC_WRITE, while still leave them on SLOG.
  
  Existing ZIL implementation had problem with space efficiency when it
  has to write large chunks of data into log blocks of limited size. In some
  cases efficiency stopped to almost as low as 50%. In case of ZIL stored on
  spinning rust, that also reduced log write speed in half, since head had to
  uselessly fly over allocated but not written areas. This change improves
  the situation by offloading problematic operations from z*_log_write() to
  zil_lwb_commit(), which knows real situation of log blocks allocation and
  can split large requests into pieces much more efficiently. Also as side
  effect it removes one of two data copy operations done by ZIL code WR_COPIED
  case.
  
  While there, untangle and unify code of z*_log_write() functions.
  Also zfs_log_write() alike to zvol_log_write() can now handle writes crossing
  block boundary, that may also improve efficiency if ZPL is made to do that.
  
  Sponsored by: iXsystems, Inc.

Modified:
  head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c

Modified: head/cddl/contrib/opensolaris/cmd/ztest/ztest.c
==
--- head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 20:44:51 
2016(r308781)
+++ head/cddl/contrib/opensolaris/cmd/ztest/ztest.c Thu Nov 17 21:01:27 
2016(r308782)
@@ -1371,7 +1371,6 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t
itx->itx_private = zd;
itx->itx_wr_state = write_state;
itx->itx_sync = (ztest_random(8) == 0);
-   itx->itx_sod += (write_state == WR_NEED_COPY ? lr->lr_length : 0);
 
bcopy(>lr_common + 1, >itx_lr + 1,
sizeof (*lr) - sizeof (lr_t));

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h   Thu Nov 
17 21:01:27 2016(r308782)
@@ -369,7 +369,6 @@ typedef struct itx {
void*itx_private;   /* type-specific opaque data */
itx_wr_state_t  itx_wr_state;   /* write state */
uint8_t itx_sync;   /* synchronous transaction */
-   uint64_titx_sod;/* record size on disk */
uint64_titx_oid;/* object id */
lr_titx_lr; /* common part of log record */
/* followed by type-specific part of lr_xx_t and its immediate data */

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h
==
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 20:44:51 2016(r308781)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil_impl.h  Thu Nov 
17 21:01:27 2016(r308782)
@@ -42,6 +42,7 @@ extern "C" {
 typedef struct lwb {
zilog_t *lwb_zilog; /* back pointer to log struct */
blkptr_tlwb_blk;/* on disk address of this log blk */
+   boolean_t   lwb_slog;   /* lwb_blk is on SLOG device */
int lwb_nused;  /* # used bytes in buffer */
int lwb_sz; /* size of block and buffer */
char*lwb_buf;   /* log write buffer */
@@ -62,7 +63,6 @@ typedef