1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 2012, 2015 by Delphix. All rights reserved.
  24  * Copyright (c) 2014 Integros [integros.com]
  25  */
  26 
  27 /* Portions Copyright 2010 Robert Milkowski */
  28 
  29 #include <sys/types.h>
  30 #include <sys/param.h>
  31 #include <sys/systm.h>
  32 #include <sys/sysmacros.h>
  33 #include <sys/kmem.h>
  34 #include <sys/pathname.h>
  35 #include <sys/vnode.h>
  36 #include <sys/vfs.h>
  37 #include <sys/vfs_opreg.h>
  38 #include <sys/mntent.h>
  39 #include <sys/mount.h>
  40 #include <sys/cmn_err.h>
  41 #include "fs/fs_subr.h"
  42 #include <sys/zfs_znode.h>
  43 #include <sys/zfs_dir.h>
  44 #include <sys/zil.h>
  45 #include <sys/fs/zfs.h>
  46 #include <sys/dmu.h>
  47 #include <sys/dsl_prop.h>
  48 #include <sys/dsl_dataset.h>
  49 #include <sys/dsl_deleg.h>
  50 #include <sys/spa.h>
  51 #include <sys/zap.h>
  52 #include <sys/sa.h>
  53 #include <sys/sa_impl.h>
  54 #include <sys/varargs.h>
  55 #include <sys/policy.h>
  56 #include <sys/atomic.h>
  57 #include <sys/mkdev.h>
  58 #include <sys/modctl.h>
  59 #include <sys/refstr.h>
  60 #include <sys/zfs_ioctl.h>
  61 #include <sys/zfs_ctldir.h>
  62 #include <sys/zfs_fuid.h>
  63 #include <sys/bootconf.h>
  64 #include <sys/sunddi.h>
  65 #include <sys/dnlc.h>
  66 #include <sys/dmu_objset.h>
  67 #include <sys/spa_boot.h>
  68 #include "zfs_comutil.h"
  69 
  70 int zfsfstype;
  71 vfsops_t *zfs_vfsops = NULL;
  72 static major_t zfs_major;
  73 static minor_t zfs_minor;
  74 static kmutex_t zfs_dev_mtx;
  75 
  76 extern int sys_shutdown;
  77 
  78 static int zfs_mount(vfs_t *vfsp, vnode_t *mvp, struct mounta *uap, cred_t *cr);
  79 static int zfs_umount(vfs_t *vfsp, int fflag, cred_t *cr);
  80 static int zfs_mountroot(vfs_t *vfsp, enum whymountroot);
  81 static int zfs_root(vfs_t *vfsp, vnode_t **vpp);
  82 static int zfs_statvfs(vfs_t *vfsp, struct statvfs64 *statp);
  83 static int zfs_vget(vfs_t *vfsp, vnode_t **vpp, fid_t *fidp);
  84 static void zfs_freevfs(vfs_t *vfsp);
  85 
  86 static const fs_operation_def_t zfs_vfsops_template[] = {
  87         { VFSNAME_MOUNT,        { .vfs_mount = zfs_mount } },
  88         { VFSNAME_MOUNTROOT,    { .vfs_mountroot = zfs_mountroot } },
  89         { VFSNAME_UNMOUNT,      { .vfs_unmount = zfs_umount } },
  90         { VFSNAME_ROOT,         { .vfs_root = zfs_root } },
  91         { VFSNAME_STATVFS,      { .vfs_statvfs = zfs_statvfs } },
  92         { VFSNAME_SYNC,         { .vfs_sync = zfs_sync } },
  93         { VFSNAME_VGET,         { .vfs_vget = zfs_vget } },
  94         { VFSNAME_FREEVFS,      { .vfs_freevfs = zfs_freevfs } },
  95         { NULL,                 { NULL } }
  96 };
  97 
  98 static const fs_operation_def_t zfs_vfsops_eio_template[] = {
  99         { VFSNAME_FREEVFS,      { .vfs_freevfs =  zfs_freevfs } },
 100         { NULL,                 { NULL } }
 101 };
 102 
 103 /*
 104  * We need to keep a count of active fs's.
 105  * This is necessary to prevent our module
 106  * from being unloaded after a umount -f
 107  */
 108 static uint32_t zfs_active_fs_count = 0;
 109 
 110 static char *noatime_cancel[] = { MNTOPT_ATIME, NULL };
 111 static char *atime_cancel[] = { MNTOPT_NOATIME, NULL };
 112 static char *noxattr_cancel[] = { MNTOPT_XATTR, NULL };
 113 static char *xattr_cancel[] = { MNTOPT_NOXATTR, NULL };
 114 
 115 /*
 116  * MO_DEFAULT is not used since the default value is determined
 117  * by the equivalent property.
 118  */
 119 static mntopt_t mntopts[] = {
 120         { MNTOPT_NOXATTR, noxattr_cancel, NULL, 0, NULL },
 121         { MNTOPT_XATTR, xattr_cancel, NULL, 0, NULL },
 122         { MNTOPT_NOATIME, noatime_cancel, NULL, 0, NULL },
 123         { MNTOPT_ATIME, atime_cancel, NULL, 0, NULL }
 124 };
 125 
 126 static mntopts_t zfs_mntopts = {
 127         sizeof (mntopts) / sizeof (mntopt_t),
 128         mntopts
 129 };
 130 
 131 /*ARGSUSED*/
 132 int
 133 zfs_sync(vfs_t *vfsp, short flag, cred_t *cr)
 134 {
 135         /*
 136          * Data integrity is job one.  We don't want a compromised kernel
 137          * writing to the storage pool, so we never sync during panic.
 138          */
 139         if (panicstr)
 140                 return (0);
 141 
 142         /*
 143          * SYNC_ATTR is used by fsflush() to force old filesystems like UFS
 144          * to sync metadata, which they would otherwise cache indefinitely.
 145          * Semantically, the only requirement is that the sync be initiated.
 146          * The DMU syncs out txgs frequently, so there's nothing to do.
 147          */
 148         if (flag & SYNC_ATTR)
 149                 return (0);
 150 
 151         if (vfsp != NULL) {
 152                 /*
 153                  * Sync a specific filesystem.
 154                  */
 155                 zfsvfs_t *zfsvfs = vfsp->vfs_data;
 156                 dsl_pool_t *dp;
 157 
 158                 ZFS_ENTER(zfsvfs);
 159                 dp = dmu_objset_pool(zfsvfs->z_os);
 160 
 161                 /*
 162                  * If the system is shutting down, then skip any
 163                  * filesystems which may exist on a suspended pool.
 164                  */
 165                 if (sys_shutdown && spa_suspended(dp->dp_spa)) {
 166                         ZFS_EXIT(zfsvfs);
 167                         return (0);
 168                 }
 169 
 170                 if (zfsvfs->z_log != NULL)
 171                         zil_commit(zfsvfs->z_log, 0);
 172 
 173                 ZFS_EXIT(zfsvfs);
 174         } else {
 175                 /*
 176                  * Sync all ZFS filesystems.  This is what happens when you
 177                  * run sync(1M).  Unlike other filesystems, ZFS honors the
 178                  * request by waiting for all pools to commit all dirty data.
 179                  */
 180                 spa_sync_allpools();
 181         }
 182 
 183         return (0);
 184 }
 185 
 186 static int
 187 zfs_create_unique_device(dev_t *dev)
 188 {
 189         major_t new_major;
 190 
 191         do {
 192                 ASSERT3U(zfs_minor, <=, MAXMIN32);
 193                 minor_t start = zfs_minor;
 194                 do {
 195                         mutex_enter(&zfs_dev_mtx);
 196                         if (zfs_minor >= MAXMIN32) {
 197                                 /*
 198                                  * If we're still using the real major
 199                                  * keep out of /dev/zfs and /dev/zvol minor
 200                                  * number space.  If we're using a getudev()'ed
 201                                  * major number, we can use all of its minors.
 202                                  */
 203                                 if (zfs_major == ddi_name_to_major(ZFS_DRIVER))
 204                                         zfs_minor = ZFS_MIN_MINOR;
 205                                 else
 206                                         zfs_minor = 0;
 207                         } else {
 208                                 zfs_minor++;
 209                         }
 210                         *dev = makedevice(zfs_major, zfs_minor);
 211                         mutex_exit(&zfs_dev_mtx);
 212                 } while (vfs_devismounted(*dev) && zfs_minor != start);
 213                 if (zfs_minor == start) {
 214                         /*
 215                          * We are using all ~262,000 minor numbers for the
 216                          * current major number.  Create a new major number.
 217                          */
 218                         if ((new_major = getudev()) == (major_t)-1) {
 219                                 cmn_err(CE_WARN,
 220                                     "zfs_mount: Can't get unique major "
 221                                     "device number.");
 222                                 return (-1);
 223                         }
 224                         mutex_enter(&zfs_dev_mtx);
 225                         zfs_major = new_major;
 226                         zfs_minor = 0;
 227 
 228                         mutex_exit(&zfs_dev_mtx);
 229                 } else {
 230                         break;
 231                 }
 232                 /* CONSTANTCONDITION */
 233         } while (1);
 234 
 235         return (0);
 236 }
 237 
 238 static void
 239 atime_changed_cb(void *arg, uint64_t newval)
 240 {
 241         zfsvfs_t *zfsvfs = arg;
 242 
 243         if (newval == TRUE) {
 244                 zfsvfs->z_atime = TRUE;
 245                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOATIME);
 246                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_ATIME, NULL, 0);
 247         } else {
 248                 zfsvfs->z_atime = FALSE;
 249                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_ATIME);
 250                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOATIME, NULL, 0);
 251         }
 252 }
 253 
 254 static void
 255 xattr_changed_cb(void *arg, uint64_t newval)
 256 {
 257         zfsvfs_t *zfsvfs = arg;
 258 
 259         if (newval == TRUE) {
 260                 /* XXX locking on vfs_flag? */
 261                 zfsvfs->z_vfs->vfs_flag |= VFS_XATTR;
 262                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOXATTR);
 263                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_XATTR, NULL, 0);
 264         } else {
 265                 /* XXX locking on vfs_flag? */
 266                 zfsvfs->z_vfs->vfs_flag &= ~VFS_XATTR;
 267                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_XATTR);
 268                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOXATTR, NULL, 0);
 269         }
 270 }
 271 
 272 static void
 273 blksz_changed_cb(void *arg, uint64_t newval)
 274 {
 275         zfsvfs_t *zfsvfs = arg;
 276         ASSERT3U(newval, <=, spa_maxblocksize(dmu_objset_spa(zfsvfs->z_os)));
 277         ASSERT3U(newval, >=, SPA_MINBLOCKSIZE);
 278         ASSERT(ISP2(newval));
 279 
 280         zfsvfs->z_max_blksz = newval;
 281         zfsvfs->z_vfs->vfs_bsize = newval;
 282 }
 283 
 284 static void
 285 readonly_changed_cb(void *arg, uint64_t newval)
 286 {
 287         zfsvfs_t *zfsvfs = arg;
 288 
 289         if (newval) {
 290                 /* XXX locking on vfs_flag? */
 291                 zfsvfs->z_vfs->vfs_flag |= VFS_RDONLY;
 292                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_RW);
 293                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_RO, NULL, 0);
 294         } else {
 295                 /* XXX locking on vfs_flag? */
 296                 zfsvfs->z_vfs->vfs_flag &= ~VFS_RDONLY;
 297                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_RO);
 298                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_RW, NULL, 0);
 299         }
 300 }
 301 
 302 static void
 303 devices_changed_cb(void *arg, uint64_t newval)
 304 {
 305         zfsvfs_t *zfsvfs = arg;
 306 
 307         if (newval == FALSE) {
 308                 zfsvfs->z_vfs->vfs_flag |= VFS_NODEVICES;
 309                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_DEVICES);
 310                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NODEVICES, NULL, 0);
 311         } else {
 312                 zfsvfs->z_vfs->vfs_flag &= ~VFS_NODEVICES;
 313                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NODEVICES);
 314                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_DEVICES, NULL, 0);
 315         }
 316 }
 317 
 318 static void
 319 setuid_changed_cb(void *arg, uint64_t newval)
 320 {
 321         zfsvfs_t *zfsvfs = arg;
 322 
 323         if (newval == FALSE) {
 324                 zfsvfs->z_vfs->vfs_flag |= VFS_NOSETUID;
 325                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_SETUID);
 326                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOSETUID, NULL, 0);
 327         } else {
 328                 zfsvfs->z_vfs->vfs_flag &= ~VFS_NOSETUID;
 329                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOSETUID);
 330                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_SETUID, NULL, 0);
 331         }
 332 }
 333 
 334 static void
 335 exec_changed_cb(void *arg, uint64_t newval)
 336 {
 337         zfsvfs_t *zfsvfs = arg;
 338 
 339         if (newval == FALSE) {
 340                 zfsvfs->z_vfs->vfs_flag |= VFS_NOEXEC;
 341                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_EXEC);
 342                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOEXEC, NULL, 0);
 343         } else {
 344                 zfsvfs->z_vfs->vfs_flag &= ~VFS_NOEXEC;
 345                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOEXEC);
 346                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_EXEC, NULL, 0);
 347         }
 348 }
 349 
 350 /*
 351  * The nbmand mount option can be changed at mount time.
 352  * We can't allow it to be toggled on live file systems or incorrect
 353  * behavior may be seen from cifs clients
 354  *
 355  * This property isn't registered via dsl_prop_register(), but this callback
 356  * will be called when a file system is first mounted
 357  */
 358 static void
 359 nbmand_changed_cb(void *arg, uint64_t newval)
 360 {
 361         zfsvfs_t *zfsvfs = arg;
 362         if (newval == FALSE) {
 363                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NBMAND);
 364                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NONBMAND, NULL, 0);
 365         } else {
 366                 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NONBMAND);
 367                 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NBMAND, NULL, 0);
 368         }
 369 }
 370 
 371 static void
 372 snapdir_changed_cb(void *arg, uint64_t newval)
 373 {
 374         zfsvfs_t *zfsvfs = arg;
 375 
 376         zfsvfs->z_show_ctldir = newval;
 377 }
 378 
 379 static void
 380 vscan_changed_cb(void *arg, uint64_t newval)
 381 {
 382         zfsvfs_t *zfsvfs = arg;
 383 
 384         zfsvfs->z_vscan = newval;
 385 }
 386 
 387 static void
 388 acl_mode_changed_cb(void *arg, uint64_t newval)
 389 {
 390         zfsvfs_t *zfsvfs = arg;
 391 
 392         zfsvfs->z_acl_mode = newval;
 393 }
 394 
 395 static void
 396 acl_inherit_changed_cb(void *arg, uint64_t newval)
 397 {
 398         zfsvfs_t *zfsvfs = arg;
 399 
 400         zfsvfs->z_acl_inherit = newval;
 401 }
 402 
 403 static int
 404 zfs_register_callbacks(vfs_t *vfsp)
 405 {
 406         struct dsl_dataset *ds = NULL;
 407         objset_t *os = NULL;
 408         zfsvfs_t *zfsvfs = NULL;
 409         uint64_t nbmand;
 410         boolean_t readonly = B_FALSE;
 411         boolean_t do_readonly = B_FALSE;
 412         boolean_t setuid = B_FALSE;
 413         boolean_t do_setuid = B_FALSE;
 414         boolean_t exec = B_FALSE;
 415         boolean_t do_exec = B_FALSE;
 416         boolean_t devices = B_FALSE;
 417         boolean_t do_devices = B_FALSE;
 418         boolean_t xattr = B_FALSE;
 419         boolean_t do_xattr = B_FALSE;
 420         boolean_t atime = B_FALSE;
 421         boolean_t do_atime = B_FALSE;
 422         int error = 0;
 423 
 424         ASSERT(vfsp);
 425         zfsvfs = vfsp->vfs_data;
 426         ASSERT(zfsvfs);
 427         os = zfsvfs->z_os;
 428 
 429         /*
 430          * The act of registering our callbacks will destroy any mount
 431          * options we may have.  In order to enable temporary overrides
 432          * of mount options, we stash away the current values and
 433          * restore them after we register the callbacks.
 434          */
 435         if (vfs_optionisset(vfsp, MNTOPT_RO, NULL) ||
 436             !spa_writeable(dmu_objset_spa(os))) {
 437                 readonly = B_TRUE;
 438                 do_readonly = B_TRUE;
 439         } else if (vfs_optionisset(vfsp, MNTOPT_RW, NULL)) {
 440                 readonly = B_FALSE;
 441                 do_readonly = B_TRUE;
 442         }
 443         if (vfs_optionisset(vfsp, MNTOPT_NOSUID, NULL)) {
 444                 devices = B_FALSE;
 445                 setuid = B_FALSE;
 446                 do_devices = B_TRUE;
 447                 do_setuid = B_TRUE;
 448         } else {
 449                 if (vfs_optionisset(vfsp, MNTOPT_NODEVICES, NULL)) {
 450                         devices = B_FALSE;
 451                         do_devices = B_TRUE;
 452                 } else if (vfs_optionisset(vfsp, MNTOPT_DEVICES, NULL)) {
 453                         devices = B_TRUE;
 454                         do_devices = B_TRUE;
 455                 }
 456 
 457                 if (vfs_optionisset(vfsp, MNTOPT_NOSETUID, NULL)) {
 458                         setuid = B_FALSE;
 459                         do_setuid = B_TRUE;
 460                 } else if (vfs_optionisset(vfsp, MNTOPT_SETUID, NULL)) {
 461                         setuid = B_TRUE;
 462                         do_setuid = B_TRUE;
 463                 }
 464         }
 465         if (vfs_optionisset(vfsp, MNTOPT_NOEXEC, NULL)) {
 466                 exec = B_FALSE;
 467                 do_exec = B_TRUE;
 468         } else if (vfs_optionisset(vfsp, MNTOPT_EXEC, NULL)) {
 469                 exec = B_TRUE;
 470                 do_exec = B_TRUE;
 471         }
 472         if (vfs_optionisset(vfsp, MNTOPT_NOXATTR, NULL)) {
 473                 xattr = B_FALSE;
 474                 do_xattr = B_TRUE;
 475         } else if (vfs_optionisset(vfsp, MNTOPT_XATTR, NULL)) {
 476                 xattr = B_TRUE;
 477                 do_xattr = B_TRUE;
 478         }
 479         if (vfs_optionisset(vfsp, MNTOPT_NOATIME, NULL)) {
 480                 atime = B_FALSE;
 481                 do_atime = B_TRUE;
 482         } else if (vfs_optionisset(vfsp, MNTOPT_ATIME, NULL)) {
 483                 atime = B_TRUE;
 484                 do_atime = B_TRUE;
 485         }
 486 
 487         /*
 488          * nbmand is a special property.  It can only be changed at
 489          * mount time.
 490          *
 491          * This is weird, but it is documented to only be changeable
 492          * at mount time.
 493          */
 494         if (vfs_optionisset(vfsp, MNTOPT_NONBMAND, NULL)) {
 495                 nbmand = B_FALSE;
 496         } else if (vfs_optionisset(vfsp, MNTOPT_NBMAND, NULL)) {
 497                 nbmand = B_TRUE;
 498         } else {
 499                 char osname[ZFS_MAX_DATASET_NAME_LEN];
 500 
 501                 dmu_objset_name(os, osname);
 502                 if (error = dsl_prop_get_integer(osname, "nbmand", &nbmand,
 503                     NULL)) {
 504                         return (error);
 505                 }
 506         }
 507 
 508         /*
 509          * Register property callbacks.
 510          *
 511          * It would probably be fine to just check for i/o error from
 512          * the first prop_register(), but I guess I like to go
 513          * overboard...
 514          */
 515         ds = dmu_objset_ds(os);
 516         dsl_pool_config_enter(dmu_objset_pool(os), FTAG);
 517         error = dsl_prop_register(ds,
 518             zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs);
 519         error = error ? error : dsl_prop_register(ds,
 520             zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs);
 521         error = error ? error : dsl_prop_register(ds,
 522             zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs);
 523         error = error ? error : dsl_prop_register(ds,
 524             zfs_prop_to_name(ZFS_PROP_READONLY), readonly_changed_cb, zfsvfs);
 525         error = error ? error : dsl_prop_register(ds,
 526             zfs_prop_to_name(ZFS_PROP_DEVICES), devices_changed_cb, zfsvfs);
 527         error = error ? error : dsl_prop_register(ds,
 528             zfs_prop_to_name(ZFS_PROP_SETUID), setuid_changed_cb, zfsvfs);
 529         error = error ? error : dsl_prop_register(ds,
 530             zfs_prop_to_name(ZFS_PROP_EXEC), exec_changed_cb, zfsvfs);
 531         error = error ? error : dsl_prop_register(ds,
 532             zfs_prop_to_name(ZFS_PROP_SNAPDIR), snapdir_changed_cb, zfsvfs);
 533         error = error ? error : dsl_prop_register(ds,
 534             zfs_prop_to_name(ZFS_PROP_ACLMODE), acl_mode_changed_cb, zfsvfs);
 535         error = error ? error : dsl_prop_register(ds,
 536             zfs_prop_to_name(ZFS_PROP_ACLINHERIT), acl_inherit_changed_cb,
 537             zfsvfs);
 538         error = error ? error : dsl_prop_register(ds,
 539             zfs_prop_to_name(ZFS_PROP_VSCAN), vscan_changed_cb, zfsvfs);
 540         dsl_pool_config_exit(dmu_objset_pool(os), FTAG);
 541         if (error)
 542                 goto unregister;
 543 
 544         /*
 545          * Invoke our callbacks to restore temporary mount options.
 546          */
 547         if (do_readonly)
 548                 readonly_changed_cb(zfsvfs, readonly);
 549         if (do_setuid)
 550                 setuid_changed_cb(zfsvfs, setuid);
 551         if (do_exec)
 552                 exec_changed_cb(zfsvfs, exec);
 553         if (do_devices)
 554                 devices_changed_cb(zfsvfs, devices);
 555         if (do_xattr)
 556                 xattr_changed_cb(zfsvfs, xattr);
 557         if (do_atime)
 558                 atime_changed_cb(zfsvfs, atime);
 559 
 560         nbmand_changed_cb(zfsvfs, nbmand);
 561 
 562         return (0);
 563 
 564 unregister:
 565         dsl_prop_unregister_all(ds, zfsvfs);
 566         return (error);
 567 }
 568 
 569 static int
 570 zfs_space_delta_cb(dmu_object_type_t bonustype, void *data,
 571     uint64_t *userp, uint64_t *groupp)
 572 {
 573         /*
 574          * Is it a valid type of object to track?
 575          */
 576         if (bonustype != DMU_OT_ZNODE && bonustype != DMU_OT_SA)
 577                 return (SET_ERROR(ENOENT));
 578 
 579         /*
 580          * If we have a NULL data pointer
 581          * then assume the id's aren't changing and
 582          * return EEXIST to the dmu to let it know to
 583          * use the same ids
 584          */
 585         if (data == NULL)
 586                 return (SET_ERROR(EEXIST));
 587 
 588         if (bonustype == DMU_OT_ZNODE) {
 589                 znode_phys_t *znp = data;
 590                 *userp = znp->zp_uid;
 591                 *groupp = znp->zp_gid;
 592         } else {
 593                 int hdrsize;
 594                 sa_hdr_phys_t *sap = data;
 595                 sa_hdr_phys_t sa = *sap;
 596                 boolean_t swap = B_FALSE;
 597 
 598                 ASSERT(bonustype == DMU_OT_SA);
 599 
 600                 if (sa.sa_magic == 0) {
 601                         /*
 602                          * This should only happen for newly created
 603                          * files that haven't had the znode data filled
 604                          * in yet.
 605                          */
 606                         *userp = 0;
 607                         *groupp = 0;
 608                         return (0);
 609                 }
 610                 if (sa.sa_magic == BSWAP_32(SA_MAGIC)) {
 611                         sa.sa_magic = SA_MAGIC;
 612                         sa.sa_layout_info = BSWAP_16(sa.sa_layout_info);
 613                         swap = B_TRUE;
 614                 } else {
 615                         VERIFY3U(sa.sa_magic, ==, SA_MAGIC);
 616                 }
 617 
 618                 hdrsize = sa_hdrsize(&sa);
 619                 VERIFY3U(hdrsize, >=, sizeof (sa_hdr_phys_t));
 620                 *userp = *((uint64_t *)((uintptr_t)data + hdrsize +
 621                     SA_UID_OFFSET));
 622                 *groupp = *((uint64_t *)((uintptr_t)data + hdrsize +
 623                     SA_GID_OFFSET));
 624                 if (swap) {
 625                         *userp = BSWAP_64(*userp);
 626                         *groupp = BSWAP_64(*groupp);
 627                 }
 628         }
 629         return (0);
 630 }
 631 
 632 static void
 633 fuidstr_to_sid(zfsvfs_t *zfsvfs, const char *fuidstr,
 634     char *domainbuf, int buflen, uid_t *ridp)
 635 {
 636         uint64_t fuid;
 637         const char *domain;
 638 
 639         fuid = strtonum(fuidstr, NULL);
 640 
 641         domain = zfs_fuid_find_by_idx(zfsvfs, FUID_INDEX(fuid));
 642         if (domain)
 643                 (void) strlcpy(domainbuf, domain, buflen);
 644         else
 645                 domainbuf[0] = '\0';
 646         *ridp = FUID_RID(fuid);
 647 }
 648 
 649 static uint64_t
 650 zfs_userquota_prop_to_obj(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type)
 651 {
 652         switch (type) {
 653         case ZFS_PROP_USERUSED:
 654                 return (DMU_USERUSED_OBJECT);
 655         case ZFS_PROP_GROUPUSED:
 656                 return (DMU_GROUPUSED_OBJECT);
 657         case ZFS_PROP_USERQUOTA:
 658                 return (zfsvfs->z_userquota_obj);
 659         case ZFS_PROP_GROUPQUOTA:
 660                 return (zfsvfs->z_groupquota_obj);
 661         }
 662         return (0);
 663 }
 664 
 665 int
 666 zfs_userspace_many(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
 667     uint64_t *cookiep, void *vbuf, uint64_t *bufsizep)
 668 {
 669         int error;
 670         zap_cursor_t zc;
 671         zap_attribute_t za;
 672         zfs_useracct_t *buf = vbuf;
 673         uint64_t obj;
 674 
 675         if (!dmu_objset_userspace_present(zfsvfs->z_os))
 676                 return (SET_ERROR(ENOTSUP));
 677 
 678         obj = zfs_userquota_prop_to_obj(zfsvfs, type);
 679         if (obj == 0) {
 680                 *bufsizep = 0;
 681                 return (0);
 682         }
 683 
 684         for (zap_cursor_init_serialized(&zc, zfsvfs->z_os, obj, *cookiep);
 685             (error = zap_cursor_retrieve(&zc, &za)) == 0;
 686             zap_cursor_advance(&zc)) {
 687                 if ((uintptr_t)buf - (uintptr_t)vbuf + sizeof (zfs_useracct_t) >
 688                     *bufsizep)
 689                         break;
 690 
 691                 fuidstr_to_sid(zfsvfs, za.za_name,
 692                     buf->zu_domain, sizeof (buf->zu_domain), &buf->zu_rid);
 693 
 694                 buf->zu_space = za.za_first_integer;
 695                 buf++;
 696         }
 697         if (error == ENOENT)
 698                 error = 0;
 699 
 700         ASSERT3U((uintptr_t)buf - (uintptr_t)vbuf, <=, *bufsizep);
 701         *bufsizep = (uintptr_t)buf - (uintptr_t)vbuf;
 702         *cookiep = zap_cursor_serialize(&zc);
 703         zap_cursor_fini(&zc);
 704         return (error);
 705 }
 706 
 707 /*
 708  * buf must be big enough (eg, 32 bytes)
 709  */
 710 static int
 711 id_to_fuidstr(zfsvfs_t *zfsvfs, const char *domain, uid_t rid,
 712     char *buf, boolean_t addok)
 713 {
 714         uint64_t fuid;
 715         int domainid = 0;
 716 
 717         if (domain && domain[0]) {
 718                 domainid = zfs_fuid_find_by_domain(zfsvfs, domain, NULL, addok);
 719                 if (domainid == -1)
 720                         return (SET_ERROR(ENOENT));
 721         }
 722         fuid = FUID_ENCODE(domainid, rid);
 723         (void) sprintf(buf, "%llx", (longlong_t)fuid);
 724         return (0);
 725 }
 726 
 727 int
 728 zfs_userspace_one(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
 729     const char *domain, uint64_t rid, uint64_t *valp)
 730 {
 731         char buf[32];
 732         int err;
 733         uint64_t obj;
 734 
 735         *valp = 0;
 736 
 737         if (!dmu_objset_userspace_present(zfsvfs->z_os))
 738                 return (SET_ERROR(ENOTSUP));
 739 
 740         obj = zfs_userquota_prop_to_obj(zfsvfs, type);
 741         if (obj == 0)
 742                 return (0);
 743 
 744         err = id_to_fuidstr(zfsvfs, domain, rid, buf, B_FALSE);
 745         if (err)
 746                 return (err);
 747 
 748         err = zap_lookup(zfsvfs->z_os, obj, buf, 8, 1, valp);
 749         if (err == ENOENT)
 750                 err = 0;
 751         return (err);
 752 }
 753 
 754 int
 755 zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
 756     const char *domain, uint64_t rid, uint64_t quota)
 757 {
 758         char buf[32];
 759         int err;
 760         dmu_tx_t *tx;
 761         uint64_t *objp;
 762         boolean_t fuid_dirtied;
 763 
 764         if (type != ZFS_PROP_USERQUOTA && type != ZFS_PROP_GROUPQUOTA)
 765                 return (SET_ERROR(EINVAL));
 766 
 767         if (zfsvfs->z_version < ZPL_VERSION_USERSPACE)
 768                 return (SET_ERROR(ENOTSUP));
 769 
 770         objp = (type == ZFS_PROP_USERQUOTA) ? &zfsvfs->z_userquota_obj :
 771             &zfsvfs->z_groupquota_obj;
 772 
 773         err = id_to_fuidstr(zfsvfs, domain, rid, buf, B_TRUE);
 774         if (err)
 775                 return (err);
 776         fuid_dirtied = zfsvfs->z_fuid_dirty;
 777 
 778         tx = dmu_tx_create(zfsvfs->z_os);
 779         dmu_tx_hold_zap(tx, *objp ? *objp : DMU_NEW_OBJECT, B_TRUE, NULL);
 780         if (*objp == 0) {
 781                 dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_TRUE,
 782                     zfs_userquota_prop_prefixes[type]);
 783         }
 784         if (fuid_dirtied)
 785                 zfs_fuid_txhold(zfsvfs, tx);
 786         err = dmu_tx_assign(tx, TXG_WAIT);
 787         if (err) {
 788                 dmu_tx_abort(tx);
 789                 return (err);
 790         }
 791 
 792         mutex_enter(&zfsvfs->z_lock);
 793         if (*objp == 0) {
 794                 *objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA,
 795                     DMU_OT_NONE, 0, tx);
 796                 VERIFY(0 == zap_add(zfsvfs->z_os, MASTER_NODE_OBJ,
 797                     zfs_userquota_prop_prefixes[type], 8, 1, objp, tx));
 798         }
 799         mutex_exit(&zfsvfs->z_lock);
 800 
 801         if (quota == 0) {
 802                 err = zap_remove(zfsvfs->z_os, *objp, buf, tx);
 803                 if (err == ENOENT)
 804                         err = 0;
 805         } else {
 806                 err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, &quota, tx);
 807         }
 808         ASSERT(err == 0);
 809         if (fuid_dirtied)
 810                 zfs_fuid_sync(zfsvfs, tx);
 811         dmu_tx_commit(tx);
 812         return (err);
 813 }
 814 
 815 boolean_t
 816 zfs_fuid_overquota(zfsvfs_t *zfsvfs, boolean_t isgroup, uint64_t fuid)
 817 {
 818         char buf[32];
 819         uint64_t used, quota, usedobj, quotaobj;
 820         int err;
 821 
 822         usedobj = isgroup ? DMU_GROUPUSED_OBJECT : DMU_USERUSED_OBJECT;
 823         quotaobj = isgroup ? zfsvfs->z_groupquota_obj : zfsvfs->z_userquota_obj;
 824 
 825         if (quotaobj == 0 || zfsvfs->z_replay)
 826                 return (B_FALSE);
 827 
 828         (void) sprintf(buf, "%llx", (longlong_t)fuid);
 829         err = zap_lookup(zfsvfs->z_os, quotaobj, buf, 8, 1, &quota);
 830         if (err != 0)
 831                 return (B_FALSE);
 832 
 833         err = zap_lookup(zfsvfs->z_os, usedobj, buf, 8, 1, &used);
 834         if (err != 0)
 835                 return (B_FALSE);
 836         return (used >= quota);
 837 }
 838 
 839 boolean_t
 840 zfs_owner_overquota(zfsvfs_t *zfsvfs, znode_t *zp, boolean_t isgroup)
 841 {
 842         uint64_t fuid;
 843         uint64_t quotaobj;
 844 
 845         quotaobj = isgroup ? zfsvfs->z_groupquota_obj : zfsvfs->z_userquota_obj;
 846 
 847         fuid = isgroup ? zp->z_gid : zp->z_uid;
 848 
 849         if (quotaobj == 0 || zfsvfs->z_replay)
 850                 return (B_FALSE);
 851 
 852         return (zfs_fuid_overquota(zfsvfs, isgroup, fuid));
 853 }
 854 
 855 /*
 856  * Associate this zfsvfs with the given objset, which must be owned.
 857  * This will cache a bunch of on-disk state from the objset in the
 858  * zfsvfs.
 859  */
 860 static int
 861 zfsvfs_init(zfsvfs_t *zfsvfs, objset_t *os)
 862 {
 863         int error;
 864         uint64_t val;
 865 
 866         zfsvfs->z_max_blksz = SPA_OLD_MAXBLOCKSIZE;
 867         zfsvfs->z_show_ctldir = ZFS_SNAPDIR_VISIBLE;
 868         zfsvfs->z_os = os;
 869 
 870         error = zfs_get_zplprop(os, ZFS_PROP_VERSION, &zfsvfs->z_version);
 871         if (error != 0)
 872                 return (error);
 873         if (zfsvfs->z_version >
 874             zfs_zpl_version_map(spa_version(dmu_objset_spa(os)))) {
 875                 (void) printf("Can't mount a version %lld file system "
 876                     "on a version %lld pool\n. Pool must be upgraded to mount "
 877                     "this file system.", (u_longlong_t)zfsvfs->z_version,
 878                     (u_longlong_t)spa_version(dmu_objset_spa(os)));
 879                 return (SET_ERROR(ENOTSUP));
 880         }
 881         error = zfs_get_zplprop(os, ZFS_PROP_NORMALIZE, &val);
 882         if (error != 0)
 883                 return (error);
 884         zfsvfs->z_norm = (int)val;
 885 
 886         error = zfs_get_zplprop(os, ZFS_PROP_UTF8ONLY, &val);
 887         if (error != 0)
 888                 return (error);
 889         zfsvfs->z_utf8 = (val != 0);
 890 
 891         error = zfs_get_zplprop(os, ZFS_PROP_CASE, &val);
 892         if (error != 0)
 893                 return (error);
 894         zfsvfs->z_case = (uint_t)val;
 895 
 896         /*
 897          * Fold case on file systems that are always or sometimes case
 898          * insensitive.
 899          */
 900         if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE ||
 901             zfsvfs->z_case == ZFS_CASE_MIXED)
 902                 zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER;
 903 
 904         zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os);
 905         zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os);
 906 
 907         uint64_t sa_obj = 0;
 908         if (zfsvfs->z_use_sa) {
 909                 /* should either have both of these objects or none */
 910                 error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_SA_ATTRS, 8, 1,
 911                     &sa_obj);
 912                 if (error != 0)
 913                         return (error);
 914         }
 915 
 916         error = sa_setup(os, sa_obj, zfs_attr_table, ZPL_END,
 917             &zfsvfs->z_attr_table);
 918         if (error != 0)
 919                 return (error);
 920 
 921         if (zfsvfs->z_version >= ZPL_VERSION_SA)
 922                 sa_register_update_callback(os, zfs_sa_upgrade);
 923 
 924         error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_ROOT_OBJ, 8, 1,
 925             &zfsvfs->z_root);
 926         if (error != 0)
 927                 return (error);
 928         ASSERT(zfsvfs->z_root != 0);
 929 
 930         error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_UNLINKED_SET, 8, 1,
 931             &zfsvfs->z_unlinkedobj);
 932         if (error != 0)
 933                 return (error);
 934 
 935         error = zap_lookup(os, MASTER_NODE_OBJ,
 936             zfs_userquota_prop_prefixes[ZFS_PROP_USERQUOTA],
 937             8, 1, &zfsvfs->z_userquota_obj);
 938         if (error == ENOENT)
 939                 zfsvfs->z_userquota_obj = 0;
 940         else if (error != 0)
 941                 return (error);
 942 
 943         error = zap_lookup(os, MASTER_NODE_OBJ,
 944             zfs_userquota_prop_prefixes[ZFS_PROP_GROUPQUOTA],
 945             8, 1, &zfsvfs->z_groupquota_obj);
 946         if (error == ENOENT)
 947                 zfsvfs->z_groupquota_obj = 0;
 948         else if (error != 0)
 949                 return (error);
 950 
 951         error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_FUID_TABLES, 8, 1,
 952             &zfsvfs->z_fuid_obj);
 953         if (error == ENOENT)
 954                 zfsvfs->z_fuid_obj = 0;
 955         else if (error != 0)
 956                 return (error);
 957 
 958         error = zap_lookup(os, MASTER_NODE_OBJ, ZFS_SHARES_DIR, 8, 1,
 959             &zfsvfs->z_shares_dir);
 960         if (error == ENOENT)
 961                 zfsvfs->z_shares_dir = 0;
 962         else if (error != 0)
 963                 return (error);
 964 
 965         return (0);
 966 }
 967 
 968 int
 969 zfsvfs_create(const char *osname, zfsvfs_t **zfvp)
 970 {
 971         objset_t *os;
 972         zfsvfs_t *zfsvfs;
 973         int error;
 974 
 975         zfsvfs = kmem_zalloc(sizeof (zfsvfs_t), KM_SLEEP);
 976 
 977         /*
 978          * We claim to always be readonly so we can open snapshots;
 979          * other ZPL code will prevent us from writing to snapshots.
 980          */
 981         error = dmu_objset_own(osname, DMU_OST_ZFS, B_TRUE, zfsvfs, &os);
 982         if (error) {
 983                 kmem_free(zfsvfs, sizeof (zfsvfs_t));
 984                 return (error);
 985         }
 986 
 987         zfsvfs->z_vfs = NULL;
 988         zfsvfs->z_parent = zfsvfs;
 989 
 990         mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL);
 991         mutex_init(&zfsvfs->z_lock, NULL, MUTEX_DEFAULT, NULL);
 992         list_create(&zfsvfs->z_all_znodes, sizeof (znode_t),
 993             offsetof(znode_t, z_link_node));
 994         rrm_init(&zfsvfs->z_teardown_lock, B_FALSE);
 995         rw_init(&zfsvfs->z_teardown_inactive_lock, NULL, RW_DEFAULT, NULL);
 996         rw_init(&zfsvfs->z_fuid_lock, NULL, RW_DEFAULT, NULL);
 997         for (int i = 0; i != ZFS_OBJ_MTX_SZ; i++)
 998                 mutex_init(&zfsvfs->z_hold_mtx[i], NULL, MUTEX_DEFAULT, NULL);
 999 
