Print this page
*** NO COMMENTS ***

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/zfs/zfs_ioctl.c
          +++ new/usr/src/uts/common/fs/zfs/zfs_ioctl.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  24   24   * Portions Copyright 2011 Martin Matuska
  25      - * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
       25 + * Copyright 2012 Nexenta Systems, Inc.  All rights reserved.
  26   26   * Copyright (c) 2012, Joyent, Inc. All rights reserved.
  27   27   * Copyright (c) 2012 by Delphix. All rights reserved.
  28   28   */
  29   29  
  30   30  /*
  31   31   * ZFS ioctls.
  32   32   *
  33   33   * This file handles the ioctls to /dev/zfs, used for configuring ZFS storage
  34   34   * pools and filesystems, e.g. with /sbin/zfs and /sbin/zpool.
  35   35   *
↓ open down ↓ 3129 lines elided ↑ open up ↑
3165 3165          }
3166 3166          if (strchr(fsname, '@') ||
3167 3167              strchr(fsname, '%'))
3168 3168                  return (EINVAL);
3169 3169  
3170 3170          zct.zct_props = nvprops;
3171 3171  
3172 3172          if (cbfunc == NULL)
3173 3173                  return (EINVAL);
3174 3174  
3175      -        if (zfs_get_parent(name, parent, MAXNAMELEN) == 0 &&
     3175 +        if (zfs_get_parent(fsname, parent, MAXNAMELEN) == 0 &&
3176 3176              zfs_is_wormed(parent)) {
3177 3177                  return (EPERM);
3178 3178          }
3179 3179  
3180 3180          if (type == DMU_OST_ZVOL) {
3181 3181                  uint64_t volsize, volblocksize;
3182 3182  
3183 3183                  if (nvprops == NULL)
3184 3184                          return (EINVAL);
3185 3185                  if (nvlist_lookup_uint64(nvprops,
↓ open down ↓ 995 lines elided ↑ open up ↑
4181 4181                                  dsl_dataset_rele(ds, FTAG);
4182 4182                                  return (error);
4183 4183                          }
4184 4184                  }
4185 4185          }
4186 4186  
4187 4187          if (estimate) {
4188 4188                  error = dmu_send_estimate(tosnap, fromsnap,
4189 4189                      &zc->zc_objset_type);
4190 4190          } else {
     4191 +                offset_t off_starting;
4191 4192                  file_t *fp = getf(zc->zc_cookie);
4192 4193                  if (fp == NULL) {
4193 4194                          dsl_dataset_rele(ds, FTAG);
4194 4195                          if (dsfrom)
4195 4196                                  dsl_dataset_rele(dsfrom, FTAG);
4196 4197                          return (EBADF);
4197 4198                  }
4198 4199  
4199 4200                  off = fp->f_offset;
4200      -                error = dmu_send(tosnap, fromsnap,
4201      -                    zc->zc_cookie, fp->f_vnode, &off);
     4201 +                off_starting = off;
     4202 +                error = dmu_send(tosnap, fromsnap, zc->zc_cookie, fp->f_vnode,
     4203 +                    &off, zc->zc_sendsize);
4202 4204  
     4205 +                zc->zc_sendcounter = off - off_starting;
4203 4206                  if (VOP_SEEK(fp->f_vnode, fp->f_offset, &off, NULL) == 0)
4204 4207                          fp->f_offset = off;
4205 4208                  releasef(zc->zc_cookie);
4206 4209          }
4207 4210          if (dsfrom)
4208 4211                  dsl_dataset_rele(dsfrom, FTAG);
4209 4212          dsl_dataset_rele(ds, FTAG);
4210 4213          return (error);
4211 4214  }
4212 4215  
↓ open down ↓ 952 lines elided ↑ open up ↑
5165 5168  
5166 5169          file_t *fp = getf(fd);
5167 5170          if (fp == NULL) {
5168 5171                  dmu_objset_rele(tosnap, FTAG);
5169 5172                  if (fromsnap != NULL)
5170 5173                          dmu_objset_rele(fromsnap, FTAG);
5171 5174                  return (EBADF);
5172 5175          }
5173 5176  
5174 5177          off = fp->f_offset;
5175      -        error = dmu_send(tosnap, fromsnap, fd, fp->f_vnode, &off);
     5178 +        error = dmu_send(tosnap, fromsnap, fd, fp->f_vnode, &off, B_FALSE);
5176 5179  
5177 5180          if (VOP_SEEK(fp->f_vnode, fp->f_offset, &off, NULL) == 0)
5178 5181                  fp->f_offset = off;
5179 5182          releasef(fd);
5180 5183          if (fromsnap != NULL)
5181 5184                  dmu_objset_rele(fromsnap, FTAG);
5182 5185          dmu_objset_rele(tosnap, FTAG);
5183 5186          return (error);
5184 5187  }
5185 5188  
↓ open down ↓ 784 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX