Export required vfs/vn symbols
[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 /*
1249  * Convert a decimal digit string to a uint64_t integer.
1250  */
1251 static int
1252 str_to_uint64(char *str, uint64_t *objnum)
1253 {
1254         uint64_t num = 0;
1255
1256         while (*str) {
1257                 if (*str < '0' || *str > '9')
1258                         return (EINVAL);
1259
1260                 num = num*10 + *str++ - '0';
1261         }
1262
1263         *objnum = num;
1264         return (0);
1265 }
1266
1267 /*
1268  * The boot path passed from the boot loader is in the form of
1269  * "rootpool-name/root-filesystem-object-number'. Convert this
1270  * string to a dataset name: "rootpool-name/root-filesystem-name".
1271  */
1272 static int
1273 zfs_parse_bootfs(char *bpath, char *outpath)
1274 {
1275         char *slashp;
1276         uint64_t objnum;
1277         int error;
1278
1279         if (*bpath == 0 || *bpath == '/')
1280                 return (EINVAL);
1281
1282         (void) strcpy(outpath, bpath);
1283
1284         slashp = strchr(bpath, '/');
1285
1286         /* if no '/', just return the pool name */
1287         if (slashp == NULL) {
1288                 return (0);
1289         }
1290
1291         /* if not a number, just return the root dataset name */
1292         if (str_to_uint64(slashp+1, &objnum)) {
1293                 return (0);
1294         }
1295
1296         *slashp = '\0';
1297         error = dsl_dsobj_to_dsname(bpath, objnum, outpath);
1298         *slashp = '/';
1299
1300         return (error);
1301 }
1302
1303 /*
1304  * zfs_check_global_label:
1305  *      Check that the hex label string is appropriate for the dataset
1306  *      being mounted into the global_zone proper.
1307  *
1308  *      Return an error if the hex label string is not default or
1309  *      admin_low/admin_high.  For admin_low labels, the corresponding
1310  *      dataset must be readonly.
1311  */
1312 int
1313 zfs_check_global_label(const char *dsname, const char *hexsl)
1314 {
1315         if (strcasecmp(hexsl, ZFS_MLSLABEL_DEFAULT) == 0)
1316                 return (0);
1317         if (strcasecmp(hexsl, ADMIN_HIGH) == 0)
1318                 return (0);
1319         if (strcasecmp(hexsl, ADMIN_LOW) == 0) {
1320                 /* must be readonly */
1321                 uint64_t rdonly;
1322
1323                 if (dsl_prop_get_integer(dsname,
1324                     zfs_prop_to_name(ZFS_PROP_READONLY), &rdonly, NULL))
1325                         return (EACCES);
1326                 return (rdonly ? 0 : EACCES);
1327         }
1328         return (EACCES);
1329 }
1330
1331 /*
1332  * zfs_mount_label_policy:
1333  *      Determine whether the mount is allowed according to MAC check.
1334  *      by comparing (where appropriate) label of the dataset against
1335  *      the label of the zone being mounted into.  If the dataset has
1336  *      no label, create one.
1337  *
1338  *      Returns:
1339  *               0 :    access allowed
1340  *              >0 :    error code, such as EACCES
1341  */
1342 static int
1343 zfs_mount_label_policy(vfs_t *vfsp, char *osname)
1344 {
1345         int             error, retv;
1346         zone_t          *mntzone = NULL;
1347         ts_label_t      *mnt_tsl;
1348         bslabel_t       *mnt_sl;
1349         bslabel_t       ds_sl;
1350         char            ds_hexsl[MAXNAMELEN];
1351
1352         retv = EACCES;                          /* assume the worst */
1353
1354         /*
1355          * Start by getting the dataset label if it exists.
1356          */
1357         error = dsl_prop_get(osname, zfs_prop_to_name(ZFS_PROP_MLSLABEL),
1358             1, sizeof (ds_hexsl), &ds_hexsl, NULL);
1359         if (error)
1360                 return (EACCES);
1361
1362         /*
1363          * If labeling is NOT enabled, then disallow the mount of datasets
1364          * which have a non-default label already.  No other label checks
1365          * are needed.
1366          */
1367         if (!is_system_labeled()) {
1368                 if (strcasecmp(ds_hexsl, ZFS_MLSLABEL_DEFAULT) == 0)
1369                         return (0);
1370                 return (EACCES);
1371         }
1372
1373         /*
1374          * Get the label of the mountpoint.  If mounting into the global
1375          * zone (i.e. mountpoint is not within an active zone and the
1376          * zoned property is off), the label must be default or
1377          * admin_low/admin_high only; no other checks are needed.
1378          */
1379         mntzone = zone_find_by_any_path(refstr_value(vfsp->vfs_mntpt), B_FALSE);
1380         if (mntzone->zone_id == GLOBAL_ZONEID) {
1381                 uint64_t zoned;
1382
1383                 zone_rele(mntzone);
1384
1385                 if (dsl_prop_get_integer(osname,
1386                     zfs_prop_to_name(ZFS_PROP_ZONED), &zoned, NULL))
1387                         return (EACCES);
1388                 if (!zoned)
1389                         return (zfs_check_global_label(osname, ds_hexsl));
1390                 else
1391                         /*
1392                          * This is the case of a zone dataset being mounted
1393                          * initially, before the zone has been fully created;
1394                          * allow this mount into global zone.
1395                          */
1396                         return (0);
1397         }
1398
1399         mnt_tsl = mntzone->zone_slabel;
1400         ASSERT(mnt_tsl != NULL);
1401         label_hold(mnt_tsl);
1402         mnt_sl = label2bslabel(mnt_tsl);
1403
1404         if (strcasecmp(ds_hexsl, ZFS_MLSLABEL_DEFAULT) == 0) {
1405                 /*
1406                  * The dataset doesn't have a real label, so fabricate one.
1407                  */
1408                 char *str = NULL;
1409
1410                 if (l_to_str_internal(mnt_sl, &str) == 0 &&
1411                     dsl_prop_set(osname, zfs_prop_to_name(ZFS_PROP_MLSLABEL),
1412                     ZPROP_SRC_LOCAL, 1, strlen(str) + 1, str) == 0)
1413                         retv = 0;
1414                 if (str != NULL)
1415                         kmem_free(str, strlen(str) + 1);
1416         } else if (hexstr_to_label(ds_hexsl, &ds_sl) == 0) {
1417                 /*
1418                  * Now compare labels to complete the MAC check.  If the
1419                  * labels are equal then allow access.  If the mountpoint
1420                  * label dominates the dataset label, allow readonly access.
1421                  * Otherwise, access is denied.
1422                  */
1423                 if (blequal(mnt_sl, &ds_sl))
1424                         retv = 0;
1425                 else if (bldominates(mnt_sl, &ds_sl)) {
1426                         vfs_setmntopt(vfsp, MNTOPT_RO, NULL, 0);
1427                         retv = 0;
1428                 }
1429         }
1430
1431         label_rele(mnt_tsl);
1432         zone_rele(mntzone);
1433         return (retv);
1434 }
1435
1436 static int
1437 zfs_mountroot(vfs_t *vfsp, enum whymountroot why)
1438 {
1439         int error = 0;
1440         static int zfsrootdone = 0;
1441         zfsvfs_t *zfsvfs = NULL;
1442         znode_t *zp = NULL;
1443         vnode_t *vp = NULL;
1444         char *zfs_bootfs;
1445         char *zfs_devid;
1446
1447         ASSERT(vfsp);
1448
1449         /*
1450          * The filesystem that we mount as root is defined in the
1451          * boot property "zfs-bootfs" with a format of
1452          * "poolname/root-dataset-objnum".
1453          */
1454         if (why == ROOT_INIT) {
1455                 if (zfsrootdone++)
1456                         return (EBUSY);
1457                 /*
1458                  * the process of doing a spa_load will require the
1459                  * clock to be set before we could (for example) do
1460                  * something better by looking at the timestamp on
1461                  * an uberblock, so just set it to -1.
1462                  */
1463                 clkset(-1);
1464
1465                 if ((zfs_bootfs = spa_get_bootprop("zfs-bootfs")) == NULL) {
1466                         cmn_err(CE_NOTE, "spa_get_bootfs: can not get "
1467                             "bootfs name");
1468                         return (EINVAL);
1469                 }
1470                 zfs_devid = spa_get_bootprop("diskdevid");
1471                 error = spa_import_rootpool(rootfs.bo_name, zfs_devid);
1472                 if (zfs_devid)
1473                         spa_free_bootprop(zfs_devid);
1474                 if (error) {
1475                         spa_free_bootprop(zfs_bootfs);
1476                         cmn_err(CE_NOTE, "spa_import_rootpool: error %d",
1477                             error);
1478                         return (error);
1479                 }
1480                 if (error = zfs_parse_bootfs(zfs_bootfs, rootfs.bo_name)) {
1481                         spa_free_bootprop(zfs_bootfs);
1482                         cmn_err(CE_NOTE, "zfs_parse_bootfs: error %d",
1483                             error);
1484                         return (error);
1485                 }
1486
1487                 spa_free_bootprop(zfs_bootfs);
1488
1489                 if (error = vfs_lock(vfsp))
1490                         return (error);
1491
1492                 if (error = zfs_domount(vfsp, rootfs.bo_name)) {
1493                         cmn_err(CE_NOTE, "zfs_domount: error %d", error);
1494                         goto out;
1495                 }
1496
1497                 zfsvfs = (zfsvfs_t *)vfsp->vfs_data;
1498                 ASSERT(zfsvfs);
1499                 if (error = zfs_zget(zfsvfs, zfsvfs->z_root, &zp)) {
1500                         cmn_err(CE_NOTE, "zfs_zget: error %d", error);
1501                         goto out;
1502                 }
1503
1504                 vp = ZTOV(zp);
1505                 mutex_enter(&vp->v_lock);
1506                 vp->v_flag |= VROOT;
1507                 mutex_exit(&vp->v_lock);
1508                 rootvp = vp;
1509
1510                 /*
1511                  * Leave rootvp held.  The root file system is never unmounted.
1512                  */
1513
1514                 vfs_add((struct vnode *)0, vfsp,
1515                     (vfsp->vfs_flag & VFS_RDONLY) ? MS_RDONLY : 0);
1516 out:
1517                 vfs_unlock(vfsp);
1518                 return (error);
1519         } else if (why == ROOT_REMOUNT) {
1520                 readonly_changed_cb(vfsp->vfs_data, B_FALSE);
1521                 vfsp->vfs_flag |= VFS_REMOUNT;
1522
1523                 /* refresh mount options */
1524                 zfs_unregister_callbacks(vfsp->vfs_data);
1525                 return (zfs_register_callbacks(vfsp));
1526
1527         } else if (why == ROOT_UNMOUNT) {
1528                 zfs_unregister_callbacks((zfsvfs_t *)vfsp->vfs_data);
1529                 (void) zfs_sync(vfsp, 0, 0);
1530                 return (0);
1531         }
1532
1533         /*
1534          * if "why" is equal to anything else other than ROOT_INIT,
1535          * ROOT_REMOUNT, or ROOT_UNMOUNT, we do not support it.
1536          */
1537         return (ENOTSUP);
1538 }
1539
1540 /*ARGSUSED*/
1541 static int
1542 zfs_mount(vfs_t *vfsp, vnode_t *mvp, struct mounta *uap, cred_t *cr)
1543 {
1544         char            *osname;
1545         pathname_t      spn;
1546         int             error = 0;
1547         uio_seg_t       fromspace = (uap->flags & MS_SYSSPACE) ?
1548             UIO_SYSSPACE : UIO_USERSPACE;
1549         int             canwrite;
1550
1551         if (mvp->v_type != VDIR)
1552                 return (ENOTDIR);
1553
1554         mutex_enter(&mvp->v_lock);
1555         if ((uap->flags & MS_REMOUNT) == 0 &&
1556             (uap->flags & MS_OVERLAY) == 0 &&
1557             (mvp->v_count != 1 || (mvp->v_flag & VROOT))) {
1558                 mutex_exit(&mvp->v_lock);
1559                 return (EBUSY);
1560         }
1561         mutex_exit(&mvp->v_lock);
1562
1563         /*
1564          * ZFS does not support passing unparsed data in via MS_DATA.
1565          * Users should use the MS_OPTIONSTR interface; this means
1566          * that all option parsing is already done and the options struct
1567          * can be interrogated.
1568          */
1569         if ((uap->flags & MS_DATA) && uap->datalen > 0)
1570                 return (EINVAL);
1571
1572         /*
1573          * Get the objset name (the "special" mount argument).
1574          */
1575         if ((error = pn_get(uap->spec, fromspace, &spn)))
1576                 return (error);
1577
1578         osname = spn.pn_path;
1579
1580         /*
1581          * Check for mount privilege?
1582          *
1583          * If we don't have privilege then see if
1584          * we have local permission to allow it
1585          */
1586         error = secpolicy_fs_mount(cr, mvp, vfsp);
1587         if (error) {
1588                 if (dsl_deleg_access(osname, ZFS_DELEG_PERM_MOUNT, cr) == 0) {
1589                         vattr_t         vattr;
1590
1591                         /*
1592                          * Make sure user is the owner of the mount point
1593                          * or has sufficient privileges.
1594                          */
1595
1596                         vattr.va_mask = AT_UID;
1597
1598                         if (VOP_GETATTR(mvp, &vattr, 0, cr, NULL)) {
1599                                 goto out;
1600                         }
1601
1602                         if (secpolicy_vnode_owner(cr, vattr.va_uid) != 0 &&
1603                             VOP_ACCESS(mvp, VWRITE, 0, cr, NULL) != 0) {
1604                                 goto out;
1605                         }
1606                         secpolicy_fs_mount_clearopts(cr, vfsp);
1607                 } else {
1608                         goto out;
1609                 }
1610         }
1611
1612         /*
1613          * Refuse to mount a filesystem if we are in a local zone and the
1614          * dataset is not visible.
1615          */
1616         if (!INGLOBALZONE(curproc) &&
1617             (!zone_dataset_visible(osname, &canwrite) || !canwrite)) {
1618                 error = EPERM;
1619                 goto out;
1620         }
1621
1622         error = zfs_mount_label_policy(vfsp, osname);
1623         if (error)
1624                 goto out;
1625
1626         /*
1627          * When doing a remount, we simply refresh our temporary properties
1628          * according to those options set in the current VFS options.
1629          */
1630         if (uap->flags & MS_REMOUNT) {
1631                 /* refresh mount options */
1632                 zfs_unregister_callbacks(vfsp->vfs_data);
1633                 error = zfs_register_callbacks(vfsp);
1634                 goto out;
1635         }
1636
1637         error = zfs_domount(vfsp, osname);
1638
1639         /*
1640          * Add an extra VFS_HOLD on our parent vfs so that it can't
1641          * disappear due to a forced unmount.
1642          */
1643         if (error == 0 && ((zfsvfs_t *)vfsp->vfs_data)->z_issnap)
1644                 VFS_HOLD(mvp->v_vfsp);
1645
1646 out:
1647         pn_free(&spn);
1648         return (error);
1649 }
1650
1651 int
1652 zfs_statvfs(vfs_t *vfsp, struct statvfs64 *statp)
1653 {
1654         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1655         dev32_t d32;
1656         uint64_t refdbytes, availbytes, usedobjs, availobjs;
1657
1658         ZFS_ENTER(zfsvfs);
1659
1660         dmu_objset_space(zfsvfs->z_os,
1661             &refdbytes, &availbytes, &usedobjs, &availobjs);
1662
1663         /*
1664          * The underlying storage pool actually uses multiple block sizes.
1665          * We report the fragsize as the smallest block size we support,
1666          * and we report our blocksize as the filesystem's maximum blocksize.
1667          */
1668         statp->f_frsize = 1UL << SPA_MINBLOCKSHIFT;
1669         statp->f_bsize = zfsvfs->z_max_blksz;
1670
1671         /*
1672          * The following report "total" blocks of various kinds in the
1673          * file system, but reported in terms of f_frsize - the
1674          * "fragment" size.
1675          */
1676
1677         statp->f_blocks = (refdbytes + availbytes) >> SPA_MINBLOCKSHIFT;
1678         statp->f_bfree = availbytes >> SPA_MINBLOCKSHIFT;
1679         statp->f_bavail = statp->f_bfree; /* no root reservation */
1680
1681         /*
1682          * statvfs() should really be called statufs(), because it assumes
1683          * static metadata.  ZFS doesn't preallocate files, so the best
1684          * we can do is report the max that could possibly fit in f_files,
1685          * and that minus the number actually used in f_ffree.
1686          * For f_ffree, report the smaller of the number of object available
1687          * and the number of blocks (each object will take at least a block).
1688          */
1689         statp->f_ffree = MIN(availobjs, statp->f_bfree);
1690         statp->f_favail = statp->f_ffree;       /* no "root reservation" */
1691         statp->f_files = statp->f_ffree + usedobjs;
1692
1693         (void) cmpldev(&d32, vfsp->vfs_dev);
1694         statp->f_fsid = d32;
1695
1696         /*
1697          * We're a zfs filesystem.
1698          */
1699         (void) strcpy(statp->f_basetype, vfssw[vfsp->vfs_fstype].vsw_name);
1700
1701         statp->f_flag = vf_to_stf(vfsp->vfs_flag);
1702
1703         statp->f_namemax = ZFS_MAXNAMELEN;
1704
1705         /*
1706          * We have all of 32 characters to stuff a string here.
1707          * Is there anything useful we could/should provide?
1708          */
1709         bzero(statp->f_fstr, sizeof (statp->f_fstr));
1710
1711         ZFS_EXIT(zfsvfs);
1712         return (0);
1713 }
1714 EXPORT_SYMBOL(zfs_statvfs);
1715
1716 int
1717 zfs_root(vfs_t *vfsp, vnode_t **vpp)
1718 {
1719         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1720         znode_t *rootzp;
1721         int error;
1722
1723         ZFS_ENTER(zfsvfs);
1724
1725         error = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp);
1726         if (error == 0)
1727                 *vpp = ZTOV(rootzp);
1728
1729         ZFS_EXIT(zfsvfs);
1730         return (error);
1731 }
1732 EXPORT_SYMBOL(zfs_root);
1733
1734 /*
1735  * Teardown the zfsvfs::z_os.
1736  *
1737  * Note, if 'unmounting' if FALSE, we return with the 'z_teardown_lock'
1738  * and 'z_teardown_inactive_lock' held.
1739  */
1740 static int
1741 zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting)
1742 {
1743         znode_t *zp;
1744
1745         rrw_enter(&zfsvfs->z_teardown_lock, RW_WRITER, FTAG);
1746
1747         if (!unmounting) {
1748                 /*
1749                  * We purge the parent filesystem's vfsp as the parent
1750                  * filesystem and all of its snapshots have their vnode's
1751                  * v_vfsp set to the parent's filesystem's vfsp.  Note,
1752                  * 'z_parent' is self referential for non-snapshots.
1753                  */
1754                 (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0);
1755         }
1756
1757         /*
1758          * Close the zil. NB: Can't close the zil while zfs_inactive
1759          * threads are blocked as zil_close can call zfs_inactive.
1760          */
1761         if (zfsvfs->z_log) {
1762                 zil_close(zfsvfs->z_log);
1763                 zfsvfs->z_log = NULL;
1764         }
1765
1766         rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER);
1767
1768         /*
1769          * If we are not unmounting (ie: online recv) and someone already
1770          * unmounted this file system while we were doing the switcheroo,
1771          * or a reopen of z_os failed then just bail out now.
1772          */
1773         if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) {
1774                 rw_exit(&zfsvfs->z_teardown_inactive_lock);
1775                 rrw_exit(&zfsvfs->z_teardown_lock, FTAG);
1776                 return (EIO);
1777         }
1778
1779         /*
1780          * At this point there are no vops active, and any new vops will
1781          * fail with EIO since we have z_teardown_lock for writer (only
1782          * relavent for forced unmount).
1783          *
1784          * Release all holds on dbufs.
1785          */
1786         mutex_enter(&zfsvfs->z_znodes_lock);
1787         for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL;
1788             zp = list_next(&zfsvfs->z_all_znodes, zp))
1789                 if (zp->z_sa_hdl) {
1790                         ASSERT(ZTOV(zp)->v_count > 0);
1791                         zfs_znode_dmu_fini(zp);
1792                 }
1793         mutex_exit(&zfsvfs->z_znodes_lock);
1794
1795         /*
1796          * If we are unmounting, set the unmounted flag and let new vops
1797          * unblock.  zfs_inactive will have the unmounted behavior, and all
1798          * other vops will fail with EIO.
1799          */
1800         if (unmounting) {
1801                 zfsvfs->z_unmounted = B_TRUE;
1802                 rrw_exit(&zfsvfs->z_teardown_lock, FTAG);
1803                 rw_exit(&zfsvfs->z_teardown_inactive_lock);
1804         }
1805
1806         /*
1807          * z_os will be NULL if there was an error in attempting to reopen
1808          * zfsvfs, so just return as the properties had already been
1809          * unregistered and cached data had been evicted before.
1810          */
1811         if (zfsvfs->z_os == NULL)
1812                 return (0);
1813
1814         /*
1815          * Unregister properties.
1816          */
1817         zfs_unregister_callbacks(zfsvfs);
1818
1819         /*
1820          * Evict cached data
1821          */
1822         if (dmu_objset_is_dirty_anywhere(zfsvfs->z_os))
1823                 if (!(zfsvfs->z_vfs->vfs_flag & VFS_RDONLY))
1824                         txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0);
1825         (void) dmu_objset_evict_dbufs(zfsvfs->z_os);
1826
1827         return (0);
1828 }
1829
1830 /*ARGSUSED*/
1831 int
1832 zfs_umount(vfs_t *vfsp, int fflag, cred_t *cr)
1833 {
1834         zfsvfs_t *zfsvfs = vfsp->vfs_data;
1835         objset_t *os;
1836         int ret;
1837
1838         ret = secpolicy_fs_unmount(cr, vfsp);
1839         if (ret) {
1840                 if (dsl_deleg_access((char *)refstr_value(vfsp->vfs_resource),
1841                     ZFS_DELEG_PERM_MOUNT, cr))
1842                         return (ret);
1843         }
1844
1845         /*
1846          * We purge the parent filesystem's vfsp as the parent filesystem
1847          * and all of its snapshots have their vnode's v_vfsp set to the
1848          * parent's filesystem's vfsp.  Note, 'z_parent' is self
1849          * referential for non-snapshots.
1850          */
1851         (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0);
1852
1853         /*
1854          * Unmount any snapshots mounted under .zfs before unmounting the
1855          * dataset itself.
1856          */
1857         if (zfsvfs->z_ctldir != NULL &&
1858             (ret = zfsctl_umount_snapshots(vfsp, fflag, cr)) != 0) {
1859                 return (ret);
1860         }
1861
1862         if (!(fflag & MS_FORCE)) {
1863                 /*
1864                  * Check the number of active vnodes in the file system.
1865                  * Our count is maintained in the vfs structure, but the
1866                  * number is off by 1 to indicate a hold on the vfs
1867                  * structure itself.
1868                  *
1869                  * The '.zfs' directory maintains a reference of its
1870                  * own, and any active references underneath are
1871                  * reflected in the vnode count.
1872                  */
1873                 if (zfsvfs->z_ctldir == NULL) {
1874                         if (vfsp->vfs_count > 1)
1875                                 return (EBUSY);
1876                 } else {
1877                         if (vfsp->vfs_count > 2 ||
1878                             zfsvfs->z_ctldir->v_count > 1)
1879                                 return (EBUSY);
1880                 }
1881         }
1882
1883         vfsp->vfs_flag |= VFS_UNMOUNTED;
1884
1885         VERIFY(zfsvfs_teardown(zfsvfs, B_TRUE) == 0);
1886         os = zfsvfs->z_os;
1887
1888         /*
1889          * z_os will be NULL if there was an error in
1890          * attempting to reopen zfsvfs.
1891          */
1892         if (os != NULL) {
1893                 /*
1894                  * Unset the objset user_ptr.
1895                  */
1896                 mutex_enter(&os->os_user_ptr_lock);
1897                 dmu_objset_set_user(os, NULL);
1898                 mutex_exit(&os->os_user_ptr_lock);
1899
1900                 /*
1901                  * Finally release the objset
1902                  */
1903                 dmu_objset_disown(os, zfsvfs);
1904         }
1905
1906         /*
1907          * We can now safely destroy the '.zfs' directory node.
1908          */
1909         if (zfsvfs->z_ctldir != NULL)
1910                 zfsctl_destroy(zfsvfs);
1911
1912         return (0);
1913 }
1914 EXPORT_SYMBOL(zfs_umount);
1915
1916 int
1917 zfs_vget(vfs_t *vfsp, vnode_t **vpp, fid_t *fidp)
1918 {
1919         zfsvfs_t        *zfsvfs = vfsp->vfs_data;
1920         znode_t         *zp;
1921         uint64_t        object = 0;
1922         uint64_t        fid_gen = 0;
1923         uint64_t        gen_mask;
1924         uint64_t        zp_gen;
1925         int             i, err;
1926
1927         *vpp = NULL;
1928
1929         ZFS_ENTER(zfsvfs);
1930
1931         if (fidp->fid_len == LONG_FID_LEN) {
1932                 zfid_long_t     *zlfid = (zfid_long_t *)fidp;
1933                 uint64_t        objsetid = 0;
1934                 uint64_t        setgen = 0;
1935
1936                 for (i = 0; i < sizeof (zlfid->zf_setid); i++)
1937                         objsetid |= ((uint64_t)zlfid->zf_setid[i]) << (8 * i);
1938
1939                 for (i = 0; i < sizeof (zlfid->zf_setgen); i++)
1940                         setgen |= ((uint64_t)zlfid->zf_setgen[i]) << (8 * i);
1941
1942                 ZFS_EXIT(zfsvfs);
1943
1944                 err = zfsctl_lookup_objset(vfsp, objsetid, &zfsvfs);
1945                 if (err)
1946                         return (EINVAL);
1947                 ZFS_ENTER(zfsvfs);
1948         }
1949
1950         if (fidp->fid_len == SHORT_FID_LEN || fidp->fid_len == LONG_FID_LEN) {
1951                 zfid_short_t    *zfid = (zfid_short_t *)fidp;
1952
1953                 for (i = 0; i < sizeof (zfid->zf_object); i++)
1954                         object |= ((uint64_t)zfid->zf_object[i]) << (8 * i);
1955
1956                 for (i = 0; i < sizeof (zfid->zf_gen); i++)
1957                         fid_gen |= ((uint64_t)zfid->zf_gen[i]) << (8 * i);
1958         } else {
1959                 ZFS_EXIT(zfsvfs);
1960                 return (EINVAL);
1961         }
1962
1963         /* A zero fid_gen means we are in the .zfs control directories */
1964         if (fid_gen == 0 &&
1965             (object == ZFSCTL_INO_ROOT || object == ZFSCTL_INO_SNAPDIR)) {
1966                 *vpp = zfsvfs->z_ctldir;
1967                 ASSERT(*vpp != NULL);
1968                 if (object == ZFSCTL_INO_SNAPDIR) {
1969                         VERIFY(zfsctl_root_lookup(*vpp, "snapshot", vpp, NULL,
1970                             0, NULL, NULL, NULL, NULL, NULL) == 0);
1971                 } else {
1972                         VN_HOLD(*vpp);
1973                 }
1974                 ZFS_EXIT(zfsvfs);
1975                 return (0);
1976         }
1977
1978         gen_mask = -1ULL >> (64 - 8 * i);
1979
1980         dprintf("getting %llu [%u mask %llx]\n", object, fid_gen, gen_mask);
1981         if ((err = zfs_zget(zfsvfs, object, &zp))) {
1982                 ZFS_EXIT(zfsvfs);
1983                 return (err);
1984         }
1985         (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), &zp_gen,
1986             sizeof (uint64_t));
1987         zp_gen = zp_gen & gen_mask;
1988         if (zp_gen == 0)
1989                 zp_gen = 1;
1990         if (zp->z_unlinked || zp_gen != fid_gen) {
1991                 dprintf("znode gen (%u) != fid gen (%u)\n", zp_gen, fid_gen);
1992                 VN_RELE(ZTOV(zp));
1993                 ZFS_EXIT(zfsvfs);
1994                 return (EINVAL);
1995         }
1996
1997         *vpp = ZTOV(zp);
1998         ZFS_EXIT(zfsvfs);
1999         return (0);
2000 }
2001 EXPORT_SYMBOL(zfs_vget);
2002
2003 /*
2004  * Block out VOPs and close zfsvfs_t::z_os
2005  *
2006  * Note, if successful, then we return with the 'z_teardown_lock' and
2007  * 'z_teardown_inactive_lock' write held.
2008  */
2009 int
2010 zfs_suspend_fs(zfsvfs_t *zfsvfs)
2011 {
2012         int error;
2013
2014         if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0)
2015                 return (error);
2016         dmu_objset_disown(zfsvfs->z_os, zfsvfs);
2017
2018         return (0);
2019 }
2020 EXPORT_SYMBOL(zfs_suspend_fs);
2021
2022 /*
2023  * Reopen zfsvfs_t::z_os and release VOPs.
2024  */
2025 int
2026 zfs_resume_fs(zfsvfs_t *zfsvfs, const char *osname)
2027 {
2028         int err, err2;
2029
2030         ASSERT(RRW_WRITE_HELD(&zfsvfs->z_teardown_lock));
2031         ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock));
2032
2033         err = dmu_objset_own(osname, DMU_OST_ZFS, B_FALSE, zfsvfs,
2034             &zfsvfs->z_os);
2035         if (err) {
2036                 zfsvfs->z_os = NULL;
2037         } else {
2038                 znode_t *zp;
2039                 uint64_t sa_obj = 0;
2040
2041                 err2 = zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ,
2042                     ZFS_SA_ATTRS, 8, 1, &sa_obj);
2043
2044                 if ((err || err2) && zfsvfs->z_version >= ZPL_VERSION_SA)
2045                         goto bail;
2046
2047
2048                 if ((err = sa_setup(zfsvfs->z_os, sa_obj,
2049                     zfs_attr_table,  ZPL_END, &zfsvfs->z_attr_table)) != 0)
2050                         goto bail;
2051
2052                 VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0);
2053
2054                 /*
2055                  * Attempt to re-establish all the active znodes with
2056                  * their dbufs.  If a zfs_rezget() fails, then we'll let
2057                  * any potential callers discover that via ZFS_ENTER_VERIFY_VP
2058                  * when they try to use their znode.
2059                  */
2060                 mutex_enter(&zfsvfs->z_znodes_lock);
2061                 for (zp = list_head(&zfsvfs->z_all_znodes); zp;
2062                     zp = list_next(&zfsvfs->z_all_znodes, zp)) {
2063                         (void) zfs_rezget(zp);
2064                 }
2065                 mutex_exit(&zfsvfs->z_znodes_lock);
2066
2067         }
2068
2069 bail:
2070         /* release the VOPs */
2071         rw_exit(&zfsvfs->z_teardown_inactive_lock);
2072         rrw_exit(&zfsvfs->z_teardown_lock, FTAG);
2073
2074         if (err) {
2075                 /*
2076                  * Since we couldn't reopen zfsvfs::z_os, force
2077                  * unmount this file system.
2078                  */
2079                 if (vn_vfswlock(zfsvfs->z_vfs->vfs_vnodecovered) == 0)
2080                         (void) dounmount(zfsvfs->z_vfs, MS_FORCE, CRED());
2081         }
2082         return (err);
2083 }
2084 EXPORT_SYMBOL(zfs_resume_fs);
2085
2086 static void
2087 zfs_freevfs(vfs_t *vfsp)
2088 {
2089         zfsvfs_t *zfsvfs = vfsp->vfs_data;
2090
2091         /*
2092          * If this is a snapshot, we have an extra VFS_HOLD on our parent
2093          * from zfs_mount().  Release it here.  If we came through
2094          * zfs_mountroot() instead, we didn't grab an extra hold, so
2095          * skip the VFS_RELE for rootvfs.
2096          */
2097         if (zfsvfs->z_issnap && (vfsp != rootvfs))
2098                 VFS_RELE(zfsvfs->z_parent->z_vfs);
2099
2100         zfsvfs_free(zfsvfs);
2101
2102         atomic_add_32(&zfs_active_fs_count, -1);
2103 }
2104
2105 /*
2106  * VFS_INIT() initialization.  Note that there is no VFS_FINI(),
2107  * so we can't safely do any non-idempotent initialization here.
2108  * Leave that to zfs_init() and zfs_fini(), which are called
2109  * from the module's _init() and _fini() entry points.
2110  */
2111 /*ARGSUSED*/
2112 static int
2113 zfs_vfsinit(int fstype, char *name)
2114 {
2115         int error;
2116
2117         zfsfstype = fstype;
2118
2119         /*
2120          * Setup vfsops and vnodeops tables.
2121          */
2122         error = vfs_setfsops(fstype, zfs_vfsops_template, &zfs_vfsops);
2123         if (error != 0) {
2124                 cmn_err(CE_WARN, "zfs: bad vfs ops template");
2125         }
2126
2127         error = zfs_create_op_tables();
2128         if (error) {
2129                 zfs_remove_op_tables();
2130                 cmn_err(CE_WARN, "zfs: bad vnode ops template");
2131                 (void) vfs_freevfsops_by_type(zfsfstype);
2132                 return (error);
2133         }
2134
2135         mutex_init(&zfs_dev_mtx, NULL, MUTEX_DEFAULT, NULL);
2136
2137         /*
2138          * Unique major number for all zfs mounts.
2139          * If we run out of 32-bit minors, we'll getudev() another major.
2140          */
2141         zfs_major = ddi_name_to_major(ZFS_DRIVER);
2142         zfs_minor = ZFS_MIN_MINOR;
2143
2144         return (0);
2145 }
2146 #endif /* HAVE_ZPL */
2147
2148 void
2149 zfs_init(void)
2150 {
2151 #ifdef HAVE_ZPL
2152         /*
2153          * Initialize .zfs directory structures
2154          */
2155         zfsctl_init();
2156
2157         /*
2158          * Initialize znode cache, vnode ops, etc...
2159          */
2160         zfs_znode_init();
2161 #endif /* HAVE_ZPL */
2162
2163         dmu_objset_register_type(DMU_OST_ZFS, zfs_space_delta_cb);
2164 }
2165
2166 void
2167 zfs_fini(void)
2168 {
2169 #ifdef HAVE_ZPL
2170         zfsctl_fini();
2171         zfs_znode_fini();
2172 #endif /* HAVE_ZPL */
2173 }
2174
2175 #ifdef HAVE_ZPL
2176 int
2177 zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers)
2178 {
2179         int error;
2180         objset_t *os = zfsvfs->z_os;
2181         dmu_tx_t *tx;
2182
2183         if (newvers < ZPL_VERSION_INITIAL || newvers > ZPL_VERSION)
2184                 return (EINVAL);
2185
2186         if (newvers < zfsvfs->z_version)
2187                 return (EINVAL);
2188
2189         if (zfs_spa_version_map(newvers) >
2190             spa_version(dmu_objset_spa(zfsvfs->z_os)))
2191                 return (ENOTSUP);
2192
2193         tx = dmu_tx_create(os);
2194         dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_FALSE, ZPL_VERSION_STR);
2195         if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) {
2196                 dmu_tx_hold_zap(tx, MASTER_NODE_OBJ, B_TRUE,
2197                     ZFS_SA_ATTRS);
2198                 dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL);
2199         }
2200         error = dmu_tx_assign(tx, TXG_WAIT);
2201         if (error) {
2202                 dmu_tx_abort(tx);
2203                 return (error);
2204         }
2205
2206         error = zap_update(os, MASTER_NODE_OBJ, ZPL_VERSION_STR,
2207             8, 1, &newvers, tx);
2208
2209         if (error) {
2210                 dmu_tx_commit(tx);
2211                 return (error);
2212         }
2213
2214         if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) {
2215                 uint64_t sa_obj;
2216
2217                 ASSERT3U(spa_version(dmu_objset_spa(zfsvfs->z_os)), >=,
2218                     SPA_VERSION_SA);
2219                 sa_obj = zap_create(os, DMU_OT_SA_MASTER_NODE,
2220                     DMU_OT_NONE, 0, tx);
2221
2222                 error = zap_add(os, MASTER_NODE_OBJ,
2223                     ZFS_SA_ATTRS, 8, 1, &sa_obj, tx);
2224                 ASSERT3U(error, ==, 0);
2225
2226                 VERIFY(0 == sa_set_sa_object(os, sa_obj));
2227                 sa_register_update_callback(os, zfs_sa_upgrade);
2228         }
2229
2230         spa_history_log_internal(LOG_DS_UPGRADE,
2231             dmu_objset_spa(os), tx, "oldver=%llu newver=%llu dataset = %llu",
2232             zfsvfs->z_version, newvers, dmu_objset_id(os));
2233
2234         dmu_tx_commit(tx);
2235
2236         zfsvfs->z_version = newvers;
2237
2238         if (zfsvfs->z_version >= ZPL_VERSION_FUID)
2239                 zfs_set_fuid_feature(zfsvfs);
2240
2241         return (0);
2242 }
2243 EXPORT_SYMBOL(zfs_set_version);
2244 #endif /* HAVE_ZPL */
2245
2246 /*
2247  * Read a property stored within the master node.
2248  */
2249 int
2250 zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value)
2251 {
2252         const char *pname;
2253         int error = ENOENT;
2254
2255         /*
2256          * Look up the file system's value for the property.  For the
2257          * version property, we look up a slightly different string.
2258          */
2259         if (prop == ZFS_PROP_VERSION)
2260                 pname = ZPL_VERSION_STR;
2261         else
2262                 pname = zfs_prop_to_name(prop);
2263
2264         if (os != NULL)
2265                 error = zap_lookup(os, MASTER_NODE_OBJ, pname, 8, 1, value);
2266
2267         if (error == ENOENT) {
2268                 /* No value set, use the default value */
2269                 switch (prop) {
2270                 case ZFS_PROP_VERSION:
2271                         *value = ZPL_VERSION;
2272                         break;
2273                 case ZFS_PROP_NORMALIZE:
2274                 case ZFS_PROP_UTF8ONLY:
2275                         *value = 0;
2276                         break;
2277                 case ZFS_PROP_CASE:
2278                         *value = ZFS_CASE_SENSITIVE;
2279                         break;
2280                 default:
2281                         return (error);
2282                 }
2283                 error = 0;
2284         }
2285         return (error);
2286 }
2287
2288 #ifdef HAVE_ZPL
2289 static vfsdef_t vfw = {
2290         VFSDEF_VERSION,
2291         MNTTYPE_ZFS,
2292         zfs_vfsinit,
2293         VSW_HASPROTO|VSW_CANRWRO|VSW_CANREMOUNT|VSW_VOLATILEDEV|VSW_STATS|
2294             VSW_XID|VSW_ZMOUNT,
2295         &zfs_mntopts
2296 };
2297
2298 struct modlfs zfs_modlfs = {
2299         &mod_fsops, "ZFS filesystem version " SPA_VERSION_STRING, &vfw
2300 };
2301 #endif /* HAVE_ZPL */