Print this page


Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/dmu_send.c
          +++ new/usr/src/uts/common/fs/zfs/dmu_send.c
↓ open down ↓ 69 lines elided ↑ open up ↑
  70   70  
  71   71          return (dsp->dsa_err);
  72   72  }
  73   73  
  74   74  static int
  75   75  dump_free(dmu_sendarg_t *dsp, uint64_t object, uint64_t offset,
  76   76      uint64_t length)
  77   77  {
  78   78          struct drr_free *drrf = &(dsp->dsa_drr->drr_u.drr_free);
  79   79  
       80 +        if (length != -1ULL && offset + length < offset)
       81 +                length = -1ULL;
       82 +
  80   83          /*
  81   84           * If there is a pending op, but it's not PENDING_FREE, push it out,
  82   85           * since free block aggregation can only be done for blocks of the
  83   86           * same type (i.e., DRR_FREE records can only be aggregated with
  84   87           * other DRR_FREE records.  DRR_FREEOBJECTS records can only be
  85   88           * aggregated with other DRR_FREEOBJECTS records.
  86   89           */
  87   90          if (dsp->dsa_pending_op != PENDING_NONE &&
  88   91              dsp->dsa_pending_op != PENDING_FREE) {
  89   92                  if (dump_bytes(dsp, dsp->dsa_drr,
↓ open down ↓ 1597 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX