svn commit: r272610 - in projects/ipfw: . bin/sh cddl/contrib/opensolaris/cmd/zdb contrib/binutils/bfd contrib/binutils/gas/config contrib/binutils/include/elf lib/libc/stdtime release/doc/en_US.IS...

Alexander V. Chernikov melifaro at FreeBSD.org
Mon Oct 6 11:29:59 UTC 2014


Author: melifaro
Date: Mon Oct  6 11:29:50 2014
New Revision: 272610
URL: https://svnweb.freebsd.org/changeset/base/272610

Log:
  Sync to HEAD at r272609.

Added:
  projects/ipfw/tools/tools/bootparttest/stub.c
     - copied unchanged from r272609, head/tools/tools/bootparttest/stub.c
  projects/ipfw/usr.sbin/pw/tests/pw_modify.sh
     - copied unchanged from r272609, head/usr.sbin/pw/tests/pw_modify.sh
Deleted:
  projects/ipfw/tools/tools/bootparttest/malloc.c
Modified:
  projects/ipfw/Makefile.inc1
  projects/ipfw/bin/sh/eval.c
  projects/ipfw/bin/sh/expand.c
  projects/ipfw/bin/sh/jobs.c
  projects/ipfw/bin/sh/redir.c
  projects/ipfw/bin/sh/trap.c
  projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.c
  projects/ipfw/contrib/binutils/bfd/config.bfd
  projects/ipfw/contrib/binutils/bfd/elf32-arm.c
  projects/ipfw/contrib/binutils/gas/config/tc-arm.c
  projects/ipfw/contrib/binutils/include/elf/arm.h
  projects/ipfw/lib/libc/stdtime/strptime.3
  projects/ipfw/lib/libc/stdtime/strptime.c
  projects/ipfw/release/doc/en_US.ISO8859-1/hardware/article.xml
  projects/ipfw/sbin/ifconfig/iflagg.c
  projects/ipfw/sbin/ipfw/ipfw2.c
  projects/ipfw/share/man/man5/rc.conf.5
  projects/ipfw/sys/boot/common/disk.c
  projects/ipfw/sys/boot/common/part.c
  projects/ipfw/sys/cam/ctl/ctl.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/spa_impl.h
  projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c
  projects/ipfw/sys/conf/Makefile.arm
  projects/ipfw/sys/conf/NOTES
  projects/ipfw/sys/conf/options
  projects/ipfw/sys/contrib/ipfilter/netinet/fil.c
  projects/ipfw/sys/contrib/ipfilter/netinet/ip_dns_pxy.c
  projects/ipfw/sys/contrib/ipfilter/netinet/ip_dstlist.c
  projects/ipfw/sys/contrib/ipfilter/netinet/ip_nat.c
  projects/ipfw/sys/dev/ahci/ahci.c
  projects/ipfw/sys/dev/uart/uart_bus_fdt.c
  projects/ipfw/sys/dev/vt/vt_core.c
  projects/ipfw/sys/fs/devfs/devfs_vnops.c
  projects/ipfw/sys/kern/imgact_elf.c
  projects/ipfw/sys/kern/kern_descrip.c
  projects/ipfw/sys/kern/kern_event.c
  projects/ipfw/sys/kern/kern_exit.c
  projects/ipfw/sys/kern/kern_intr.c
  projects/ipfw/sys/kern/kern_proc.c
  projects/ipfw/sys/kern/kern_prot.c
  projects/ipfw/sys/kern/kern_racct.c
  projects/ipfw/sys/kern/kern_sig.c
  projects/ipfw/sys/kern/vfs_vnops.c
  projects/ipfw/sys/modules/Makefile
  projects/ipfw/sys/net/ieee8023ad_lacp.c
  projects/ipfw/sys/net/ieee8023ad_lacp.h
  projects/ipfw/sys/net/if_bridge.c
  projects/ipfw/sys/net/if_disc.c
  projects/ipfw/sys/net/if_edsc.c
  projects/ipfw/sys/net/if_lagg.c
  projects/ipfw/sys/net/if_lagg.h
  projects/ipfw/sys/netinet/ip6.h
  projects/ipfw/sys/netinet/sctp_output.c
  projects/ipfw/sys/netinet/tcp_output.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw2.c
  projects/ipfw/sys/netpfil/ipfw/ip_fw_sockopt.c
  projects/ipfw/sys/sys/event.h
  projects/ipfw/sys/sys/filedesc.h
  projects/ipfw/sys/sys/racct.h
  projects/ipfw/sys/sys/seq.h
  projects/ipfw/sys/sys/systm.h
  projects/ipfw/sys/sys/ucred.h
  projects/ipfw/sys/sys/vnode.h
  projects/ipfw/sys/vm/uma_core.c
  projects/ipfw/sys/vm/vm_glue.c
  projects/ipfw/tools/tools/bootparttest/Makefile
  projects/ipfw/tools/tools/bootparttest/bootparttest.c
  projects/ipfw/usr.sbin/pw/tests/Makefile
Directory Properties:
  projects/ipfw/   (props changed)
  projects/ipfw/cddl/   (props changed)
  projects/ipfw/cddl/contrib/opensolaris/   (props changed)
  projects/ipfw/contrib/binutils/   (props changed)
  projects/ipfw/lib/libc/   (props changed)
  projects/ipfw/lib/libc/stdtime/   (props changed)
  projects/ipfw/sbin/   (props changed)
  projects/ipfw/sbin/ipfw/   (props changed)
  projects/ipfw/share/   (props changed)
  projects/ipfw/sys/   (props changed)
  projects/ipfw/sys/boot/   (props changed)
  projects/ipfw/sys/cddl/contrib/opensolaris/   (props changed)
  projects/ipfw/sys/conf/   (props changed)
  projects/ipfw/sys/contrib/ipfilter/   (props changed)

