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