Date: Thu, 10 Jul 2014 07:16:55 +0000 (UTC) From: Mark Murray <markm@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r268482 - in projects/random_number_generator: cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/cmd/zhack cddl/contrib/opensolaris/cmd/zpool cddl/contrib/opensolaris/lib/libzfs... Message-ID: <201407100716.s6A7Gt6j011862@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: markm Date: Thu Jul 10 07:16:55 2014 New Revision: 268482 URL: http://svnweb.freebsd.org/changeset/base/268482 Log: MFC - tracking commit. Merging r268468 through r268481. Modified: projects/random_number_generator/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c projects/random_number_generator/cddl/contrib/opensolaris/cmd/zhack/zhack.c projects/random_number_generator/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c projects/random_number_generator/share/mk/src.opts.mk projects/random_number_generator/sys/amd64/amd64/machdep.c projects/random_number_generator/sys/boot/i386/boot2/boot2.c projects/random_number_generator/sys/boot/pc98/boot2/Makefile projects/random_number_generator/sys/boot/pc98/boot2/boot2.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_synctask.h projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa.h projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c projects/random_number_generator/sys/dev/fb/fbd.c projects/random_number_generator/sys/dev/virtio/network/if_vtnet.c projects/random_number_generator/sys/dev/virtio/network/if_vtnetvar.h projects/random_number_generator/sys/dev/virtio/virtqueue.c projects/random_number_generator/sys/dev/virtio/virtqueue.h projects/random_number_generator/sys/netinet/in.h projects/random_number_generator/sys/netinet/in_pcb.c projects/random_number_generator/sys/netinet/in_pcb.h projects/random_number_generator/sys/netinet/in_pcbgroup.c projects/random_number_generator/sys/netinet/ip_output.c Directory Properties: projects/random_number_generator/ (props changed) projects/random_number_generator/cddl/ (props changed) projects/random_number_generator/cddl/contrib/opensolaris/ (props changed) projects/random_number_generator/cddl/contrib/opensolaris/cmd/zfs/ (props changed) projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/ (props changed) projects/random_number_generator/share/ (props changed) projects/random_number_generator/sys/ (props changed) projects/random_number_generator/sys/boot/ (props changed) projects/random_number_generator/sys/cddl/contrib/opensolaris/ (props changed) Modified: projects/random_number_generator/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- projects/random_number_generator/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Thu Jul 10 07:16:55 2014 (r268482) @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. * Copyright 2012 Milan Jurik. All rights reserved. * Copyright (c) 2012, Joyent, Inc. All rights reserved. * Copyright (c) 2011-2012 Pawel Jakub Dawidek <pawel@dawidek.net>. @@ -6856,6 +6856,9 @@ zfs_do_bookmark(int argc, char **argv) case ENOTSUP: err_msg = "bookmark feature not enabled"; break; + case ENOSPC: + err_msg = "out of space"; + break; default: err_msg = "unknown error"; break; @@ -6864,7 +6867,7 @@ zfs_do_bookmark(int argc, char **argv) dgettext(TEXT_DOMAIN, err_msg)); } - return (ret); + return (ret != 0); usage: usage(B_FALSE); Modified: projects/random_number_generator/cddl/contrib/opensolaris/cmd/zhack/zhack.c ============================================================================== --- projects/random_number_generator/cddl/contrib/opensolaris/cmd/zhack/zhack.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/cddl/contrib/opensolaris/cmd/zhack/zhack.c Thu Jul 10 07:16:55 2014 (r268482) @@ -20,7 +20,7 @@ */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. */ @@ -362,7 +362,7 @@ zhack_do_feature_enable(int argc, char * feature.fi_guid); VERIFY0(dsl_sync_task(spa_name(spa), NULL, - zhack_feature_enable_sync, &feature, 5)); + zhack_feature_enable_sync, &feature, 5, ZFS_SPACE_CHECK_NORMAL)); spa_close(spa, FTAG); @@ -473,7 +473,8 @@ zhack_do_feature_ref(int argc, char **ar } VERIFY0(dsl_sync_task(spa_name(spa), NULL, - decr ? feature_decr_sync : feature_incr_sync, &feature, 5)); + decr ? feature_decr_sync : feature_incr_sync, &feature, + 5, ZFS_SPACE_CHECK_NORMAL)); spa_close(spa, FTAG); } Modified: projects/random_number_generator/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c ============================================================================== --- projects/random_number_generator/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Thu Jul 10 07:16:55 2014 (r268482) @@ -3076,17 +3076,10 @@ zpool_do_list(int argc, char **argv) if (zprop_get_list(g_zfs, props, &cb.cb_proplist, ZFS_TYPE_POOL) != 0) usage(B_FALSE); - if ((list = pool_list_get(argc, argv, &cb.cb_proplist, &ret)) == NULL) - return (1); - - if (argc == 0 && !cb.cb_scripted && pool_list_count(list) == 0) { - (void) printf(gettext("no pools available\n")); - zprop_free_list(cb.cb_proplist); - return (0); - } - for (;;) { - pool_list_update(list); + if ((list = pool_list_get(argc, argv, &cb.cb_proplist, + &ret)) == NULL) + return (1); if (pool_list_count(list) == 0) break; @@ -3109,9 +3102,16 @@ zpool_do_list(int argc, char **argv) if (count != 0 && --count == 0) break; + pool_list_free(list); (void) sleep(interval); } + if (argc == 0 && !cb.cb_scripted && pool_list_count(list) == 0) { + (void) printf(gettext("no pools available\n")); + ret = 0; + } + + pool_list_free(list); zprop_free_list(cb.cb_proplist); return (ret); } Modified: projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c ============================================================================== --- projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Thu Jul 10 07:16:55 2014 (r268482) @@ -22,7 +22,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013, Joyent, Inc. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. * Copyright (c) 2012 DEY Storage Systems, Inc. All rights reserved. * Copyright (c) 2011-2012 Pawel Jakub Dawidek <pawel@dawidek.net>. * All rights reserved. @@ -3873,7 +3873,6 @@ zfs_rename(zfs_handle_t *zhp, const char strcmp(property, "none") == 0)) { flags.nounmount = B_TRUE; } - if (flags.recurse) { parentname = zfs_strdup(zhp->zfs_hdl, zhp->zfs_name); @@ -3888,8 +3887,7 @@ zfs_rename(zfs_handle_t *zhp, const char ret = -1; goto error; } - - } else { + } else if (zhp->zfs_type != ZFS_TYPE_SNAPSHOT) { if ((cl = changelist_gather(zhp, ZFS_PROP_NAME, flags.nounmount ? CL_GATHER_DONT_UNMOUNT : 0, flags.forceunmount ? MS_FORCE : 0)) == NULL) { @@ -3941,23 +3939,23 @@ zfs_rename(zfs_handle_t *zhp, const char * On failure, we still want to remount any filesystems that * were previously mounted, so we don't alter the system state. */ - if (!flags.recurse) + if (cl != NULL) (void) changelist_postfix(cl); } else { - if (!flags.recurse) { + if (cl != NULL) { changelist_rename(cl, zfs_get_name(zhp), target); ret = changelist_postfix(cl); } } error: - if (parentname) { + if (parentname != NULL) { free(parentname); } - if (zhrp) { + if (zhrp != NULL) { zfs_close(zhrp); } - if (cl) { + if (cl != NULL) { changelist_free(cl); } return (ret); Modified: projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c ============================================================================== --- projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c Thu Jul 10 07:16:55 2014 (r268482) @@ -21,6 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014 by Delphix. All rights reserved. */ /* @@ -736,16 +737,6 @@ zfs_share_proto(zfs_handle_t *zhp, zfs_s if (!zfs_is_mountable(zhp, mountpoint, sizeof (mountpoint), NULL)) return (0); -#ifdef sun - if ((ret = zfs_init_libshare(hdl, SA_INIT_SHARE_API)) != SA_OK) { - (void) zfs_error_fmt(hdl, EZFS_SHARENFSFAILED, - dgettext(TEXT_DOMAIN, "cannot share '%s': %s"), - zfs_get_name(zhp), _sa_errorstr != NULL ? - _sa_errorstr(ret) : ""); - return (-1); - } -#endif - for (curr_proto = proto; *curr_proto != PROTO_END; curr_proto++) { /* * Return success if there are no share options. @@ -756,6 +747,17 @@ zfs_share_proto(zfs_handle_t *zhp, zfs_s strcmp(shareopts, "off") == 0) continue; +#ifdef illumos + ret = zfs_init_libshare(hdl, SA_INIT_SHARE_API); + if (ret != SA_OK) { + (void) zfs_error_fmt(hdl, EZFS_SHARENFSFAILED, + dgettext(TEXT_DOMAIN, "cannot share '%s': %s"), + zfs_get_name(zhp), _sa_errorstr != NULL ? + _sa_errorstr(ret) : ""); + return (-1); + } +#endif + /* * If the 'zoned' property is set, then zfs_is_mountable() * will have already bailed out if we are in the global zone. Modified: projects/random_number_generator/share/mk/src.opts.mk ============================================================================== --- projects/random_number_generator/share/mk/src.opts.mk Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/share/mk/src.opts.mk Thu Jul 10 07:16:55 2014 (r268482) @@ -205,14 +205,7 @@ __DEFAULT_NO_OPTIONS+=CLANG CLANG_FULL C .if ${__T} == "amd64" || ${__T} == "arm" || ${__T} == "armv6" || \ ${__T} == "armv6hf" || ${__T} == "i386" __DEFAULT_YES_OPTIONS+=CLANG_IS_CC -__DEFAULT_NO_OPTIONS+=GNUCXX -# The pc98 bootloader requires gcc to build and so we must leave gcc enabled -# for pc98 for now. -.if ${__TT} == "pc98" -__DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP -.else -__DEFAULT_NO_OPTIONS+=GCC GCC_BOOTSTRAP -.endif +__DEFAULT_NO_OPTIONS+=GNUCXX GCC GCC_BOOTSTRAP .else # If clang is not cc, then build gcc by default __DEFAULT_NO_OPTIONS+=CLANG_IS_CC CLANG CLANG_BOOTSTRAP Modified: projects/random_number_generator/sys/amd64/amd64/machdep.c ============================================================================== --- projects/random_number_generator/sys/amd64/amd64/machdep.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/amd64/amd64/machdep.c Thu Jul 10 07:16:55 2014 (r268482) @@ -2144,7 +2144,9 @@ makectx(struct trapframe *tf, struct pcb int ptrace_set_pc(struct thread *td, unsigned long addr) { + td->td_frame->tf_rip = addr; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); return (0); } @@ -2244,8 +2246,8 @@ set_regs(struct thread *td, struct reg * tp->tf_fs = regs->r_fs; tp->tf_gs = regs->r_gs; tp->tf_flags = TF_HASSEGS; - set_pcb_flags(td->td_pcb, PCB_FULL_IRET); } + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); return (0); } Modified: projects/random_number_generator/sys/boot/i386/boot2/boot2.c ============================================================================== --- projects/random_number_generator/sys/boot/i386/boot2/boot2.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/boot/i386/boot2/boot2.c Thu Jul 10 07:16:55 2014 (r268482) @@ -34,9 +34,22 @@ __FBSDID("$FreeBSD$"); #include "boot2.h" #include "lib.h" +/* Define to 0 to omit serial support */ +#ifndef SERIAL +#define SERIAL 1 +#endif + #define IO_KEYBOARD 1 #define IO_SERIAL 2 +#if SERIAL +#define DO_KBD (ioctrl & IO_KEYBOARD) +#define DO_SIO (ioctrl & IO_SERIAL) +#else +#define DO_KBD (1) +#define DO_SIO (0) +#endif + #define SECOND 18 /* Circa that many ticks in a second. */ #define RBX_ASKNAME 0x0 /* -a */ @@ -131,9 +144,11 @@ static struct dsk { static char cmd[512], cmddup[512], knamebuf[1024]; static const char *kname; static uint32_t opts; -static int comspeed = SIOSPD; static struct bootinfo bootinfo; +#if SERIAL +static int comspeed = SIOSPD; static uint8_t ioctrl = IO_KEYBOARD; +#endif void exit(int); static void load(void); @@ -276,7 +291,7 @@ main(void) "boot: ", dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit, 'a' + dsk.part, kname); - if (ioctrl & IO_SERIAL) + if (DO_SIO) sio_flush(); if (!autoboot || keyhit(3*SECOND)) getstr(); @@ -398,6 +413,7 @@ parse() } printf("Keyboard: %s\n", cp); continue; +#if SERIAL } else if (c == 'S') { j = 0; while ((unsigned int)(i = *arg++ - '0') <= 9) @@ -407,18 +423,21 @@ parse() break; } /* Fall through to error below ('S' not in optstr[]). */ +#endif } for (i = 0; c != optstr[i]; i++) if (i == NOPT - 1) return -1; opts ^= OPT_SET(flags[i]); } +#if SERIAL ioctrl = OPT_CHECK(RBX_DUAL) ? (IO_SERIAL|IO_KEYBOARD) : OPT_CHECK(RBX_SERIAL) ? IO_SERIAL : IO_KEYBOARD; - if (ioctrl & IO_SERIAL) { + if (DO_SIO) { if (sio_init(115200 / comspeed) != 0) ioctrl &= ~IO_SERIAL; } +#endif } else { for (q = arg--; *q && *q != '('; q++); if (*q) { @@ -626,9 +645,9 @@ keyhit(unsigned ticks) static int xputc(int c) { - if (ioctrl & IO_KEYBOARD) + if (DO_KBD) putc(c); - if (ioctrl & IO_SERIAL) + if (DO_SIO) sio_putc(c); return c; } @@ -648,9 +667,9 @@ xgetc(int fn) if (OPT_CHECK(RBX_NOINTR)) return 0; for (;;) { - if (ioctrl & IO_KEYBOARD && getc(1)) + if (DO_KBD && getc(1)) return fn ? 1 : getc(0); - if (ioctrl & IO_SERIAL && sio_ischar()) + if (DO_SIO && sio_ischar()) return fn ? 1 : sio_getc(); if (fn) return 0; Modified: projects/random_number_generator/sys/boot/pc98/boot2/Makefile ============================================================================== --- projects/random_number_generator/sys/boot/pc98/boot2/Makefile Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/boot/pc98/boot2/Makefile Thu Jul 10 07:16:55 2014 (r268482) @@ -3,8 +3,8 @@ .include <bsd.own.mk> # XXX: clang can compile the boot code just fine, but boot2 gets too big -CC:= gcc -COMPILER_TYPE:= gcc +#CC:= gcc +#COMPILER_TYPE:= gcc NO_PIE= yes @@ -26,10 +26,7 @@ BOOT2_UFS?= UFS1_AND_UFS2 #BOOT2_UFS?= UFS1_ONLY CFLAGS= -Os \ - -fno-guess-branch-probability \ -fomit-frame-pointer \ - -fno-unit-at-a-time \ - -mno-align-long-strings \ -mrtd \ -mregparm=3 \ -D${BOOT2_UFS} \ @@ -46,7 +43,10 @@ CFLAGS= -Os \ -Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \ -Winline -CFLAGS.gcc+= --param max-inline-insns-single=100 +CFLAGS.gcc+= -fno-guess-branch-probability \ + -fno-unit-at-a-time \ + -mno-align-long-strings \ + --param max-inline-insns-single=100 # Set machine type to PC98_SYSTEM_PARAMETER #CFLAGS+= -DSET_MACHINE_TYPE @@ -54,6 +54,8 @@ CFLAGS.gcc+= --param max-inline-insns-si # Initialize the bi_bios_geom using the BIOS geometry #CFLAGS+= -DGET_BIOSGEOM +CFLAGS.clang+=${CLANG_OPT_SMALL} + LD_FLAGS=-static -N --gc-sections # Pick up ../Makefile.inc early. @@ -112,3 +114,6 @@ boot2.h: boot1.out REL1=`printf "%d" ${REL1}` > ${.TARGET} .include <bsd.prog.mk> + +# XXX: clang integrated-as doesn't grok .codeNN directives yet +CFLAGS+= ${CLANG_NO_IAS} Modified: projects/random_number_generator/sys/boot/pc98/boot2/boot2.c ============================================================================== --- projects/random_number_generator/sys/boot/pc98/boot2/boot2.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/boot/pc98/boot2/boot2.c Thu Jul 10 07:16:55 2014 (r268482) @@ -36,9 +36,22 @@ __FBSDID("$FreeBSD$"); #include "boot2.h" #include "lib.h" +/* Define to 0 to omit serial support */ +#ifndef SERIAL +#define SERIAL 0 +#endif + #define IO_KEYBOARD 1 #define IO_SERIAL 2 +#if SERIAL +#define DO_KBD (ioctrl & IO_KEYBOARD) +#define DO_SIO (ioctrl & IO_SERIAL) +#else +#define DO_KBD (1) +#define DO_SIO (0) +#endif + #define SECOND 1 /* Circa that many ticks in a second. */ #define RBX_ASKNAME 0x0 /* -a */ @@ -133,9 +146,11 @@ static struct dsk { static char cmd[512], cmddup[512], knamebuf[1024]; static const char *kname; static uint32_t opts; -static int comspeed = SIOSPD; static struct bootinfo bootinfo; +#if SERIAL +static int comspeed = SIOSPD; static uint8_t ioctrl = IO_KEYBOARD; +#endif void exit(int); static void load(void); @@ -415,7 +430,7 @@ main(void) "boot: ", dsk.unit, dev_nm[dsk.type], dsk.unit, 'a' + dsk.part, kname); - if (ioctrl & IO_SERIAL) + if (DO_SIO) sio_flush(); if (!autoboot || keyhit(3*SECOND)) getstr(); @@ -537,6 +552,7 @@ parse() } printf("Keyboard: %s\n", cp); continue; +#if SERIAL } else if (c == 'S') { j = 0; while ((unsigned int)(i = *arg++ - '0') <= 9) @@ -546,18 +562,21 @@ parse() break; } /* Fall through to error below ('S' not in optstr[]). */ +#endif } for (i = 0; c != optstr[i]; i++) if (i == NOPT - 1) return -1; opts ^= OPT_SET(flags[i]); } +#if SERIAL ioctrl = OPT_CHECK(RBX_DUAL) ? (IO_SERIAL|IO_KEYBOARD) : OPT_CHECK(RBX_SERIAL) ? IO_SERIAL : IO_KEYBOARD; - if (ioctrl & IO_SERIAL) { + if (DO_SIO) { if (sio_init(115200 / comspeed) != 0) ioctrl &= ~IO_SERIAL; } +#endif } else { for (q = arg--; *q && *q != '('; q++); if (*q) { @@ -780,9 +799,9 @@ keyhit(unsigned sec) static int xputc(int c) { - if (ioctrl & IO_KEYBOARD) + if (DO_KBD) putc(c); - if (ioctrl & IO_SERIAL) + if (DO_SIO) sio_putc(c); return c; } @@ -805,9 +824,9 @@ xgetc(int fn) if (OPT_CHECK(RBX_NOINTR)) return 0; for (;;) { - if (ioctrl & IO_KEYBOARD && getc(1)) + if (DO_KBD && getc(1)) return fn ? 1 : getc(0); - if (ioctrl & IO_SERIAL && sio_ischar()) + if (DO_SIO && sio_ischar()) return fn ? 1 : sio_getc(); if (fn) return 0; Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c Thu Jul 10 07:16:55 2014 (r268482) @@ -832,7 +832,8 @@ dmu_objset_create(const char *name, dmu_ doca.doca_type = type; return (dsl_sync_task(name, - dmu_objset_create_check, dmu_objset_create_sync, &doca, 5)); + dmu_objset_create_check, dmu_objset_create_sync, &doca, + 5, ZFS_SPACE_CHECK_NORMAL)); } typedef struct dmu_objset_clone_arg { @@ -931,7 +932,8 @@ dmu_objset_clone(const char *clone, cons doca.doca_cred = CRED(); return (dsl_sync_task(clone, - dmu_objset_clone_check, dmu_objset_clone_sync, &doca, 5)); + dmu_objset_clone_check, dmu_objset_clone_sync, &doca, + 5, ZFS_SPACE_CHECK_NORMAL)); } int Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c Thu Jul 10 07:16:55 2014 (r268482) @@ -1196,7 +1196,7 @@ dmu_recv_begin(char *tofs, char *tosnap, drba.drba_cred = CRED(); return (dsl_sync_task(tofs, dmu_recv_begin_check, dmu_recv_begin_sync, - &drba, 5)); + &drba, 5, ZFS_SPACE_CHECK_NORMAL)); } struct restorearg { @@ -2081,7 +2081,7 @@ dmu_recv_existing_end(dmu_recv_cookie_t error = dsl_sync_task(drc->drc_tofs, dmu_recv_end_check, dmu_recv_end_sync, drc, - dmu_recv_end_modified_blocks); + dmu_recv_end_modified_blocks, ZFS_SPACE_CHECK_NORMAL); if (error != 0) dmu_recv_cleanup_ds(drc); @@ -2095,7 +2095,7 @@ dmu_recv_new_end(dmu_recv_cookie_t *drc) error = dsl_sync_task(drc->drc_tofs, dmu_recv_end_check, dmu_recv_end_sync, drc, - dmu_recv_end_modified_blocks); + dmu_recv_end_modified_blocks, ZFS_SPACE_CHECK_NORMAL); if (error != 0) { dmu_recv_cleanup_ds(drc); Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_bookmark.c Thu Jul 10 07:16:55 2014 (r268482) @@ -13,7 +13,7 @@ * CDDL HEADER END */ /* - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2013, 2014 by Delphix. All rights reserved. */ #include <sys/zfs_context.h> @@ -246,7 +246,8 @@ dsl_bookmark_create(nvlist_t *bmarks, nv dbca.dbca_errors = errors; return (dsl_sync_task(nvpair_name(pair), dsl_bookmark_create_check, - dsl_bookmark_create_sync, &dbca, fnvlist_num_pairs(bmarks))); + dsl_bookmark_create_sync, &dbca, + fnvlist_num_pairs(bmarks), ZFS_SPACE_CHECK_NORMAL)); } int @@ -448,7 +449,8 @@ dsl_bookmark_destroy(nvlist_t *bmarks, n dbda.dbda_success = fnvlist_alloc(); rv = dsl_sync_task(nvpair_name(pair), dsl_bookmark_destroy_check, - dsl_bookmark_destroy_sync, &dbda, fnvlist_num_pairs(bmarks)); + dsl_bookmark_destroy_sync, &dbda, fnvlist_num_pairs(bmarks), + ZFS_SPACE_CHECK_RESERVED); fnvlist_free(dbda.dbda_success); return (rv); } Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c Thu Jul 10 07:16:55 2014 (r268482) @@ -1401,7 +1401,7 @@ dsl_dataset_snapshot(nvlist_t *snaps, nv if (error == 0) { error = dsl_sync_task(firstname, dsl_dataset_snapshot_check, dsl_dataset_snapshot_sync, &ddsa, - fnvlist_num_pairs(snaps) * 3); + fnvlist_num_pairs(snaps) * 3, ZFS_SPACE_CHECK_NORMAL); } if (suspended != NULL) { @@ -1514,7 +1514,7 @@ dsl_dataset_snapshot_tmp(const char *fsn } error = dsl_sync_task(fsname, dsl_dataset_snapshot_tmp_check, - dsl_dataset_snapshot_tmp_sync, &ddsta, 3); + dsl_dataset_snapshot_tmp_sync, &ddsta, 3, ZFS_SPACE_CHECK_RESERVED); if (needsuspend) zil_resume(cookie); @@ -1885,7 +1885,8 @@ dsl_dataset_rename_snapshot(const char * ddrsa.ddrsa_recursive = recursive; return (dsl_sync_task(fsname, dsl_dataset_rename_snapshot_check, - dsl_dataset_rename_snapshot_sync, &ddrsa, 1)); + dsl_dataset_rename_snapshot_sync, &ddrsa, + 1, ZFS_SPACE_CHECK_RESERVED)); } /* @@ -2060,7 +2061,8 @@ dsl_dataset_rollback(const char *fsname, ddra.ddra_result = result; return (dsl_sync_task(fsname, dsl_dataset_rollback_check, - dsl_dataset_rollback_sync, &ddra, 1)); + dsl_dataset_rollback_sync, &ddra, + 1, ZFS_SPACE_CHECK_RESERVED)); } struct promotenode { @@ -2581,7 +2583,8 @@ dsl_dataset_promote(const char *name, ch ddpa.cr = CRED(); return (dsl_sync_task(name, dsl_dataset_promote_check, - dsl_dataset_promote_sync, &ddpa, 2 + numsnaps)); + dsl_dataset_promote_sync, &ddpa, + 2 + numsnaps, ZFS_SPACE_CHECK_RESERVED)); } int @@ -2926,7 +2929,7 @@ dsl_dataset_set_refquota(const char *dsn ddsqra.ddsqra_value = refquota; return (dsl_sync_task(dsname, dsl_dataset_set_refquota_check, - dsl_dataset_set_refquota_sync, &ddsqra, 0)); + dsl_dataset_set_refquota_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); } static int @@ -3041,7 +3044,8 @@ dsl_dataset_set_refreservation(const cha ddsqra.ddsqra_value = refreservation; return (dsl_sync_task(dsname, dsl_dataset_set_refreservation_check, - dsl_dataset_set_refreservation_sync, &ddsqra, 0)); + dsl_dataset_set_refreservation_sync, &ddsqra, + 0, ZFS_SPACE_CHECK_NONE)); } /* Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c Thu Jul 10 07:16:55 2014 (r268482) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. */ /* @@ -282,7 +282,7 @@ dsl_deleg_set(const char *ddname, nvlist return (dsl_sync_task(ddname, dsl_deleg_check, unset ? dsl_deleg_unset_sync : dsl_deleg_set_sync, - &dda, fnvlist_num_pairs(nvp))); + &dda, fnvlist_num_pairs(nvp), ZFS_SPACE_CHECK_RESERVED)); } /* Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c Thu Jul 10 07:16:55 2014 (r268482) @@ -506,7 +506,7 @@ dsl_destroy_snapshots_nvl(nvlist_t *snap error = dsl_sync_task(nvpair_name(pair), dsl_destroy_snapshot_check, dsl_destroy_snapshot_sync, - &dsda, 0); + &dsda, 0, ZFS_SPACE_CHECK_NONE); fnvlist_free(dsda.dsda_successful_snaps); return (error); @@ -899,7 +899,8 @@ dsl_destroy_head(const char *name) objset_t *os; error = dsl_sync_task(name, dsl_destroy_head_check, - dsl_destroy_head_begin_sync, &ddha, 0); + dsl_destroy_head_begin_sync, &ddha, + 0, ZFS_SPACE_CHECK_NONE); if (error != 0) return (error); @@ -923,7 +924,7 @@ dsl_destroy_head(const char *name) } return (dsl_sync_task(name, dsl_destroy_head_check, - dsl_destroy_head_sync, &ddha, 0)); + dsl_destroy_head_sync, &ddha, 0, ZFS_SPACE_CHECK_NONE)); } /* Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c Thu Jul 10 07:16:55 2014 (r268482) @@ -22,7 +22,7 @@ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011 Pawel Jakub Dawidek <pawel@dawidek.net>. * All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. * Copyright (c) 2014 Joyent, Inc. All rights reserved. */ @@ -642,7 +642,8 @@ dsl_dir_activate_fs_ss_limit(const char int error; error = dsl_sync_task(ddname, dsl_dir_actv_fs_ss_limit_check, - dsl_dir_actv_fs_ss_limit_sync, (void *)ddname, 0); + dsl_dir_actv_fs_ss_limit_sync, (void *)ddname, 0, + ZFS_SPACE_CHECK_RESERVED); if (error == EALREADY) error = 0; @@ -1496,7 +1497,7 @@ dsl_dir_set_quota(const char *ddname, zp ddsqra.ddsqra_value = quota; return (dsl_sync_task(ddname, dsl_dir_set_quota_check, - dsl_dir_set_quota_sync, &ddsqra, 0)); + dsl_dir_set_quota_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); } int @@ -1617,7 +1618,7 @@ dsl_dir_set_reservation(const char *ddna ddsqra.ddsqra_value = reservation; return (dsl_sync_task(ddname, dsl_dir_set_reservation_check, - dsl_dir_set_reservation_sync, &ddsqra, 0)); + dsl_dir_set_reservation_sync, &ddsqra, 0, ZFS_SPACE_CHECK_NONE)); } static dsl_dir_t * @@ -1899,7 +1900,8 @@ dsl_dir_rename(const char *oldname, cons ddra.ddra_cred = CRED(); return (dsl_sync_task(oldname, - dsl_dir_rename_check, dsl_dir_rename_sync, &ddra, 3)); + dsl_dir_rename_check, dsl_dir_rename_sync, &ddra, + 3, ZFS_SPACE_CHECK_RESERVED)); } int Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c Thu Jul 10 07:16:55 2014 (r268482) @@ -691,17 +691,12 @@ dsl_pool_adjustedsize(dsl_pool_t *dp, bo uint64_t space, resv; /* - * Reserve about 1.6% (1/64), or at least 32MB, for allocation - * efficiency. - * XXX The intent log is not accounted for, so it must fit - * within this slop. - * * If we're trying to assess whether it's OK to do a free, * cut the reservation in half to allow forward progress * (e.g. make it possible to rm(1) files from a full pool). */ space = spa_get_dspace(dp->dp_spa); - resv = MAX(space >> 6, SPA_MINDEVSIZE >> 1); + resv = spa_get_slop_space(dp->dp_spa); if (netfree) resv >>= 1; Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c Thu Jul 10 07:16:55 2014 (r268482) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. */ #include <sys/zfs_context.h> @@ -834,7 +834,7 @@ dsl_props_set(const char *dsname, zprop_ nblks = 2 * fnvlist_num_pairs(props); return (dsl_sync_task(dsname, dsl_props_set_check, dsl_props_set_sync, - &dpsa, nblks)); + &dpsa, nblks, ZFS_SPACE_CHECK_RESERVED)); } typedef enum dsl_prop_getflags { Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c Thu Jul 10 07:16:55 2014 (r268482) @@ -367,7 +367,7 @@ int dsl_scan_cancel(dsl_pool_t *dp) { return (dsl_sync_task(spa_name(dp->dp_spa), dsl_scan_cancel_check, - dsl_scan_cancel_sync, NULL, 3)); + dsl_scan_cancel_sync, NULL, 3, ZFS_SPACE_CHECK_RESERVED)); } static void dsl_scan_visitbp(blkptr_t *bp, @@ -1807,5 +1807,5 @@ dsl_scan(dsl_pool_t *dp, pool_scan_func_ (void) spa_vdev_state_exit(spa, NULL, 0); return (dsl_sync_task(spa_name(spa), dsl_scan_setup_check, - dsl_scan_setup_sync, &func, 0)); + dsl_scan_setup_sync, &func, 0, ZFS_SPACE_CHECK_NONE)); } Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c Thu Jul 10 07:16:55 2014 (r268482) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. */ #include <sys/dmu.h> @@ -64,7 +64,8 @@ dsl_null_checkfunc(void *arg, dmu_tx_t * */ int dsl_sync_task(const char *pool, dsl_checkfunc_t *checkfunc, - dsl_syncfunc_t *syncfunc, void *arg, int blocks_modified) + dsl_syncfunc_t *syncfunc, void *arg, + int blocks_modified, zfs_space_check_t space_check) { spa_t *spa; dmu_tx_t *tx; @@ -84,6 +85,7 @@ top: dst.dst_pool = dp; dst.dst_txg = dmu_tx_get_txg(tx); dst.dst_space = blocks_modified << DST_AVG_BLKSHIFT; + dst.dst_space_check = space_check; dst.dst_checkfunc = checkfunc != NULL ? checkfunc : dsl_null_checkfunc; dst.dst_syncfunc = syncfunc; dst.dst_arg = arg; @@ -117,13 +119,14 @@ top: void dsl_sync_task_nowait(dsl_pool_t *dp, dsl_syncfunc_t *syncfunc, void *arg, - int blocks_modified, dmu_tx_t *tx) + int blocks_modified, zfs_space_check_t space_check, dmu_tx_t *tx) { dsl_sync_task_t *dst = kmem_zalloc(sizeof (*dst), KM_SLEEP); dst->dst_pool = dp; dst->dst_txg = dmu_tx_get_txg(tx); dst->dst_space = blocks_modified << DST_AVG_BLKSHIFT; + dst->dst_space_check = space_check; dst->dst_checkfunc = dsl_null_checkfunc; dst->dst_syncfunc = syncfunc; dst->dst_arg = arg; @@ -140,25 +143,34 @@ void dsl_sync_task_sync(dsl_sync_task_t *dst, dmu_tx_t *tx) { dsl_pool_t *dp = dst->dst_pool; - uint64_t quota, used; ASSERT0(dst->dst_error); /* - * Check for sufficient space. We just check against what's - * on-disk; we don't want any in-flight accounting to get in our - * way, because open context may have already used up various - * in-core limits (arc_tempreserve, dsl_pool_tempreserve). + * Check for sufficient space. + * + * When the sync task was created, the caller specified the + * type of space checking required. See the comment in + * zfs_space_check_t for details on the semantics of each + * type of space checking. + * + * We just check against what's on-disk; we don't want any + * in-flight accounting to get in our way, because open context + * may have already used up various in-core limits + * (arc_tempreserve, dsl_pool_tempreserve). */ - quota = dsl_pool_adjustedsize(dp, B_FALSE) - - metaslab_class_get_deferred(spa_normal_class(dp->dp_spa)); - used = dp->dp_root_dir->dd_phys->dd_used_bytes; - /* MOS space is triple-dittoed, so we multiply by 3. */ - if (dst->dst_space > 0 && used + dst->dst_space * 3 > quota) { - dst->dst_error = SET_ERROR(ENOSPC); - if (dst->dst_nowaiter) - kmem_free(dst, sizeof (*dst)); - return; + if (dst->dst_space_check != ZFS_SPACE_CHECK_NONE) { + uint64_t quota = dsl_pool_adjustedsize(dp, + dst->dst_space_check == ZFS_SPACE_CHECK_RESERVED) - + metaslab_class_get_deferred(spa_normal_class(dp->dp_spa)); + uint64_t used = dp->dp_root_dir->dd_phys->dd_used_bytes; + /* MOS space is triple-dittoed, so we multiply by 3. */ + if (dst->dst_space > 0 && used + dst->dst_space * 3 > quota) { + dst->dst_error = SET_ERROR(ENOSPC); + if (dst->dst_nowaiter) + kmem_free(dst, sizeof (*dst)); + return; + } } /* Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_userhold.c Thu Jul 10 07:16:55 2014 (r268482) @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2012, 2014 by Delphix. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. */ @@ -317,7 +317,8 @@ dsl_dataset_user_hold(nvlist_t *holds, m dduha.dduha_minor = cleanup_minor; ret = dsl_sync_task(nvpair_name(pair), dsl_dataset_user_hold_check, - dsl_dataset_user_hold_sync, &dduha, fnvlist_num_pairs(holds)); + dsl_dataset_user_hold_sync, &dduha, + fnvlist_num_pairs(holds), ZFS_SPACE_CHECK_RESERVED); fnvlist_free(dduha.dduha_chkholds); return (ret); @@ -600,7 +601,7 @@ dsl_dataset_user_release_impl(nvlist_t * ddura.ddura_chkholds = fnvlist_alloc(); error = dsl_sync_task(pool, dsl_dataset_user_release_check, - dsl_dataset_user_release_sync, &ddura, 0); + dsl_dataset_user_release_sync, &ddura, 0, ZFS_SPACE_CHECK_NONE); fnvlist_free(ddura.ddura_todelete); fnvlist_free(ddura.ddura_chkholds); Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c Thu Jul 10 07:16:55 2014 (r268482) @@ -689,7 +689,8 @@ spa_prop_set(spa_t *spa, nvlist_t *nvp) * feature descriptions object. */ error = dsl_sync_task(spa->spa_name, NULL, - spa_sync_version, &ver, 6); + spa_sync_version, &ver, + 6, ZFS_SPACE_CHECK_RESERVED); if (error) return (error); continue; @@ -701,7 +702,7 @@ spa_prop_set(spa_t *spa, nvlist_t *nvp) if (need_sync) { return (dsl_sync_task(spa->spa_name, NULL, spa_sync_props, - nvp, 6)); + nvp, 6, ZFS_SPACE_CHECK_RESERVED)); } return (0); @@ -782,7 +783,7 @@ spa_change_guid(spa_t *spa) guid = spa_generate_guid(NULL); error = dsl_sync_task(spa->spa_name, spa_change_guid_check, - spa_change_guid_sync, &guid, 5); + spa_change_guid_sync, &guid, 5, ZFS_SPACE_CHECK_RESERVED); if (error == 0) { spa_config_sync(spa, B_FALSE, B_TRUE); Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_history.c Thu Jul 10 07:16:55 2014 (r268482) @@ -21,7 +21,7 @@ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright (c) 2011, 2014 by Delphix. All rights reserved. */ #include <sys/spa.h> @@ -324,7 +324,7 @@ spa_history_log_nvl(spa_t *spa, nvlist_t /* Kick this off asynchronously; errors are ignored. */ dsl_sync_task_nowait(spa_get_dsl(spa), spa_history_log_sync, - nvarg, 0, tx); + nvarg, 0, ZFS_SPACE_CHECK_NONE, tx); dmu_tx_commit(tx); /* spa_history_log_sync will free nvl */ @@ -465,7 +465,7 @@ log_internal(nvlist_t *nvl, const char * spa_history_log_sync(nvl, tx); } else { dsl_sync_task_nowait(spa_get_dsl(spa), - spa_history_log_sync, nvl, 0, tx); + spa_history_log_sync, nvl, 0, ZFS_SPACE_CHECK_NONE, tx); } /* spa_history_log_sync() will free nvl */ } Modified: projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c ============================================================================== --- projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c Thu Jul 10 05:36:04 2014 (r268481) +++ projects/random_number_generator/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa_misc.c Thu Jul 10 07:16:55 2014 (r268482) @@ -354,6 +354,32 @@ zfs_deadman_init() #endif /* !illumos */ /* + * Normally, we don't allow the last 3.2% (1/(2^spa_slop_shift)) of space in + * the pool to be consumed. This ensures that we don't run the pool + * completely out of space, due to unaccounted changes (e.g. to the MOS). *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407100716.s6A7Gt6j011862>