Modified: projects/ipfw/Makefile.inc1
==============================================================================
--- projects/ipfw/Makefile.inc1	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/Makefile.inc1	Mon Oct  6 11:29:50 2014	(r272610)
@@ -1536,6 +1536,7 @@ _prebuild_libs=	${_kerberos5_lib_libasn1
 		${_cddl_lib_libuutil} \
 		${_cddl_lib_libavl} \
 		${_cddl_lib_libzfs_core} \
+		${_cddl_lib_libctf} \
 		lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \
 		${_secure_lib_libcrypto} ${_lib_libldns} \
 		${_secure_lib_libssh} ${_secure_lib_libssl}
@@ -1586,9 +1587,11 @@ _cddl_lib_libnvpair= cddl/lib/libnvpair
 _cddl_lib_libavl= cddl/lib/libavl
 _cddl_lib_libuutil= cddl/lib/libuutil
 _cddl_lib_libzfs_core= cddl/lib/libzfs_core
+_cddl_lib_libctf= cddl/lib/libctf
 _cddl_lib= cddl/lib
 cddl/lib/libzfs_core__L: cddl/lib/libnvpair__L
 cddl/lib/libzfs__L: lib/libgeom__L
+cddl/lib/libctf__L: lib/libz__L
 .endif
 
 .if ${MK_CRYPT} != "no"

Modified: projects/ipfw/bin/sh/eval.c
==============================================================================
--- projects/ipfw/bin/sh/eval.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/bin/sh/eval.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -316,9 +316,10 @@ evalloop(union node *n, int flags)
 	loopnest++;
 	status = 0;
 	for (;;) {
-		evaltree(n->nbinary.ch1, EV_TESTED);
+		if (!evalskip)
+			evaltree(n->nbinary.ch1, EV_TESTED);
 		if (evalskip) {
-skipping:	  if (evalskip == SKIPCONT && --skipcount <= 0) {
+			if (evalskip == SKIPCONT && --skipcount <= 0) {
 				evalskip = 0;
 				continue;
 			}
@@ -337,8 +338,6 @@ skipping:	  if (evalskip == SKIPCONT && 
 		}
 		evaltree(n->nbinary.ch2, flags);
 		status = exitstatus;
-		if (evalskip)
-			goto skipping;
 	}
 	loopnest--;
 	exitstatus = status;
@@ -648,15 +647,15 @@ evalbackcmd(union node *n, struct backcm
 	struct jmploc *savehandler;
 	struct localvar *savelocalvars;
 
-	setstackmark(&smark);
 	result->fd = -1;
 	result->buf = NULL;
 	result->nleft = 0;
 	result->jp = NULL;
 	if (n == NULL) {
 		exitstatus = 0;
-		goto out;
+		return;
 	}
+	setstackmark(&smark);
 	exitstatus = oexitstatus;
 	if (is_valid_fast_cmdsubst(n)) {
 		savelocalvars = localvars;
@@ -698,7 +697,6 @@ evalbackcmd(union node *n, struct backcm
 		result->fd = pip[0];
 		result->jp = jp;
 	}
-out:
 	popstackmark(&smark);
 	TRACE(("evalbackcmd done: fd=%d buf=%p nleft=%d jp=%p\n",
 		result->fd, result->buf, result->nleft, result->jp));

Modified: projects/ipfw/bin/sh/expand.c
==============================================================================
--- projects/ipfw/bin/sh/expand.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/bin/sh/expand.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -328,24 +328,19 @@ exptilde(char *p, int flag)
 done:
 	*p = '\0';
 	if (*(startp+1) == '\0') {
-		if ((home = lookupvar("HOME")) == NULL)
-			goto lose;
+		home = lookupvar("HOME");
 	} else {
-		if ((pw = getpwnam(startp+1)) == NULL)
-			goto lose;
-		home = pw->pw_dir;
+		pw = getpwnam(startp+1);
+		home = pw != NULL ? pw->pw_dir : NULL;
 	}
-	if (*home == '\0')
-		goto lose;
 	*p = c;
+	if (home == NULL || *home == '\0')
+		return (startp);
 	if (quotes)
 		STPUTS_QUOTES(home, SQSYNTAX, expdest);
 	else
 		STPUTS(home, expdest);
 	return (p);
-lose:
-	*p = c;
-	return (startp);
 }
 
 

Modified: projects/ipfw/bin/sh/jobs.c
==============================================================================
--- projects/ipfw/bin/sh/jobs.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/bin/sh/jobs.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -373,13 +373,13 @@ showjob(struct job *jp, int mode)
 			strcat(statestr, " (core dumped)");
 	}
 
-	for (ps = jp->ps ; ; ps++) {	/* for each process */
+	for (ps = jp->ps ; procno > 0 ; ps++, procno--) { /* for each process */
 		if (mode == SHOWJOBS_PIDS || mode == SHOWJOBS_PGIDS) {
 			out1fmt("%d\n", (int)ps->pid);
-			goto skip;
+			continue;
 		}
 		if (mode != SHOWJOBS_VERBOSE && ps != jp->ps)
-			goto skip;
+			continue;
 		if (jobno == curr && ps == jp->ps)
 			c = '+';
 		else if (jobno == prev && ps == jp->ps)
@@ -410,8 +410,6 @@ showjob(struct job *jp, int mode)
 			out1c('\n');
 		} else
 			printjobcmd(jp);
-skip:		if (--procno <= 0)
-			break;
 	}
 }
 

Modified: projects/ipfw/bin/sh/redir.c
==============================================================================
--- projects/ipfw/bin/sh/redir.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/bin/sh/redir.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -173,21 +173,12 @@ openredirect(union node *redir, char mem
 		fname = redir->nfile.expfname;
 		if ((f = open(fname, O_RDONLY)) < 0)
 			error("cannot open %s: %s", fname, strerror(errno));
-movefd:
-		if (f != fd) {
-			if (dup2(f, fd) == -1) {
-				e = errno;
-				close(f);
-				error("%d: %s", fd, strerror(e));
-			}
-			close(f);
-		}
 		break;
 	case NFROMTO:
 		fname = redir->nfile.expfname;
 		if ((f = open(fname, O_RDWR|O_CREAT, 0666)) < 0)
 			error("cannot create %s: %s", fname, strerror(errno));
-		goto movefd;
+		break;
 	case NTO:
 		if (Cflag) {
 			fname = redir->nfile.expfname;
@@ -205,19 +196,19 @@ movefd:
 			} else
 				error("cannot create %s: %s", fname,
 				    strerror(EEXIST));
-			goto movefd;
+			break;
 		}
 		/* FALLTHROUGH */
 	case NCLOBBER:
 		fname = redir->nfile.expfname;
 		if ((f = open(fname, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0)
 			error("cannot create %s: %s", fname, strerror(errno));
-		goto movefd;
+		break;
 	case NAPPEND:
 		fname = redir->nfile.expfname;
 		if ((f = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0666)) < 0)
 			error("cannot create %s: %s", fname, strerror(errno));
-		goto movefd;
+		break;
 	case NTOFD:
 	case NFROMFD:
 		if (redir->ndup.dupfd >= 0) {	/* if not ">&-" */
@@ -231,14 +222,22 @@ movefd:
 		} else {
 			close(fd);
 		}
-		break;
+		return;
 	case NHERE:
 	case NXHERE:
 		f = openhere(redir);
-		goto movefd;
+		break;
 	default:
 		abort();
 	}
+	if (f != fd) {
+		if (dup2(f, fd) == -1) {
+			e = errno;
+			close(f);
+			error("%d: %s", fd, strerror(e));
+		}
+		close(f);
+	}
 }
 
 

Modified: projects/ipfw/bin/sh/trap.c
==============================================================================
--- projects/ipfw/bin/sh/trap.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/bin/sh/trap.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -510,28 +510,25 @@ exitshell_savedstatus(void)
 			exiting_exitstatus = oexitstatus;
 	}
 	exitstatus = oexitstatus = exiting_exitstatus;
