Print this page
2619 asynchronous destruction of ZFS file systems
2747 SPA versioning with zfs feature flags
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: George Wilson <gwilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>
        
*** 18,32 ****
   *
   * CDDL HEADER END
   */
  /*
   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
-  * Copyright (c) 2011 by Delphix. All rights reserved.
-  */
- /*
   * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
!  * Copyright (c) 2011 by Delphix. All rights reserved.
   * Copyright (c) 2012, Joyent, Inc. All rights reserved.
   */
  
  #include <sys/dmu.h>
  #include <sys/dmu_impl.h>
--- 18,29 ----
   *
   * CDDL HEADER END
   */
  /*
   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
   * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
!  * Copyright (c) 2012 by Delphix. All rights reserved.
   * Copyright (c) 2012, Joyent, Inc. All rights reserved.
   */
  
  #include <sys/dmu.h>
  #include <sys/dmu_impl.h>
*** 1073,1084 ****
          int err;
          dmu_tx_t *tx;
          void *data = NULL;
  
          if (drro->drr_type == DMU_OT_NONE ||
!             drro->drr_type >= DMU_OT_NUMTYPES ||
!             drro->drr_bonustype >= DMU_OT_NUMTYPES ||
              drro->drr_checksumtype >= ZIO_CHECKSUM_FUNCTIONS ||
              drro->drr_compress >= ZIO_COMPRESS_FUNCTIONS ||
              P2PHASE(drro->drr_blksz, SPA_MINBLOCKSIZE) ||
              drro->drr_blksz < SPA_MINBLOCKSIZE ||
              drro->drr_blksz > SPA_MAXBLOCKSIZE ||
--- 1070,1081 ----
          int err;
          dmu_tx_t *tx;
          void *data = NULL;
  
          if (drro->drr_type == DMU_OT_NONE ||
!             !DMU_OT_IS_VALID(drro->drr_type) ||
!             !DMU_OT_IS_VALID(drro->drr_bonustype) ||
              drro->drr_checksumtype >= ZIO_CHECKSUM_FUNCTIONS ||
              drro->drr_compress >= ZIO_COMPRESS_FUNCTIONS ||
              P2PHASE(drro->drr_blksz, SPA_MINBLOCKSIZE) ||
              drro->drr_blksz < SPA_MINBLOCKSIZE ||
              drro->drr_blksz > SPA_MAXBLOCKSIZE ||
*** 1139,1149 ****
                  dmu_buf_will_dirty(db, tx);
  
                  ASSERT3U(db->db_size, >=, drro->drr_bonuslen);
                  bcopy(data, db->db_data, drro->drr_bonuslen);
                  if (ra->byteswap) {
!                         dmu_ot[drro->drr_bonustype].ot_byteswap(db->db_data,
                              drro->drr_bonuslen);
                  }
                  dmu_buf_rele(db, FTAG);
          }
          dmu_tx_commit(tx);
--- 1136,1148 ----
                  dmu_buf_will_dirty(db, tx);
  
                  ASSERT3U(db->db_size, >=, drro->drr_bonuslen);
                  bcopy(data, db->db_data, drro->drr_bonuslen);
                  if (ra->byteswap) {
!                         dmu_object_byteswap_t byteswap =
!                             DMU_OT_BYTESWAP(drro->drr_bonustype);
!                         dmu_ot_byteswap[byteswap].ob_func(db->db_data,
                              drro->drr_bonuslen);
                  }
                  dmu_buf_rele(db, FTAG);
          }
          dmu_tx_commit(tx);
*** 1182,1192 ****
          dmu_tx_t *tx;
          void *data;
          int err;
  
          if (drrw->drr_offset + drrw->drr_length < drrw->drr_offset ||
!             drrw->drr_type >= DMU_OT_NUMTYPES)
                  return (EINVAL);
  
          data = restore_read(ra, drrw->drr_length);
          if (data == NULL)
                  return (ra->err);
--- 1181,1191 ----
          dmu_tx_t *tx;
          void *data;
          int err;
  
          if (drrw->drr_offset + drrw->drr_length < drrw->drr_offset ||
!             !DMU_OT_IS_VALID(drrw->drr_type))
                  return (EINVAL);
  
          data = restore_read(ra, drrw->drr_length);
          if (data == NULL)
                  return (ra->err);
*** 1201,1212 ****
          err = dmu_tx_assign(tx, TXG_WAIT);
          if (err) {
                  dmu_tx_abort(tx);
                  return (err);
          }
!         if (ra->byteswap)
!                 dmu_ot[drrw->drr_type].ot_byteswap(data, drrw->drr_length);
          dmu_write(os, drrw->drr_object,
              drrw->drr_offset, drrw->drr_length, data, tx);
          dmu_tx_commit(tx);
          return (0);
  }
--- 1200,1214 ----
          err = dmu_tx_assign(tx, TXG_WAIT);
          if (err) {
                  dmu_tx_abort(tx);
                  return (err);
          }
!         if (ra->byteswap) {
!                 dmu_object_byteswap_t byteswap =
!                     DMU_OT_BYTESWAP(drrw->drr_type);
!                 dmu_ot_byteswap[byteswap].ob_func(data, drrw->drr_length);
!         }
          dmu_write(os, drrw->drr_object,
              drrw->drr_offset, drrw->drr_length, data, tx);
          dmu_tx_commit(tx);
          return (0);
  }