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