-	if (setjmp(loc1.loc)) {
-		goto l1;
+	if (!setjmp(loc1.loc)) {
+		handler = &loc1;
+		if ((p = trap[0]) != NULL && *p != '\0') {
+			/*
+			 * Reset evalskip, or the trap on EXIT could be
+			 * interrupted if the last command was a "return".
+			 */
+			evalskip = 0;
+			trap[0] = NULL;
+			evalstring(p, 0);
+		}
 	}
-	if (setjmp(loc2.loc)) {
-		goto l2;
-	}
-	handler = &loc1;
-	if ((p = trap[0]) != NULL && *p != '\0') {
-		/*
-		 * Reset evalskip, or the trap on EXIT could be
-		 * interrupted if the last command was a "return".
-		 */
-		evalskip = 0;
-		trap[0] = NULL;
-		evalstring(p, 0);
-	}
-l1:   handler = &loc2;			/* probably unnecessary */
-	flushall();
+	if (!setjmp(loc2.loc)) {
+		handler = &loc2;		/* probably unnecessary */
+		flushall();
 #if JOBS
-	setjobctl(0);
+		setjobctl(0);
 #endif
-l2:
+	}
 	if (sig != 0 && sig != SIGSTOP && sig != SIGTSTP && sig != SIGTTIN &&
 	    sig != SIGTTOU) {
 		signal(sig, SIG_DFL);

Modified: projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.c
==============================================================================
--- projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/cddl/contrib/opensolaris/cmd/zdb/zdb.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -1461,6 +1461,11 @@ dump_deadlist(dsl_deadlist_t *dl)
 	if (dump_opt['d'] < 3)
 		return;
 
+	if (dl->dl_oldfmt) {
+		dump_bpobj(&dl->dl_bpobj, "old-format deadlist", 0);
+		return;
+	}
+
 	zdb_nicenum(dl->dl_phys->dl_used, bytes);
 	zdb_nicenum(dl->dl_phys->dl_comp, comp);
 	zdb_nicenum(dl->dl_phys->dl_uncomp, uncomp);
@@ -2594,10 +2599,12 @@ dump_block_stats(spa_t *spa)
 	 * all async I/Os to complete.
 	 */
 	if (dump_opt['c']) {
-		(void) zio_wait(spa->spa_async_zio_root);
-		spa->spa_async_zio_root = zio_root(spa, NULL, NULL,
-		    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE |
-		    ZIO_FLAG_GODFATHER);
+		for (int i = 0; i < max_ncpus; i++) {
+			(void) zio_wait(spa->spa_async_zio_root[i]);
+			spa->spa_async_zio_root[i] = zio_root(spa, NULL, NULL,
+			    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE |
+			    ZIO_FLAG_GODFATHER);
+		}
 	}
 
 	if (zcb.zcb_haderrors) {

Modified: projects/ipfw/contrib/binutils/bfd/config.bfd
==============================================================================
--- projects/ipfw/contrib/binutils/bfd/config.bfd	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/contrib/binutils/bfd/config.bfd	Mon Oct  6 11:29:50 2014	(r272610)
@@ -273,19 +273,11 @@ case "${targ}" in
     targ_defvec=bfd_elf32_littlearm_vec
     targ_selvecs=bfd_elf32_bigarm_vec
     ;;
-  armeb-*-freebsd*)
+  arm*eb*-*-freebsd*)
     targ_defvec=bfd_elf32_bigarm_vec
     targ_selvecs=bfd_elf32_littlearm_vec
     ;;
-  armv6eb-*-freebsd*)
-    targ_defvec=bfd_elf32_bigarm_vec
-    targ_selvecs=bfd_elf32_littlearm_vec
-    ;;
-  armv6-*-freebsd* | armv6hf-*-freebsd*)
-    targ_defvec=bfd_elf32_littlearm_vec
-    targ_selvecs=bfd_elf32_bigarm_vec
-    ;;
-  arm-*-elf | arm-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \
+  arm-*-elf | arm*-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \
   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \
   arm*-*-eabi* )
     targ_defvec=bfd_elf32_littlearm_vec