1000         error = zfsvfs_init(zfsvfs, os);
1001         if (error != 0) {
1002                 dmu_objset_disown(os, zfsvfs);
1003                 *zfvp = NULL;
1004                 kmem_free(zfsvfs, sizeof (zfsvfs_t));
1005                 return (error);
1006         }
1007 
1008         *zfvp = zfsvfs;
1009         return (0);
1010 }
1011 
1012 static int
1013 zfsvfs_setup(zfsvfs_t *zfsvfs, boolean_t mounting)
1014 {
1015         int error;
1016 
1017         error = zfs_register_callbacks(zfsvfs->z_vfs);
1018         if (error)
1019                 return (error);
1020 
1021         /*
1022          * Set the objset user_ptr to track its zfsvfs.
1023          */
1024         mutex_enter(&zfsvfs->z_os->os_user_ptr_lock);
1025         dmu_objset_set_user(zfsvfs->z_os, zfsvfs);
1026         mutex_exit(&zfsvfs->z_os->os_user_ptr_lock);
1027 
1028         zfsvfs->z_log = zil_open(zfsvfs->z_os, zfs_get_data);
1029 
1030         /*
1031          * If we are not mounting (ie: online recv), then we don't
1032          * have to worry about replaying the log as we blocked all
1033          * operations out since we closed the ZIL.
1034          */
1035         if (mounting) {
1036                 boolean_t readonly;
1037 
1038                 /*
1039                  * During replay we remove the read only flag to
1040                  * allow replays to succeed.
1041                  */
1042                 readonly = zfsvfs->z_vfs->vfs_flag & VFS_RDONLY;
1043                 if (readonly != 0)
1044                         zfsvfs->z_vfs->vfs_flag &= ~VFS_RDONLY;
1045                 else
1046                         zfs_unlinked_drain(zfsvfs);
1047 
1048                 /*
1049                  * Parse and replay the intent log.
1050                  *
1051                  * Because of ziltest, this must be done after
1052                  * zfs_unlinked_drain().  (Further note: ziltest
1053                  * doesn't use readonly mounts, where
1054                  * zfs_unlinked_drain() isn't called.)  This is because
1055                  * ziltest causes spa_sync() to think it's committed,
1056                  * but actually it is not, so the intent log contains
1057                  * many txg's worth of changes.
1058                  *
1059                  * In particular, if object N is in the unlinked set in
1060                  * the last txg to actually sync, then it could be
1061                  * actually freed in a later txg and then reallocated
1062                  * in a yet later txg.  This would write a "create
1063                  * object N" record to the intent log.  Normally, this
1064                  * would be fine because the spa_sync() would have
1065                  * written out the fact that object N is free, before
1066                  * we could write the "create object N" intent log
1067                  * record.
1068                  *
1069                  * But when we are in ziltest mode, we advance the "open
1070                  * txg" without actually spa_sync()-ing the changes to
1071                  * disk.  So we would see that object N is still
1072                  * allocated and in the unlinked set, and there is an
1073                  * intent log record saying to allocate it.
1074                  */
1075                 if (spa_writeable(dmu_objset_spa(zfsvfs->z_os))) {
1076                         if (zil_replay_disable) {
1077                                 zil_destroy(zfsvfs->z_log, B_FALSE);
1078                         } else {
1079                                 zfsvfs->z_replay = B_TRUE;
1080                                 zil_replay(zfsvfs->z_os, zfsvfs,
1081                                     zfs_replay_vector);
1082                                 zfsvfs->z_replay = B_FALSE;
1083                         }
1084                 }
1085                 zfsvfs->z_vfs->vfs_flag |= readonly; /* restore readonly bit */
1086         }
1087 
1088         return (0);
1089 }
1090 
1091 void
1092 zfsvfs_free(zfsvfs_t *zfsvfs)
1093 {
1094         int i;
1095         extern krwlock_t zfsvfs_lock; /* in zfs_znode.c */
1096 
1097         /*
1098          * This is a barrier to prevent the filesystem from going away in
1099          * zfs_znode_move() until we can safely ensure that the filesystem is
1100          * not unmounted. We consider the filesystem valid before the barrier
1101          * and invalid after the barrier.
1102          */
1103         rw_enter(&zfsvfs_lock, RW_READER);
1104         rw_exit(&zfsvfs_lock);
1105 
1106         zfs_fuid_destroy(zfsvfs);
1107 
1108         mutex_destroy(&zfsvfs->z_znodes_lock);
1109         mutex_destroy(&zfsvfs->z_lock);
1110         list_destroy(&zfsvfs->z_all_znodes);
1111         rrm_destroy(&zfsvfs->z_teardown_lock);
1112         rw_destroy(&zfsvfs->z_teardown_inactive_lock);
1113         rw_destroy(&zfsvfs->z_fuid_lock);
1114         for (i = 0; i != ZFS_OBJ_MTX_SZ; i++)
1115                 mutex_destroy(&zfsvfs->z_hold_mtx[i]);
1116         kmem_free(zfsvfs, sizeof (zfsvfs_t));
1117 }
1118 
1119 static void
1120 zfs_set_fuid_feature(zfsvfs_t *zfsvfs)
1121 {
1122         zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os);
1123         if (zfsvfs->z_vfs) {
1124                 if (zfsvfs->z_use_fuids) {
1125                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_XVATTR);
1126                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_SYSATTR_VIEWS);
1127                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACEMASKONACCESS);
1128                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACLONCREATE);
1129                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACCESS_FILTER);
1130                         vfs_set_feature(zfsvfs->z_vfs, VFSFT_REPARSE);
1131                 } else {
1132                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_XVATTR);
1133                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_SYSATTR_VIEWS);
1134                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACEMASKONACCESS);
1135                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACLONCREATE);
1136                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACCESS_FILTER);
1137                         vfs_clear_feature(zfsvfs->z_vfs, VFSFT_REPARSE);
1138                 }
1139         }
1140         zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os);
1141 }
1142 
1143 static int
1144 zfs_domount(vfs_t *vfsp, char *osname)
1145 {
1146         dev_t mount_dev;
1147         uint64_t recordsize, fsid_guid;
1148         int error = 0;
1149         zfsvfs_t *zfsvfs;
1150 
1151         ASSERT(vfsp);
1152         ASSERT(osname);
1153 
1154         error = zfsvfs_create(osname, &zfsvfs);
1155         if (error)
1156                 return (error);
1157         zfsvfs->z_vfs = vfsp;
1158 
1159         /* Initialize the generic filesystem structure. */
1160         vfsp->vfs_bcount = 0;
1161         vfsp->vfs_data = NULL;
1162 
1163         if (zfs_create_unique_device(&mount_dev) == -1) {
1164                 error = SET_ERROR(ENODEV);
1165                 goto out;
1166         }
1167         ASSERT(vfs_devismounted(mount_dev) == 0);
1168 
1169         if (error = dsl_prop_get_integer(osname, "recordsize", &recordsize,
1170             NULL))
1171                 goto out;
1172 
1173         vfsp->vfs_dev = mount_dev;
1174         vfsp->vfs_fstype = zfsfstype;
1175         vfsp->vfs_bsize = recordsize;
1176         vfsp->vfs_flag |= VFS_NOTRUNC;
1177         vfsp->vfs_data = zfsvfs;
1178 
1179         /*
1180          * The fsid is 64 bits, composed of an 8-bit fs type, which
1181          * separates our fsid from any other filesystem types, and a
1182          * 56-bit objset unique ID.  The objset unique ID is unique to
1183          * all objsets open on this system, provided by unique_create().
1184          * The 8-bit fs type must be put in the low bits of fsid[1]
1185          * because that's where other Solaris filesystems put it.
1186          */
1187         fsid_guid = dmu_objset_fsid_guid(zfsvfs->z_os);
1188         ASSERT((fsid_guid & ~((1ULL<<56)-1)) == 0);
1189         vfsp->vfs_fsid.val[0] = fsid_guid;
1190         vfsp->vfs_fsid.val[1] = ((fsid_guid>>32) << 8) |
1191             zfsfstype & 0xFF;
1192 
1193         /*
1194          * Set features for file system.
1195          */
1196         zfs_set_fuid_feature(zfsvfs);
1197         if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE) {
1198                 vfs_set_feature(vfsp, VFSFT_DIRENTFLAGS);
1199                 vfs_set_feature(vfsp, VFSFT_CASEINSENSITIVE);
1200                 vfs_set_feature(vfsp, VFSFT_NOCASESENSITIVE);
1201         } else if (zfsvfs->z_case == ZFS_CASE_MIXED) {
1202                 vfs_set_feature(vfsp, VFSFT_DIRENTFLAGS);
1203                 vfs_set_feature(vfsp, VFSFT_CASEINSENSITIVE);
1204         }
1205         vfs_set_feature(vfsp, VFSFT_ZEROCOPY_SUPPORTED);
1206 
1207         if (dmu_objset_is_snapshot(zfsvfs->z_os)) {
1208                 uint64_t pval;
1209 
1210                 atime_changed_cb(zfsvfs, B_FALSE);
1211                 readonly_changed_cb(zfsvfs, B_TRUE);
1212                 if (error = dsl_prop_get_integer(osname, "xattr", &pval, NULL))
1213                         goto out;
1214                 xattr_changed_cb(zfsvfs, pval);
1215                 zfsvfs->z_issnap = B_TRUE;
1216                 zfsvfs->z_os->os_sync = ZFS_SYNC_DISABLED;
1217 
1218                 mutex_enter(&zfsvfs->z_os->os_user_ptr_lock);
1219                 dmu_objset_set_user(zfsvfs->z_os, zfsvfs);
1220                 mutex_exit(&zfsvfs->z_os->os_user_ptr_lock);
1221         } else {
1222                 error = zfsvfs_setup(zfsvfs, B_TRUE);
1223         }
1224 
1225         if (!zfsvfs->z_issnap)
1226                 zfsctl_create(zfsvfs);
1227 out:
1228         if (error) {
1229                 dmu_objset_disown(zfsvfs->z_os, zfsvfs);
1230                 zfsvfs_free(zfsvfs);
1231         } else {
1232                 atomic_inc_32(&zfs_active_fs_count);
1233         }
1234 
1235         return (error);
1236 }
1237 
1238 void
1239 zfs_unregister_callbacks(zfsvfs_t *zfsvfs)
1240 {
1241         objset_t *os = zfsvfs->z_os;
1242 
1243         if (!dmu_objset_is_snapshot(os))
1244                 dsl_prop_unregister_all(dmu_objset_ds(os), zfsvfs);
1245 }
1246 
1247 /*
1248  * Convert a decimal digit string to a uint64_t integer.
1249  */
1250 static int
1251 str_to_uint64(char *str, uint64_t *objnum)
1252 {
1253         uint64_t num = 0;
1254 
1255         while (*str) {
1256                 if (*str < '0' || *str > '9')
1257                         return (SET_ERROR(EINVAL));
1258 
1259                 num = num*10 + *str++ - '0';
1260         }
1261 
1262         *objnum = num;
1263         return (0);
1264 }
1265 
1266 /*
1267  * The boot path passed from the boot loader is in the form of
1268  * "rootpool-name/root-filesystem-object-number'. Convert this
1269  * string to a dataset name: "rootpool-name/root-filesystem-name".
1270  */
1271 static int
1272 zfs_parse_bootfs(char *bpath, char *outpath)
1273 {
1274         char *slashp;
1275         uint64_t objnum;
1276         int error;
1277 
1278         if (*bpath == 0 || *bpath == '/')
1279                 return (SET_ERROR(EINVAL));
1280 
1281         (void) strcpy(outpath, bpath);
1282 
1283         slashp = strchr(bpath, '/');
1284 
1285         /* if no '/', just return the pool name */
1286         if (slashp == NULL) {
1287                 return (0);
1288         }
1289 
1290         /* if not a number, just return the root dataset name */
1291         if (str_to_uint64(slashp+1, &objnum)) {
1292                 return (0);
1293         }
1294 
1295         *slashp = '\0';
1296         error = dsl_dsobj_to_dsname(bpath, objnum, outpath);
1297         *slashp = '/';
1298 
1299         return (error);
1300 }
1301 
1302 /*
1303  * Check that the hex label string is appropriate for the dataset being
1304  * mounted into the global_zone proper.
1305  *
1306  * Return an error if the hex label string is not default or
1307  * admin_low/admin_high.  For admin_low labels, the corresponding
1308  * dataset must be readonly.
1309  */
1310 int
1311 zfs_check_global_label(const char *dsname, const char *hexsl)
1312 {
1313         if (strcasecmp(hexsl, ZFS_MLSLABEL_DEFAULT) == 0)
1314                 return (0);
1315         if (strcasecmp(hexsl, ADMIN_HIGH) == 0)
1316                 return (0);
1317         if (strcasecmp(hexsl, ADMIN_LOW) == 0) {
1318                 /* must be readonly */
1319                 uint64_t rdonly;
1320 
1321                 if (dsl_prop_get_integer(dsname,
1322                     zfs_prop_to_name(ZFS_PROP_READONLY), &rdonly, NULL))
1323                         return (SET_ERROR(EACCES));
1324                 return (rdonly ? 0 : EACCES);
1325         }
1326         return (SET_ERROR(EACCES));
1327 }
1328 
1329 /*
1330  * Determine whether the mount is allowed according to MAC check.
1331  * by comparing (where appropriate) label of the dataset against
1332  * the label of the zone being mounted into.  If the dataset has
1333  * no label, create one.
1334  *
1335  * Returns 0 if access allowed, error otherwise (e.g. EACCES)
1336  */
1337 static int
1338 zfs_mount_label_policy(vfs_t *vfsp, char *osname)
1339 {
1340         int             error, retv;
1341         zone_t          *mntzone = NULL;
1342         ts_label_t      *mnt_tsl;
1343         bslabel_t       *mnt_sl;
1344         bslabel_t       ds_sl;
1345         char            ds_hexsl[MAXNAMELEN];
1346 
1347         retv = EACCES;                          /* assume the worst */
1348 
1349         /*
1350          * Start by getting the dataset label if it exists.
1351          */
1352         error = dsl_prop_get(osname, zfs_prop_to_name(ZFS_PROP_MLSLABEL),
1353             1, sizeof (ds_hexsl), &ds_hexsl, NULL);
1354         if (error)
1355                 return (SET_ERROR(EACCES));
1356 
1357         /*
1358          * If labeling is NOT enabled, then disallow the mount of datasets
1359          * which have a non-default label already.  No other label checks
1360          * are needed.
1361          */
1362         if (!is_system_labeled()) {
1363                 if (strcasecmp(ds_hexsl, ZFS_MLSLABEL_DEFAULT) == 0)
1364                         return (0);
1365                 return (SET_ERROR(EACCES));
1366         }
1367 
1368         /*
1369          * Get the label of the mountpoint.  If mounting into the global
1370          * zone (i.e. mountpoint is not within an active zone and the
1371          * zoned property is off), the label must be default or
1372          * admin_low/admin_high only; no other checks are needed.
1373          */
1374         mntzone = zone_find_by_any_path(refstr_value(vfsp->vfs_mntpt), B_FALSE);
1375         if (mntzone->zone_id == GLOBAL_ZONEID) {
1376                 uint64_t zoned;
1377 
1378                 zone_rele(mntzone);
1379 
1380                 if (dsl_prop_get_integer(osname,
1381                     zfs_prop_to_name(ZFS_PROP_ZONED), &zoned, NULL))
1382                         return (SET_ERROR(EACCES));
1383                 if (!zoned)
1384                         return (zfs_check_global_label(osname, ds_hexsl));
1385                 else
1386                         /*
1387                          * This is the case of a zone dataset being mounted
1388                          * initially, before the zone has been fully created;
1389                          * allow this mount into global zone.
1390                          */
1391                         return (0);
1392         }
1393 
1394         mnt_tsl = mntzone->zone_slabel;
1395         ASSERT(mnt_tsl != NULL);
1396         label_hold(mnt_tsl);
1397         mnt_sl = label2bslabel(mnt_tsl);
1398 
1399         if (strcasecmp(ds_hexsl, ZFS_MLSLABEL_DEFAULT) == 0) {
1400                 /*
1401                  * The dataset doesn't have a real label, so fabricate one.
1402                  */
1403                 char *str = NULL;
1404 
1405                 if (l_to_str_internal(mnt_sl, &str) == 0 &&
1406                     dsl_prop_set_string(osname,
1407                     zfs_prop_to_name(ZFS_PROP_MLSLABEL),
1408                     ZPROP_SRC_LOCAL, str) == 0)
1409                         retv = 0;
1410                 if (str != NULL)
1411                         kmem_free(str, strlen(str) + 1);
1412         } else if (hexstr_to_label(ds_hexsl, &ds_sl) == 0) {
1413                 /*
1414                  * Now compare labels to complete the MAC check.  If the
1415                  * labels are equal then allow access.  If the mountpoint
1416                  * label dominates the dataset label, allow readonly access.
1417                  * Otherwise, access is denied.
1418                  */
1419                 if (blequal(mnt_sl, &ds_sl))
1420                         retv = 0;
1421                 else if (bldominates(mnt_sl, &ds_sl)) {
1422                         vfs_setmntopt(vfsp, MNTOPT_RO, NULL, 0);
1423                         retv = 0;
1424                 }
1425         }
1426 
1427         label_rele(mnt_tsl);
1428         zone_rele(mntzone);
1429         return (retv);
1430 }
1431 
1432 static int
1433 zfs_mountroot(vfs_t *vfsp, enum whymountroot why)
1434 {
1435         int error = 0;
1436         static int zfsrootdone = 0;
1437         zfsvfs_t *zfsvfs = NULL;
1438         znode_t *zp = NULL;
1439         vnode_t *vp = NULL;
1440         char *zfs_bootfs;
1441         char *zfs_devid;
1442 
1443         ASSERT(vfsp);
1444 
1445         /*
1446          * The filesystem that we mount as root is defined in the
1447          * boot property "zfs-bootfs" with a format of
1448          * "poolname/root-dataset-objnum".
1449          */
1450         if (why == ROOT_INIT) {
1451                 if (zfsrootdone++)
1452                         return (SET_ERROR(EBUSY));
1453                 /*
1454                  * the process of doing a spa_load will require the
1455                  * clock to be set before we could (for example) do
1456                  * something better by looking at the timestamp on
1457                  * an uberblock, so just set it to -1.
1458                  */
1459                 clkset(-1);
1460 
1461                 if ((zfs_bootfs = spa_get_bootprop("zfs-bootfs")) == NULL) {
1462                         cmn_err(CE_NOTE, "spa_get_bootfs: can not get "
1463                             "bootfs name");
1464                         return (SET_ERROR(EINVAL));
1465                 }
1466                 zfs_devid = spa_get_bootprop("diskdevid");
1467                 error = spa_import_rootpool(rootfs.bo_name, zfs_devid);
1468                 if (zfs_devid)
1469                         spa_free_bootprop(zfs_devid);
1470                 if (error) {
1471                         spa_free_bootprop(zfs_bootfs);
1472                         cmn_err(CE_NOTE, "spa_import_rootpool: error %d",
1473                             error);
1474                         return (error);
1475                 }
1476                 if (error = zfs_parse_bootfs(zfs_bootfs, rootfs.bo_name)) {
1477                         spa_free_bootprop(zfs_bootfs);
1478                         cmn_err(CE_NOTE, "zfs_parse_bootfs: error %d",
1479                             error);
1480                         return (error);
1481                 }
1482 
1483                 spa_free_bootprop(zfs_bootfs);
1484 
1485                 if (error = vfs_lock(vfsp))
1486                         return (error);
1487 
1488                 if (error = zfs_domount(vfsp, rootfs.bo_name)) {
1489                         cmn_err(CE_NOTE, "zfs_domount: error %d", error);
1490                         goto out;
1491                 }
1492 
1493                 zfsvfs = (zfsvfs_t *)vfsp->vfs_data;
1494                 ASSERT(zfsvfs);
1495                 if (error = zfs_zget(zfsvfs, zfsvfs->z_root, &zp)) {
1496                         cmn_err(CE_NOTE, "zfs_zget: error %d", error);
1497                         goto out;
1498                 }
1499 
1500                 vp = ZTOV(zp);
1501                 mutex_enter(&vp->v_lock);
1502                 vp->v_flag |= VROOT;
1503                 mutex_exit(&vp->v_lock);
1504                 rootvp = vp;
1505 
1506                 /*
1507                  * Leave rootvp held.  The root file system is never unmounted.
1508                  */
1509 
1510                 vfs_add((struct vnode *)0, vfsp,
1511                     (vfsp->vfs_flag & VFS_RDONLY) ? MS_RDONLY : 0);
1512 out:
1513                 vfs_unlock(vfsp);
1514                 return (error);
1515         } else if (why == ROOT_REMOUNT) {
1516                 readonly_changed_cb(vfsp->vfs_data, B_FALSE);
1517                 vfsp->vfs_flag |= VFS_REMOUNT;
1518 
1519                 /* refresh mount options */
1520                 zfs_unregister_callbacks(vfsp->vfs_data);
1521                 return (zfs_register_callbacks(vfsp));
1522 
1523         } else if (why == ROOT_UNMOUNT) {
1524                 zfs_unregister_callbacks((zfsvfs_t *)vfsp->vfs_data);
1525                 (void) zfs_sync(vfsp, 0, 0);
1526                 return (0);
1527         }
1528 
1529         /*
1530          * if "why" is equal to anything else other than ROOT_INIT,
1531          * ROOT_REMOUNT, or ROOT_UNMOUNT, we do not support it.
1532          */
1533         return (SET_ERROR(ENOTSUP));
1534 }
1535 
1536 /*ARGSUSED*/
1537 static int
1538 zfs_mount(vfs_t *vfsp, vnode_t *mvp, struct mounta *uap, cred_t *cr)
1539 {
1540         char            *osname;
1541         pathname_t      spn;
1542         int             error = 0;
1543         uio_seg_t       fromspace = (uap->flags & MS_SYSSPACE) ?
1544             UIO_SYSSPACE : UIO_USERSPACE;
1545         int             canwrite;
1546 
1547         if (mvp->v_type != VDIR)
1548                 return (SET_ERROR(ENOTDIR));
1549 
1550         mutex_enter(&mvp->v_lock);
1551         if ((uap->flags & MS_REMOUNT) == 0 &&
1552             (uap->flags & MS_OVERLAY) == 0 &&
1553             (mvp->v_count != 1 || (mvp->v_flag & VROOT))) {
1554                 mutex_exit(&mvp->v_lock);
1555                 return (SET_ERROR(EBUSY));
1556         }
1557         mutex_exit(&mvp->v_lock);
1558 
1559         /*
1560          * ZFS does not support passing unparsed data in via MS_DATA.
1561          * Users should use the MS_OPTIONSTR interface; this means
1562          * that all option parsing is already done and the options struct
1563          * can be interrogated.
1564          */
1565         if ((uap->flags & MS_DATA) && uap->datalen > 0)
1566                 return (SET_ERROR(EINVAL));
1567 
1568         /*
1569          * Get the objset name (the "special" mount argument).
1570          */
1571         if (error = pn_get(uap->spec, fromspace, &spn))
1572                 return (error);
1573 
1574         osname = spn.pn_path;
1575 
1576         /*
1577          * Check for mount privilege?
1578          *
1579          * If we don't have privilege then see if
1580          * we have local permission to allow it
1581          */
1582         error = secpolicy_fs_mount(cr, mvp, vfsp);
1583         if (error) {
1584                 if (dsl_deleg_access(osname, ZFS_DELEG_PERM_MOUNT, cr) == 0) {
1585                         vattr_t         vattr;
1586 
1587                         /*
1588                          * Make sure user is the owner of the mount point
1589                          * or has sufficient privileges.
1590                          */
1591 
1592                         vattr.va_mask = AT_UID;
1593 
1594                         if (VOP_GETATTR(mvp, &vattr, 0, cr, NULL)) {
1595                                 goto out;
1596                         }
1597 
1598                         if (secpolicy_vnode_owner(cr, vattr.va_uid) != 0 &&
1599                             VOP_ACCESS(mvp, VWRITE, 0, cr, NULL) != 0) {
1600                                 goto out;
1601                         }
1602                         secpolicy_fs_mount_clearopts(cr, vfsp);
1603                 } else {
1604                         goto out;
1605                 }
1606         }
1607 
1608         /*
1609          * Refuse to mount a filesystem if we are in a local zone and the
1610          * dataset is not visible.
1611          */
1612         if (!INGLOBALZONE(curproc) &&
1613             (!zone_dataset_visible(osname, &canwrite) || !canwrite)) {
1614                 error = SET_ERROR(EPERM);
1615                 goto out;
1616         }
1617 
1618         error = zfs_mount_label_policy(vfsp, osname);
1619         if (error)
1620                 goto out;
1621 
1622         /*
1623          * When doing a remount, we simply refresh our temporary properties
1624          * according to those options set in the current VFS options.
1625          */
1626         if (uap->flags & MS_REMOUNT) {
1627                 /* refresh mount options */
1628                 zfs_unregister_callbacks(vfsp->vfs_data);
1629                 error = zfs_register_callbacks(vfsp);
1630                 goto out;
1631         }
1632 
1633         error = zfs_domount(vfsp, osname);
1634 
1635         /*
1636          * Add an extra VFS_HOLD on our parent vfs so that it can't
1637          * disappear due to a forced unmount.
1638          */
1639         if (error == 0 && ((zfsvfs_t *)vfsp->vfs_data)->z_issnap)
1640                 VFS_HOLD(mvp->v_vfsp);
1641 
1642 out:
1643         pn_free(&spn);
1644         return (error);
1645 }
1646 
1647 static int
1648 zfs_statvfs(vfs_t *vfsp, struct statvfs64 *statp)
1649 {
1650         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1651         dev32_t d32;
1652         uint64_t refdbytes, availbytes, usedobjs, availobjs;
1653 
1654         ZFS_ENTER(zfsvfs);
1655 
1656         dmu_objset_space(zfsvfs->z_os,
1657             &refdbytes, &availbytes, &usedobjs, &availobjs);
1658 
1659         /*
1660          * The underlying storage pool actually uses multiple block sizes.
1661          * We report the fragsize as the smallest block size we support,
1662          * and we report our blocksize as the filesystem's maximum blocksize.
1663          */
1664         statp->f_frsize = 1UL << SPA_MINBLOCKSHIFT;
1665         statp->f_bsize = zfsvfs->z_max_blksz;
1666 
1667         /*
1668          * The following report "total" blocks of various kinds in the
1669          * file system, but reported in terms of f_frsize - the
1670          * "fragment" size.
1671          */
1672 
1673         statp->f_blocks = (refdbytes + availbytes) >> SPA_MINBLOCKSHIFT;
1674         statp->f_bfree = availbytes >> SPA_MINBLOCKSHIFT;
1675         statp->f_bavail = statp->f_bfree; /* no root reservation */
1676 
1677         /*
1678          * statvfs() should really be called statufs(), because it assumes
1679          * static metadata.  ZFS doesn't preallocate files, so the best
1680          * we can do is report the max that could possibly fit in f_files,
1681          * and that minus the number actually used in f_ffree.
1682          * For f_ffree, report the smaller of the number of object available
1683          * and the number of blocks (each object will take at least a block).
1684          */
1685         statp->f_ffree = MIN(availobjs, statp->f_bfree);
1686         statp->f_favail = statp->f_ffree; /* no "root reservation" */
1687         statp->f_files = statp->f_ffree + usedobjs;
1688 
1689         (void) cmpldev(&d32, vfsp->vfs_dev);
1690         statp->f_fsid = d32;
1691 
1692         /*
1693          * We're a zfs filesystem.
1694          */
1695         (void) strcpy(statp->f_basetype, vfssw[vfsp->vfs_fstype].vsw_name);
1696 
1697         statp->f_flag = vf_to_stf(vfsp->vfs_flag);
1698 
1699         statp->f_namemax = MAXNAMELEN - 1;
1700 
1701         /*
1702          * We have all of 32 characters to stuff a string here.
1703          * Is there anything useful we could/should provide?
1704          */
1705         bzero(statp->f_fstr, sizeof (statp->f_fstr));
1706 
1707         ZFS_EXIT(zfsvfs);
1708         return (0);
1709 }
1710 
1711 static int
1712 zfs_root(vfs_t *vfsp, vnode_t **vpp)
1713 {
1714         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1715         znode_t *rootzp;
1716         int error;
1717 
1718         ZFS_ENTER(zfsvfs);
1719 
1720         error = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp);
1721         if (error == 0)
1722                 *vpp = ZTOV(rootzp);
1723 
1724         ZFS_EXIT(zfsvfs);
1725         return (error);
1726 }
1727 
1728 /*
1729  * Teardown the zfsvfs::z_os.
1730  *
1731  * Note, if 'unmounting' if FALSE, we return with the 'z_teardown_lock'
1732  * and 'z_teardown_inactive_lock' held.
1733  */
1734 static int
1735 zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting)
1736 {
1737         znode_t *zp;
1738 
1739         rrm_enter(&zfsvfs->z_teardown_lock, RW_WRITER, FTAG);
1740 
1741         if (!unmounting) {
1742                 /*
1743                  * We purge the parent filesystem's vfsp as the parent
1744                  * filesystem and all of its snapshots have their vnode's
1745                  * v_vfsp set to the parent's filesystem's vfsp.  Note,
1746                  * 'z_parent' is self referential for non-snapshots.
1747                  */
1748                 (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0);
1749         }
1750 
1751         /*
1752          * Close the zil. NB: Can't close the zil while zfs_inactive
1753          * threads are blocked as zil_close can call zfs_inactive.
1754          */
1755         if (zfsvfs->z_log) {
1756                 zil_close(zfsvfs->z_log);
1757                 zfsvfs->z_log = NULL;
1758         }
1759 
1760         rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER);
1761 
1762         /*
1763          * If we are not unmounting (ie: online recv) and someone already
1764          * unmounted this file system while we were doing the switcheroo,
1765          * or a reopen of z_os failed then just bail out now.
1766          */
1767         if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) {
1768                 rw_exit(&zfsvfs->z_teardown_inactive_lock);
1769                 rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
1770                 return (SET_ERROR(EIO));
1771         }
1772 
1773         /*
1774          * At this point there are no vops active, and any new vops will
1775          * fail with EIO since we have z_teardown_lock for writer (only
1776          * relavent for forced unmount).
1777          *
1778          * Release all holds on dbufs.
1779          */
1780         mutex_enter(&zfsvfs->z_znodes_lock);
1781         for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL;
1782             zp = list_next(&zfsvfs->z_all_znodes, zp))
1783                 if (zp->z_sa_hdl) {
1784                         ASSERT(ZTOV(zp)->v_count > 0);
1785                         zfs_znode_dmu_fini(zp);
1786                 }
1787         mutex_exit(&zfsvfs->z_znodes_lock);
1788 
1789         /*
1790          * If we are unmounting, set the unmounted flag and let new vops
1791          * unblock.  zfs_inactive will have the unmounted behavior, and all
1792          * other vops will fail with EIO.
1793          */
1794         if (unmounting) {
1795                 zfsvfs->z_unmounted = B_TRUE;
1796                 rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
1797                 rw_exit(&zfsvfs->z_teardown_inactive_lock);
1798         }
1799 
1800         /*
1801          * z_os will be NULL if there was an error in attempting to reopen
1802          * zfsvfs, so just return as the properties had already been
1803          * unregistered and cached data had been evicted before.
1804          */
1805         if (zfsvfs->z_os == NULL)
1806                 return (0);
1807 
1808         /*
1809          * Unregister properties.
1810          */
1811         zfs_unregister_callbacks(zfsvfs);
1812 
1813         /*
1814          * Evict cached data
1815          */
1816         if (dsl_dataset_is_dirty(dmu_objset_ds(zfsvfs->z_os)) &&
1817             !(zfsvfs->z_vfs->vfs_flag & VFS_RDONLY))
1818                 txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0);
1819         dmu_objset_evict_dbufs(zfsvfs->z_os);
1820 
1821         return (0);
1822 }
1823 
1824 /*ARGSUSED*/
1825 static int
1826 zfs_umount(vfs_t *vfsp, int fflag, cred_t *cr)
1827 {
1828         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1829         objset_t *os;
1830         int ret;
1831 
1832         ret = secpolicy_fs_unmount(cr, vfsp);
1833         if (ret) {
1834                 if (dsl_deleg_access((char *)refstr_value(vfsp->vfs_resource),
1835                     ZFS_DELEG_PERM_MOUNT, cr))
1836                         return (ret);
1837         }
1838 
1839         /*
1840          * We purge the parent filesystem's vfsp as the parent filesystem
1841          * and all of its snapshots have their vnode's v_vfsp set to the
1842          * parent's filesystem's vfsp.  Note, 'z_parent' is self
1843          * referential for non-snapshots.
1844          */
1845         (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0);
1846 
1847         /*
1848          * Unmount any snapshots mounted under .zfs before unmounting the
1849          * dataset itself.
1850          */
1851         if (zfsvfs->z_ctldir != NULL &&
1852             (ret = zfsctl_umount_snapshots(vfsp, fflag, cr)) != 0) {
1853                 return (ret);
1854         }
1855 
1856         if (!(fflag & MS_FORCE)) {
1857                 /*
1858                  * Check the number of active vnodes in the file system.
1859                  * Our count is maintained in the vfs structure, but the
1860                  * number is off by 1 to indicate a hold on the vfs
1861                  * structure itself.
1862                  *
1863                  * The '.zfs' directory maintains a reference of its
1864                  * own, and any active references underneath are
1865                  * reflected in the vnode count.
1866                  */
1867                 if (zfsvfs->z_ctldir == NULL) {
1868                         if (vfsp->vfs_count > 1)
1869                                 return (SET_ERROR(EBUSY));
1870                 } else {
1871                         if (vfsp->vfs_count > 2 ||
1872                             zfsvfs->z_ctldir->v_count > 1)
1873                                 return (SET_ERROR(EBUSY));
1874                 }
1875         }
1876 
1877         vfsp->vfs_flag |= VFS_UNMOUNTED;
1878 
1879         VERIFY(zfsvfs_teardown(zfsvfs, B_TRUE) == 0);
1880         os = zfsvfs->z_os;
1881 
1882         /*
1883          * z_os will be NULL if there was an error in
1884          * attempting to reopen zfsvfs.
1885          */
1886         if (os != NULL) {
1887                 /*
1888                  * Unset the objset user_ptr.
1889                  */
1890                 mutex_enter(&os->os_user_ptr_lock);
1891                 dmu_objset_set_user(os, NULL);
1892                 mutex_exit(&os->os_user_ptr_lock);
1893 
1894                 /*
1895                  * Finally release the objset
1896                  */
1897                 dmu_objset_disown(os, zfsvfs);
1898         }
1899 
1900         /*
1901          * We can now safely destroy the '.zfs' directory node.
1902          */
1903         if (zfsvfs->z_ctldir != NULL)
1904                 zfsctl_destroy(zfsvfs);
1905 
1906         return (0);
1907 }
1908 
1909 static int
1910 zfs_vget(vfs_t *vfsp, vnode_t **vpp, fid_t *fidp)
1911 {
1912         zfsvfs_t        *zfsvfs = vfsp->vfs_data;
1913         znode_t         *zp;
1914         uint64_t        object = 0;
1915         uint64_t        fid_gen = 0;
1916         uint64_t        gen_mask;
1917         uint64_t        zp_gen;
1918         int             i, err;
1919 
1920         *vpp = NULL;
1921 
1922         ZFS_ENTER(zfsvfs);
1923 
1924         if (fidp->fid_len == LONG_FID_LEN) {
1925                 zfid_long_t     *zlfid = (zfid_long_t *)fidp;
1926                 uint64_t        objsetid = 0;
1927                 uint64_t        setgen = 0;
1928 
1929                 for (i = 0; i < sizeof (zlfid->zf_setid); i++)
1930                         objsetid |= ((uint64_t)zlfid->zf_setid[i]) << (8 * i);
1931 
1932                 for (i = 0; i < sizeof (zlfid->zf_setgen); i++)
1933                         setgen |= ((uint64_t)zlfid->zf_setgen[i]) << (8 * i);
1934 
1935                 ZFS_EXIT(zfsvfs);
1936 
1937                 err = zfsctl_lookup_objset(vfsp, objsetid, &zfsvfs);
1938                 if (err)
1939                         return (SET_ERROR(EINVAL));
1940                 ZFS_ENTER(zfsvfs);
1941         }
1942 
1943         if (fidp->fid_len == SHORT_FID_LEN || fidp->fid_len == LONG_FID_LEN) {
1944                 zfid_short_t    *zfid = (zfid_short_t *)fidp;
1945 
1946                 for (i = 0; i < sizeof (zfid->zf_object); i++)
1947                         object |= ((uint64_t)zfid->zf_object[i]) << (8 * i);
1948 
1949                 for (i = 0; i < sizeof (zfid->zf_gen); i++)
1950                         fid_gen |= ((uint64_t)zfid->zf_gen[i]) << (8 * i);
1951         } else {
1952                 ZFS_EXIT(zfsvfs);
1953                 return (SET_ERROR(EINVAL));
1954         }
1955 
1956         /* A zero fid_gen means we are in the .zfs control directories */
1957         if (fid_gen == 0 &&
1958             (object == ZFSCTL_INO_ROOT || object == ZFSCTL_INO_SNAPDIR)) {
1959                 *vpp = zfsvfs->z_ctldir;
1960                 ASSERT(*vpp != NULL);
1961                 if (object == ZFSCTL_INO_SNAPDIR) {
1962                         VERIFY(zfsctl_root_lookup(*vpp, "snapshot", vpp, NULL,
1963                             0, NULL, NULL, NULL, NULL, NULL) == 0);
1964                 } else {
1965                         VN_HOLD(*vpp);
1966                 }
1967                 ZFS_EXIT(zfsvfs);
1968                 return (0);
1969         }
1970 
1971         gen_mask = -1ULL >> (64 - 8 * i);
1972 
1973         dprintf("getting %llu [%u mask %llx]\n", object, fid_gen, gen_mask);
1974         if (err = zfs_zget(zfsvfs, object, &zp)) {
1975                 ZFS_EXIT(zfsvfs);
1976                 return (err);
1977         }
1978         (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), &zp_gen,
1979             sizeof (uint64_t));
1980         zp_gen = zp_gen & gen_mask;
1981         if (zp_gen == 0)
1982                 zp_gen = 1;
1983         if (zp->z_unlinked || zp_gen != fid_gen) {
1984                 dprintf("znode gen (%u) != fid gen (%u)\n", zp_gen, fid_gen);
1985                 VN_RELE(ZTOV(zp));
1986                 ZFS_EXIT(zfsvfs);
1987                 return (SET_ERROR(EINVAL));
1988         }
1989 
1990         *vpp = ZTOV(zp);
1991         ZFS_EXIT(zfsvfs);
1992         return (0);
1993 }
1994 
1995 /*
1996  * Block out VOPs and close zfsvfs_t::z_os
1997  *
1998  * Note, if successful, then we return with the 'z_teardown_lock' and
1999  * 'z_teardown_inactive_lock' write held.  We leave ownership of the underlying
2000  * dataset and objset intact so that they can be atomically handed off during
2001  * a subsequent rollback or recv operation and the resume thereafter.
2002  */
2003 int
2004 zfs_suspend_fs(zfsvfs_t *zfsvfs)
2005 {
2006         int error;
2007 
2008         if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0)
2009                 return (error);
2010 
2011         return (0);
2012 }
2013 
2014 /*
2015  * Rebuild SA and release VOPs.  Note that ownership of the underlying dataset
2016  * is an invariant across any of the operations that can be performed while the
2017  * filesystem was suspended.  Whether it succeeded or failed, the preconditions
2018  * are the same: the relevant objset and associated dataset are owned by
2019  * zfsvfs, held, and long held on entry.
2020  */
2021 int
2022 zfs_resume_fs(zfsvfs_t *zfsvfs, const char *osname)
2023 {
2024         int err;
2025         znode_t *zp;
2026 
2027         ASSERT(RRM_WRITE_HELD(&zfsvfs->z_teardown_lock));
2028         ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock));
2029 
2030         /*
2031          * We already own this, so just hold and rele it to update the
2032          * objset_t, as the one we had before may have been evicted.
2033          */
2034         objset_t *os;
2035         VERIFY0(dmu_objset_hold(osname, zfsvfs, &os));
2036         VERIFY3P(os->os_dsl_dataset->ds_owner, ==, zfsvfs);
2037         VERIFY(dsl_dataset_long_held(os->os_dsl_dataset));
2038         dmu_objset_rele(os, zfsvfs);
2039 
2040         err = zfsvfs_init(zfsvfs, os);
2041         if (err != 0)
2042                 goto bail;
2043 
2044         VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0);
2045 
2046         zfs_set_fuid_feature(zfsvfs);
2047 
2048         /*
2049          * Attempt to re-establish all the active znodes with
2050          * their dbufs.  If a zfs_rezget() fails, then we'll let
2051          * any potential callers discover that via ZFS_ENTER_VERIFY_VP
2052          * when they try to use their znode.
2053          */
2054         mutex_enter(&zfsvfs->z_znodes_lock);
2055         for (zp = list_head(&zfsvfs->z_all_znodes); zp;
2056             zp = list_next(&zfsvfs->z_all_znodes, zp)) {
2057                 (void) zfs_rezget(zp);
2058         }
2059         mutex_exit(&zfsvfs->z_znodes_lock);
2060 
2061 bail:
2062         /* release the VOPs */
2063         rw_exit(&zfsvfs->z_teardown_inactive_lock);
2064         rrm_exit(&zfsvfs->z_teardown_lock, FTAG);
2065 
2066         if (err) {
2067                 /*
2068                  * Since we couldn't setup the sa framework, try to force
2069                  * unmount this file system.
2070                  */
2071                 if (vn_vfswlock(zfsvfs->z_vfs->vfs_vnodecovered) == 0)
2072                         (void) dounmount(zfsvfs->z_vfs, MS_FORCE, CRED());
2073         }
2074         return (err);
2075 }
2076 
2077 static void
2078 zfs_freevfs(vfs_t *vfsp)
2079 {
2080         zfsvfs_t *zfsvfs = vfsp->vfs_data;
2081 
2082         /*
2083          * If this is a snapshot, we have an extra VFS_HOLD on our parent
2084          * from zfs_mount().  Release it here.  If we came through
2085          * zfs_mountroot() instead, we didn't grab an extra hold, so
2086          * skip the VFS_RELE for rootvfs.
2087          */
2088         if (zfsvfs->z_issnap && (vfsp != rootvfs))
2089                 VFS_RELE(zfsvfs->z_parent->z_vfs);
2090 
2091         zfsvfs_free(zfsvfs);
2092 
2093         atomic_dec_32(&zfs_active_fs_count);
2094 }
2095 
2096 /*
2097  * VFS_INIT() initialization.  Note that there is no VFS_FINI(),
2098  * so we can't safely do any non-idempotent initialization here.
2099  * Leave that to zfs_init() and zfs_fini(), which are called
2100  * from the module's _init() and _fini() entry points.
2101  */
2102 /*ARGSUSED*/
2103 static int
2104 zfs_vfsinit(int fstype, char *name)
2105 {
2106         int error;
2107 
2108         zfsfstype = fstype;
2109 
2110         /*
2111          * Setup vfsops and vnodeops tables.
2112          */
2113         error = vfs_setfsops(fstype, zfs_vfsops_template, &zfs_vfsops);
2114         if (error != 0) {
2115                 cmn_err(CE_WARN, "zfs: bad vfs ops template");
2116         }
2117 
2118         error = zfs_create_op_tables();
2119         if (error) {
2120                 zfs_remove_op_tables();
2121                 cmn_err(CE_WARN, "zfs: bad vnode ops template");
2122                 (void) vfs_freevfsops_by_type(zfsfstype);
2123                 return (error);
2124         }
2125 
2126         mutex_init(&zfs_dev_mtx, NULL, MUTEX_DEFAULT, NULL);
2127 
2128         /*
2129          * Unique major number for all zfs mounts.
2130          * If we run out of 32-bit minors, we'll getudev() another major.
2131          */
2132         zfs_major = ddi_name_to_major(ZFS_DRIVER);
2133         zfs_minor = ZFS_MIN_MINOR;
2134 
2135         return (0);
2136 }
2137 
2138 void
2139 zfs_init(void)
2140 {
2141         /*
2142          * Initialize .zfs directory structures
2143          */
2144         zfsctl_init();
2145 
2146         /*
2147          * Initialize znode cache, vnode ops, etc...
2148          */
2149         zfs_znode_init();
2150 
2151         dmu_objset_register_type(DMU_OST_ZFS, zfs_space_delta_cb);
2152 }
2153 
2154 void
2155 zfs_fini(void)
2156 {
2157         zfsctl_fini();
2158         zfs_znode_fini();
2159 }
2160 
2161 int
2162 zfs_busy(void)
2163 {
2164         return (zfs_active_fs_count != 0);
2165 }
2166 
2167 int
2168 zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers)
2169 {
2170         int error;
2171         objset_t *os = zfsvfs->z_os;
2172         dmu_tx_t *tx;
2173 
2174         if (newvers < ZPL_VERSION_INITIAL || newvers > ZPL_VERSION)
2175                 return (SET_ERROR(EINVAL));
2176 
2177         if (newvers < zfsvfs->z_version)
2178                 return (SET_ERROR(EINVAL));
2179 
2180         if (zfs_spa_version_map(newvers) >
2181             spa_version(dmu_objset_spa(zfsvfs->z_os)))
2182                 return (SET_ERROR(ENOTSUP));
2183 
2184         tx = dmu_tx_create(os);
2185         dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_FALSE, ZPL_VERSION_STR);
2186         if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) {
2187                 dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_TRUE,
2188                     ZFS_SA_ATTRS);
2189                 dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL);
2190         }
2191         error = dmu_tx_assign(tx, TXG_WAIT);
2192         if (error) {
2193                 dmu_tx_abort(tx);
2194                 return (error);
2195         }
2196 
2197         error = zap_update(os, MASTER_NODE_OBJ, ZPL_VERSION_STR,
2198             8, 1, &newvers, tx);
2199 
2200         if (error) {
2201                 dmu_tx_commit(tx);
2202                 return (error);
2203         }
2204 
2205         if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) {
2206                 uint64_t sa_obj;
2207 
2208                 ASSERT3U(spa_version(dmu_objset_spa(zfsvfs->z_os)), >=,
2209                     SPA_VERSION_SA);
2210                 sa_obj = zap_create(os, DMU_OT_SA_MASTER_NODE,
2211                     DMU_OT_NONE, 0, tx);
2212 
2213                 error = zap_add(os, MASTER_NODE_OBJ,
2214                     ZFS_SA_ATTRS, 8, 1, &sa_obj, tx);
2215                 ASSERT0(error);
2216 
2217                 VERIFY(0 == sa_set_sa_object(os, sa_obj));
2218                 sa_register_update_callback(os, zfs_sa_upgrade);
2219         }
2220 
2221         spa_history_log_internal_ds(dmu_objset_ds(os), "upgrade", tx,
2222             "from %llu to %llu", zfsvfs->z_version, newvers);
2223 
2224         dmu_tx_commit(tx);
2225 
2226         zfsvfs->z_version = newvers;
2227 
2228         zfs_set_fuid_feature(zfsvfs);
2229 
2230         return (0);
2231 }
2232 
2233 /*
2234  * Read a property stored within the master node.
2235  */
2236 int
2237 zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value)
2238 {
2239         const char *pname;
2240         int error = ENOENT;
2241 
2242         /*
2243          * Look up the file system's value for the property.  For the
2244          * version property, we look up a slightly different string.
2245          */
2246         if (prop == ZFS_PROP_VERSION)
2247                 pname = ZPL_VERSION_STR;
2248         else
2249                 pname = zfs_prop_to_name(prop);
2250 
2251         if (os != NULL)
2252                 error = zap_lookup(os, MASTER_NODE_OBJ, pname, 8, 1, value);
2253 
2254         if (error == ENOENT) {
2255                 /* No value set, use the default value */
2256                 switch (prop) {
2257                 case ZFS_PROP_VERSION:
2258                         *value = ZPL_VERSION;
2259                         break;
2260                 case ZFS_PROP_NORMALIZE:
2261                 case ZFS_PROP_UTF8ONLY:
2262                         *value = 0;
2263                         break;
2264                 case ZFS_PROP_CASE:
2265                         *value = ZFS_CASE_SENSITIVE;
2266                         break;
2267                 default:
2268                         return (error);
2269                 }
2270                 error = 0;
2271         }
2272         return (error);
2273 }
2274 
2275 static vfsdef_t vfw = {
2276         VFSDEF_VERSION,
2277         MNTTYPE_ZFS,
2278         zfs_vfsinit,
2279         VSW_HASPROTO|VSW_CANRWRO|VSW_CANREMOUNT|VSW_VOLATILEDEV|VSW_STATS|
2280             VSW_XID|VSW_ZMOUNT,
2281         &zfs_mntopts
2282 };
2283 
2284 struct modlfs zfs_modlfs = {
2285         &mod_fsops, "ZFS filesystem version " SPA_VERSION_STRING, &vfw
2286 };