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