Modified: projects/ipfw/contrib/binutils/bfd/elf32-arm.c
==============================================================================
--- projects/ipfw/contrib/binutils/bfd/elf32-arm.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/contrib/binutils/bfd/elf32-arm.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -6965,7 +6965,8 @@ elf32_arm_merge_eabi_attributes (bfd *ib
 
   for (; in_list; in_list = in_list->next)
     {
-      if ((in_list->tag & 128) < 64)
+      if ((in_list->tag & 128) < 64
+          && in_list->tag != Tag_Virtualization_use)
 	{
 	  _bfd_error_handler
 	    (_("Warning: %B: Unknown EABI object attribute %d"),

Modified: projects/ipfw/contrib/binutils/gas/config/tc-arm.c
==============================================================================
--- projects/ipfw/contrib/binutils/gas/config/tc-arm.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/contrib/binutils/gas/config/tc-arm.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -19395,6 +19395,12 @@ arm_fix_adjustable (fixS * fixP)
       || fixP->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0)
     return 0;
 
+  if (fixP->fx_r_type == BFD_RELOC_ARM_MOVW
+      || fixP->fx_r_type == BFD_RELOC_ARM_MOVT
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT)
+    return 0;
+
   return 1;
 }
 #endif /* defined (OBJ_ELF) || defined (OBJ_COFF) */

Modified: projects/ipfw/contrib/binutils/include/elf/arm.h
==============================================================================
--- projects/ipfw/contrib/binutils/include/elf/arm.h	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/contrib/binutils/include/elf/arm.h	Mon Oct  6 11:29:50 2014	(r272610)
@@ -271,6 +271,8 @@ enum
   Tag_ABI_optimization_goals,
   Tag_ABI_FP_optimization_goals,
   /* 32 is generic.  */
+
+  Tag_Virtualization_use = 68,
 };
 
 #endif

Modified: projects/ipfw/lib/libc/stdtime/strptime.3
==============================================================================
--- projects/ipfw/lib/libc/stdtime/strptime.3	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/lib/libc/stdtime/strptime.3	Mon Oct  6 11:29:50 2014	(r272610)
@@ -79,7 +79,8 @@ and
 .Fa \&%D ,
 are now interpreted as beginning at 1969 per POSIX requirements.
 Years 69-00 are interpreted in the 20th century (1969-2000), years
-01-68 in the 21st century (2001-2068).  The
+01-68 in the 21st century (2001-2068).
+The
 .Fa \&%U
 and
 .Fa %W

Modified: projects/ipfw/lib/libc/stdtime/strptime.c
==============================================================================
--- projects/ipfw/lib/libc/stdtime/strptime.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/lib/libc/stdtime/strptime.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -552,7 +552,8 @@ label:
 				strncpy(zonestr, buf, cp - buf);
 				zonestr[cp - buf] = '\0';
 				tzset();
-				if (0 == strcmp(zonestr, "GMT")) {
+				if (0 == strcmp(zonestr, "GMT") ||
+				    0 == strcmp(zonestr, "UTC")) {
 				    *GMTp = 1;
 				} else if (0 == strcmp(zonestr, tzname[0])) {
 				    tm->tm_isdst = 0;
@@ -674,6 +675,9 @@ strptime_l(const char * __restrict buf, 
 	ret = _strptime(buf, fmt, tm, &gmt, loc);
 	if (ret && gmt) {
 		time_t t = timegm(tm);
+
+		if (t == -1)
+			return (NULL);
 		localtime_r(&t, tm);
 	}
 

Modified: projects/ipfw/release/doc/en_US.ISO8859-1/hardware/article.xml
==============================================================================
--- projects/ipfw/release/doc/en_US.ISO8859-1/hardware/article.xml	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/release/doc/en_US.ISO8859-1/hardware/article.xml	Mon Oct  6 11:29:50 2014	(r272610)
@@ -908,6 +908,8 @@
 
       &hwlist.udav;
 
+      &hwlist.urndis;
+
       &hwlist.vge;
 
       &hwlist.vr;

Modified: projects/ipfw/sbin/ifconfig/iflagg.c
==============================================================================
--- projects/ipfw/sbin/ifconfig/iflagg.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sbin/ifconfig/iflagg.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -17,6 +17,7 @@ static const char rcsid[] =
 #include <net/ethernet.h>
 #include <net/if.h>
 #include <net/if_lagg.h>
+#include <net/ieee8023ad_lacp.h>
 #include <net/route.h>
 
 #include <ctype.h>
@@ -246,18 +247,9 @@ lagg_status(int s)
 		putchar('\n');
 		if (verbose) {
 			printf("\tlagg options:\n");
-			printf("\t\tuse_flowid: %d\n",
-			    (ro.ro_opts & LAGG_OPT_USE_FLOWID) ? 1 : 0);
+			printb("\t\tflags", ro.ro_opts, LAGG_OPT_BITS);
+			putchar('\n');
 			printf("\t\tflowid_shift: %d\n", ro.ro_flowid_shift);
-			switch (ra.ra_proto) {
-			case LAGG_PROTO_LACP:
-				printf("\t\tlacp_strict: %d\n",
-				   (ro.ro_opts & LAGG_OPT_LACP_STRICT) ? 1 : 0);
-				printf("\t\tlacp_rxtest: %d\n",
-				   (ro.ro_opts & LAGG_OPT_LACP_RXTEST) ? 1 : 0);
-				printf("\t\tlacp_txtest: %d\n",
-				   (ro.ro_opts & LAGG_OPT_LACP_TXTEST) ? 1 : 0);
-			}
 			printf("\tlagg statistics:\n");
 			printf("\t\tactive ports: %d\n", ro.ro_active);
 			printf("\t\tflapping: %u\n", ro.ro_flapping);
@@ -272,7 +264,8 @@ lagg_status(int s)
 			printf("\tlaggport: %s ", rpbuf[i].rp_portname);
 			printb("flags", rpbuf[i].rp_flags, LAGG_PORT_BITS);
 			if (verbose && ra.ra_proto == LAGG_PROTO_LACP)
-				printf(" state=%X", lp->actor_state);
+				printb(" state", lp->actor_state,
+				    LACP_STATE_BITS);
 			putchar('\n');
 			if (verbose && ra.ra_proto == LAGG_PROTO_LACP)
 				printf("\t\t%s\n",

Modified: projects/ipfw/sbin/ipfw/ipfw2.c
==============================================================================
--- projects/ipfw/sbin/ipfw/ipfw2.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sbin/ipfw/ipfw2.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -3341,13 +3341,34 @@ add_dstip(ipfw_insn *cmd, char *av, int 
 	return cmd;
 }
 
+static struct _s_x f_reserved_keywords[] = {
+	{ "altq",	TOK_OR },
+	{ "//",		TOK_OR },
+	{ "diverted",	TOK_OR },
+	{ "dst-port",	TOK_OR },
+	{ "src-port",	TOK_OR },
+	{ "established",	TOK_OR },
+	{ "keep-state",	TOK_OR },
+	{ "frag",	TOK_OR },
+	{ "icmptypes",	TOK_OR },
+	{ "in",		TOK_OR },
+	{ "out",	TOK_OR },
+	{ "ip6",	TOK_OR },
+	{ "any",	TOK_OR },
+	{ "to",		TOK_OR },
+	{ "via",	TOK_OR },
+	{ "{",		TOK_OR },
+	{ NULL, 0 }	/* terminator */
+};
+
 static ipfw_insn *
 add_ports(ipfw_insn *cmd, char *av, u_char proto, int opcode, int cblen)
 {
-	/* XXX "any" is trapped before. Perhaps "to" */
-	if (_substrcmp(av, "any") == 0) {
-		return NULL;
-	} else if (fill_newports((ipfw_insn_u16 *)cmd, av, proto, cblen)) {
+
+	if (match_token(f_reserved_keywords, av) != -1)
+		return (NULL);
+
+	if (fill_newports((ipfw_insn_u16 *)cmd, av, proto, cblen)) {
 		/* XXX todo: check that we have a protocol with ports */
 		cmd->opcode = opcode;
 		return cmd;

Modified: projects/ipfw/share/man/man5/rc.conf.5
==============================================================================
--- projects/ipfw/share/man/man5/rc.conf.5	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/share/man/man5/rc.conf.5	Mon Oct  6 11:29:50 2014	(r272610)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd August 27, 2014
+.Dd September 11, 2014
 .Dt RC.CONF 5
 .Os
 .Sh NAME

Modified: projects/ipfw/sys/boot/common/disk.c
==============================================================================
--- projects/ipfw/sys/boot/common/disk.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/boot/common/disk.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -90,7 +90,7 @@ disk_lookup(struct disk_devdesc *dev)
 		    entry->d_partition == dev->d_partition) {
 			dev->d_offset = entry->d_offset;
 			DEBUG("%s offset %lld", disk_fmtdev(dev),
-			    dev->d_offset);
+			    (long long)dev->d_offset);
 #ifdef DISK_DEBUG
 			entry->count++;
 #endif
@@ -367,7 +367,7 @@ out:
 		dev->d_slice = slice;
 		dev->d_partition = partition;
 		DEBUG("%s offset %lld => %p", disk_fmtdev(dev),
-		    dev->d_offset, od);
+		    (long long)dev->d_offset, od);
 	}
 	return (rc);
 }

Modified: projects/ipfw/sys/boot/common/part.c
==============================================================================
--- projects/ipfw/sys/boot/common/part.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/boot/common/part.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -301,6 +301,7 @@ ptable_gptread(struct ptable *table, voi
 			}
 		}
 	}
+	DEBUG("GPT detected");
 	if (pri == 0 && sec == 0) {
 		/* Both primary and backup tables are invalid. */
 		table->type = PTABLE_NONE;
@@ -378,6 +379,7 @@ ptable_ebrread(struct ptable *table, voi
 	buf = malloc(table->sectorsize);
 	if (buf == NULL)
 		return (table);
+	DEBUG("EBR detected");
 	for (i = 0; i < MAXEBRENTRIES; i++) {
 #if 0	/* Some BIOSes return an incorrect number of sectors */
 		if (offset >= table->sectors)
@@ -470,6 +472,7 @@ ptable_bsdread(struct ptable *table, voi
 		DEBUG("invalid number of partitions");
 		goto out;
 	}
+	DEBUG("BSD detected");
 	part = &dl->d_partitions[0];
 	raw_offset = le32toh(part[RAW_PART].p_offset);
 	for (i = 0; i < dl->d_npartitions; i++, part++) {
@@ -553,6 +556,7 @@ ptable_vtoc8read(struct ptable *table, v
 		DEBUG("invalid geometry");
 		goto out;
 	}
+	DEBUG("VTOC8 detected");
 	for (i = 0; i < VTOC8_NPARTS; i++) {
 		dl->part[i].tag = be16toh(dl->part[i].tag);
 		if (i == VTOC_RAW_PART ||
@@ -665,6 +669,7 @@ ptable_open(void *dev, off_t sectors, ui
 #endif
 #ifdef LOADER_MBR_SUPPORT
 	/* Read MBR. */
+	DEBUG("MBR detected");
 	table->type = PTABLE_MBR;
 	for (i = has_ext = 0; i < NDOSPART; i++) {
 		if (dp[i].dp_typ == 0)

Modified: projects/ipfw/sys/cam/ctl/ctl.c
==============================================================================
--- projects/ipfw/sys/cam/ctl/ctl.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cam/ctl/ctl.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -9912,9 +9912,7 @@ ctl_inquiry_evpd_eid(struct ctl_scsiio *
 
 	lun = (struct ctl_lun *)ctsio->io_hdr.ctl_private[CTL_PRIV_LUN].ptr;
 
-	data_len = sizeof(struct scsi_vpd_mode_page_policy) +
-	    sizeof(struct scsi_vpd_mode_page_policy_descr);
-
+	data_len = sizeof(struct scsi_vpd_extended_inquiry_data);
 	ctsio->kern_data_ptr = malloc(data_len, M_CTL, M_WAITOK | M_ZERO);
 	eid_ptr = (struct scsi_vpd_extended_inquiry_data *)ctsio->kern_data_ptr;
 	ctsio->kern_sg_entries = 0;

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -2584,6 +2584,7 @@ arc_reclaim_needed(void)
 
 extern kmem_cache_t	*zio_buf_cache[];
 extern kmem_cache_t	*zio_data_buf_cache[];
+extern kmem_cache_t	*range_seg_cache;
 
 static void __noinline
 arc_kmem_reap_now(arc_reclaim_strategy_t strat)
@@ -2591,7 +2592,6 @@ arc_kmem_reap_now(arc_reclaim_strategy_t
 	size_t			i;
 	kmem_cache_t		*prev_cache = NULL;
 	kmem_cache_t		*prev_data_cache = NULL;
-	extern kmem_cache_t	*range_seg_cache;
 
 	DTRACE_PROBE(arc__kmem_reap_start);
 #ifdef _KERNEL

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -1332,7 +1332,14 @@ dmu_assign_arcbuf(dmu_buf_t *handle, uin
 	rw_exit(&dn->dn_struct_rwlock);
 	DB_DNODE_EXIT(dbuf);
 
-	if (offset == db->db.db_offset && blksz == db->db.db_size) {
+	/*
+	 * We can only assign if the offset is aligned, the arc buf is the
+	 * same size as the dbuf, and the dbuf is not metadata.  It
+	 * can't be metadata because the loaned arc buf comes from the
+	 * user-data kmem arena.
+	 */
+	if (offset == db->db.db_offset && blksz == db->db.db_size &&
+	    DBUF_GET_BUFC_TYPE(db) == ARC_BUFC_DATA) {
 		dbuf_assign_arcbuf(db, buf, tx);
 		dbuf_rele(db, FTAG);
 	} else {

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -1273,18 +1273,20 @@ restore_bytes(struct restorearg *ra, voi
 }
 
 static void *
-restore_read(struct restorearg *ra, int len)
+restore_read(struct restorearg *ra, int len, char *buf)
 {
-	void *rv;
 	int done = 0;
 
+	if (buf == NULL)
+		buf = ra->buf;
+
 	/* some things will require 8-byte alignment, so everything must */
 	ASSERT0(len % 8);
 
 	while (done < len) {
 		ssize_t resid;
 
-		ra->err = restore_bytes(ra, (caddr_t)ra->buf + done,
+		ra->err = restore_bytes(ra, buf + done,
 		    len - done, ra->voff, &resid);
 
 		if (resid == len - done)
@@ -1296,12 +1298,11 @@ restore_read(struct restorearg *ra, int 
 	}
 
 	ASSERT3U(done, ==, len);
-	rv = ra->buf;
 	if (ra->byteswap)
-		fletcher_4_incremental_byteswap(rv, len, &ra->cksum);
+		fletcher_4_incremental_byteswap(buf, len, &ra->cksum);
 	else
-		fletcher_4_incremental_native(rv, len, &ra->cksum);
-	return (rv);
+		fletcher_4_incremental_native(buf, len, &ra->cksum);
+	return (buf);
 }
 
 static void
@@ -1416,7 +1417,7 @@ restore_object(struct restorearg *ra, ob
 		return (SET_ERROR(EINVAL));
 
 	if (drro->drr_bonuslen) {
-		data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8));
+		data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8), NULL);
 		if (ra->err != 0)
 			return (ra->err);
 	}
@@ -1513,19 +1514,30 @@ restore_write(struct restorearg *ra, obj
 	    !DMU_OT_IS_VALID(drrw->drr_type))
 		return (SET_ERROR(EINVAL));
 
-	data = restore_read(ra, drrw->drr_length);
-	if (data == NULL)
-		return (ra->err);
-
 	if (dmu_object_info(os, drrw->drr_object, NULL) != 0)
 		return (SET_ERROR(EINVAL));
 
+	dmu_buf_t *bonus;
+	if (dmu_bonus_hold(os, drrw->drr_object, FTAG, &bonus) != 0)
+		return (SET_ERROR(EINVAL));
+
+	arc_buf_t *abuf = dmu_request_arcbuf(bonus, drrw->drr_length);
+
+	data = restore_read(ra, drrw->drr_length, abuf->b_data);
+	if (data == NULL) {
+		dmu_return_arcbuf(abuf);
+		dmu_buf_rele(bonus, FTAG);
+		return (ra->err);
+	}
+
 	tx = dmu_tx_create(os);
 
 	dmu_tx_hold_write(tx, drrw->drr_object,
 	    drrw->drr_offset, drrw->drr_length);
 	err = dmu_tx_assign(tx, TXG_WAIT);
 	if (err != 0) {
+		dmu_return_arcbuf(abuf);
+		dmu_buf_rele(bonus, FTAG);
 		dmu_tx_abort(tx);
 		return (err);
 	}
@@ -1534,9 +1546,9 @@ restore_write(struct restorearg *ra, obj
 		    DMU_OT_BYTESWAP(drrw->drr_type);
 		dmu_ot_byteswap[byteswap].ob_func(data, drrw->drr_length);
 	}
-	dmu_write(os, drrw->drr_object,
-	    drrw->drr_offset, drrw->drr_length, data, tx);
+	dmu_assign_arcbuf(bonus, drrw->drr_offset, abuf, tx);
 	dmu_tx_commit(tx);
+	dmu_buf_rele(bonus, FTAG);
 	return (0);
 }
 
@@ -1618,7 +1630,7 @@ restore_write_embedded(struct restorearg
 	if (drrwnp->drr_compression >= ZIO_COMPRESS_FUNCTIONS)
 		return (EINVAL);
 
-	data = restore_read(ra, P2ROUNDUP(drrwnp->drr_psize, 8));
+	data = restore_read(ra, P2ROUNDUP(drrwnp->drr_psize, 8), NULL);
 	if (data == NULL)
 		return (ra->err);
 
@@ -1653,7 +1665,7 @@ restore_spill(struct restorearg *ra, obj
 	    drrs->drr_length > SPA_MAXBLOCKSIZE)
 		return (SET_ERROR(EINVAL));
 
-	data = restore_read(ra, drrs->drr_length);
+	data = restore_read(ra, drrs->drr_length, NULL);
 	if (data == NULL)
 		return (ra->err);
 
@@ -1795,7 +1807,7 @@ dmu_recv_stream(dmu_recv_cookie_t *drc, 
 	 */
 	pcksum = ra.cksum;
 	while (ra.err == 0 &&
-	    NULL != (drr = restore_read(&ra, sizeof (*drr)))) {
+	    NULL != (drr = restore_read(&ra, sizeof (*drr), NULL))) {
 		if (issig(JUSTLOOKING) && issig(FORREAL)) {
 			ra.err = SET_ERROR(EINTR);
 			goto out;

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -21,7 +21,7 @@
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  * Portions Copyright (c) 2011 Martin Matuska <mm at FreeBSD.org>
- * Copyright (c) 2013, 2014 by Delphix. All rights reserved.
+ * Copyright (c) 2011, 2014 by Delphix. All rights reserved.
  * Copyright (c) 2014, Joyent, Inc. All rights reserved.
  * Copyright (c) 2014 RackTop Systems.
  */
@@ -699,7 +699,13 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd
 		dsphys->ds_uncompressed_bytes =
 		    origin->ds_phys->ds_uncompressed_bytes;
 		dsphys->ds_bp = origin->ds_phys->ds_bp;
-		dsphys->ds_flags |= origin->ds_phys->ds_flags;
+
+		/*
+		 * Inherit flags that describe the dataset's contents
+		 * (INCONSISTENT) or properties (Case Insensitive).
+		 */
+		dsphys->ds_flags |= origin->ds_phys->ds_flags &
+		    (DS_FLAG_INCONSISTENT | DS_FLAG_CI_DATASET);
 
 		dmu_buf_will_dirty(origin->ds_dbuf, tx);
 		origin->ds_phys->ds_num_children++;

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -375,13 +375,12 @@ dsl_scan_cancel(dsl_pool_t *dp)
 	    dsl_scan_cancel_sync, NULL, 3, ZFS_SPACE_CHECK_RESERVED));
 }
 
-static void dsl_scan_visitbp(blkptr_t *bp,
-    const zbookmark_phys_t *zb, dnode_phys_t *dnp, arc_buf_t *pbuf,
-    dsl_dataset_t *ds, dsl_scan_t *scn, dmu_objset_type_t ostype,
-    dmu_tx_t *tx);
+static void dsl_scan_visitbp(blkptr_t *bp, const zbookmark_phys_t *zb,
+    dnode_phys_t *dnp, dsl_dataset_t *ds, dsl_scan_t *scn,
+    dmu_objset_type_t ostype, dmu_tx_t *tx);
 static void dsl_scan_visitdnode(dsl_scan_t *, dsl_dataset_t *ds,
     dmu_objset_type_t ostype,
-    dnode_phys_t *dnp, arc_buf_t *buf, uint64_t object, dmu_tx_t *tx);
+    dnode_phys_t *dnp, uint64_t object, dmu_tx_t *tx);
 
 void
 dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bp)
@@ -615,7 +614,7 @@ dsl_scan_check_resume(dsl_scan_t *scn, c
 static int
 dsl_scan_recurse(dsl_scan_t *scn, dsl_dataset_t *ds, dmu_objset_type_t ostype,
     dnode_phys_t *dnp, const blkptr_t *bp,
-    const zbookmark_phys_t *zb, dmu_tx_t *tx, arc_buf_t **bufp)
+    const zbookmark_phys_t *zb, dmu_tx_t *tx)
 {
 	dsl_pool_t *dp = scn->scn_dp;
 	int zio_flags = ZIO_FLAG_CANFAIL | ZIO_FLAG_SCAN_THREAD;
@@ -626,76 +625,72 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 		int i;
 		blkptr_t *cbp;
 		int epb = BP_GET_LSIZE(bp) >> SPA_BLKPTRSHIFT;
+		arc_buf_t *buf;
 
-		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, bufp,
+		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf,
 		    ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb);
 		if (err) {
 			scn->scn_phys.scn_errors++;
 			return (err);
 		}
-		for (i = 0, cbp = (*bufp)->b_data; i < epb; i++, cbp++) {
-			dsl_scan_prefetch(scn, *bufp, cbp, zb->zb_objset,
+		for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) {
+			dsl_scan_prefetch(scn, buf, cbp, zb->zb_objset,
 			    zb->zb_object, zb->zb_blkid * epb + i);
 		}
-		for (i = 0, cbp = (*bufp)->b_data; i < epb; i++, cbp++) {
+		for (i = 0, cbp = buf->b_data; i < epb; i++, cbp++) {
 			zbookmark_phys_t czb;
 
 			SET_BOOKMARK(&czb, zb->zb_objset, zb->zb_object,
 			    zb->zb_level - 1,
 			    zb->zb_blkid * epb + i);
 			dsl_scan_visitbp(cbp, &czb, dnp,
-			    *bufp, ds, scn, ostype, tx);
-		}
-	} else if (BP_GET_TYPE(bp) == DMU_OT_USERGROUP_USED) {
-		uint32_t flags = ARC_WAIT;
-
-		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, bufp,
-		    ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb);
-		if (err) {
-			scn->scn_phys.scn_errors++;
-			return (err);
+			    ds, scn, ostype, tx);
 		}
+		(void) arc_buf_remove_ref(buf, &buf);
 	} else if (BP_GET_TYPE(bp) == DMU_OT_DNODE) {
 		uint32_t flags = ARC_WAIT;
 		dnode_phys_t *cdnp;
 		int i, j;
 		int epb = BP_GET_LSIZE(bp) >> DNODE_SHIFT;
+		arc_buf_t *buf;
 
-		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, bufp,
+		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf,
 		    ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb);
 		if (err) {
 			scn->scn_phys.scn_errors++;
 			return (err);
 		}
-		for (i = 0, cdnp = (*bufp)->b_data; i < epb; i++, cdnp++) {
+		for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) {
 			for (j = 0; j < cdnp->dn_nblkptr; j++) {
 				blkptr_t *cbp = &cdnp->dn_blkptr[j];
-				dsl_scan_prefetch(scn, *bufp, cbp,
+				dsl_scan_prefetch(scn, buf, cbp,
 				    zb->zb_objset, zb->zb_blkid * epb + i, j);
 			}
 		}
-		for (i = 0, cdnp = (*bufp)->b_data; i < epb; i++, cdnp++) {
+		for (i = 0, cdnp = buf->b_data; i < epb; i++, cdnp++) {
 			dsl_scan_visitdnode(scn, ds, ostype,
-			    cdnp, *bufp, zb->zb_blkid * epb + i, tx);
+			    cdnp, zb->zb_blkid * epb + i, tx);
 		}
 
+		(void) arc_buf_remove_ref(buf, &buf);
 	} else if (BP_GET_TYPE(bp) == DMU_OT_OBJSET) {
 		uint32_t flags = ARC_WAIT;
 		objset_phys_t *osp;
+		arc_buf_t *buf;
 
-		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, bufp,
+		err = arc_read(NULL, dp->dp_spa, bp, arc_getbuf_func, &buf,
 		    ZIO_PRIORITY_ASYNC_READ, zio_flags, &flags, zb);
 		if (err) {
 			scn->scn_phys.scn_errors++;
 			return (err);
 		}
 
-		osp = (*bufp)->b_data;
+		osp = buf->b_data;
 
 		dsl_scan_visitdnode(scn, ds, osp->os_type,
-		    &osp->os_meta_dnode, *bufp, DMU_META_DNODE_OBJECT, tx);
+		    &osp->os_meta_dnode, DMU_META_DNODE_OBJECT, tx);
 
-		if (OBJSET_BUF_HAS_USERUSED(*bufp)) {
+		if (OBJSET_BUF_HAS_USERUSED(buf)) {
 			/*
 			 * We also always visit user/group accounting
 			 * objects, and never skip them, even if we are
@@ -703,12 +698,13 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 			 * deltas from this txg get integrated.
 			 */
 			dsl_scan_visitdnode(scn, ds, osp->os_type,
-			    &osp->os_groupused_dnode, *bufp,
+			    &osp->os_groupused_dnode,
 			    DMU_GROUPUSED_OBJECT, tx);
 			dsl_scan_visitdnode(scn, ds, osp->os_type,
-			    &osp->os_userused_dnode, *bufp,
+			    &osp->os_userused_dnode,
 			    DMU_USERUSED_OBJECT, tx);
 		}
+		(void) arc_buf_remove_ref(buf, &buf);
 	}
 
 	return (0);
@@ -716,7 +712,7 @@ dsl_scan_recurse(dsl_scan_t *scn, dsl_da
 
 static void
 dsl_scan_visitdnode(dsl_scan_t *scn, dsl_dataset_t *ds,
-    dmu_objset_type_t ostype, dnode_phys_t *dnp, arc_buf_t *buf,
+    dmu_objset_type_t ostype, dnode_phys_t *dnp,
     uint64_t object, dmu_tx_t *tx)
 {
 	int j;
@@ -727,7 +723,7 @@ dsl_scan_visitdnode(dsl_scan_t *scn, dsl
 		SET_BOOKMARK(&czb, ds ? ds->ds_object : 0, object,
 		    dnp->dn_nlevels - 1, j);
 		dsl_scan_visitbp(&dnp->dn_blkptr[j],
-		    &czb, dnp, buf, ds, scn, ostype, tx);
+		    &czb, dnp, ds, scn, ostype, tx);
 	}
 
 	if (dnp->dn_flags & DNODE_FLAG_SPILL_BLKPTR) {
@@ -735,7 +731,7 @@ dsl_scan_visitdnode(dsl_scan_t *scn, dsl
 		SET_BOOKMARK(&czb, ds ? ds->ds_object : 0, object,
 		    0, DMU_SPILL_BLKID);
 		dsl_scan_visitbp(&dnp->dn_spill,
-		    &czb, dnp, buf, ds, scn, ostype, tx);
+		    &czb, dnp, ds, scn, ostype, tx);
 	}
 }
 
@@ -745,9 +741,8 @@ dsl_scan_visitdnode(dsl_scan_t *scn, dsl
  */
 static void
 dsl_scan_visitbp(blkptr_t *bp, const zbookmark_phys_t *zb,
-    dnode_phys_t *dnp, arc_buf_t *pbuf,
-    dsl_dataset_t *ds, dsl_scan_t *scn, dmu_objset_type_t ostype,
-    dmu_tx_t *tx)
+    dnode_phys_t *dnp, dsl_dataset_t *ds, dsl_scan_t *scn,
+    dmu_objset_type_t ostype, dmu_tx_t *tx)
 {
 	dsl_pool_t *dp = scn->scn_dp;
 	arc_buf_t *buf = NULL;
@@ -767,16 +762,15 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 	scn->scn_visited_this_txg++;
 
 	dprintf_bp(bp,
-	    "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx buf=%p bp=%p",
+	    "visiting ds=%p/%llu zb=%llx/%llx/%llx/%llx bp=%p",
 	    ds, ds ? ds->ds_object : 0,
 	    zb->zb_objset, zb->zb_object, zb->zb_level, zb->zb_blkid,
-	    pbuf, bp);
+	    bp);
 
 	if (bp->blk_birth <= scn->scn_phys.scn_cur_min_txg)
 		return;
 
-	if (dsl_scan_recurse(scn, ds, ostype, dnp, &bp_toread, zb, tx,
-	    &buf) != 0)
+	if (dsl_scan_recurse(scn, ds, ostype, dnp, &bp_toread, zb, tx) != 0)
 		return;
 
 	/*
@@ -800,8 +794,6 @@ dsl_scan_visitbp(blkptr_t *bp, const zbo
 	if (BP_PHYSICAL_BIRTH(bp) <= scn->scn_phys.scn_cur_max_txg) {
 		scan_funcs[scn->scn_phys.scn_func](dp, bp, zb);
 	}
-	if (buf)
-		(void) arc_buf_remove_ref(buf, &buf);
 }
 
 static void
@@ -812,7 +804,7 @@ dsl_scan_visit_rootbp(dsl_scan_t *scn, d
 
 	SET_BOOKMARK(&zb, ds ? ds->ds_object : DMU_META_OBJSET,
 	    ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID);
-	dsl_scan_visitbp(bp, &zb, NULL, NULL,
+	dsl_scan_visitbp(bp, &zb, NULL,
 	    ds, scn, DMU_OST_NONE, tx);
 
 	dprintf_ds(ds, "finished scan%s", "");

Modified: projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
==============================================================================
--- projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Mon Oct  6 11:15:11 2014	(r272609)
+++ projects/ipfw/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Mon Oct  6 11:29:50 2014	(r272610)
@@ -1277,7 +1277,9 @@ spa_unload(spa_t *spa)
 	 * Wait for any outstanding async I/O to complete.
 	 */
 	if (spa->spa_async_zio_root != NULL) {
-		(void) zio_wait(spa->spa_async_zio_root);
+		for (int i = 0; i < max_ncpus; i++)
+			(void) zio_wait(spa->spa_async_zio_root[i]);
+		kmem_free(spa->spa_async_zio_root, max_ncpus * sizeof (void *));
 		spa->spa_async_zio_root = NULL;
 	}
 
@@ -2213,8 +2215,13 @@ spa_load_impl(spa_t *spa, uint64_t pool_
 	/*
 	 * Create "The Godfather" zio to hold all async IOs
 	 */
-	spa->spa_async_zio_root = zio_root(spa, NULL, NULL,
-	    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_GODFATHER);
+	spa->spa_async_zio_root = kmem_alloc(max_ncpus * sizeof (void *),
+	    KM_SLEEP);
+	for (int i = 0; i < max_ncpus; i++) {
+		spa->spa_async_zio_root[i] = zio_root(spa, NULL, NULL,
+		    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE |
+		    ZIO_FLAG_GODFATHER);
+	}
 
 	/*
 	 * Parse the configuration into a vdev tree.  We explicitly set the
@@ -3567,8 +3574,13 @@ spa_create(const char *pool, nvlist_t *n
 	/*
 	 * Create "The Godfather" zio to hold all async IOs
 	 */
-	spa->spa_async_zio_root = zio_root(spa, NULL, NULL,
-	    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE | ZIO_FLAG_GODFATHER);
+	spa->spa_async_zio_root = kmem_alloc(max_ncpus * sizeof (void *),
+	    KM_SLEEP);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-projects mailing list