From owner-svn-src-projects@FreeBSD.ORG Sun Dec 19 18:21:26 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 365511065674; Sun, 19 Dec 2010 18:21:26 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 255BF8FC0C; Sun, 19 Dec 2010 18:21:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBJILQbo009246; Sun, 19 Dec 2010 18:21:26 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBJILQuG009244; Sun, 19 Dec 2010 18:21:26 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201012191821.oBJILQuG009244@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 19 Dec 2010 18:21:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216567 - projects/binutils-2.17/gnu/usr.bin/cc/cc_tools X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Dec 2010 18:21:26 -0000 Author: nwhitehorn Date: Sun Dec 19 18:21:25 2010 New Revision: 216567 URL: http://svn.freebsd.org/changeset/base/216567 Log: We can't use platform-specific #ifdefs in auto-host.h, because they will not be defined when building a cross-compiler. These two seem harmless if globally defined, so define them unconditionally. Modified: projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/auto-host.h Modified: projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/auto-host.h ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/auto-host.h Sun Dec 19 18:07:10 2010 (r216566) +++ projects/binutils-2.17/gnu/usr.bin/cc/cc_tools/auto-host.h Sun Dec 19 18:21:25 2010 (r216567) @@ -267,9 +267,7 @@ /* Define if your assembler supports -relax option. */ #ifndef USED_FOR_TARGET -# ifdef __sparc64__ -# define HAVE_AS_RELAX_OPTION 1 -# endif +#define HAVE_AS_RELAX_OPTION 1 #endif @@ -891,9 +889,7 @@ /* Define if your PowerPC64 linker only needs function descriptor syms. */ #ifndef USED_FOR_TARGET -# ifdef __powerpc64__ -# define HAVE_LD_NO_DOT_SYMS 1 -# endif +#define HAVE_LD_NO_DOT_SYMS 1 #endif From owner-svn-src-projects@FreeBSD.ORG Tue Dec 21 21:29:03 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DC51B106564A; Tue, 21 Dec 2010 21:29:03 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C70698FC08; Tue, 21 Dec 2010 21:29:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBLLT3gr075961; Tue, 21 Dec 2010 21:29:03 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBLLT3KT075943; Tue, 21 Dec 2010 21:29:03 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201012212129.oBLLT3KT075943@svn.freebsd.org> From: Attilio Rao Date: Tue, 21 Dec 2010 21:29:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216624 - in projects/sv: . bin/sh bin/sh/bltin cddl/contrib/opensolaris/lib/libzfs/common contrib/bsnmp/lib contrib/bsnmp/snmp_target contrib/bsnmp/snmp_usm contrib/bsnmp/snmp_vacm con... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Dec 2010 21:29:03 -0000 Author: attilio Date: Tue Dec 21 21:29:02 2010 New Revision: 216624 URL: http://svn.freebsd.org/changeset/base/216624 Log: MFC Added: projects/sv/contrib/bsnmp/lib/snmpcrypto.c - copied unchanged from r216620, head/contrib/bsnmp/lib/snmpcrypto.c projects/sv/contrib/bsnmp/lib/tc.def - copied unchanged from r216620, head/contrib/bsnmp/lib/tc.def projects/sv/contrib/bsnmp/snmp_target/ - copied from r216620, head/contrib/bsnmp/snmp_target/ projects/sv/contrib/bsnmp/snmp_usm/ - copied from r216620, head/contrib/bsnmp/snmp_usm/ projects/sv/contrib/bsnmp/snmp_vacm/ - copied from r216620, head/contrib/bsnmp/snmp_vacm/ projects/sv/share/man/man4/xen.4 - copied unchanged from r216620, head/share/man/man4/xen.4 projects/sv/sys/contrib/dev/acpica/events/evxfgpe.c - copied unchanged from r216620, head/sys/contrib/dev/acpica/events/evxfgpe.c projects/sv/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu - copied unchanged from r216620, head/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu projects/sv/sys/kern/kern_hhook.c - copied unchanged from r216620, head/sys/kern/kern_hhook.c projects/sv/sys/kern/kern_khelp.c - copied unchanged from r216620, head/sys/kern/kern_khelp.c projects/sv/sys/mips/mips/uma_machdep.c - copied unchanged from r216620, head/sys/mips/mips/uma_machdep.c projects/sv/sys/mips/rmi/dev/iic/ - copied from r216620, head/sys/mips/rmi/dev/iic/ projects/sv/sys/sys/hhook.h - copied unchanged from r216620, head/sys/sys/hhook.h projects/sv/sys/sys/khelp.h - copied unchanged from r216620, head/sys/sys/khelp.h projects/sv/sys/sys/module_khelp.h - copied unchanged from r216620, head/sys/sys/module_khelp.h projects/sv/sys/x86/include/bus.h - copied unchanged from r216620, head/sys/x86/include/bus.h projects/sv/sys/x86/x86/busdma_machdep.c - copied unchanged from r216620, head/sys/x86/x86/busdma_machdep.c projects/sv/sys/x86/x86/tsc.c - copied unchanged from r216620, head/sys/x86/x86/tsc.c projects/sv/tools/regression/acltools/tools-nfs4-psarc.test - copied unchanged from r216620, head/tools/regression/acltools/tools-nfs4-psarc.test projects/sv/tools/regression/bin/sh/builtins/printf3.0 - copied unchanged from r216620, head/tools/regression/bin/sh/builtins/printf3.0 projects/sv/tools/regression/bin/sh/builtins/printf4.0 - copied unchanged from r216620, head/tools/regression/bin/sh/builtins/printf4.0 projects/sv/tools/regression/bin/sh/expansion/arith7.0 - copied unchanged from r216620, head/tools/regression/bin/sh/expansion/arith7.0 projects/sv/tools/regression/bin/sh/expansion/arith8.0 - copied unchanged from r216620, head/tools/regression/bin/sh/expansion/arith8.0 projects/sv/tools/regression/bin/sh/expansion/cmdsubst3.0 - copied unchanged from r216620, head/tools/regression/bin/sh/expansion/cmdsubst3.0 projects/sv/tools/regression/usr.bin/printf/regress.m5.out - copied unchanged from r216620, head/tools/regression/usr.bin/printf/regress.m5.out projects/sv/usr.sbin/bsnmpd/modules/snmp_target/ - copied from r216620, head/usr.sbin/bsnmpd/modules/snmp_target/ projects/sv/usr.sbin/bsnmpd/modules/snmp_usm/ - copied from r216620, head/usr.sbin/bsnmpd/modules/snmp_usm/ projects/sv/usr.sbin/bsnmpd/modules/snmp_vacm/ - copied from r216620, head/usr.sbin/bsnmpd/modules/snmp_vacm/ projects/sv/usr.sbin/bsnmpd/tools/ - copied from r216620, head/usr.sbin/bsnmpd/tools/ Deleted: projects/sv/sys/amd64/amd64/busdma_machdep.c projects/sv/sys/amd64/amd64/tsc.c projects/sv/sys/contrib/dev/wpi/iwlwifi-3945-2.14.4.fw.uu projects/sv/sys/i386/i386/busdma_machdep.c projects/sv/sys/i386/i386/tsc.c Modified: projects/sv/Makefile projects/sv/ObsoleteFiles.inc projects/sv/UPDATING projects/sv/bin/sh/arith_lex.l projects/sv/bin/sh/bltin/bltin.h projects/sv/bin/sh/expand.c projects/sv/bin/sh/jobs.c projects/sv/bin/sh/memalloc.c projects/sv/bin/sh/memalloc.h projects/sv/bin/sh/output.c projects/sv/bin/sh/parser.c projects/sv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c projects/sv/contrib/bsnmp/lib/asn1.c projects/sv/contrib/bsnmp/lib/asn1.h projects/sv/contrib/bsnmp/lib/bsnmpclient.3 projects/sv/contrib/bsnmp/lib/bsnmplib.3 projects/sv/contrib/bsnmp/lib/snmp.c projects/sv/contrib/bsnmp/lib/snmp.h projects/sv/contrib/bsnmp/lib/snmpagent.c projects/sv/contrib/bsnmp/lib/snmpclient.c projects/sv/contrib/bsnmp/lib/snmpclient.h projects/sv/contrib/bsnmp/lib/snmppriv.h projects/sv/contrib/bsnmp/snmpd/BEGEMOT-SNMPD.txt projects/sv/contrib/bsnmp/snmpd/action.c projects/sv/contrib/bsnmp/snmpd/bsnmpd.1 projects/sv/contrib/bsnmp/snmpd/config.c projects/sv/contrib/bsnmp/snmpd/export.c projects/sv/contrib/bsnmp/snmpd/main.c projects/sv/contrib/bsnmp/snmpd/snmpd.h projects/sv/contrib/bsnmp/snmpd/snmpmod.3 projects/sv/contrib/bsnmp/snmpd/snmpmod.h projects/sv/contrib/bsnmp/snmpd/trans_lsock.c projects/sv/contrib/bsnmp/snmpd/trans_udp.c projects/sv/contrib/bsnmp/snmpd/trap.c projects/sv/contrib/bsnmp/snmpd/tree.def projects/sv/etc/rc.d/pf projects/sv/etc/snmpd.config projects/sv/games/factor/factor.c projects/sv/include/unistd.h projects/sv/lib/csu/amd64/crt1.c projects/sv/lib/csu/amd64/crti.S projects/sv/lib/csu/amd64/crtn.S projects/sv/lib/csu/arm/crt1.c projects/sv/lib/csu/arm/crtn.S projects/sv/lib/csu/i386-elf/crt1_c.c projects/sv/lib/csu/i386-elf/crt1_s.S projects/sv/lib/csu/i386-elf/crti.S projects/sv/lib/csu/i386-elf/crtn.S projects/sv/lib/csu/ia64/Makefile projects/sv/lib/csu/ia64/crt1.S projects/sv/lib/csu/ia64/crti.S projects/sv/lib/csu/ia64/crtn.S projects/sv/lib/csu/powerpc/crt1.c projects/sv/lib/csu/powerpc/crti.S projects/sv/lib/csu/powerpc/crtn.S projects/sv/lib/csu/powerpc64/crt1.c projects/sv/lib/csu/powerpc64/crti.S projects/sv/lib/csu/powerpc64/crtn.S projects/sv/lib/csu/sparc64/crt1.c projects/sv/lib/csu/sparc64/crti.S projects/sv/lib/csu/sparc64/crtn.S projects/sv/lib/libbsnmp/libbsnmp/Makefile projects/sv/lib/libc/posix1e/acl_is_trivial_np.3 projects/sv/lib/libc/powerpc64/sys/cerror.S projects/sv/lib/libc/powerpc64/sys/ptrace.S projects/sv/lib/libc/stdio/freopen.c projects/sv/lib/libc/sys/shmat.2 projects/sv/lib/libc/sys/shmctl.2 projects/sv/lib/libc/sys/shmget.2 projects/sv/lib/libipsec/ipsec_dump_policy.c projects/sv/lib/libproc/proc_create.c projects/sv/lib/libusb/libusb20_compat01.c projects/sv/libexec/getty/chat.c projects/sv/libexec/getty/main.c projects/sv/libexec/rbootd/rbootd.c projects/sv/libexec/rlogind/rlogind.c projects/sv/libexec/rpc.rwalld/rwalld.c projects/sv/libexec/rtld-elf/rtld.c projects/sv/release/powerpc/mkisoimages.sh projects/sv/sbin/camcontrol/camcontrol.c projects/sv/sbin/geom/Makefile.inc projects/sv/sbin/geom/class/Makefile.inc projects/sv/sbin/geom/class/cache/Makefile projects/sv/sbin/geom/class/concat/Makefile projects/sv/sbin/geom/class/eli/Makefile projects/sv/sbin/geom/class/journal/Makefile projects/sv/sbin/geom/class/label/Makefile projects/sv/sbin/geom/class/mirror/Makefile projects/sv/sbin/geom/class/mountver/Makefile projects/sv/sbin/geom/class/multipath/Makefile projects/sv/sbin/geom/class/nop/Makefile projects/sv/sbin/geom/class/part/Makefile projects/sv/sbin/geom/class/part/geom_part.c projects/sv/sbin/geom/class/raid3/Makefile projects/sv/sbin/geom/class/sched/Makefile projects/sv/sbin/geom/class/shsec/Makefile projects/sv/sbin/geom/class/stripe/Makefile projects/sv/sbin/geom/class/virstor/Makefile projects/sv/sbin/geom/core/Makefile projects/sv/sbin/geom/core/geom.c projects/sv/sbin/hastd/hastd.c projects/sv/sbin/hastd/primary.c projects/sv/sbin/ifconfig/ifconfig.c projects/sv/sbin/ifconfig/ifmedia.c projects/sv/sbin/mount/mount_fs.c projects/sv/sbin/newfs/newfs.c projects/sv/sbin/ping6/ping6.c projects/sv/sbin/route/route.c projects/sv/sbin/savecore/savecore.c projects/sv/share/man/man4/Makefile projects/sv/share/man/man4/altq.4 projects/sv/share/man/man4/ixgb.4 projects/sv/share/man/man4/ixgbe.4 projects/sv/share/man/man4/jme.4 projects/sv/share/man/man4/miibus.4 projects/sv/share/man/man4/uplcom.4 projects/sv/share/man/man4/vlan.4 projects/sv/share/man/man5/rc.conf.5 projects/sv/share/man/man9/VOP_READDIR.9 projects/sv/share/misc/committers-ports.dot projects/sv/sys/amd64/amd64/fpu.c projects/sv/sys/amd64/amd64/identcpu.c projects/sv/sys/amd64/amd64/legacy.c projects/sv/sys/amd64/amd64/machdep.c projects/sv/sys/amd64/conf/XENHVM projects/sv/sys/amd64/include/atomic.h projects/sv/sys/amd64/include/bus.h projects/sv/sys/amd64/include/cpu.h projects/sv/sys/cam/cam_periph.c projects/sv/sys/cam/scsi/scsi_pass.c projects/sv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/sv/sys/cddl/dev/cyclic/i386/cyclic_machdep.c projects/sv/sys/compat/freebsd32/freebsd32.h projects/sv/sys/compat/ndis/hal_var.h projects/sv/sys/conf/Makefile.mips projects/sv/sys/conf/NOTES projects/sv/sys/conf/files projects/sv/sys/conf/files.amd64 projects/sv/sys/conf/files.i386 projects/sv/sys/conf/files.mips projects/sv/sys/conf/files.pc98 projects/sv/sys/contrib/dev/acpica/changes.txt projects/sv/sys/contrib/dev/acpica/common/dmtable.c projects/sv/sys/contrib/dev/acpica/common/dmtbinfo.c projects/sv/sys/contrib/dev/acpica/compiler/aslanalyze.c projects/sv/sys/contrib/dev/acpica/compiler/aslerror.c projects/sv/sys/contrib/dev/acpica/compiler/aslmessages.h projects/sv/sys/contrib/dev/acpica/compiler/dtutils.c projects/sv/sys/contrib/dev/acpica/debugger/dbcmds.c projects/sv/sys/contrib/dev/acpica/debugger/dbdisply.c projects/sv/sys/contrib/dev/acpica/debugger/dbexec.c projects/sv/sys/contrib/dev/acpica/dispatcher/dswexec.c projects/sv/sys/contrib/dev/acpica/events/evevent.c projects/sv/sys/contrib/dev/acpica/events/evgpe.c projects/sv/sys/contrib/dev/acpica/events/evgpeblk.c projects/sv/sys/contrib/dev/acpica/events/evgpeinit.c projects/sv/sys/contrib/dev/acpica/events/evgpeutil.c projects/sv/sys/contrib/dev/acpica/events/evxface.c projects/sv/sys/contrib/dev/acpica/events/evxfevnt.c projects/sv/sys/contrib/dev/acpica/executer/exconfig.c projects/sv/sys/contrib/dev/acpica/include/acdebug.h projects/sv/sys/contrib/dev/acpica/include/acdisasm.h projects/sv/sys/contrib/dev/acpica/include/acevents.h projects/sv/sys/contrib/dev/acpica/include/acglobal.h projects/sv/sys/contrib/dev/acpica/include/aclocal.h projects/sv/sys/contrib/dev/acpica/include/acpixf.h projects/sv/sys/contrib/dev/acpica/include/actypes.h projects/sv/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h projects/sv/sys/contrib/dev/acpica/utilities/utglobal.c projects/sv/sys/contrib/dev/acpica/utilities/utxface.c projects/sv/sys/contrib/dev/wpi/LICENSE projects/sv/sys/contrib/octeon-sdk/cvmx-app-init.h projects/sv/sys/contrib/octeon-sdk/cvmx-helper-board.c projects/sv/sys/contrib/octeon-sdk/cvmx-helper-rgmii.c projects/sv/sys/contrib/octeon-sdk/cvmx-pcie.c projects/sv/sys/dev/acpi_support/acpi_fujitsu.c projects/sv/sys/dev/acpica/acpi.c projects/sv/sys/dev/acpica/acpi_battery.c projects/sv/sys/dev/acpica/acpi_button.c projects/sv/sys/dev/acpica/acpi_cmbat.c projects/sv/sys/dev/acpica/acpi_cpu.c projects/sv/sys/dev/acpica/acpi_ec.c projects/sv/sys/dev/acpica/acpi_hpet.c projects/sv/sys/dev/acpica/acpi_smbat.c projects/sv/sys/dev/acpica/acpiio.h projects/sv/sys/dev/ahci/ahci.c projects/sv/sys/dev/alc/if_alc.c projects/sv/sys/dev/ale/if_ale.c projects/sv/sys/dev/atkbdc/atkbd_atkbdc.c projects/sv/sys/dev/atkbdc/atkbdc.c projects/sv/sys/dev/atkbdc/atkbdc_isa.c projects/sv/sys/dev/atkbdc/atkbdcreg.h projects/sv/sys/dev/atkbdc/psm.c projects/sv/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c projects/sv/sys/dev/cxgb/ulp/tom/cxgb_ddp.c projects/sv/sys/dev/cxgb/ulp/tom/cxgb_tom.c projects/sv/sys/dev/cxgb/ulp/tom/cxgb_vm.c projects/sv/sys/dev/cxgb/ulp/tom/cxgb_vm.h projects/sv/sys/dev/drm/drm_irq.c projects/sv/sys/dev/hifn/hifn7751.c projects/sv/sys/dev/ichwd/ichwd.c projects/sv/sys/dev/ichwd/ichwd.h projects/sv/sys/dev/ieee488/ibfoo.c projects/sv/sys/dev/if_ndis/if_ndis_pccard.c projects/sv/sys/dev/if_ndis/if_ndis_pci.c projects/sv/sys/dev/iicbus/ds1775.c projects/sv/sys/dev/jme/if_jme.c projects/sv/sys/dev/jme/if_jmereg.h projects/sv/sys/dev/jme/if_jmevar.h projects/sv/sys/dev/le/if_le_pci.c projects/sv/sys/dev/lmc/if_lmc.c projects/sv/sys/dev/malo/if_malo_pci.c projects/sv/sys/dev/mii/jmphy.c projects/sv/sys/dev/mii/jmphyreg.h projects/sv/sys/dev/mps/mps.c projects/sv/sys/dev/mps/mps_sas.c projects/sv/sys/dev/mps/mpsvar.h projects/sv/sys/dev/pci/vga_pci.c projects/sv/sys/dev/puc/pucdata.c projects/sv/sys/dev/sis/if_sis.c projects/sv/sys/dev/sound/pci/atiixp.c projects/sv/sys/dev/sound/pci/csa.c projects/sv/sys/dev/sound/pci/ich.c projects/sv/sys/dev/uart/uart_cpu_amd64.c projects/sv/sys/dev/uart/uart_cpu_i386.c projects/sv/sys/dev/uart/uart_cpu_pc98.c projects/sv/sys/dev/usb/net/if_axe.c projects/sv/sys/dev/wpi/if_wpi.c projects/sv/sys/fs/devfs/devfs_devs.c projects/sv/sys/fs/devfs/devfs_rule.c projects/sv/sys/fs/devfs/devfs_vnops.c projects/sv/sys/fs/nfsserver/nfs_nfsdstate.c projects/sv/sys/geom/part/g_part_mbr.c projects/sv/sys/i386/i386/identcpu.c projects/sv/sys/i386/i386/legacy.c projects/sv/sys/i386/i386/machdep.c projects/sv/sys/i386/i386/pmap.c projects/sv/sys/i386/include/atomic.h projects/sv/sys/i386/include/bus.h projects/sv/sys/i386/include/cpu.h projects/sv/sys/i386/isa/npx.c projects/sv/sys/i386/xen/clock.c projects/sv/sys/kern/init_main.c projects/sv/sys/kern/kern_conf.c projects/sv/sys/kern/kern_fail.c projects/sv/sys/kern/kern_fork.c projects/sv/sys/kern/kern_resource.c projects/sv/sys/kern/kern_thread.c projects/sv/sys/kern/kern_umtx.c projects/sv/sys/kern/sched_4bsd.c projects/sv/sys/kern/sched_ule.c projects/sv/sys/kern/subr_acl_nfs4.c projects/sv/sys/kern/subr_clock.c projects/sv/sys/kern/sys_pipe.c projects/sv/sys/kern/sys_process.c projects/sv/sys/kern/uipc_syscalls.c projects/sv/sys/kern/vfs_bio.c projects/sv/sys/mips/adm5120/adm5120_machdep.c projects/sv/sys/mips/alchemy/alchemy_machdep.c projects/sv/sys/mips/atheros/ar71xx_machdep.c projects/sv/sys/mips/cavium/octe/ethernet-common.c projects/sv/sys/mips/cavium/octeon_machdep.c projects/sv/sys/mips/conf/SWARM projects/sv/sys/mips/conf/SWARM64 projects/sv/sys/mips/conf/SWARM64_SMP projects/sv/sys/mips/conf/SWARM_SMP projects/sv/sys/mips/conf/XLR projects/sv/sys/mips/idt/idt_machdep.c projects/sv/sys/mips/include/pmap.h projects/sv/sys/mips/include/vmparam.h projects/sv/sys/mips/malta/malta_machdep.c projects/sv/sys/mips/mips/elf_trampoline.c projects/sv/sys/mips/mips/inckern.S projects/sv/sys/mips/mips/pmap.c projects/sv/sys/mips/mips/vm_machdep.c projects/sv/sys/mips/rmi/board.c projects/sv/sys/mips/rmi/board.h projects/sv/sys/mips/rmi/dev/nlge/if_nlge.c projects/sv/sys/mips/rmi/dev/xlr/rge.c projects/sv/sys/mips/rmi/files.xlr projects/sv/sys/mips/rmi/iodi.c projects/sv/sys/mips/rmi/xlr_i2c.c projects/sv/sys/mips/rmi/xlr_machdep.c projects/sv/sys/mips/rmi/xlr_pci.c projects/sv/sys/mips/sentry5/s5_machdep.c projects/sv/sys/mips/sibyte/sb_machdep.c projects/sv/sys/modules/acpi/acpi/Makefile projects/sv/sys/modules/wpifw/Makefile projects/sv/sys/net/if.h projects/sv/sys/netinet/if_atm.c projects/sv/sys/netinet/sctp_indata.c projects/sv/sys/netinet/sctp_input.c projects/sv/sys/netinet/sctputil.c projects/sv/sys/netinet6/nd6.c projects/sv/sys/nfsserver/nfs_serv.c projects/sv/sys/pc98/include/bus.h projects/sv/sys/pc98/pc98/machdep.c projects/sv/sys/powerpc/aim/mmu_oea.c projects/sv/sys/powerpc/aim/mmu_oea64.c projects/sv/sys/powerpc/include/vmparam.h projects/sv/sys/sys/fail.h projects/sv/sys/sys/osd.h projects/sv/sys/sys/param.h projects/sv/sys/sys/proc.h projects/sv/sys/sys/sleepqueue.h projects/sv/sys/sys/turnstile.h projects/sv/sys/vm/memguard.c projects/sv/sys/vm/vm_extern.h projects/sv/sys/vm/vm_fault.c projects/sv/sys/vm/vm_map.c projects/sv/sys/vm/vm_map.h projects/sv/sys/vm/vm_page.c projects/sv/sys/vm/vm_page.h projects/sv/sys/x86/isa/atrtc.c projects/sv/sys/x86/x86/nexus.c projects/sv/sys/xen/evtchn/evtchn.c projects/sv/sys/xen/xenstore/xenstore.c projects/sv/tools/regression/acltools/02.t projects/sv/tools/regression/bin/sh/errors/bad-keyword1.0 projects/sv/tools/regression/bin/sh/execution/func3.0 projects/sv/tools/regression/sockets/sendfile/sendfile.c projects/sv/tools/regression/usr.bin/printf/regress.sh projects/sv/usr.bin/apply/apply.1 projects/sv/usr.bin/apply/apply.c projects/sv/usr.bin/banner/banner.6 projects/sv/usr.bin/banner/banner.c projects/sv/usr.bin/basename/basename.1 projects/sv/usr.bin/basename/basename.c projects/sv/usr.bin/biff/biff.1 projects/sv/usr.bin/biff/biff.c projects/sv/usr.bin/calendar/calendars/calendar.freebsd projects/sv/usr.bin/cap_mkdb/cap_mkdb.1 projects/sv/usr.bin/cap_mkdb/cap_mkdb.c projects/sv/usr.bin/checknr/checknr.1 projects/sv/usr.bin/checknr/checknr.c projects/sv/usr.bin/chpass/chpass.1 projects/sv/usr.bin/chpass/table.c projects/sv/usr.bin/cksum/cksum.1 projects/sv/usr.bin/cksum/cksum.c projects/sv/usr.bin/cksum/crc.c projects/sv/usr.bin/cksum/extern.h projects/sv/usr.bin/cksum/print.c projects/sv/usr.bin/cksum/sum1.c projects/sv/usr.bin/cksum/sum2.c projects/sv/usr.bin/cmp/cmp.1 projects/sv/usr.bin/cmp/cmp.c projects/sv/usr.bin/cmp/extern.h projects/sv/usr.bin/cmp/misc.c projects/sv/usr.bin/cmp/regular.c projects/sv/usr.bin/cmp/special.c projects/sv/usr.bin/col/col.1 projects/sv/usr.bin/col/col.c projects/sv/usr.bin/colcrt/colcrt.1 projects/sv/usr.bin/colcrt/colcrt.c projects/sv/usr.bin/colrm/colrm.1 projects/sv/usr.bin/colrm/colrm.c projects/sv/usr.bin/column/column.1 projects/sv/usr.bin/column/column.c projects/sv/usr.bin/comm/comm.1 projects/sv/usr.bin/comm/comm.c projects/sv/usr.bin/compress/compress.1 projects/sv/usr.bin/compress/compress.c projects/sv/usr.bin/compress/zopen.3 projects/sv/usr.bin/compress/zopen.c projects/sv/usr.bin/csup/fnmatch.c projects/sv/usr.bin/csup/fnmatch.h projects/sv/usr.bin/csup/rcsfile.c projects/sv/usr.bin/csup/rcsfile.h projects/sv/usr.bin/ctags/C.c projects/sv/usr.bin/ctags/ctags.1 projects/sv/usr.bin/ctags/ctags.c projects/sv/usr.bin/ctags/ctags.h projects/sv/usr.bin/ctags/fortran.c projects/sv/usr.bin/ctags/lisp.c projects/sv/usr.bin/ctags/print.c projects/sv/usr.bin/ctags/tree.c projects/sv/usr.bin/ctags/yacc.c projects/sv/usr.bin/cut/cut.1 projects/sv/usr.bin/cut/cut.c projects/sv/usr.bin/dirname/dirname.c projects/sv/usr.bin/du/du.1 projects/sv/usr.bin/du/du.c projects/sv/usr.bin/env/env.1 projects/sv/usr.bin/env/env.c projects/sv/usr.bin/expand/expand.1 projects/sv/usr.bin/expand/expand.c projects/sv/usr.bin/false/false.1 projects/sv/usr.bin/false/false.c projects/sv/usr.bin/find/extern.h projects/sv/usr.bin/find/find.1 projects/sv/usr.bin/find/find.c projects/sv/usr.bin/find/find.h projects/sv/usr.bin/find/function.c projects/sv/usr.bin/find/ls.c projects/sv/usr.bin/find/main.c projects/sv/usr.bin/find/misc.c projects/sv/usr.bin/find/operator.c projects/sv/usr.bin/find/option.c projects/sv/usr.bin/finger/extern.h projects/sv/usr.bin/finger/finger.1 projects/sv/usr.bin/finger/finger.c projects/sv/usr.bin/finger/finger.h projects/sv/usr.bin/finger/lprint.c projects/sv/usr.bin/finger/net.c projects/sv/usr.bin/finger/sprint.c projects/sv/usr.bin/finger/util.c projects/sv/usr.bin/fmt/fmt.1 projects/sv/usr.bin/fold/fold.1 projects/sv/usr.bin/fold/fold.c projects/sv/usr.bin/from/from.1 projects/sv/usr.bin/from/from.c projects/sv/usr.bin/fstat/fstat.1 projects/sv/usr.bin/fstat/fstat.c projects/sv/usr.bin/fstat/fstat.h projects/sv/usr.bin/gcore/extern.h projects/sv/usr.bin/gcore/gcore.1 projects/sv/usr.bin/gcore/gcore.c projects/sv/usr.bin/gprof/amd64.h projects/sv/usr.bin/gprof/aout.c projects/sv/usr.bin/gprof/arcs.c projects/sv/usr.bin/gprof/arm.h projects/sv/usr.bin/gprof/dfn.c projects/sv/usr.bin/gprof/elf.c projects/sv/usr.bin/gprof/gprof.1 projects/sv/usr.bin/gprof/gprof.c projects/sv/usr.bin/gprof/gprof.h projects/sv/usr.bin/gprof/hertz.c projects/sv/usr.bin/gprof/i386.h projects/sv/usr.bin/gprof/ia64.h projects/sv/usr.bin/gprof/lookup.c projects/sv/usr.bin/gprof/pathnames.h projects/sv/usr.bin/gprof/powerpc.h projects/sv/usr.bin/gprof/printgprof.c projects/sv/usr.bin/gprof/printlist.c projects/sv/usr.bin/gprof/sparc64.h projects/sv/usr.bin/head/head.1 projects/sv/usr.bin/head/head.c projects/sv/usr.bin/hexdump/conv.c projects/sv/usr.bin/hexdump/display.c projects/sv/usr.bin/hexdump/hexdump.1 projects/sv/usr.bin/hexdump/hexdump.c projects/sv/usr.bin/hexdump/hexdump.h projects/sv/usr.bin/hexdump/hexsyntax.c projects/sv/usr.bin/hexdump/od.1 projects/sv/usr.bin/hexdump/odsyntax.c projects/sv/usr.bin/hexdump/parse.c projects/sv/usr.bin/id/groups.1 projects/sv/usr.bin/id/id.1 projects/sv/usr.bin/id/id.c projects/sv/usr.bin/id/whoami.1 projects/sv/usr.bin/join/join.1 projects/sv/usr.bin/join/join.c projects/sv/usr.bin/jot/jot.1 projects/sv/usr.bin/jot/jot.c projects/sv/usr.bin/kdump/kdump.1 projects/sv/usr.bin/kdump/kdump.c projects/sv/usr.bin/ktrace/ktrace.1 projects/sv/usr.bin/ktrace/ktrace.c projects/sv/usr.bin/ktrace/ktrace.h projects/sv/usr.bin/ktrace/subr.c projects/sv/usr.bin/lam/lam.1 projects/sv/usr.bin/lam/lam.c projects/sv/usr.bin/last/last.1 projects/sv/usr.bin/last/last.c projects/sv/usr.bin/lastcomm/lastcomm.1 projects/sv/usr.bin/lastcomm/lastcomm.c projects/sv/usr.bin/lastcomm/pathnames.h projects/sv/usr.bin/leave/leave.1 projects/sv/usr.bin/leave/leave.c projects/sv/usr.bin/lock/lock.1 projects/sv/usr.bin/lock/lock.c projects/sv/usr.bin/logger/logger.1 projects/sv/usr.bin/logger/logger.c projects/sv/usr.bin/login/login.1 projects/sv/usr.bin/login/pathnames.h projects/sv/usr.bin/logname/logname.1 projects/sv/usr.bin/logname/logname.c projects/sv/usr.bin/look/look.1 projects/sv/usr.bin/look/look.c projects/sv/usr.bin/look/pathnames.h projects/sv/usr.bin/lorder/lorder.1 projects/sv/usr.bin/lorder/lorder.sh projects/sv/usr.bin/m4/TEST/ack.m4 projects/sv/usr.bin/m4/TEST/hanoi.m4 projects/sv/usr.bin/m4/TEST/hash.m4 projects/sv/usr.bin/m4/TEST/sqroot.m4 projects/sv/usr.bin/m4/TEST/string.m4 projects/sv/usr.bin/m4/TEST/test.m4 projects/sv/usr.bin/m4/eval.c projects/sv/usr.bin/m4/expr.c projects/sv/usr.bin/m4/extern.h projects/sv/usr.bin/m4/look.c projects/sv/usr.bin/m4/main.c projects/sv/usr.bin/m4/mdef.h projects/sv/usr.bin/m4/misc.c projects/sv/usr.bin/m4/pathnames.h projects/sv/usr.bin/m4/stdd.h projects/sv/usr.bin/mail/cmd1.c projects/sv/usr.bin/mail/cmd2.c projects/sv/usr.bin/mail/cmd3.c projects/sv/usr.bin/mail/cmdtab.c projects/sv/usr.bin/mail/collect.c projects/sv/usr.bin/mail/def.h projects/sv/usr.bin/mail/edit.c projects/sv/usr.bin/mail/extern.h projects/sv/usr.bin/mail/fio.c projects/sv/usr.bin/mail/getname.c projects/sv/usr.bin/mail/glob.h projects/sv/usr.bin/mail/head.c projects/sv/usr.bin/mail/lex.c projects/sv/usr.bin/mail/list.c projects/sv/usr.bin/mail/mail.1 projects/sv/usr.bin/mail/main.c projects/sv/usr.bin/mail/names.c projects/sv/usr.bin/mail/pathnames.h projects/sv/usr.bin/mail/popen.c projects/sv/usr.bin/mail/quit.c projects/sv/usr.bin/mail/rcv.h projects/sv/usr.bin/mail/send.c projects/sv/usr.bin/mail/strings.c projects/sv/usr.bin/mail/temp.c projects/sv/usr.bin/mail/tty.c projects/sv/usr.bin/mail/util.c projects/sv/usr.bin/mail/v7.local.c projects/sv/usr.bin/mail/vars.c projects/sv/usr.bin/mail/version.c projects/sv/usr.bin/man/man.sh projects/sv/usr.bin/mesg/mesg.1 projects/sv/usr.bin/mkdep/mkdep.1 projects/sv/usr.bin/mkdep/mkdep.gcc.sh projects/sv/usr.bin/mkdep/mkdep.sh projects/sv/usr.bin/mkfifo/mkfifo.1 projects/sv/usr.bin/mkfifo/mkfifo.c projects/sv/usr.bin/mklocale/extern.h projects/sv/usr.bin/mklocale/ldef.h projects/sv/usr.bin/mklocale/lex.l projects/sv/usr.bin/mklocale/mklocale.1 projects/sv/usr.bin/mklocale/yacc.y projects/sv/usr.bin/mkstr/mkstr.1 projects/sv/usr.bin/mkstr/mkstr.c projects/sv/usr.bin/mktemp/mktemp.1 projects/sv/usr.bin/msgs/msgs.1 projects/sv/usr.bin/msgs/msgs.c projects/sv/usr.bin/msgs/pathnames.h projects/sv/usr.bin/mt/mt.1 projects/sv/usr.bin/mt/mt.c projects/sv/usr.bin/netstat/atalk.c projects/sv/usr.bin/netstat/if.c projects/sv/usr.bin/netstat/inet.c projects/sv/usr.bin/netstat/inet6.c projects/sv/usr.bin/netstat/ipsec.c projects/sv/usr.bin/netstat/main.c projects/sv/usr.bin/netstat/netstat.1 projects/sv/usr.bin/netstat/netstat.h projects/sv/usr.bin/netstat/pfkey.c projects/sv/usr.bin/netstat/route.c projects/sv/usr.bin/netstat/unix.c projects/sv/usr.bin/nfsstat/nfsstat.1 projects/sv/usr.bin/nfsstat/nfsstat.c projects/sv/usr.bin/nice/nice.1 projects/sv/usr.bin/nice/nice.c projects/sv/usr.bin/nohup/nohup.1 projects/sv/usr.bin/nohup/nohup.c projects/sv/usr.bin/pagesize/pagesize.1 projects/sv/usr.bin/pagesize/pagesize.sh projects/sv/usr.bin/passwd/passwd.1 projects/sv/usr.bin/paste/paste.1 projects/sv/usr.bin/paste/paste.c projects/sv/usr.bin/printenv/printenv.1 projects/sv/usr.bin/printenv/printenv.c projects/sv/usr.bin/printf/printf.1 projects/sv/usr.bin/printf/printf.c projects/sv/usr.bin/quota/quota.1 projects/sv/usr.bin/quota/quota.c projects/sv/usr.bin/renice/renice.8 projects/sv/usr.bin/renice/renice.c projects/sv/usr.bin/rev/rev.1 projects/sv/usr.bin/rev/rev.c projects/sv/usr.bin/rlogin/rlogin.1 projects/sv/usr.bin/rs/rs.1 projects/sv/usr.bin/rs/rs.c projects/sv/usr.bin/rsh/rsh.1 projects/sv/usr.bin/rsh/rsh.c projects/sv/usr.bin/rup/rup.1 projects/sv/usr.bin/ruptime/ruptime.1 projects/sv/usr.bin/ruptime/ruptime.c projects/sv/usr.bin/rusers/rusers.1 projects/sv/usr.bin/rwall/rwall.1 projects/sv/usr.bin/rwho/rwho.1 projects/sv/usr.bin/rwho/rwho.c projects/sv/usr.bin/script/script.1 projects/sv/usr.bin/script/script.c projects/sv/usr.bin/shar/shar.1 projects/sv/usr.bin/shar/shar.sh projects/sv/usr.bin/showmount/showmount.8 projects/sv/usr.bin/showmount/showmount.c projects/sv/usr.bin/split/split.1 projects/sv/usr.bin/split/split.c projects/sv/usr.bin/stat/stat.c projects/sv/usr.bin/su/su.1 projects/sv/usr.bin/su/su.c projects/sv/usr.bin/systat/cmds.c projects/sv/usr.bin/systat/cmdtab.c projects/sv/usr.bin/systat/devs.c projects/sv/usr.bin/systat/extern.h projects/sv/usr.bin/systat/fetch.c projects/sv/usr.bin/systat/icmp.c projects/sv/usr.bin/systat/icmp6.c projects/sv/usr.bin/systat/iostat.c projects/sv/usr.bin/systat/ip.c projects/sv/usr.bin/systat/ip6.c projects/sv/usr.bin/systat/keyboard.c projects/sv/usr.bin/systat/main.c projects/sv/usr.bin/systat/mbufs.c projects/sv/usr.bin/systat/netcmds.c projects/sv/usr.bin/systat/netstat.c projects/sv/usr.bin/systat/pigs.c projects/sv/usr.bin/systat/swap.c projects/sv/usr.bin/systat/systat.1 projects/sv/usr.bin/systat/systat.h projects/sv/usr.bin/systat/tcp.c projects/sv/usr.bin/systat/vmstat.c projects/sv/usr.bin/tail/extern.h projects/sv/usr.bin/tail/forward.c projects/sv/usr.bin/tail/misc.c projects/sv/usr.bin/tail/read.c projects/sv/usr.bin/tail/reverse.c projects/sv/usr.bin/tail/tail.1 projects/sv/usr.bin/tail/tail.c projects/sv/usr.bin/talk/ctl.c projects/sv/usr.bin/talk/ctl_transact.c projects/sv/usr.bin/talk/display.c projects/sv/usr.bin/talk/get_addrs.c projects/sv/usr.bin/talk/get_names.c projects/sv/usr.bin/talk/init_disp.c projects/sv/usr.bin/talk/invite.c projects/sv/usr.bin/talk/io.c projects/sv/usr.bin/talk/look_up.c projects/sv/usr.bin/talk/msgs.c projects/sv/usr.bin/talk/talk.1 projects/sv/usr.bin/talk/talk.c projects/sv/usr.bin/talk/talk.h projects/sv/usr.bin/talk/talk_ctl.h projects/sv/usr.bin/tcopy/tcopy.1 projects/sv/usr.bin/tcopy/tcopy.c projects/sv/usr.bin/tee/tee.1 projects/sv/usr.bin/tee/tee.c projects/sv/usr.bin/tftp/main.c projects/sv/usr.bin/tftp/tftp.1 projects/sv/usr.bin/tftp/tftp.c projects/sv/usr.bin/tftp/tftp.h projects/sv/usr.bin/time/time.1 projects/sv/usr.bin/time/time.c projects/sv/usr.bin/touch/touch.1 projects/sv/usr.bin/touch/touch.c projects/sv/usr.bin/tput/clear.sh projects/sv/usr.bin/tput/tput.1 projects/sv/usr.bin/tput/tput.c projects/sv/usr.bin/tr/extern.h projects/sv/usr.bin/tr/str.c projects/sv/usr.bin/tr/tr.1 projects/sv/usr.bin/tr/tr.c projects/sv/usr.bin/true/true.1 projects/sv/usr.bin/true/true.c projects/sv/usr.bin/tset/extern.h projects/sv/usr.bin/tset/map.c projects/sv/usr.bin/tset/misc.c projects/sv/usr.bin/tset/set.c projects/sv/usr.bin/tset/term.c projects/sv/usr.bin/tset/tset.1 projects/sv/usr.bin/tset/tset.c projects/sv/usr.bin/tset/wrterm.c projects/sv/usr.bin/tsort/tsort.1 projects/sv/usr.bin/tsort/tsort.c projects/sv/usr.bin/tty/tty.1 projects/sv/usr.bin/tty/tty.c projects/sv/usr.bin/ul/ul.1 projects/sv/usr.bin/ul/ul.c projects/sv/usr.bin/uname/uname.1 projects/sv/usr.bin/unexpand/unexpand.c projects/sv/usr.bin/uniq/uniq.1 projects/sv/usr.bin/uniq/uniq.c projects/sv/usr.bin/unvis/unvis.1 projects/sv/usr.bin/unvis/unvis.c projects/sv/usr.bin/users/users.1 projects/sv/usr.bin/users/users.c projects/sv/usr.bin/uudecode/uudecode.c projects/sv/usr.bin/uuencode/uuencode.1 projects/sv/usr.bin/uuencode/uuencode.c projects/sv/usr.bin/uuencode/uuencode.format.5 projects/sv/usr.bin/vgrind/RETEST/retest.c projects/sv/usr.bin/vgrind/extern.h projects/sv/usr.bin/vgrind/pathnames.h projects/sv/usr.bin/vgrind/regexp.c projects/sv/usr.bin/vgrind/vfontedpr.c projects/sv/usr.bin/vgrind/vgrind.1 projects/sv/usr.bin/vgrind/vgrind.sh projects/sv/usr.bin/vgrind/vgrindefs.5 projects/sv/usr.bin/vgrind/vgrindefs.c projects/sv/usr.bin/vgrind/vgrindefs.src projects/sv/usr.bin/vis/extern.h projects/sv/usr.bin/vis/foldit.c projects/sv/usr.bin/vis/vis.1 projects/sv/usr.bin/vis/vis.c projects/sv/usr.bin/vmstat/vmstat.8 projects/sv/usr.bin/vmstat/vmstat.c projects/sv/usr.bin/w/extern.h projects/sv/usr.bin/w/pr_time.c projects/sv/usr.bin/w/proc_compare.c projects/sv/usr.bin/w/uptime.1 projects/sv/usr.bin/w/w.1 projects/sv/usr.bin/w/w.c projects/sv/usr.bin/wall/ttymsg.c projects/sv/usr.bin/wall/wall.1 projects/sv/usr.bin/wall/wall.c projects/sv/usr.bin/wc/wc.1 projects/sv/usr.bin/wc/wc.c projects/sv/usr.bin/what/what.1 projects/sv/usr.bin/what/what.c projects/sv/usr.bin/who/who.1 projects/sv/usr.bin/whois/whois.1 projects/sv/usr.bin/whois/whois.c projects/sv/usr.bin/write/write.1 projects/sv/usr.bin/write/write.c projects/sv/usr.bin/xargs/pathnames.h projects/sv/usr.bin/xargs/xargs.1 projects/sv/usr.bin/xargs/xargs.c projects/sv/usr.bin/xinstall/install.1 projects/sv/usr.bin/xinstall/xinstall.c projects/sv/usr.bin/xstr/pathnames.h projects/sv/usr.bin/xstr/xstr.1 projects/sv/usr.bin/xstr/xstr.c projects/sv/usr.bin/yacc/closure.c projects/sv/usr.bin/yacc/defs.h projects/sv/usr.bin/yacc/error.c projects/sv/usr.bin/yacc/lalr.c projects/sv/usr.bin/yacc/lr0.c projects/sv/usr.bin/yacc/main.c projects/sv/usr.bin/yacc/mkpar.c projects/sv/usr.bin/yacc/output.c projects/sv/usr.bin/yacc/reader.c projects/sv/usr.bin/yacc/skeleton.c projects/sv/usr.bin/yacc/symtab.c projects/sv/usr.bin/yacc/verbose.c projects/sv/usr.bin/yacc/warshall.c projects/sv/usr.bin/yacc/yacc.1 projects/sv/usr.bin/yacc/yyfix.1 projects/sv/usr.bin/yacc/yyfix.sh projects/sv/usr.bin/yes/yes.1 projects/sv/usr.bin/yes/yes.c projects/sv/usr.sbin/Makefile.amd64 projects/sv/usr.sbin/acpi/acpidb/Makefile projects/sv/usr.sbin/bsnmpd/Makefile projects/sv/usr.sbin/bsnmpd/bsnmpd/Makefile projects/sv/usr.sbin/bsnmpd/modules/Makefile projects/sv/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def projects/sv/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c projects/sv/usr.sbin/bsnmpd/modules/snmp_wlan/wlan_tree.def projects/sv/usr.sbin/config/config.y projects/sv/usr.sbin/cxgbtool/cxgbtool.c projects/sv/usr.sbin/extattrctl/extattrctl.c projects/sv/usr.sbin/fwcontrol/fwcontrol.c projects/sv/usr.sbin/gpioctl/gpioctl.8 projects/sv/usr.sbin/iostat/iostat.8 projects/sv/usr.sbin/iostat/iostat.c projects/sv/usr.sbin/lmcconfig/Makefile projects/sv/usr.sbin/lmcconfig/lmcconfig.c projects/sv/usr.sbin/lpr/common_source/displayq.c projects/sv/usr.sbin/lpr/common_source/lp.h projects/sv/usr.sbin/lpr/common_source/lp.local.h projects/sv/usr.sbin/lpr/common_source/pathnames.h projects/sv/usr.sbin/lpr/common_source/rmjob.c projects/sv/usr.sbin/lpr/common_source/startdaemon.c projects/sv/usr.sbin/lpr/filters/lpf.c projects/sv/usr.sbin/lpr/lpc/cmds.c projects/sv/usr.sbin/lpr/lpc/cmdtab.c projects/sv/usr.sbin/lpr/lpc/extern.h projects/sv/usr.sbin/lpr/lpc/lpc.8 projects/sv/usr.sbin/lpr/lpc/lpc.c projects/sv/usr.sbin/lpr/lpc/lpc.h projects/sv/usr.sbin/lpr/lpd/extern.h projects/sv/usr.sbin/lpr/lpd/lpd.8 projects/sv/usr.sbin/lpr/lpd/lpd.c projects/sv/usr.sbin/lpr/lpd/lpdchar.c projects/sv/usr.sbin/lpr/lpd/modes.c projects/sv/usr.sbin/lpr/lpd/printjob.c projects/sv/usr.sbin/lpr/lpd/recvjob.c projects/sv/usr.sbin/lpr/lpq/lpq.1 projects/sv/usr.sbin/lpr/lpq/lpq.c projects/sv/usr.sbin/lpr/lpr/lpr.1 projects/sv/usr.sbin/lpr/lpr/printcap.5 projects/sv/usr.sbin/lpr/lprm/lprm.1 projects/sv/usr.sbin/lpr/lprm/lprm.c projects/sv/usr.sbin/lpr/lptest/lptest.1 projects/sv/usr.sbin/lpr/lptest/lptest.c projects/sv/usr.sbin/lpr/pac/pac.8 projects/sv/usr.sbin/lpr/pac/pac.c projects/sv/usr.sbin/mld6query/mld6.c projects/sv/usr.sbin/mountd/mountd.c projects/sv/usr.sbin/ngctl/main.c projects/sv/usr.sbin/ngctl/msg.c projects/sv/usr.sbin/portsnap/portsnap/portsnap.sh projects/sv/usr.sbin/rpc.lockd/Makefile projects/sv/usr.sbin/rpc.lockd/lockd.c projects/sv/usr.sbin/rpc.lockd/lockd_lock.c projects/sv/usr.sbin/sysinstall/media.c projects/sv/usr.sbin/timed/timed/acksend.c projects/sv/usr.sbin/timed/timed/byteorder.c projects/sv/usr.sbin/timed/timed/candidate.c projects/sv/usr.sbin/timed/timed/cksum.c projects/sv/usr.sbin/timed/timed/correct.c projects/sv/usr.sbin/timed/timed/extern.h projects/sv/usr.sbin/timed/timed/globals.h projects/sv/usr.sbin/timed/timed/master.c projects/sv/usr.sbin/timed/timed/measure.c projects/sv/usr.sbin/timed/timed/networkdelta.c projects/sv/usr.sbin/timed/timed/pathnames.h projects/sv/usr.sbin/timed/timed/readmsg.c projects/sv/usr.sbin/timed/timed/slave.c projects/sv/usr.sbin/timed/timed/timed.8 projects/sv/usr.sbin/timed/timed/timed.c projects/sv/usr.sbin/timed/timedc/cmds.c projects/sv/usr.sbin/timed/timedc/cmdtab.c projects/sv/usr.sbin/timed/timedc/extern.h projects/sv/usr.sbin/timed/timedc/timedc.8 projects/sv/usr.sbin/timed/timedc/timedc.c projects/sv/usr.sbin/timed/timedc/timedc.h projects/sv/usr.sbin/traceroute6/traceroute6.c projects/sv/usr.sbin/wpa/hostapd/driver_freebsd.c Directory Properties: projects/sv/ (props changed) projects/sv/cddl/contrib/opensolaris/ (props changed) projects/sv/contrib/bind9/ (props changed) projects/sv/contrib/binutils/ (props changed) projects/sv/contrib/bzip2/ (props changed) projects/sv/contrib/ee/ (props changed) projects/sv/contrib/expat/ (props changed) projects/sv/contrib/file/ (props changed) projects/sv/contrib/gdb/ (props changed) projects/sv/contrib/gdtoa/ (props changed) projects/sv/contrib/gnu-sort/ (props changed) projects/sv/contrib/groff/ (props changed) projects/sv/contrib/less/ (props changed) projects/sv/contrib/libpcap/ (props changed) projects/sv/contrib/llvm/ (props changed) projects/sv/contrib/llvm/tools/clang/ (props changed) projects/sv/contrib/ncurses/ (props changed) projects/sv/contrib/netcat/ (props changed) projects/sv/contrib/ntp/ (props changed) projects/sv/contrib/one-true-awk/ (props changed) projects/sv/contrib/openbsm/ (props changed) projects/sv/contrib/openpam/ (props changed) projects/sv/contrib/pf/ (props changed) projects/sv/contrib/sendmail/ (props changed) projects/sv/contrib/tcpdump/ (props changed) projects/sv/contrib/tcsh/ (props changed) projects/sv/contrib/top/ (props changed) projects/sv/contrib/top/install-sh (props changed) projects/sv/contrib/tzcode/stdtime/ (props changed) projects/sv/contrib/tzcode/zic/ (props changed) projects/sv/contrib/tzdata/ (props changed) projects/sv/contrib/wpa/ (props changed) projects/sv/contrib/xz/ (props changed) projects/sv/crypto/openssh/ (props changed) projects/sv/crypto/openssl/ (props changed) projects/sv/lib/libc/ (props changed) projects/sv/lib/libc/stdtime/ (props changed) projects/sv/lib/libutil/ (props changed) projects/sv/lib/libz/ (props changed) projects/sv/sbin/ (props changed) projects/sv/sbin/ipfw/ (props changed) projects/sv/share/mk/bsd.arch.inc.mk (props changed) projects/sv/share/zoneinfo/ (props changed) projects/sv/sys/ (props changed) projects/sv/sys/amd64/include/xen/ (props changed) projects/sv/sys/cddl/contrib/opensolaris/ (props changed) projects/sv/sys/contrib/dev/acpica/ (props changed) projects/sv/sys/contrib/octeon-sdk/ (props changed) projects/sv/sys/contrib/pf/ (props changed) projects/sv/sys/contrib/x86emu/ (props changed) projects/sv/usr.bin/calendar/ (props changed) projects/sv/usr.bin/csup/ (props changed) projects/sv/usr.bin/procstat/ (props changed) projects/sv/usr.sbin/zic/ (props changed) Modified: projects/sv/Makefile ============================================================================== --- projects/sv/Makefile Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/Makefile Tue Dec 21 21:29:02 2010 (r216624) @@ -271,7 +271,7 @@ make: .PHONY tinderbox: cd ${.CURDIR} && \ - DOING_TINDERBOX=YES ${MAKE} ${JFLAG} universe + DOING_TINDERBOX=YES ${MAKE} JFLAG=${JFLAG} universe # # universe @@ -281,7 +281,15 @@ tinderbox: # existing system is. # .if make(universe) || make(universe_kernels) || make(tinderbox) -TARGETS?=amd64 i386 ia64 pc98 powerpc sparc64 sun4v mips +TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 sun4v +TARGET_ARCHES_arm?= arm armeb +TARGET_ARCHES_mips?= mipsel mipseb +TARGET_ARCHES_powerpc?= powerpc powerpc64 +TARGET_ARCHES_pc98?= i386 +TARGET_ARCHES_sun4v?= sparc64 +.for target in ${TARGETS} +TARGET_ARCHES_${target}?= ${target} +.endfor .if defined(DOING_TINDERBOX) FAILFILE=tinderbox.failed @@ -301,16 +309,24 @@ universe_prologue: .for target in ${TARGETS} universe: universe_${target} .ORDER: universe_prologue universe_${target} universe_epilogue -universe_${target}: -.if !defined(MAKE_JUST_KERNELS) +universe_${target}: universe_${target}_prologue +universe_${target}_prologue: @echo ">> ${target} started on `LC_ALL=C date`" +.if !defined(MAKE_JUST_KERNELS) +.for target_arch in ${TARGET_ARCHES_${target}} +universe_${target}: universe_${target}_${target_arch} +universe_${target}_${target_arch}: universe_${target}_prologue + @echo ">> ${target}.${target_arch} buildworld started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ ${MAKE} ${JFLAG} buildworld \ TARGET=${target} \ - > _.${target}.buildworld 2>&1 || \ - (echo "${target} world failed," \ - "check _.${target}.buildworld for details" | ${MAKEFAIL})) - @echo ">> ${target} buildworld completed on `LC_ALL=C date`" + TARGET_ARCH=${target_arch} \ + > _.${target}.${target_arch}.buildworld 2>&1 || \ + (echo "${target}.${target_arch} world failed," \ + "check _.${target}.${target_arch}.buildworld for details" | \ + ${MAKEFAIL})) + @echo ">> ${target}.${target_arch} buildworld completed on `LC_ALL=C date`" +.endfor .endif .if !defined(MAKE_JUST_WORLDS) .if exists(${.CURDIR}/sys/${target}/conf/NOTES) @@ -333,9 +349,15 @@ KERNCONFS!= cd ${.CURDIR}/sys/${TARGET}/ ! -name DEFAULTS ! -name NOTES universe_kernconfs: .for kernel in ${KERNCONFS} +TARGET_ARCH_${kernel}!= cd ${.CURDIR}/sys/${TARGET}/conf && \ + config -m ${.CURDIR}/sys/${TARGET}/conf/${kernel} | \ + cut -f 2 +universe_kernconfs: universe_kernconf_${TARGET}_${kernel} +universe_kernconf_${TARGET}_${kernel}: @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ ${MAKE} ${JFLAG} buildkernel \ TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH_${kernel}} \ KERNCONF=${kernel} \ > _.${TARGET}.${kernel} 2>&1 || \ (echo "${TARGET} ${kernel} kernel failed," \ Modified: projects/sv/ObsoleteFiles.inc ============================================================================== --- projects/sv/ObsoleteFiles.inc Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/ObsoleteFiles.inc Tue Dec 21 21:29:02 2010 (r216624) @@ -284,6 +284,8 @@ OLD_FILES+=usr/share/man/man9/ieee80211_ OLD_FILES+=usr/share/man/man9/ieee80211_wep_crypt.9.gz # 20090801: vimage.h removed in favour of vnet.h OLD_FILES+=usr/include/sys/vimage.h +# 20101208: libbsnmp was moved to usr/lib +OLD_LIBS+=lib/libbsnmp.so.5 # 20090719: library version bump for 8.0 OLD_LIBS+=lib/libalias.so.6 OLD_LIBS+=lib/libavl.so.1 Modified: projects/sv/UPDATING ============================================================================== --- projects/sv/UPDATING Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/UPDATING Tue Dec 21 21:29:02 2010 (r216624) @@ -1136,8 +1136,8 @@ COMMON ITEMS: [3] mergemaster -p [5] make installworld - make delete-old mergemaster -i [4] + make delete-old [6] @@ -1174,8 +1174,8 @@ COMMON ITEMS: [3] mergemaster -p [5] make installworld - make delete-old mergemaster -i [4] + make delete-old [6] Make sure that you've read the UPDATING file to understand the @@ -1218,6 +1218,10 @@ COMMON ITEMS: install) after the buildworld before this step if you last updated from current before 20020224 or from -stable before 20020408. + [6] This only deletes old files and directories. Old libraries + can be deleted by "make delete-old-libs", but you have to make + sure that no program is using those libraries anymore. + [8] In order to have a kernel that can run the 4.x binaries needed to do an installworld, you must include the COMPAT_FREEBSD4 option in your kernel. Failure to do so may leave you with a system that is Modified: projects/sv/bin/sh/arith_lex.l ============================================================================== --- projects/sv/bin/sh/arith_lex.l Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/arith_lex.l Tue Dec 21 21:29:02 2010 (r216624) @@ -74,12 +74,12 @@ int yylex(void); return ARITH_NUM; } -0[0-7]+ { +0[0-7]* { yylval.l_value = strtoarith_t(yytext, NULL, 8); return ARITH_NUM; } -[0-9]+ { +[1-9][0-9]* { yylval.l_value = strtoarith_t(yytext, NULL, 10); return ARITH_NUM; } Modified: projects/sv/bin/sh/bltin/bltin.h ============================================================================== --- projects/sv/bin/sh/bltin/bltin.h Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/bltin/bltin.h Tue Dec 21 21:29:02 2010 (r216624) @@ -57,21 +57,12 @@ #define fwrite(ptr, size, nmemb, file) outbin(ptr, (size) * (nmemb), file) #define fflush flushout #define INITARGS(argv) -#define warnx1(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a); \ - error("%s", buf); \ -} -#define warnx2(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a, b); \ - error("%s", buf); \ -} -#define warnx3(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a, b, c); \ - error("%s", buf); \ -} +#define warnx(...) do { \ + out2fmt_flush("%s: ", commandname); \ + out2fmt_flush(__VA_ARGS__); \ + out2fmt_flush("\n"); \ + } while (0) +#define errx(exitstatus, ...) error(__VA_ARGS__) #else #undef NULL Modified: projects/sv/bin/sh/expand.c ============================================================================== --- projects/sv/bin/sh/expand.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/expand.c Tue Dec 21 21:29:02 2010 (r216624) @@ -132,11 +132,22 @@ collate_range_cmp(int c1, int c2) void expandhere(union node *arg, int fd) { - herefd = fd; expandarg(arg, (struct arglist *)NULL, 0); xwrite(fd, stackblock(), expdest - stackblock()); } +static char * +stputs_quotes(const char *data, const char *syntax, char *p) +{ + while (*data) { + CHECKSTRSPACE(2, p); + if (syntax[(int)*data] == CCTL) + USTPUTC(CTLESC, p); + USTPUTC(*data++, p); + } + return (p); +} +#define STPUTS_QUOTES(data, syntax, p) p = stputs_quotes((data), syntax, p) /* * Perform expansions on an argument, placing the resulting list of arguments @@ -334,11 +345,10 @@ done: if (*home == '\0') goto lose; *p = c; - while ((c = *home++) != '\0') { - if (quotes && SQSYNTAX[(int)c] == CCTL) - STPUTC(CTLESC, expdest); - STPUTC(c, expdest); - } + if (quotes) + STPUTS_QUOTES(home, SQSYNTAX, expdest); + else + STPUTS(home, expdest); return (p); lose: *p = c; @@ -458,7 +468,6 @@ expbackq(union node *cmd, int quoted, in char lastc; int startloc = dest - stackblock(); char const *syntax = quoted? DQSYNTAX : BASESYNTAX; - int saveherefd; int quotes = flag & (EXP_FULL | EXP_CASE | EXP_REDIR); int nnl; @@ -466,15 +475,12 @@ expbackq(union node *cmd, int quoted, in saveifs = ifsfirst; savelastp = ifslastp; saveargbackq = argbackq; - saveherefd = herefd; - herefd = -1; p = grabstackstr(dest); evalbackcmd(cmd, &in); ungrabstackstr(p, dest); ifsfirst = saveifs; ifslastp = savelastp; argbackq = saveargbackq; - herefd = saveherefd; p = in.buf; lastc = '\0'; @@ -493,8 +499,6 @@ expbackq(union node *cmd, int quoted, in } lastc = *p++; if (lastc != '\0') { - if (quotes && syntax[(int)lastc] == CCTL) - STPUTC(CTLESC, dest); if (lastc == '\n') { nnl++; } else { @@ -502,6 +506,8 @@ expbackq(union node *cmd, int quoted, in nnl--; STPUTC('\n', dest); } + if (quotes && syntax[(int)lastc] == CCTL) + STPUTC(CTLESC, dest); STPUTC(lastc, dest); } } @@ -533,16 +539,13 @@ subevalvar(char *p, char *str, int strlo char *loc = NULL; char *q; int c = 0; - int saveherefd = herefd; struct nodelist *saveargbackq = argbackq; int amount; - herefd = -1; argstr(p, (subtype == VSTRIMLEFT || subtype == VSTRIMLEFTMAX || subtype == VSTRIMRIGHT || subtype == VSTRIMRIGHTMAX ? EXP_CASE : 0) | EXP_TILDE); STACKSTRNUL(expdest); - herefd = saveherefd; argbackq = saveargbackq; startp = stackblock() + startloc; if (str == NULL) @@ -554,8 +557,6 @@ subevalvar(char *p, char *str, int strlo amount = startp - expdest; STADJUST(amount, expdest); varflags &= ~VSNUL; - if (c != 0) - *loc = c; return 1; case VSQUESTION: @@ -723,12 +724,10 @@ again: /* jump here after setting a vari varlen++; } else { - while (*val) { - if (quotes && - syntax[(int)*val] == CCTL) - STPUTC(CTLESC, expdest); - STPUTC(*val++, expdest); - } + if (quotes) + STPUTS_QUOTES(val, syntax, expdest); + else + STPUTS(val, expdest); } } @@ -877,7 +876,14 @@ varisset(char *name, int nulok) return 1; } - +static void +strtodest(const char *p, int flag, int subtype, int quoted) +{ + if (flag & (EXP_FULL | EXP_CASE) && subtype != VSLENGTH) + STPUTS_QUOTES(p, quoted ? DQSYNTAX : BASESYNTAX, expdest); + else + STPUTS(p, expdest); +} /* * Add the value of a specialized variable to the stack string. @@ -891,21 +897,6 @@ varvalue(char *name, int quoted, int sub int i; char sep; char **ap; - char const *syntax; - -#define STRTODEST(p) \ - do {\ - if (flag & (EXP_FULL | EXP_CASE) && subtype != VSLENGTH) { \ - syntax = quoted? DQSYNTAX : BASESYNTAX; \ - while (*p) { \ - if (syntax[(int)*p] == CCTL) \ - STPUTC(CTLESC, expdest); \ - STPUTC(*p++, expdest); \ - } \ - } else \ - STPUTS(p, expdest); \ - } while (0) - switch (*name) { case '$': @@ -931,7 +922,7 @@ numvar: case '@': if (flag & EXP_FULL && quoted) { for (ap = shellparam.p ; (p = *ap++) != NULL ; ) { - STRTODEST(p); + strtodest(p, flag, subtype, quoted); if (*ap) STPUTC('\0', expdest); } @@ -944,21 +935,21 @@ numvar: else sep = ' '; for (ap = shellparam.p ; (p = *ap++) != NULL ; ) { - STRTODEST(p); + strtodest(p, flag, subtype, quoted); if (*ap && sep) STPUTC(sep, expdest); } break; case '0': p = arg0; - STRTODEST(p); + strtodest(p, flag, subtype, quoted); break; default: if (is_digit(*name)) { num = atoi(name); if (num > 0 && num <= shellparam.nparam) { p = shellparam.p[num - 1]; - STRTODEST(p); + strtodest(p, flag, subtype, quoted); } } break; Modified: projects/sv/bin/sh/jobs.c ============================================================================== --- projects/sv/bin/sh/jobs.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/jobs.c Tue Dec 21 21:29:02 2010 (r216624) @@ -153,10 +153,8 @@ out: out2fmt_flush("sh: can't access mflag = 0; return; } - if (initialpgrp == -1) - initialpgrp = getpgrp(); - else if (initialpgrp != getpgrp()) { - killpg(0, SIGTTIN); + if (initialpgrp != getpgrp()) { + kill(0, SIGTTIN); continue; } } while (0); @@ -222,7 +220,6 @@ fgcmd(int argc __unused, char **argv) int bgcmd(int argc, char **argv) { - char s[64]; struct job *jp; do { @@ -233,8 +230,7 @@ bgcmd(int argc, char **argv) continue; restartjob(jp); jp->foreground = 0; - fmtstr(s, 64, "[%td] ", jp - jobtab + 1); - out1str(s); + out1fmt("[%td] ", jp - jobtab + 1); printjobcmd(jp); } while (--argc > 1); return 0; @@ -251,7 +247,7 @@ restartjob(struct job *jp) return; setcurjob(jp); INTOFF; - killpg(jp->ps[0].pid, SIGCONT); + kill(-jp->ps[0].pid, SIGCONT); for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) { if (WIFSTOPPED(ps->status)) { ps->status = -1; @@ -951,9 +947,7 @@ waitforjob(struct job *jp, int *origstat if (! JOBS || jp->state == JOBDONE) freejob(jp); if (int_pending()) { - if (WIFSIGNALED(status) && WTERMSIG(status) == SIGINT) - kill(getpid(), SIGINT); - else + if (!WIFSIGNALED(status) || WTERMSIG(status) != SIGINT) CLEAR_PENDING_INT; } #if JOBS Modified: projects/sv/bin/sh/memalloc.c ============================================================================== --- projects/sv/bin/sh/memalloc.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/memalloc.c Tue Dec 21 21:29:02 2010 (r216624) @@ -128,7 +128,6 @@ static struct stackmark *markp; char *stacknxt; int stacknleft; int sstrnleft; -int herefd = -1; static void @@ -309,11 +308,6 @@ growstackstr(void) int len; len = stackblocksize(); - if (herefd >= 0 && len >= 1024) { - xwrite(herefd, stackblock(), len); - sstrnleft = len; - return stackblock(); - } return growstrstackblock(len); } Modified: projects/sv/bin/sh/memalloc.h ============================================================================== --- projects/sv/bin/sh/memalloc.h Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/memalloc.h Tue Dec 21 21:29:02 2010 (r216624) @@ -46,7 +46,6 @@ struct stackmark { extern char *stacknxt; extern int stacknleft; extern int sstrnleft; -extern int herefd; pointer ckmalloc(size_t); pointer ckrealloc(pointer, int); Modified: projects/sv/bin/sh/output.c ============================================================================== --- projects/sv/bin/sh/output.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/output.c Tue Dec 21 21:29:02 2010 (r216624) @@ -64,8 +64,7 @@ __FBSDID("$FreeBSD$"); #define OUTBUFSIZ BUFSIZ -#define BLOCK_OUT -2 /* output to a fixed block of memory */ -#define MEM_OUT -3 /* output to dynamically allocated memory */ +#define MEM_OUT -2 /* output to dynamically allocated memory */ #define OUTPUT_ERR 01 /* error occurred on output */ static int doformat_wr(void *, const char *, int); @@ -180,18 +179,12 @@ outbin(const void *data, size_t len, str outc(*p++, file); } -static char out_junk[16]; - void emptyoutbuf(struct output *dest) { int offset; - if (dest->fd == BLOCK_OUT) { - dest->nextc = out_junk; - dest->nleft = sizeof out_junk; - dest->flags |= OUTPUT_ERR; - } else if (dest->buf == NULL) { + if (dest->buf == NULL) { INTOFF; dest->buf = ckmalloc(dest->bufsize); dest->nextc = dest->buf; @@ -282,18 +275,12 @@ void fmtstr(char *outbuf, int length, const char *fmt, ...) { va_list ap; - struct output strout; - strout.nextc = outbuf; - strout.nleft = length; - strout.fd = BLOCK_OUT; - strout.flags = 0; + INTOFF; va_start(ap, fmt); - doformat(&strout, fmt, ap); + vsnprintf(outbuf, length, fmt, ap); va_end(ap); - outc('\0', &strout); - if (strout.flags & OUTPUT_ERR) - outbuf[length - 1] = '\0'; + INTON; } static int Modified: projects/sv/bin/sh/parser.c ============================================================================== --- projects/sv/bin/sh/parser.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/bin/sh/parser.c Tue Dec 21 21:29:02 2010 (r216624) @@ -887,8 +887,6 @@ xxreadtoken(void) startlinno = plinno; for (;;) { /* until token or start of word found */ c = pgetc_macro(); - if (c == ' ' || c == '\t') - continue; /* quick check for white space first */ switch (c) { case ' ': case '\t': continue; Modified: projects/sv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c ============================================================================== --- projects/sv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Tue Dec 21 21:29:02 2010 (r216624) @@ -48,11 +48,13 @@ static int read_efi_label(nvlist_t *config, diskaddr_t *sb); +#ifdef sun #if defined(__i386) || defined(__amd64) #define BOOTCMD "installgrub(1M)" #else #define BOOTCMD "installboot(1M)" #endif +#endif /* sun */ /* * ==================================================================== @@ -1889,14 +1891,15 @@ zpool_vdev_attach(zpool_handle_t *zhp, if (ret == 0) { if (rootpool) { - /* - * XXX - This should be removed once we can - * automatically install the bootblocks on the - * newly attached disk. - */ - (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "Please " - "be sure to invoke %s to make '%s' bootable.\n"), - BOOTCMD, new_disk); + (void) fprintf(stderr, dgettext(TEXT_DOMAIN, "If " + "you boot from pool '%s', you may need to update\n" + "boot code on newly attached disk '%s'.\n\n" + "Assuming you use GPT partitioning and 'da0' is " + "your new boot disk\n" + "you may use the following command:\n\n" + "\tgpart bootcode -b /boot/pmbr -p " + "/boot/gptzfsboot -i 1 da0\n\n"), + zhp->zpool_name, new_disk); } return (0); } Modified: projects/sv/contrib/bsnmp/lib/asn1.c ============================================================================== --- projects/sv/contrib/bsnmp/lib/asn1.c Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/contrib/bsnmp/lib/asn1.c Tue Dec 21 21:29:02 2010 (r216624) @@ -196,7 +196,7 @@ asn_put_temp_header(struct asn_buf *b, u return (ret); } enum asn_err -asn_commit_header(struct asn_buf *b, u_char *ptr) +asn_commit_header(struct asn_buf *b, u_char *ptr, size_t *moved) { asn_len_t len; u_int lenlen, shift; @@ -215,6 +215,8 @@ asn_commit_header(struct asn_buf *b, u_c memmove(ptr + 1 + lenlen, ptr + TEMP_LEN, len); b->asn_ptr -= shift; b->asn_len += shift; + if (moved != NULL) + *moved = shift; } return (ASN_ERR_OK); } @@ -913,6 +915,20 @@ asn_skip(struct asn_buf *b, asn_len_t le } /* + * Add a padding + */ +enum asn_err +asn_pad(struct asn_buf *b, asn_len_t len) +{ + if (b->asn_len < len) + return (ASN_ERR_EOBUF); + b->asn_ptr += len; + b->asn_len -= len; + + return (ASN_ERR_OK); +} + +/* * Compare two OIDs. * * o1 < o2 : -1 Modified: projects/sv/contrib/bsnmp/lib/asn1.h ============================================================================== --- projects/sv/contrib/bsnmp/lib/asn1.h Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/contrib/bsnmp/lib/asn1.h Tue Dec 21 21:29:02 2010 (r216624) @@ -93,7 +93,7 @@ enum asn_err asn_get_header(struct asn_b enum asn_err asn_put_header(struct asn_buf *, u_char, asn_len_t); enum asn_err asn_put_temp_header(struct asn_buf *, u_char, u_char **); -enum asn_err asn_commit_header(struct asn_buf *, u_char *); +enum asn_err asn_commit_header(struct asn_buf *, u_char *, size_t *); enum asn_err asn_get_integer_raw(struct asn_buf *, asn_len_t, int32_t *); enum asn_err asn_get_integer(struct asn_buf *, int32_t *); @@ -129,6 +129,7 @@ enum asn_err asn_get_timeticks(struct as enum asn_err asn_put_timeticks(struct asn_buf *, uint32_t); enum asn_err asn_skip(struct asn_buf *, asn_len_t); +enum asn_err asn_pad(struct asn_buf *, asn_len_t); /* * Utility functions for OIDs Modified: projects/sv/contrib/bsnmp/lib/bsnmpclient.3 ============================================================================== --- projects/sv/contrib/bsnmp/lib/bsnmpclient.3 Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/contrib/bsnmp/lib/bsnmpclient.3 Tue Dec 21 21:29:02 2010 (r216624) @@ -31,7 +31,7 @@ .\" .\" $Begemot: bsnmp/lib/bsnmpclient.3,v 1.12 2005/10/04 08:46:50 brandt_h Exp $ .\" -.Dd October 4, 2005 +.Dd September 9, 2010 .Dt BSNMPCLIENT 3 .Os .Sh NAME @@ -52,7 +52,8 @@ .Nm snmp_table_cb_f , .Nm snmp_table_fetch , .Nm snmp_table_fetch_async , -.Nm snmp_dialog +.Nm snmp_dialog , +.Nm snmp_discover_engine .Nd "SNMP client library" .Sh LIBRARY Begemot SNMP library @@ -102,44 +103,56 @@ Begemot SNMP library .Fn snmp_table_fetch_async "const struct snmp_table *descr" "void *list" "snmp_table_cb_f callback" "void *uarg" .Ft int .Fn snmp_dialog "struct snmp_pdu *req" "struct snmp_pdu *resp" +.Ft int +.Fn snmp_discover_engine "void" .Sh DESCRIPTION The SNMP library contains routines to easily build SNMP client applications -that use SNMP versions 1 or 2. +that use SNMP versions 1, 2 or 3. Most of the routines use a .Vt struct snmp_client : .Bd -literal -offset indent struct snmp_client { - enum snmp_version version; - int trans; /* transport type to use */ + enum snmp_version version; + int trans; /* which transport to use */ /* these two are read-only for the application */ - char *cport; /* port number as string */ - char *chost; /* host name or IP address as string */ + char *cport; /* port number as string */ + char *chost; /* host name or IP address as string */ + + char read_community[SNMP_COMMUNITY_MAXLEN + 1]; + char write_community[SNMP_COMMUNITY_MAXLEN + 1]; + + /* SNMPv3 specific fields */ + int32_t identifier; + int32_t security_model; + struct snmp_engine engine; + struct snmp_user user; - char read_community[SNMP_COMMUNITY_MAXLEN + 1]; - char write_community[SNMP_COMMUNITY_MAXLEN + 1]; + /* SNMPv3 Access control - VACM*/ + uint32_t clen; + uint8_t cengine[SNMP_ENGINE_ID_SIZ]; + char cname[SNMP_CONTEXT_NAME_SIZ]; - struct timeval timeout; - u_int retries; + struct timeval timeout; + u_int retries; - int dump_pdus; + int dump_pdus; - size_t txbuflen; - size_t rxbuflen; + size_t txbuflen; + size_t rxbuflen; - int fd; + int fd; - int32_t next_reqid; - int32_t max_reqid; - int32_t min_reqid; + int32_t next_reqid; + int32_t max_reqid; + int32_t min_reqid; - char error[SNMP_STRERROR_LEN]; + char error[SNMP_STRERROR_LEN]; - snmp_timeout_start_f timeout_start; - snmp_timeout_stop_f timeout_stop; + snmp_timeout_start_f timeout_start; + snmp_timeout_stop_f timeout_stop; - /* private */ - char local_path[sizeof(SNMP_LOCAL_PATH)]; + char local_path[sizeof(SNMP_LOCAL_PATH)]; }; .Ed .Pp @@ -194,6 +207,23 @@ The default is The community name to be used for SET requests. The default is .Sq private . +.It Va identifier +The message indentifier value to be used with SNMPv3 PDUs. Incremented with +each transmitted PDU. +.It Va security_model +The security model to be used with SNMPv3 PDUs. Currently only User-Based +Security model specified by RFC 3414 (value 3) is supported. +.It Va engine +The authorative SNMP engine parameters to be used with SNMPv3 PDUs. +.It Va user +The USM SNMP user credentials to be used with SNMPv3 PDUs. +.It Va clen +The length of the context engine id to be used with SNMPv3 PDUs. +.It Va cengine +The context engine id to be used with SNMPv3 PDUs. Default is empty. +.It Va cname +The context name to be used with SNMPv3 PDUs. Default is +.Sq "" . .It Va timeout The maximum time to wait for responses to requests. If the time elapses, the request is resent up to @@ -617,6 +647,21 @@ returns -1. If a response was received 0 is returned. .Pp The function +.Fn snmp_discover_engine +is used to discover the authorative snmpEngineId of a remote SNMPv3 agent. +A request PDU with empty USM user name is sent and the client's engine +parameters are set according to the snmpEngine parameters received in the +response PDU. +If the client is configured to use authentication and/or privacy and the +snmpEngineBoots and/or snmpEngineTime in the response had zero values, an +additional request (possibly encrypted) with the appropriate user credentials +is sent to fetch the missing values. +Note, that the function blocks until the discovery proccess is completed. +If no response could be received after all timeouts and retries, or the +response contained errors the function returns -1. +If the discovery proccess was completed 0 is returned. +.Pp +The function .Fn snmp_parse_server is used to parse an SNMP server specification string and fill in the fields of a Modified: projects/sv/contrib/bsnmp/lib/bsnmplib.3 ============================================================================== --- projects/sv/contrib/bsnmp/lib/bsnmplib.3 Tue Dec 21 21:12:18 2010 (r216623) +++ projects/sv/contrib/bsnmp/lib/bsnmplib.3 Tue Dec 21 21:29:02 2010 (r216624) @@ -1,4 +1,10 @@ .\" +.\" Copyright (c) 2010 The FreeBSD Foundation +.\" All rights reserved. +.\" +.\" Portions of this documentation were written by Shteryana Sotirova Shopova +.\" under sponsorship from the FreeBSD Foundation. +.\" .\" Copyright (c) 2004-2005 .\" Hartmut Brandt. .\" All rights reserved. @@ -31,7 +37,7 @@ .\" .\" $Begemot: bsnmp/lib/bsnmplib.3,v 1.9 2005/10/04 08:46:51 brandt_h Exp $ .\" -.Dd October 4, 2005 +.Dd December 19, 2010 .Dt BSNMPLIB 3 .Os .Sh NAME @@ -39,9 +45,16 @@ .Nm snmp_value_parse , .Nm snmp_value_copy , .Nm snmp_pdu_free , -.Nm snmp_code snmp_pdu_decode , -.Nm snmp_code snmp_pdu_encode , +.Nm snmp_pdu_decode , +.Nm snmp_pdu_encode , +.Nm snmp_pdu_decode_header , +.Nm snmp_pdu_decode_scoped , +.Nm snmp_pdu_decode_secmode , +.Nm snmp_pdu_init_secparams , .Nm snmp_pdu_dump , +.Nm snmp_passwd_to_keys , +.Nm snmp_get_local_keys , +.Nm snmp_calc_keychange , .Nm TRUTH_MK , .Nm TRUTH_GET , .Nm TRUTH_OK @@ -64,8 +77,22 @@ Begemot SNMP library .Fn snmp_pdu_decode "struct asn_buf *buf" "struct snmp_pdu *pdu" "int32_t *ip" .Ft enum snmp_code .Fn snmp_pdu_encode "struct snmp_pdu *pdu" "struct asn_buf *buf" +.Ft enum snmp_code +.Fn snmp_pdu_decode_header "struct snmp_pdu *pdu" "struct asn_buf *buf" +.Ft enum snmp_code +.Fn snmp_pdu_decode_scoped "struct asn_buf *buf" "struct snmp_pdu *pdu" "int32_t *ip" +.Ft enum snmp_code +.Fn snmp_pdu_decode_secmode "struct asn_buf *buf" "struct snmp_pdu *pdu" +.Ft void +.Fn snmp_pdu_init_secparams "struct snmp_pdu *pdu" .Ft void .Fn snmp_pdu_dump "const struct snmp_pdu *pdu" +.Ft enum snmp_code +.Fn snmp_passwd_to_keys "struct snmp_user *user" "char *passwd" +.Ft enum snmp_code +.Fn snmp_get_local_keys "struct snmp_user *user" "uint8_t *eid" "uint32_t elen" +.Ft enum snmp_code +.Fn snmp_calc_keychange "struct snmp_user *user" "uint8_t *keychange" .Ft int .Fn TRUTH_MK "F" .Ft int @@ -73,8 +100,8 @@ Begemot SNMP library .Ft int .Fn TRUTH_OK "T" .Sh DESCRIPTION -The SNMP library contains routines to handle SNMP version 1 and 2 PDUs. -There are two basic structures used throughout the library: +The SNMP library contains routines to handle SNMP version 1, 2 and 3 PDUs. +There are several basic structures used throughout the library: .Bd -literal -offset indent struct snmp_value { struct asn_oid var; @@ -134,34 +161,134 @@ is not zero, .Fa v.octetstring.octets points to a string allocated by .Xr malloc 3 . +.Pp +.Bd -literal -offset indent +#define SNMP_ENGINE_ID_SIZ 32 + +struct snmp_engine { + uint8_t engine_id[SNMP_ENGINE_ID_SIZ]; + uint32_t engine_len; + int32_t engine_boots; + int32_t engine_time; + int32_t max_msg_size; +}; +.Ed +.Pp +This structure represents an SNMP engine as specified by the SNMP Management +Architecture described in RFC 3411. +.Pp +.Bd -literal -offset indent +#define SNMP_ADM_STR32_SIZ (32 + 1) +#define SNMP_AUTH_KEY_SIZ 40 +#define SNMP_PRIV_KEY_SIZ 32 + +enum snmp_usm_level { + SNMP_noAuthNoPriv = 1, + SNMP_authNoPriv = 2, + SNMP_authPriv = 3 +}; + +struct snmp_user { + char sec_name[SNMP_ADM_STR32_SIZ]; + enum snmp_authentication auth_proto; + enum snmp_privacy priv_proto; + uint8_t auth_key[SNMP_AUTH_KEY_SIZ]; + uint8_t priv_key[SNMP_PRIV_KEY_SIZ]; +}; +.Ed +.Pp +This structure represents an SNMPv3 user as specified by the User-based +Security Model (USM) described in RFC 3414. The field +.Fa sec_name +is a human readable string containing the security user name. +.Fa auth_proto +contains the id of the authentication protocol in use by the user and may be one +of: +.Bd -literal -offset indent +enum snmp_authentication { + SNMP_AUTH_NOAUTH = 0, + SNMP_AUTH_HMAC_MD5, + SNMP_AUTH_HMAC_SHA +}; +.Ed +.Fa priv_proto +contains the id of the privacy protocol in use by the user and may be one +of: +.Bd -literal -offset indent +enum snmp_privacy { + SNMP_PRIV_NOPRIV = 0, + SNMP_PRIV_DES = 1, + SNMP_PRIV_AES +}; +.Ed +.Fa auth_key +and +.Fa priv_key +contain the authentication and privacy keys for the user. +.Pp .Bd -literal -offset indent -#define SNMP_COMMUNITY_MAXLEN 128 -#define SNMP_MAX_BINDINGS 100 +#define SNMP_COMMUNITY_MAXLEN 128 +#define SNMP_MAX_BINDINGS 100 +#define SNMP_CONTEXT_NAME_SIZ (32 + 1) +#define SNMP_TIME_WINDOW 150 + +#define SNMP_USM_AUTH_SIZE 12 +#define SNMP_USM_PRIV_SIZE 8 + +#define SNMP_MSG_AUTH_FLAG 0x1 +#define SNMP_MSG_PRIV_FLAG 0x2 +#define SNMP_MSG_REPORT_FLAG 0x4 + +#define SNMP_MPM_SNMP_V1 0 +#define SNMP_MPM_SNMP_V2c 1 +#define SNMP_MPM_SNMP_V3 3 struct snmp_pdu { - char community[SNMP_COMMUNITY_MAXLEN + 1]; - enum snmp_version version; - u_int type; + char community[SNMP_COMMUNITY_MAXLEN + 1]; + enum snmp_version version; + u_int type; + + /* SNMPv3 PDU header fields */ + int32_t identifier; + uint8_t flags; + int32_t security_model; + struct snmp_engine engine; + + /* Associated USM user parameters */ + struct snmp_user user; + uint8_t msg_digest[SNMP_USM_AUTH_SIZE]; + uint8_t msg_salt[SNMP_USM_PRIV_SIZE]; + + /* View-based Access Model */ + uint32_t context_engine_len; + uint8_t context_engine[SNMP_ENGINE_ID_SIZ]; + char context_name[SNMP_CONTEXT_NAME_SIZ]; /* trap only */ - struct asn_oid enterprise; - u_char agent_addr[4]; - int32_t generic_trap; - int32_t specific_trap; - u_int32_t time_stamp; + struct asn_oid enterprise; + u_char agent_addr[4]; + int32_t generic_trap; + int32_t specific_trap; + uint32_t time_stamp; /* others */ - int32_t request_id; - int32_t error_status; - int32_t error_index; + int32_t request_id; + int32_t error_status; + int32_t error_index; /* fixes for encoding */ - u_char *outer_ptr; - u_char *pdu_ptr; - u_char *vars_ptr; + size_t outer_len; + size_t scoped_len; + u_char *outer_ptr; + u_char *digest_ptr; + u_char *encrypted_ptr; + u_char *scoped_ptr; + u_char *pdu_ptr; + u_char *vars_ptr; - struct snmp_value bindings[SNMP_MAX_BINDINGS]; - u_int nbindings; + + struct snmp_value bindings[SNMP_MAX_BINDINGS]; + u_int nbindings; }; .Ed This structure contains a decoded SNMP PDU. @@ -172,11 +299,25 @@ enum snmp_version { SNMP_Verr = 0, SNMP_V1 = 1, SNMP_V2c, + SNMP_V3 }; .Ed and .Fa type is the type of the PDU. +.Fa security_model +is the security model used for SNMPv3 PDUs. The only supported *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Wed Dec 22 09:02:22 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B4344106564A; Wed, 22 Dec 2010 09:02:22 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A2AF78FC0A; Wed, 22 Dec 2010 09:02:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBM92MD4098777; Wed, 22 Dec 2010 09:02:22 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBM92MpZ098772; Wed, 22 Dec 2010 09:02:22 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012220902.oBM92MpZ098772@svn.freebsd.org> From: Alexander Motin Date: Wed, 22 Dec 2010 09:02:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216649 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Dec 2010 09:02:22 -0000 Author: mav Date: Wed Dec 22 09:02:22 2010 New Revision: 216649 URL: http://svn.freebsd.org/changeset/base/216649 Log: Implement basic metadata generation check. To be sure that used metadata is up to date - delay volumes creation until we have all disks or timeout expires. This probably obsolete same functionality done at volumes level. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/g_raid_md_if.m projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Wed Dec 22 05:53:46 2010 (r216648) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Dec 22 09:02:22 2010 (r216649) @@ -55,7 +55,7 @@ u_int g_raid_debug = 1000; TUNABLE_INT("kern.geom.raid.debug", &g_raid_debug); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, debug, CTLFLAG_RW, &g_raid_debug, 0, "Debug level"); -static u_int g_raid_start_timeout = 4; +u_int g_raid_start_timeout = 4; TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout, 0, "Time to wait on all mirror components"); @@ -122,6 +122,8 @@ g_raid_disk_state2str(int state) return ("SPARE"); case G_RAID_DISK_S_OFFLINE: return ("OFFLINE"); + case G_RAID_DISK_S_STALE: + return ("STALE"); default: return ("INVALID"); } @@ -1297,12 +1299,13 @@ g_raid_destroy_volume(struct g_raid_volu } int -g_raid_stop_disk(struct g_raid_disk *disk) +g_raid_destroy_disk(struct g_raid_disk *disk) { struct g_raid_softc *sc; struct g_raid_subdisk *sd, *tmp; sc = disk->d_softc; + G_RAID_DEBUG(2, "Destroying disk."); if (disk->d_consumer) { g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); @@ -1315,21 +1318,9 @@ g_raid_stop_disk(struct g_raid_disk *dis LIST_REMOVE(sd, sd_next); sd->sd_disk = NULL; } - return (0); -} - -int -g_raid_destroy_disk(struct g_raid_disk *disk) -{ - struct g_raid_softc *sc; - int error; - - sc = disk->d_softc; - G_RAID_DEBUG(2, "Destroying disk."); - error = g_raid_stop_disk(disk); - if (error) - return (error); LIST_REMOVE(disk, d_next); + if (sc->sc_md) + G_RAID_MD_FREE_DISK(sc->sc_md, disk); free(disk, M_RAID); return (0); } Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Wed Dec 22 05:53:46 2010 (r216648) +++ projects/graid/head/sys/geom/raid/g_raid.h Wed Dec 22 09:02:22 2010 (r216649) @@ -58,6 +58,7 @@ struct g_raid_tr_object; #ifdef _KERNEL extern u_int g_raid_debug; +extern u_int g_raid_start_timeout; #define G_RAID_DEBUG(lvl, fmt, ...) do { \ if (g_raid_debug >= (lvl)) { \ @@ -101,6 +102,7 @@ struct g_raid_event { #define G_RAID_DISK_S_ACTIVE 0x01 #define G_RAID_DISK_S_SPARE 0x02 #define G_RAID_DISK_S_OFFLINE 0x03 +#define G_RAID_DISK_S_STALE 0x04 #define G_RAID_DISK_E_DISCONNECTED 0x01 @@ -284,10 +286,6 @@ struct g_raid_disk * g_raid_create_disk( int g_raid_start_volume(struct g_raid_volume *vol); -int g_raid_stop_node(struct g_raid_softc *sc); -int g_raid_stop_volume(struct g_raid_volume *vol); -int g_raid_stop_disk(struct g_raid_disk *disk); - int g_raid_destroy_node(struct g_raid_softc *sc, int worker); int g_raid_destroy_volume(struct g_raid_volume *vol); int g_raid_destroy_disk(struct g_raid_disk *disk); Modified: projects/graid/head/sys/geom/raid/g_raid_md_if.m ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_md_if.m Wed Dec 22 05:53:46 2010 (r216648) +++ projects/graid/head/sys/geom/raid/g_raid_md_if.m Wed Dec 22 09:02:22 2010 (r216649) @@ -71,6 +71,12 @@ METHOD int write { struct g_raid_disk *disk; }; +# free_disk() - disk destructor. +METHOD int free_disk { + struct g_raid_md_object *md; + struct g_raid_disk *disk; +}; + # free() - destructor. METHOD int free { struct g_raid_md_object *md; Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 05:53:46 2010 (r216648) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 09:02:22 2010 (r216649) @@ -135,21 +135,31 @@ struct intel_raid_vol { struct intel_raid_map map[1]; } __packed; +struct g_raid_md_intel_perdisk { + struct intel_raid_conf *pd_meta; + int pd_disk_pos; +}; + struct g_raid_md_intel_object { - struct g_raid_md_object mdio_base; - uint32_t mdio_config_id; + struct g_raid_md_object mdio_base; + uint32_t mdio_config_id; struct intel_raid_conf *mdio_meta; + struct callout mdio_start_co; /* STARTING state timer. */ + int mdio_disks_present; + int mdio_started; }; static g_raid_md_taste_t g_raid_md_taste_intel; static g_raid_md_event_t g_raid_md_event_intel; static g_raid_md_write_t g_raid_md_write_intel; +static g_raid_md_free_disk_t g_raid_md_free_disk_intel; static g_raid_md_free_t g_raid_md_free_intel; static kobj_method_t g_raid_md_intel_methods[] = { KOBJMETHOD(g_raid_md_taste, g_raid_md_taste_intel), KOBJMETHOD(g_raid_md_event, g_raid_md_event_intel), KOBJMETHOD(g_raid_md_write, g_raid_md_write_intel), + KOBJMETHOD(g_raid_md_free_disk, g_raid_md_free_disk_intel), KOBJMETHOD(g_raid_md_free, g_raid_md_free_intel), { 0, 0 } }; @@ -251,6 +261,17 @@ g_raid_md_intel_print(struct intel_raid_ printf("=================================================\n"); } +static struct intel_raid_conf * +intel_meta_copy(struct intel_raid_conf *meta) +{ + struct intel_raid_conf *nmeta; + + nmeta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK | M_ZERO); + memcpy(nmeta, meta, meta->config_size); + return (nmeta); +} + +#if 0 static struct g_raid_disk * g_raid_md_intel_get_disk(struct g_raid_softc *sc, int id) { @@ -262,6 +283,7 @@ g_raid_md_intel_get_disk(struct g_raid_s } return (disk); } +#endif static struct g_raid_volume * g_raid_md_intel_get_volume(struct g_raid_softc *sc, int id) @@ -275,6 +297,166 @@ g_raid_md_intel_get_volume(struct g_raid return (vol); } +static void +g_raid_md_intel_start_disk(struct g_raid_disk *disk) +{ + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct g_raid_md_object *md; + struct g_raid_md_intel_object *mdi; + struct g_raid_md_intel_perdisk *pd; + struct intel_raid_conf *meta, *pdmeta; + struct intel_raid_vol *mvol; + struct intel_raid_map *map; + int i, j; + + sc = disk->d_softc; + md = sc->sc_md; + mdi = (struct g_raid_md_intel_object *)md; + meta = mdi->mdio_meta; + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + pdmeta = pd->pd_meta; + + if (pdmeta->generation != meta->generation) { + g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); + return; + } + + /* Update disk state. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + + /* Create subdisks. */ + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + map = intel_get_map(mvol, 0); + for (j = 0; j < map->total_disks; j++) { + if ((map->disk_idx[j] & INTEL_DI_IDX) == pd->pd_disk_pos) + break; + } + if (j == map->total_disks) + continue; + vol = g_raid_md_intel_get_volume(sc, i); + sd = &vol->v_subdisks[j]; + sd->sd_disk = disk; + sd->sd_offset = map->offset * 512; //ZZZ + sd->sd_size = map->disk_sectors; + LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, + G_RAID_EVENT_SUBDISK); + } + +} + +static void +g_raid_md_intel_start(struct g_raid_softc *sc) +{ + struct g_raid_md_object *md; + struct g_raid_md_intel_object *mdi; + struct intel_raid_conf *meta; + struct intel_raid_vol *mvol; + struct intel_raid_map *map; + struct g_raid_volume *vol; + struct g_raid_disk *disk; + int i; + + md = sc->sc_md; + mdi = (struct g_raid_md_intel_object *)md; + meta = mdi->mdio_meta; + /* Create volumes */ + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + map = intel_get_map(mvol, 0); + vol = g_raid_create_volume(sc, mvol->name); + vol->v_md_data = (void *)(intptr_t)i; + if (map->type == INTEL_T_RAID0) + vol->v_raid_level = G_RAID_VOLUME_RL_RAID0; + else if (map->type == INTEL_T_RAID1 && + map->total_disks < 4) + vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; + else if (map->type == INTEL_T_RAID1) + vol->v_raid_level = G_RAID_VOLUME_RL_RAID10; + else if (map->type == INTEL_T_RAID5) + vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; + else + vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; + vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; + vol->v_strip_size = map->stripe_sectors * 512; //ZZZ + vol->v_disks_count = map->total_disks; + vol->v_mediasize = mvol->total_sectors * 512; //ZZZ + vol->v_sectorsize = 512; //ZZZ + g_raid_start_volume(vol); + } + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + g_raid_md_intel_start_disk(disk); + } +} + +static void +g_raid_md_intel_new_disk(struct g_raid_disk *disk) +{ + struct g_raid_softc *sc; + struct g_raid_md_object *md; + struct g_raid_md_intel_object *mdi; + struct intel_raid_conf *meta, *pdmeta; + struct g_raid_md_intel_perdisk *pd; + + sc = disk->d_softc; + md = sc->sc_md; + mdi = (struct g_raid_md_intel_object *)md; + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + pdmeta = pd->pd_meta; + + if (mdi->mdio_meta == NULL || + pdmeta->generation > mdi->mdio_meta->generation) { + if (mdi->mdio_started) { + G_RAID_DEBUG(1, "Newer disk, but already started"); + } else { + G_RAID_DEBUG(1, "Newer disk"); + if (mdi->mdio_meta != NULL) + free(mdi->mdio_meta, M_MD_INTEL); + mdi->mdio_meta = intel_meta_copy(pdmeta); + mdi->mdio_disks_present = 1; + } + } else if (pdmeta->generation == mdi->mdio_meta->generation) { + mdi->mdio_disks_present++; + G_RAID_DEBUG(1, "Matching disk (%d up)", + mdi->mdio_disks_present); + } else { + G_RAID_DEBUG(1, "Stale disk"); + } + + meta = mdi->mdio_meta; + if (mdi->mdio_started) { + g_raid_md_intel_start_disk(disk); + } else { + if (mdi->mdio_disks_present == meta->total_disks) { + mdi->mdio_started = 1; + callout_stop(&mdi->mdio_start_co); + g_raid_md_intel_start(sc); + } + } +} + +static void +g_raid_intel_go(void *arg) +{ + struct g_raid_softc *sc; + struct g_raid_md_object *md; + struct g_raid_md_intel_object *mdi; + + sc = arg; + md = sc->sc_md; + mdi = (struct g_raid_md_intel_object *)md; + sx_xlock(&sc->sc_lock); + if (!mdi->mdio_started) { + G_RAID_DEBUG(0, "Force node %s start due to timeout.", sc->sc_name); + mdi->mdio_started = 1; + g_raid_md_intel_start(sc); + } + sx_xunlock(&sc->sc_lock); +} + static int g_raid_md_taste_intel(struct g_raid_md_object *md, struct g_class *mp, struct g_consumer *cp, struct g_geom **gp) @@ -283,16 +465,13 @@ g_raid_md_taste_intel(struct g_raid_md_o struct g_provider *pp; struct g_raid_md_intel_object *mdi, *mdi1; struct g_raid_softc *sc; - struct g_raid_volume *vol; - struct g_raid_subdisk *subdisk; struct g_raid_disk *disk; struct intel_raid_conf *meta; - struct intel_raid_vol *mvol; - struct intel_raid_map *map; + struct g_raid_md_intel_perdisk *pd; struct g_geom *geom; uint32_t checksum, *ptr; char *buf, *tmp; - int i, j, error, serial_len, disk_pos, result; + int i, error, serial_len, disk_pos, result; char serial[INTEL_SERIAL_LEN]; char name[16]; @@ -364,6 +543,7 @@ g_raid_md_taste_intel(struct g_raid_md_o g_raid_md_intel_print(meta); G_RAID_DEBUG(1, "Intel disk position %d", disk_pos); + /* Search for matching node. */ sc = NULL; mdi1 = NULL; LIST_FOREACH(geom, &mp->geom, geom) { @@ -388,41 +568,14 @@ g_raid_md_taste_intel(struct g_raid_md_o } else { /* Not found matching node. */ result = G_RAID_MD_TASTE_NEW; mdi->mdio_config_id = meta->config_id; - mdi->mdio_meta = meta; snprintf(name, sizeof(name), "Intel-%08x", meta->config_id); sc = g_raid_create_node(mp, name, md); md->mdo_softc = sc; geom = sc->sc_geom; G_RAID_DEBUG(1, "Created new node %s", sc->sc_name); - - /* Create volumes */ - for (i = 0; i < meta->total_volumes; i++) { - mvol = intel_get_volume(meta, i); - map = intel_get_map(mvol, 0); - vol = g_raid_create_volume(sc, mvol->name); - vol->v_md_data = (void *)(intptr_t)i; - if (map->type == INTEL_T_RAID0) - vol->v_raid_level = G_RAID_VOLUME_RL_RAID0; - else if (map->type == INTEL_T_RAID1 && - map->total_disks < 4) - vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; - else if (map->type == INTEL_T_RAID1) - vol->v_raid_level = G_RAID_VOLUME_RL_RAID10; - else if (map->type == INTEL_T_RAID5) - vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; - else - vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; - vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; - vol->v_strip_size = map->stripe_sectors * 512; //ZZZ - vol->v_disks_count = map->total_disks; - vol->v_mediasize = mvol->total_sectors * 512; //ZZZ - vol->v_sectorsize = 512; //ZZZ - g_topology_unlock(); - sx_xlock(&sc->sc_lock); - g_raid_start_volume(vol); - sx_xunlock(&sc->sc_lock); - g_topology_lock(); - } + callout_init(&mdi->mdio_start_co, 1); + callout_reset(&mdi->mdio_start_co, g_raid_start_timeout * hz, + g_raid_intel_go, sc); } rcp = g_new_consumer(geom); @@ -433,34 +586,15 @@ g_raid_md_taste_intel(struct g_raid_md_o g_topology_unlock(); sx_xlock(&sc->sc_lock); - disk = g_raid_md_intel_get_disk(sc, disk_pos); - if (disk != 0) - ; /* Error, duplicate disk! */ + pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); + pd->pd_meta = meta; + pd->pd_disk_pos = disk_pos; disk = g_raid_create_disk(sc); - disk->d_md_data = (void *)(intptr_t)disk_pos; + disk->d_md_data = (void *)pd; disk->d_consumer = rcp; - g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); rcp->private = disk; - /* Create subdisks */ - for (i = 0; i < meta->total_volumes; i++) { - mvol = intel_get_volume(meta, i); - map = intel_get_map(mvol, 0); - for (j = 0; j < map->total_disks; j++) { - if ((map->disk_idx[j] & INTEL_DI_IDX) == disk_pos) - break; - } - if (j == map->total_disks) - continue; - vol = g_raid_md_intel_get_volume(sc, i); - subdisk = &vol->v_subdisks[j]; - subdisk->sd_disk = disk; - subdisk->sd_offset = map->offset * 512; //ZZZ - subdisk->sd_size = map->disk_sectors; - LIST_INSERT_HEAD(&disk->d_subdisks, subdisk, sd_next); - g_raid_event_send(subdisk, G_RAID_SUBDISK_E_NEW, - G_RAID_EVENT_SUBDISK); - } + g_raid_md_intel_new_disk(disk); sx_xunlock(&sc->sc_lock); g_topology_lock(); @@ -501,13 +635,35 @@ g_raid_md_write_intel(struct g_raid_md_o } static int +g_raid_md_free_disk_intel(struct g_raid_md_object *md, + struct g_raid_disk *disk) +{ + struct g_raid_md_intel_perdisk *pd; + + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if (pd->pd_meta != NULL) { + free(pd->pd_meta, M_MD_INTEL); + pd->pd_meta = NULL; + } + free(pd, M_MD_INTEL); + disk->d_md_data = NULL; + return (0); +} + +static int g_raid_md_free_intel(struct g_raid_md_object *md) { struct g_raid_md_intel_object *mdi; mdi = (struct g_raid_md_intel_object *)md; - free(mdi->mdio_meta, M_MD_INTEL); - mdi->mdio_meta = NULL; + if (!mdi->mdio_started) { + mdi->mdio_started = 0; + callout_stop(&mdi->mdio_start_co); + } + if (mdi->mdio_meta != NULL) { + free(mdi->mdio_meta, M_MD_INTEL); + mdi->mdio_meta = NULL; + } return (0); } From owner-svn-src-projects@FreeBSD.ORG Wed Dec 22 16:33:40 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5AF8F1065674; Wed, 22 Dec 2010 16:33:40 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 487C08FC1F; Wed, 22 Dec 2010 16:33:40 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBMGXebH026825; Wed, 22 Dec 2010 16:33:40 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBMGXelm026819; Wed, 22 Dec 2010 16:33:40 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012221633.oBMGXelm026819@svn.freebsd.org> From: Alexander Motin Date: Wed, 22 Dec 2010 16:33:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216666 - in projects/graid/head: sbin/geom/class/raid sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Dec 2010 16:33:40 -0000 Author: mav Date: Wed Dec 22 16:33:40 2010 New Revision: 216666 URL: http://svn.freebsd.org/changeset/base/216666 Log: Implement `graid stop`, and common part of `graid label`. Pass "label" and all further commands to metadata module via special method call. Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/g_raid_ctl.c projects/graid/head/sys/geom/raid/g_raid_md_if.m projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/head/sbin/geom/class/raid/geom_raid.c Wed Dec 22 15:44:25 2010 (r216665) +++ projects/graid/head/sbin/geom/class/raid/geom_raid.c Wed Dec 22 16:33:40 2010 (r216666) @@ -49,71 +49,11 @@ uint32_t version = G_RAID_VERSION; #define GRAID_SLICE "4096" #define GRAID_PRIORITY "0" -static void raid_main(struct gctl_req *req, unsigned flags); -#if 0 -static void raid_activate(struct gctl_req *req); -static void raid_clear(struct gctl_req *req); -static void raid_dump(struct gctl_req *req); -static void raid_label(struct gctl_req *req); -#endif +//static void raid_main(struct gctl_req *req, unsigned flags); struct g_command class_commands[] = { - { "activate", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "clear", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] prov ..." - }, - { "configure", G_FLAG_VERBOSE, NULL, - { - { 'a', "autosync", NULL, G_TYPE_BOOL }, - { 'b', "balance", "", G_TYPE_STRING }, - { 'd', "dynamic", NULL, G_TYPE_BOOL }, - { 'f', "failsync", NULL, G_TYPE_BOOL }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 'p', "priority", "-1", G_TYPE_NUMBER }, - { 's', "slice", "-1", G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-adfFhnv] [-b balance] [-s slice] name\n" - "[-v] -p priority name prov" - }, - { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "dump", 0, raid_main, G_NULL_OPTS, - "prov ..." - }, - { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "name ..." - }, - { "label", G_FLAG_VERBOSE, raid_main, - { - { 'b', "balance", GRAID_BALANCE, G_TYPE_STRING }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 's', "slice", GRAID_SLICE, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-Fhnv] [-b balance] [-s slice] name prov ..." - }, - { "insert", G_FLAG_VERBOSE, NULL, - { - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'i', "inactive", NULL, G_TYPE_BOOL }, - { 'p', "priority", GRAID_PRIORITY, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-hiv] [-p priority] name prov ..." - }, - { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." + { "label", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, + "format name level prov ..." }, { "stop", G_FLAG_VERBOSE, NULL, { @@ -125,6 +65,7 @@ struct g_command class_commands[] = { G_CMD_SENTINEL }; +#if 0 static int verbose = 0; static void @@ -140,7 +81,6 @@ raid_main(struct gctl_req *req, unsigned gctl_error(req, "No '%s' argument.", "verb"); return; } -#if 0 if (strcmp(name, "label") == 0) raid_label(req); else if (strcmp(name, "clear") == 0) @@ -150,236 +90,7 @@ raid_main(struct gctl_req *req, unsigned else if (strcmp(name, "activate") == 0) raid_activate(req); else -#endif gctl_error(req, "Unknown command: %s.", name); } - -#if 0 -static void -raid_label(struct gctl_req *req) -{ - struct g_raid_metadata md; - u_char sector[512]; - const char *str; - unsigned sectorsize; - off_t mediasize; - intmax_t val; - int error, i, nargs, bal, hardcode; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - - strlcpy(md.md_magic, G_RAID_MAGIC, sizeof(md.md_magic)); - md.md_version = G_RAID_VERSION; - str = gctl_get_ascii(req, "arg0"); - strlcpy(md.md_name, str, sizeof(md.md_name)); - md.md_mid = arc4random(); - md.md_all = nargs - 1; - md.md_mflags = 0; - md.md_dflags = 0; - md.md_genid = 0; - md.md_syncid = 1; - md.md_sync_offset = 0; - val = gctl_get_intmax(req, "slice"); - md.md_slice = val; - str = gctl_get_ascii(req, "balance"); - bal = balance_id(str); - if (bal == -1) { - gctl_error(req, "Invalid balance algorithm."); - return; - } - md.md_balance = bal; - if (gctl_get_int(req, "noautosync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - if (gctl_get_int(req, "nofailsync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - hardcode = gctl_get_int(req, "hardcode"); - - /* - * Calculate sectorsize by finding least common multiple from - * sectorsizes of every disk and find the smallest mediasize. - */ - mediasize = 0; - sectorsize = 0; - for (i = 1; i < nargs; i++) { - unsigned ssize; - off_t msize; - - str = gctl_get_ascii(req, "arg%d", i); - msize = g_get_mediasize(str); - ssize = g_get_sectorsize(str); - if (msize == 0 || ssize == 0) { - gctl_error(req, "Can't get informations about %s: %s.", - str, strerror(errno)); - return; - } - msize -= ssize; - if (mediasize == 0 || (mediasize > 0 && msize < mediasize)) - mediasize = msize; - if (sectorsize == 0) - sectorsize = ssize; - else - sectorsize = g_lcm(sectorsize, ssize); - } - md.md_mediasize = mediasize; - md.md_sectorsize = sectorsize; - md.md_mediasize -= (md.md_mediasize % md.md_sectorsize); - - /* - * Clear last sector first, to spoil all components if device exists. - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(str, NULL); - if (error != 0) { - gctl_error(req, "Can't store metadata on %s: %s.", str, - strerror(error)); - return; - } - } - - /* - * Ok, store metadata (use disk number as priority). - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - md.md_did = arc4random(); - md.md_priority = i - 1; - md.md_provsize = g_get_mediasize(str); - assert(md.md_provsize != 0); - if (!hardcode) - bzero(md.md_provider, sizeof(md.md_provider)); - else { - if (strncmp(str, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) - str += sizeof(_PATH_DEV) - 1; - strlcpy(md.md_provider, str, sizeof(md.md_provider)); - } - raid_metadata_encode(&md, sector); - error = g_metadata_store(str, sector, sizeof(sector)); - if (error != 0) { - fprintf(stderr, "Can't store metadata on %s: %s.\n", - str, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata value stored on %s.\n", str); - } -} - -static void -raid_clear(struct gctl_req *req) -{ - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(name, G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't clear metadata on %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata cleared on %s.\n", name); - } -} - -static void -raid_dump(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(name, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't read metadata from %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, "MD5 hash mismatch for %s, skipping.\n", - name); - gctl_error(req, "Not fully done."); - continue; - } - printf("Metadata on %s:\n", name); - raid_metadata_dump(&md); - printf("\n"); - } -} - -static void -raid_activate(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name, *path; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_ascii(req, "arg0"); - - for (i = 1; i < nargs; i++) { - path = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(path, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Cannot read metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, - "MD5 hash mismatch for provider %s, skipping.\n", - path); - gctl_error(req, "Not fully done."); - continue; - } - if (strcmp(md.md_name, name) != 0) { - fprintf(stderr, - "Provider %s is not the raid %s component.\n", - path, name); - gctl_error(req, "Not fully done."); - continue; - } - md.md_dflags &= ~G_RAID_DISK_FLAG_INACTIVE; - raid_metadata_encode(&md, (u_char *)&tmpmd); - error = g_metadata_store(path, (u_char *)&tmpmd, sizeof(tmpmd)); - if (error != 0) { - fprintf(stderr, "Cannot write metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Provider %s activated.\n", path); - } -} #endif + Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Wed Dec 22 15:44:25 2010 (r216665) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Dec 22 16:33:40 2010 (r216666) @@ -92,7 +92,7 @@ static void g_raid_fini(struct g_class * struct g_class g_raid_class = { .name = G_RAID_CLASS_NAME, .version = G_VERSION, - .ctlreq = g_raid_config, + .ctlreq = g_raid_ctl, .taste = g_raid_taste, .destroy_geom = g_raid_destroy_geom, .init = g_raid_init, @@ -219,7 +219,7 @@ g_raid_volume_event2str(int event) } } -static const char * +const char * g_raid_volume_level2str(int level, int qual) { @@ -253,6 +253,41 @@ g_raid_volume_level2str(int level, int q } } +int +g_raid_volume_str2level(const char *str, int *level, int *qual) +{ + + *level = G_RAID_VOLUME_RL_UNKNOWN; + *qual = G_RAID_VOLUME_RLQ_NONE; + if (strcasecmp(str, "RAID0") == 0) + *level = G_RAID_VOLUME_RL_RAID0; + else if (strcasecmp(str, "RAID1") == 0) + *level = G_RAID_VOLUME_RL_RAID1; + else if (strcasecmp(str, "RAID3") == 0) + *level = G_RAID_VOLUME_RL_RAID3; + else if (strcasecmp(str, "RAID4") == 0) + *level = G_RAID_VOLUME_RL_RAID4; + else if (strcasecmp(str, "RAID5") == 0) + *level = G_RAID_VOLUME_RL_RAID5; + else if (strcasecmp(str, "RAID6") == 0) + *level = G_RAID_VOLUME_RL_RAID6; + else if (strcasecmp(str, "RAID10") == 0) + *level = G_RAID_VOLUME_RL_RAID10; + else if (strcasecmp(str, "RAID1E") == 0) + *level = G_RAID_VOLUME_RL_RAID1E; + else if (strcasecmp(str, "SINGLE") == 0) + *level = G_RAID_VOLUME_RL_SINGLE; + else if (strcasecmp(str, "CONCAT") == 0) + *level = G_RAID_VOLUME_RL_CONCAT; + else if (strcasecmp(str, "RAID5E") == 0) + *level = G_RAID_VOLUME_RL_RAID5E; + else if (strcasecmp(str, "RAID5EE") == 0) + *level = G_RAID_VOLUME_RL_RAID5EE; + else + return (0); + return (1); +} + static const char * g_raid_get_diskname(struct g_raid_disk *disk) { @@ -1233,12 +1268,15 @@ g_raid_destroy_node(struct g_raid_softc kobj_delete((kobj_t)sc->sc_md, M_RAID); sc->sc_md = NULL; } - G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); - g_topology_lock(); - sc->sc_geom->softc = NULL; - g_wither_geom(sc->sc_geom, ENXIO); - g_topology_unlock(); - sc->sc_geom = NULL; + if (sc->sc_geom != NULL) { + G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); + g_topology_lock(); + sc->sc_geom->softc = NULL; + g_wither_geom(sc->sc_geom, ENXIO); + g_topology_unlock(); + sc->sc_geom = NULL; + } else + G_RAID_DEBUG(1, "Destroying node."); if (worker) { mtx_destroy(&sc->sc_queue_mtx); sx_xunlock(&sc->sc_lock); @@ -1423,6 +1461,31 @@ g_raid_taste(struct g_class *mp, struct return (geom); } +int +g_raid_create_node_format(const char *format, struct g_geom **gp) +{ + struct g_raid_md_class *class; + struct g_raid_md_object *obj; + int status; + + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + LIST_FOREACH(class, &g_raid_md_classes, mdc_list) { + if (strcasecmp(class->name, format) == 0) + break; + } + if (class == NULL) { + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + return (G_RAID_MD_TASTE_FAIL); + } + obj = (void *)kobj_create((kobj_class_t)class, M_RAID, + M_WAITOK); + obj->mdo_class = class; + status = G_RAID_MD_CREATE(obj, &g_raid_class, gp); + if (status != G_RAID_MD_TASTE_NEW) + kobj_delete((kobj_t)obj, M_RAID); + return (status); +} + static int g_raid_destroy_geom(struct gctl_req *req __unused, struct g_class *mp __unused, struct g_geom *gp) Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Wed Dec 22 15:44:25 2010 (r216665) +++ projects/graid/head/sys/geom/raid/g_raid.h Wed Dec 22 16:33:40 2010 (r216666) @@ -278,8 +278,12 @@ int g_raid_tr_modevent(module_t, int, vo }; \ DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) +const char * g_raid_volume_level2str(int level, int qual); +int g_raid_volume_str2level(const char *str, int *level, int *qual); + struct g_raid_softc * g_raid_create_node(struct g_class *mp, const char *name, struct g_raid_md_object *md); +int g_raid_create_node_format(const char *format, struct g_geom **gp); struct g_raid_volume * g_raid_create_volume(struct g_raid_softc *sc, const char *name); struct g_raid_disk * g_raid_create_disk(struct g_raid_softc *sc); @@ -307,7 +311,7 @@ u_int g_raid_nsubdisks(struct g_raid_vol int g_raid_destroy(struct g_raid_softc *sc, int how); int g_raid_event_send(void *arg, int event, int flags); -g_ctl_req_t g_raid_config; +g_ctl_req_t g_raid_ctl; #endif /* _KERNEL */ #endif /* !_G_RAID_H_ */ Modified: projects/graid/head/sys/geom/raid/g_raid_ctl.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_ctl.c Wed Dec 22 15:44:25 2010 (r216665) +++ projects/graid/head/sys/geom/raid/g_raid_ctl.c Wed Dec 22 16:33:40 2010 (r216666) @@ -43,547 +43,149 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include "g_raid_md_if.h" -#if 0 static struct g_raid_softc * -g_raid_find_device(struct g_class *mp, const char *name) +g_raid_find_node(struct g_class *mp, const char *name) { struct g_raid_softc *sc; struct g_geom *gp; - g_topology_lock(); LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; if (sc == NULL) continue; if (sc->sc_stopping != 0) continue; - if (strcmp(gp->name, name) == 0 || - strcmp(sc->sc_name, name) == 0) { - g_topology_unlock(); - sx_xlock(&sc->sc_lock); + if (strcasecmp(sc->sc_name, name) == 0) return (sc); - } - } - g_topology_unlock(); - return (NULL); -} - -static struct g_raid_disk * -g_raid_find_disk(struct g_raid_softc *sc, const char *name) -{ - struct g_raid_disk *disk; - - sx_assert(&sc->sc_lock, SX_XLOCKED); - if (strncmp(name, "/dev/", 5) == 0) - name += 5; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - if (disk->d_consumer == NULL) - continue; - if (disk->d_consumer->provider == NULL) - continue; - if (strcmp(disk->d_consumer->provider->name, name) == 0) - return (disk); } return (NULL); } static void -g_raid_ctl_configure(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_label(struct gctl_req *req, struct g_class *mp) { + struct g_geom *geom; struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name, *balancep, *prov; - intmax_t *slicep, *priority; - uint32_t slice; - uint8_t balance; - int *autosync, *noautosync, *failsync, *nofailsync, *hardcode, *dynamic; - int *nargs, do_sync = 0, dirty = 1, do_priority = 0; + const char *format; + int *nargs; + int crstatus, ctlstatus; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs != 1 && *nargs != 2) { - gctl_error(req, "Invalid number of arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); - return; - } - balancep = gctl_get_asciiparam(req, "balance"); - if (balancep == NULL) { - gctl_error(req, "No '%s' argument.", "balance"); - return; - } - autosync = gctl_get_paraml(req, "autosync", sizeof(*autosync)); - if (autosync == NULL) { - gctl_error(req, "No '%s' argument.", "autosync"); - return; - } - noautosync = gctl_get_paraml(req, "noautosync", sizeof(*noautosync)); - if (noautosync == NULL) { - gctl_error(req, "No '%s' argument.", "noautosync"); - return; - } - failsync = gctl_get_paraml(req, "failsync", sizeof(*failsync)); - if (failsync == NULL) { - gctl_error(req, "No '%s' argument.", "failsync"); - return; - } - nofailsync = gctl_get_paraml(req, "nofailsync", sizeof(*nofailsync)); - if (nofailsync == NULL) { - gctl_error(req, "No '%s' argument.", "nofailsync"); - return; - } - hardcode = gctl_get_paraml(req, "hardcode", sizeof(*hardcode)); - if (hardcode == NULL) { - gctl_error(req, "No '%s' argument.", "hardcode"); - return; - } - dynamic = gctl_get_paraml(req, "dynamic", sizeof(*dynamic)); - if (dynamic == NULL) { - gctl_error(req, "No '%s' argument.", "dynamic"); - return; - } - priority = gctl_get_paraml(req, "priority", sizeof(*priority)); - if (priority == NULL) { - gctl_error(req, "No '%s' argument.", "priority"); - return; - } - if (*priority < -1 || *priority > 255) { - gctl_error(req, "Priority range is 0 to 255, %jd given", - *priority); - return; - } - /* - * Since we have a priority, we also need a provider now. - * Note: be WARNS safe, by always assigning prov and only throw an - * error if *priority != -1. - */ - prov = gctl_get_asciiparam(req, "arg1"); - if (*priority > -1) { - if (prov == NULL) { - gctl_error(req, "Priority needs a disk name"); - return; - } - do_priority = 1; - } - if (*autosync && *noautosync) { - gctl_error(req, "'%s' and '%s' specified.", "autosync", - "noautosync"); - return; - } - if (*failsync && *nofailsync) { - gctl_error(req, "'%s' and '%s' specified.", "failsync", - "nofailsync"); - return; - } - if (*hardcode && *dynamic) { - gctl_error(req, "'%s' and '%s' specified.", "hardcode", - "dynamic"); - return; - } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); - return; - } - if (*balancep == '\0') - balance = sc->sc_balance; - else { - if (balance_id(balancep) == -1) { - gctl_error(req, "Invalid balance algorithm."); - sx_xunlock(&sc->sc_lock); - return; - } - balance = balance_id(balancep); - } - slicep = gctl_get_paraml(req, "slice", sizeof(*slicep)); - if (slicep == NULL) { - gctl_error(req, "No '%s' argument.", "slice"); - sx_xunlock(&sc->sc_lock); - return; - } - if (*slicep == -1) - slice = sc->sc_slice; - else - slice = *slicep; - /* Enforce usage() of -p not allowing any other options. */ - if (do_priority && (*autosync || *noautosync || *failsync || - *nofailsync || *hardcode || *dynamic || *slicep != -1 || - *balancep != '\0')) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "only -p accepted when setting priority"); - return; - } - if (sc->sc_balance == balance && sc->sc_slice == slice && !*autosync && - !*noautosync && !*failsync && !*nofailsync && !*hardcode && - !*dynamic && !do_priority) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Nothing has changed."); - return; - } - if ((!do_priority && *nargs != 1) || (do_priority && *nargs != 2)) { - sx_xunlock(&sc->sc_lock); + if (*nargs < 4) { gctl_error(req, "Invalid number of arguments."); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - sc->sc_balance = balance; - sc->sc_slice = slice; - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) { - if (*autosync) { - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOAUTOSYNC; - do_sync = 1; - } - } else { - if (*noautosync) - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - } - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOFAILSYNC) != 0) { - if (*failsync) - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOFAILSYNC; - } else { - if (*nofailsync) { - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - dirty = 0; - } - } - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - /* - * Handle priority first, since we only need one disk, do one - * operation on it and then we're done. No need to check other - * flags, as usage doesn't allow it. - */ - if (do_priority) { - if (strcmp(disk->d_consumer->provider->name, prov) == 0) { - if (disk->d_priority == *priority) - gctl_error(req, "Nothing has changed."); - else { - disk->d_priority = *priority; - g_raid_update_metadata(disk); - } - break; - } - continue; - } - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_SYNCHRONIZING) - disk->d_flags &= ~G_RAID_DISK_FLAG_FORCE_SYNC; - } - if (!dirty) - disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; - g_raid_update_metadata(disk); - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_STALE) { - g_raid_event_send(disk, - G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_DISK); - } - } - } - sx_xunlock(&sc->sc_lock); -} - -static void -g_raid_ctl_rebuild(struct gctl_req *req, struct g_class *mp) -{ - struct g_raid_metadata md; - struct g_raid_softc *sc; - struct g_raid_disk *disk; - struct g_provider *pp; - const char *name; - char param[16]; - int error, *nargs; - u_int i; - - nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); - if (nargs == NULL) { - gctl_error(req, "No '%s' argument.", "nargs"); - return; - } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + format = gctl_get_asciiparam(req, "arg0"); + if (format == NULL) { + gctl_error(req, "No format recieved."); return; } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + crstatus = g_raid_create_node_format(format, &geom); + if (crstatus == G_RAID_MD_TASTE_FAIL) { + gctl_error(req, "Failed to create node with format '%s'.", + format); return; } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; - } - if (g_raid_ndisks(sc, G_RAID_DISK_STATE_ACTIVE) == 1 && - disk->d_state == G_RAID_DISK_STATE_ACTIVE) { - /* - * This is the last active disk. There will be nothing - * to rebuild it from, so deny this request. - */ - gctl_error(req, - "Provider %s is the last active provider in %s.", - name, sc->sc_geom->name); - break; - } - /* - * Do rebuild by resetting syncid, disconnecting the disk and - * connecting it again. - */ - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) - disk->d_flags |= G_RAID_DISK_FLAG_FORCE_SYNC; - g_raid_update_metadata(disk); - pp = disk->d_consumer->provider; - g_topology_lock(); - error = g_raid_read_metadata(disk->d_consumer, &md); - g_topology_unlock(); - g_raid_event_send(disk, G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_WAIT); - if (error != 0) { - gctl_error(req, "Cannot read metadata from %s.", - pp->name); - continue; - } - error = g_raid_add_disk(sc, pp, &md); - if (error != 0) { - gctl_error(req, "Cannot reconnect component %s.", - pp->name); - continue; - } + sc = (struct g_raid_softc *)geom->softc; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + ctlstatus = G_RAID_MD_CTL(sc->sc_md, req); + if (ctlstatus < 0) { + gctl_error(req, "Command failed: %d.", ctlstatus); + if (crstatus == G_RAID_MD_TASTE_NEW) + g_raid_destroy_node(sc, 0); } sx_xunlock(&sc->sc_lock); + g_topology_lock(); } static void -g_raid_ctl_remove(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_stop(struct gctl_req *req, struct g_class *mp) { struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name; - char param[16]; - int *nargs; - u_int i; + const char *nodename; + int *nargs, *force; + int error, how; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); + if (*nargs < 1) { + gctl_error(req, "Invalid number of arguments."); return; } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + nodename = gctl_get_asciiparam(req, "arg0"); + if (nodename == NULL) { + gctl_error(req, "No node name recieved."); return; } - sc = g_raid_find_device(mp, name); + sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + gctl_error(req, "Node '%s' not found.", nodename); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { + force = gctl_get_paraml(req, "force", sizeof(*force)); + if (force != NULL && *force) + how = G_RAID_DESTROY_HARD; + else + how = G_RAID_DESTROY_SOFT; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + error = g_raid_destroy(sc, how); + if (error != 0) sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; - } - g_raid_event_send(disk, G_RAID_DISK_STATE_DESTROY, - G_RAID_EVENT_DISK); - } - sx_xunlock(&sc->sc_lock); + g_topology_lock(); } static void -g_raid_ctl_deactivate(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_other(struct gctl_req *req, struct g_class *mp) { struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name; - char param[16]; + const char *nodename; int *nargs; - u_int i; + int ctlstatus; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); + if (*nargs < 1) { + gctl_error(req, "Invalid number of arguments."); return; } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + nodename = gctl_get_asciiparam(req, "arg0"); + if (nodename == NULL) { + gctl_error(req, "No node name recieved."); return; } - sc = g_raid_find_device(mp, name); + sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + gctl_error(req, "Node '%s' not found.", nodename); return; } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; - } - disk->d_flags |= G_RAID_DISK_FLAG_INACTIVE; - disk->d_flags &= ~G_RAID_DISK_FLAG_FORCE_SYNC; - g_raid_update_metadata(disk); - sc->sc_bump_id |= G_RAID_BUMP_SYNCID; - g_raid_event_send(disk, G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_DISK); + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + if (sc->sc_md != NULL) { + ctlstatus = G_RAID_MD_CTL(sc->sc_md, req); + if (ctlstatus < 0) + gctl_error(req, "Command failed: %d.", ctlstatus); } sx_xunlock(&sc->sc_lock); + g_topology_lock(); } -static void -g_raid_ctl_forget(struct gctl_req *req, struct g_class *mp) -{ - struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name; - char param[16]; - int *nargs; - u_int i; - - nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); - if (nargs == NULL) { - gctl_error(req, "No '%s' argument.", "nargs"); - return; - } - if (*nargs < 1) { - gctl_error(req, "Missing device(s)."); - return; - } - - for (i = 0; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Wed Dec 22 18:42:23 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D9D48106566B; Wed, 22 Dec 2010 18:42:23 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C96BA8FC12; Wed, 22 Dec 2010 18:42:23 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBMIgNbw031346; Wed, 22 Dec 2010 18:42:23 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBMIgN5a031344; Wed, 22 Dec 2010 18:42:23 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012221842.oBMIgN5a031344@svn.freebsd.org> From: Alexander Motin Date: Wed, 22 Dec 2010 18:42:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216670 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 22 Dec 2010 18:42:24 -0000 Author: mav Date: Wed Dec 22 18:42:23 2010 New Revision: 216670 URL: http://svn.freebsd.org/changeset/base/216670 Log: Some MD structures formatting and size calculation. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 17:59:38 2010 (r216669) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Dec 22 18:42:23 2010 (r216670) @@ -42,41 +42,6 @@ __FBSDID("$FreeBSD$"); static MALLOC_DEFINE(M_MD_INTEL, "md_intel_data", "GEOM_RAID Intel metadata"); -struct intel_raid_conf { - uint8_t intel_id[24]; -#define INTEL_MAGIC "Intel Raid ISM Cfg Sig. " - - uint8_t version[6]; -#define INTEL_VERSION_1100 "1.1.00" -#define INTEL_VERSION_1201 "1.2.01" -#define INTEL_VERSION_1202 "1.2.02" - - uint8_t dummy_0[2]; - uint32_t checksum; - uint32_t config_size; - uint32_t config_id; - uint32_t generation; - uint32_t dummy_1[2]; - uint8_t total_disks; - uint8_t total_volumes; - uint8_t dummy_2[2]; - uint32_t filler_0[39]; - struct { -#define INTEL_SERIAL_LEN 16 - uint8_t serial[INTEL_SERIAL_LEN]; - uint32_t sectors; - uint32_t id; - uint32_t flags; -#define INTEL_F_SPARE 0x01 -#define INTEL_F_ASSIGNED 0x02 -#define INTEL_F_DOWN 0x04 -#define INTEL_F_ONLINE 0x08 - - uint32_t filler[5]; - } __packed disk[1]; - uint32_t filler_1[62]; -} __packed; - struct intel_raid_map { uint32_t offset; uint32_t disk_sectors; @@ -98,7 +63,7 @@ struct intel_raid_map { uint8_t failed_disk_num; uint8_t ddf; uint32_t filler_2[7]; - uint32_t disk_idx[1]; + uint32_t disk_idx[1]; /* total_disks entries. */ #define INTEL_DI_IDX 0x00ffffff #define INTEL_DI_RBLD 0x01000000 } __packed; @@ -132,9 +97,53 @@ struct intel_raid_vol { uint16_t verify_errors; uint16_t bad_blocks; uint32_t filler_1[4]; - struct intel_raid_map map[1]; + struct intel_raid_map map[1]; /* 2 entries if migr_state != 0. */ +} __packed; + +struct intel_raid_disk { +#define INTEL_SERIAL_LEN 16 + uint8_t serial[INTEL_SERIAL_LEN]; + uint32_t sectors; + uint32_t id; + uint32_t flags; +#define INTEL_F_SPARE 0x01 +#define INTEL_F_ASSIGNED 0x02 +#define INTEL_F_DOWN 0x04 +#define INTEL_F_ONLINE 0x08 + + uint32_t filler[5]; } __packed; +struct intel_raid_conf { + uint8_t intel_id[24]; +#define INTEL_MAGIC "Intel Raid ISM Cfg Sig. " + + uint8_t version[6]; +#define INTEL_VERSION_1100 "1.1.00" +#define INTEL_VERSION_1201 "1.2.01" +#define INTEL_VERSION_1202 "1.2.02" + + uint8_t dummy_0[2]; + uint32_t checksum; + uint32_t config_size; + uint32_t config_id; + uint32_t generation; + uint32_t dummy_1[2]; + uint8_t total_disks; + uint8_t total_volumes; + uint8_t dummy_2[2]; + uint32_t filler_0[39]; + struct intel_raid_disk disk[1]; /* total_disks entries. */ + /* Here goes total_volumes of struct intel_raid_vol. */ +} __packed; + +#define INTEL_MAX_MD_SIZE(ndisks) \ + (sizeof(struct intel_raid_conf) + \ + sizeof(struct intel_raid_disk) * (ndisks - 1) + \ + sizeof(struct intel_raid_vol) * 2 + \ + sizeof(struct intel_raid_map) * 2 + \ + sizeof(uint32_t) * (ndisks - 1) * 4) + struct g_raid_md_intel_perdisk { struct intel_raid_conf *pd_meta; int pd_disk_pos; From owner-svn-src-projects@FreeBSD.ORG Thu Dec 23 09:30:30 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2839610656E2; Thu, 23 Dec 2010 09:30:30 +0000 (UTC) (envelope-from pawel@dawidek.net) Received: from mail.garage.freebsd.pl (60.wheelsystems.com [83.12.187.60]) by mx1.freebsd.org (Postfix) with ESMTP id C60638FC14; Thu, 23 Dec 2010 09:30:28 +0000 (UTC) Received: by mail.garage.freebsd.pl (Postfix, from userid 65534) id 4050A45C89; Thu, 23 Dec 2010 10:10:24 +0100 (CET) Received: from localhost (89-73-192-49.dynamic.chello.pl [89.73.192.49]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.garage.freebsd.pl (Postfix) with ESMTP id 52E7D45685; Thu, 23 Dec 2010 10:10:19 +0100 (CET) Date: Thu, 23 Dec 2010 10:10:16 +0100 From: Pawel Jakub Dawidek To: Alexander Motin Message-ID: <20101223090812.GA43446@garage.freebsd.pl> References: <201012220902.oBM92MpZ098772@svn.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="bCsyhTFzCvuiizWE" Content-Disposition: inline In-Reply-To: <201012220902.oBM92MpZ098772@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i X-PGP-Key-URL: http://people.freebsd.org/~pjd/pjd.asc X-OS: FreeBSD 9.0-CURRENT amd64 X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mail.garage.freebsd.pl X-Spam-Level: X-Spam-Status: No, score=-0.6 required=4.5 tests=BAYES_00,RCVD_IN_SORBS_DUL autolearn=no version=3.0.4 Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r216649 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Dec 2010 09:30:30 -0000 --bCsyhTFzCvuiizWE Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Dec 22, 2010 at 09:02:22AM +0000, Alexander Motin wrote: > Author: mav > Date: Wed Dec 22 09:02:22 2010 > New Revision: 216649 > URL: http://svn.freebsd.org/changeset/base/216649 >=20 > Log: > Implement basic metadata generation check. To be sure that used metadat= a is > up to date - delay volumes creation until we have all disks or timeout > expires. This probably obsolete same functionality done at volumes leve= l. [...] > +static struct intel_raid_conf * > +intel_meta_copy(struct intel_raid_conf *meta) > +{ > + struct intel_raid_conf *nmeta; > + > + nmeta =3D malloc(meta->config_size, M_MD_INTEL, M_WAITOK | M_ZERO); > + memcpy(nmeta, meta, meta->config_size); > + return (nmeta); > +} The M_ZERO flag seems to be redundant, as you fill the entire buffer in the next line. --=20 Pawel Jakub Dawidek http://www.wheelsystems.com pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am! --bCsyhTFzCvuiizWE Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (FreeBSD) iEYEARECAAYFAk0TEfcACgkQForvXbEpPzRvMQCcCCWhgrakk9OEm3cnQjK9wjuT LosAn3/w4KYxA4fMkJdt8weg22aJKvV8 =rbHv -----END PGP SIGNATURE----- --bCsyhTFzCvuiizWE-- From owner-svn-src-projects@FreeBSD.ORG Thu Dec 23 09:41:29 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A5FA1106566B for ; Thu, 23 Dec 2010 09:41:29 +0000 (UTC) (envelope-from mavbsd@gmail.com) Received: from mail-fx0-f54.google.com (mail-fx0-f54.google.com [209.85.161.54]) by mx1.freebsd.org (Postfix) with ESMTP id 32F7F8FC0C for ; Thu, 23 Dec 2010 09:41:28 +0000 (UTC) Received: by fxm16 with SMTP id 16so6542062fxm.13 for ; Thu, 23 Dec 2010 01:41:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:message-id:date:from :user-agent:mime-version:to:cc:subject:references:in-reply-to :x-enigmail-version:content-type:content-transfer-encoding; bh=CSKCL9aDoyGK+IIOIlrGbFegwbLel15k6mii2gRnUHU=; b=Yt12kxbsKTRo7pg+d9mJXugvNhdFc57+TIkB0SBNO3OGUnMwlucF9P5DFrlfjSRFWp CKLIxL3m0jUdVQTzmPaDb5SvyYIJpNWXf7BwT5QFB8/3kezYfu8hMAcfPeFyc0a7MGOq uYIg2sBUkW9PJdeKLBvXAQpr4hREVmf+Bs3b4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:x-enigmail-version:content-type :content-transfer-encoding; b=iJ94LW3Cr8F2KhvZ4jJwuJ/kDToN/ew0qm4djtu33mrFmT0P08HAy9TC2P3zejTQ2A 1nV7v51qtO/QCKV7tnHkHlFtsqm83dHQa4q+z7jW7bDYEkZTPkeI2QE2CF21+oNLEEEX kqGM7dcyvCwNlblfhKyUZvPaAAJzOry+6ItB8= Received: by 10.223.96.202 with SMTP id i10mr7657377fan.50.1293095607497; Thu, 23 Dec 2010 01:13:27 -0800 (PST) Received: from mavbook2.mavhome.dp.ua (pc.mavhome.dp.ua [212.86.226.226]) by mx.google.com with ESMTPS id y3sm1943234fai.14.2010.12.23.01.13.24 (version=SSLv3 cipher=RC4-MD5); Thu, 23 Dec 2010 01:13:25 -0800 (PST) Sender: Alexander Motin Message-ID: <4D13129D.3080606@FreeBSD.org> Date: Thu, 23 Dec 2010 11:13:01 +0200 From: Alexander Motin User-Agent: Thunderbird 2.0.0.23 (X11/20091212) MIME-Version: 1.0 To: Pawel Jakub Dawidek References: <201012220902.oBM92MpZ098772@svn.freebsd.org> <20101223090812.GA43446@garage.freebsd.pl> In-Reply-To: <20101223090812.GA43446@garage.freebsd.pl> X-Enigmail-Version: 0.96.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 7bit Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r216649 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Dec 2010 09:41:29 -0000 Pawel Jakub Dawidek wrote: > On Wed, Dec 22, 2010 at 09:02:22AM +0000, Alexander Motin wrote: >> Author: mav >> Date: Wed Dec 22 09:02:22 2010 >> New Revision: 216649 >> URL: http://svn.freebsd.org/changeset/base/216649 >> >> Log: >> Implement basic metadata generation check. To be sure that used metadata is >> up to date - delay volumes creation until we have all disks or timeout >> expires. This probably obsolete same functionality done at volumes level. > [...] >> +static struct intel_raid_conf * >> +intel_meta_copy(struct intel_raid_conf *meta) >> +{ >> + struct intel_raid_conf *nmeta; >> + >> + nmeta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK | M_ZERO); >> + memcpy(nmeta, meta, meta->config_size); >> + return (nmeta); >> +} > > The M_ZERO flag seems to be redundant, as you fill the entire buffer in > the next line. Indeed. Thanks. But I am sure it is not the biggest of my problems. :) -- Alexander Motin From owner-svn-src-projects@FreeBSD.ORG Thu Dec 23 09:47:09 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 903511065672; Thu, 23 Dec 2010 09:47:09 +0000 (UTC) (envelope-from pawel@dawidek.net) Received: from mail.garage.freebsd.pl (60.wheelsystems.com [83.12.187.60]) by mx1.freebsd.org (Postfix) with ESMTP id 2F69D8FC1B; Thu, 23 Dec 2010 09:47:08 +0000 (UTC) Received: by mail.garage.freebsd.pl (Postfix, from userid 65534) id 218E945C8A; Thu, 23 Dec 2010 10:19:48 +0100 (CET) Received: from localhost (89-73-192-49.dynamic.chello.pl [89.73.192.49]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.garage.freebsd.pl (Postfix) with ESMTP id 79B9845685; Thu, 23 Dec 2010 10:19:42 +0100 (CET) Date: Thu, 23 Dec 2010 10:19:39 +0100 From: Pawel Jakub Dawidek To: Alexander Motin Message-ID: <20101223091939.GB43446@garage.freebsd.pl> References: <201012220902.oBM92MpZ098772@svn.freebsd.org> <20101223090812.GA43446@garage.freebsd.pl> <4D13129D.3080606@FreeBSD.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="zCKi3GIZzVBPywwA" Content-Disposition: inline In-Reply-To: <4D13129D.3080606@FreeBSD.org> User-Agent: Mutt/1.4.2.3i X-PGP-Key-URL: http://people.freebsd.org/~pjd/pjd.asc X-OS: FreeBSD 9.0-CURRENT amd64 X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mail.garage.freebsd.pl X-Spam-Level: X-Spam-Status: No, score=-0.6 required=4.5 tests=BAYES_00,RCVD_IN_SORBS_DUL autolearn=no version=3.0.4 Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r216649 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Dec 2010 09:47:09 -0000 --zCKi3GIZzVBPywwA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Dec 23, 2010 at 11:13:01AM +0200, Alexander Motin wrote: > Pawel Jakub Dawidek wrote: > > On Wed, Dec 22, 2010 at 09:02:22AM +0000, Alexander Motin wrote: > >> Author: mav > >> Date: Wed Dec 22 09:02:22 2010 > >> New Revision: 216649 > >> URL: http://svn.freebsd.org/changeset/base/216649 > >> > >> Log: > >> Implement basic metadata generation check. To be sure that used meta= data is > >> up to date - delay volumes creation until we have all disks or timeo= ut > >> expires. This probably obsolete same functionality done at volumes l= evel. > > [...] > >> +static struct intel_raid_conf * > >> +intel_meta_copy(struct intel_raid_conf *meta) > >> +{ > >> + struct intel_raid_conf *nmeta; > >> + > >> + nmeta =3D malloc(meta->config_size, M_MD_INTEL, M_WAITOK | M_ZERO); > >> + memcpy(nmeta, meta, meta->config_size); > >> + return (nmeta); > >> +} > >=20 > > The M_ZERO flag seems to be redundant, as you fill the entire buffer in > > the next line. >=20 > Indeed. Thanks. But I am sure it is not the biggest of my problems. :) :) If you have any GEOM-related questions, don't hesitate to ask. When you'll have a version that is ready for a full review, let me know and I'll try to find some time to do it. Is your class going to be generally usable or you just want to support those pseudo-hardware RAIDs? If the former and you're planning to eventually relace gmirror/gstripe/gconcat with it, would be also nice to keep RAID3 support. --=20 Pawel Jakub Dawidek http://www.wheelsystems.com pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am! --zCKi3GIZzVBPywwA Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (FreeBSD) iEYEARECAAYFAk0TFCsACgkQForvXbEpPzR+2gCfVZh7qg5BoAyMN4dFSR24H4s7 jSMAn1pgB+QI6M3N4dERM8Ocmd2xDVY5 =FLlP -----END PGP SIGNATURE----- --zCKi3GIZzVBPywwA-- From owner-svn-src-projects@FreeBSD.ORG Thu Dec 23 20:23:17 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DAE1E106566B; Thu, 23 Dec 2010 20:23:17 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C8FD78FC08; Thu, 23 Dec 2010 20:23:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBNKNHp4067982; Thu, 23 Dec 2010 20:23:17 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBNKNHtw067976; Thu, 23 Dec 2010 20:23:17 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012232023.oBNKNHtw067976@svn.freebsd.org> From: Alexander Motin Date: Thu, 23 Dec 2010 20:23:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216682 - in projects/graid/head: sbin/geom/class/raid sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Dec 2010 20:23:17 -0000 Author: mav Date: Thu Dec 23 20:23:17 2010 New Revision: 216682 URL: http://svn.freebsd.org/changeset/base/216682 Log: Add basic array creation and Intel metadata writing. Now it is possible to create volume readable by BIOS with: graid label Intel test RAID1 ada0 ada1 Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid_ctl.c projects/graid/head/sys/geom/raid/g_raid_md_if.m projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/head/sbin/geom/class/raid/geom_raid.c Thu Dec 23 19:28:50 2010 (r216681) +++ projects/graid/head/sbin/geom/class/raid/geom_raid.c Thu Dec 23 20:23:17 2010 (r216682) @@ -1,5 +1,4 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek * Copyright (c) 2010 Alexander Motin * All rights reserved. * Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Dec 23 19:28:50 2010 (r216681) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Dec 23 20:23:17 2010 (r216682) @@ -284,8 +284,8 @@ g_raid_volume_str2level(const char *str, else if (strcasecmp(str, "RAID5EE") == 0) *level = G_RAID_VOLUME_RL_RAID5EE; else - return (0); - return (1); + return (-1); + return (0); } static const char * Modified: projects/graid/head/sys/geom/raid/g_raid_ctl.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_ctl.c Thu Dec 23 19:28:50 2010 (r216681) +++ projects/graid/head/sys/geom/raid/g_raid_ctl.c Thu Dec 23 20:23:17 2010 (r216682) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek + * Copyright (c) 2010 Alexander Motin * All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: projects/graid/head/sys/geom/raid/g_raid_md_if.m ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_md_if.m Thu Dec 23 19:28:50 2010 (r216681) +++ projects/graid/head/sys/geom/raid/g_raid_md_if.m Thu Dec 23 20:23:17 2010 (r216682) @@ -49,14 +49,14 @@ HEADER { # Default implementations of methods. CODE { static int - g_raid_md_create_default(struct g_raid_tr_object *tr) + g_raid_md_create_default(struct g_raid_md_object *md) { return (G_RAID_MD_TASTE_FAIL); } static int - g_raid_md_ctl_default(struct g_raid_tr_object *tr, + g_raid_md_ctl_default(struct g_raid_md_object *md, struct gctl_req *req) { @@ -81,13 +81,13 @@ METHOD int taste { # ctl() - user-level control commands handling method. METHOD int ctl { - struct g_raid_md_object *tr; + struct g_raid_md_object *md; struct gctl_req *req; } DEFAULT g_raid_md_ctl_default; # event() - events handling method. METHOD int event { - struct g_raid_md_object *tr; + struct g_raid_md_object *md; struct g_raid_disk *disk; u_int event; }; Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Dec 23 19:28:50 2010 (r216681) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Dec 23 20:23:17 2010 (r216682) @@ -120,6 +120,7 @@ struct intel_raid_conf { uint8_t version[6]; #define INTEL_VERSION_1100 "1.1.00" +#define INTEL_VERSION_1200 "1.2.00" #define INTEL_VERSION_1201 "1.2.01" #define INTEL_VERSION_1202 "1.2.02" @@ -161,6 +162,7 @@ struct g_raid_md_intel_object { static g_raid_md_create_t g_raid_md_create_intel; static g_raid_md_taste_t g_raid_md_taste_intel; static g_raid_md_event_t g_raid_md_event_intel; +static g_raid_md_ctl_t g_raid_md_ctl_intel; static g_raid_md_write_t g_raid_md_write_intel; static g_raid_md_free_disk_t g_raid_md_free_disk_intel; static g_raid_md_free_t g_raid_md_free_intel; @@ -169,6 +171,7 @@ static kobj_method_t g_raid_md_intel_met KOBJMETHOD(g_raid_md_create, g_raid_md_create_intel), KOBJMETHOD(g_raid_md_taste, g_raid_md_taste_intel), KOBJMETHOD(g_raid_md_event, g_raid_md_event_intel), + KOBJMETHOD(g_raid_md_ctl, g_raid_md_ctl_intel), KOBJMETHOD(g_raid_md_write, g_raid_md_write_intel), KOBJMETHOD(g_raid_md_free_disk, g_raid_md_free_disk_intel), KOBJMETHOD(g_raid_md_free, g_raid_md_free_intel), @@ -184,42 +187,42 @@ static struct g_raid_md_class g_raid_md_ static struct intel_raid_map * -intel_get_map(struct intel_raid_vol *vol, int i) +intel_get_map(struct intel_raid_vol *mvol, int i) { - struct intel_raid_map *map; + struct intel_raid_map *mmap; - if (i > (vol->migr_state ? 1 : 0)) + if (i > (mvol->migr_state ? 1 : 0)) return (NULL); - map = &vol->map[0]; + mmap = &mvol->map[0]; for (; i > 0; i--) { - map = (struct intel_raid_map *) - &map->disk_idx[map->total_disks]; + mmap = (struct intel_raid_map *) + &mmap->disk_idx[mmap->total_disks]; } - return ((struct intel_raid_map *)map); + return ((struct intel_raid_map *)mmap); } static struct intel_raid_vol * intel_get_volume(struct intel_raid_conf *meta, int i) { - struct intel_raid_vol *vol; - struct intel_raid_map *map; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap; if (i > 1) return (NULL); - vol = (struct intel_raid_vol *)&meta->disk[meta->total_disks]; + mvol = (struct intel_raid_vol *)&meta->disk[meta->total_disks]; for (; i > 0; i--) { - map = intel_get_map(vol, vol->migr_state ? 1 : 0); - vol = (struct intel_raid_vol *) - &map->disk_idx[map->total_disks]; + mmap = intel_get_map(mvol, mvol->migr_state ? 1 : 0); + mvol = (struct intel_raid_vol *) + &mmap->disk_idx[mmap->total_disks]; } - return (vol); + return (mvol); } static void g_raid_md_intel_print(struct intel_raid_conf *meta) { - struct intel_raid_vol *vol; - struct intel_raid_map *map; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap; int i, j, k; printf("********* ATA Intel MatrixRAID Metadata *********\n"); @@ -238,34 +241,34 @@ g_raid_md_intel_print(struct intel_raid_ meta->disk[i].id, meta->disk[i].flags); } for (i = 0; i < meta->total_volumes; i++) { - vol = intel_get_volume(meta, i); + mvol = intel_get_volume(meta, i); printf(" ****** Volume %d ******\n", i); - printf(" name %.16s\n", vol->name); - printf(" total_sectors %ju\n", vol->total_sectors); - printf(" state %u\n", vol->state); - printf(" reserved %u\n", vol->reserved); - printf(" curr_migr_unit %u\n", vol->curr_migr_unit); - printf(" checkpoint_id %u\n", vol->checkpoint_id); - printf(" migr_state %u\n", vol->migr_state); - printf(" migr_type %u\n", vol->migr_type); - printf(" dirty %u\n", vol->dirty); + printf(" name %.16s\n", mvol->name); + printf(" total_sectors %ju\n", mvol->total_sectors); + printf(" state %u\n", mvol->state); + printf(" reserved %u\n", mvol->reserved); + printf(" curr_migr_unit %u\n", mvol->curr_migr_unit); + printf(" checkpoint_id %u\n", mvol->checkpoint_id); + printf(" migr_state %u\n", mvol->migr_state); + printf(" migr_type %u\n", mvol->migr_type); + printf(" dirty %u\n", mvol->dirty); - for (j = 0; j < (vol->migr_state ? 2 : 1); j++) { + for (j = 0; j < (mvol->migr_state ? 2 : 1); j++) { printf(" *** Map %d ***\n", j); - map = intel_get_map(vol, j); - printf(" offset %u\n", map->offset); - printf(" disk_sectors %u\n", map->disk_sectors); - printf(" stripe_count %u\n", map->stripe_count); - printf(" stripe_sectors %u\n", map->stripe_sectors); - printf(" status %u\n", map->status); - printf(" type %u\n", map->type); - printf(" total_disks %u\n", map->total_disks); - printf(" total_domains %u\n", map->total_domains); - printf(" failed_disk_num %u\n", map->failed_disk_num); - printf(" ddf %u\n", map->ddf); + mmap = intel_get_map(mvol, j); + printf(" offset %u\n", mmap->offset); + printf(" disk_sectors %u\n", mmap->disk_sectors); + printf(" stripe_count %u\n", mmap->stripe_count); + printf(" stripe_sectors %u\n", mmap->stripe_sectors); + printf(" status %u\n", mmap->status); + printf(" type %u\n", mmap->type); + printf(" total_disks %u\n", mmap->total_disks); + printf(" total_domains %u\n", mmap->total_domains); + printf(" failed_disk_num %u\n", mmap->failed_disk_num); + printf(" ddf %u\n", mmap->ddf); printf(" disk_idx "); - for (k = 0; k < map->total_disks; k++) - printf(" 0x%08x", map->disk_idx[k]); + for (k = 0; k < mmap->total_disks; k++) + printf(" 0x%08x", mmap->disk_idx[k]); printf("\n"); } } @@ -277,11 +280,120 @@ intel_meta_copy(struct intel_raid_conf * { struct intel_raid_conf *nmeta; - nmeta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK | M_ZERO); + nmeta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK); memcpy(nmeta, meta, meta->config_size); return (nmeta); } +static struct intel_raid_conf * +intel_meta_read(struct g_consumer *cp) +{ + struct g_provider *pp; + struct intel_raid_conf *meta; + char *buf; + int error, i, left; + uint32_t checksum, *ptr; + + pp = cp->provider; + + /* Read the anchor sector. */ + buf = g_read_data(cp, + pp->mediasize - pp->sectorsize * 2, pp->sectorsize, &error); + if (buf == NULL) { + G_RAID_DEBUG(1, "Cannot read metadata from %s (error=%d).", + pp->name, error); + return (NULL); + } + meta = (struct intel_raid_conf *)buf; + + /* Check if this is an Intel RAID struct */ + if (strncmp(meta->intel_id, INTEL_MAGIC, strlen(INTEL_MAGIC))) { + G_RAID_DEBUG(1, "Intel signature check failed on %s", pp->name); + g_free(buf); + return (NULL); + } + if (meta->config_size > 65536) { + G_RAID_DEBUG(1, "Intel metadata size looks too big: %d", + meta->config_size); + g_free(buf); + return (NULL); + } + meta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK); + memcpy(meta, buf, pp->sectorsize); + g_free(buf); + + /* Read all the rest, if needed. */ + if (meta->config_size > pp->sectorsize) { + left = (meta->config_size - 1) / pp->sectorsize; + buf = g_read_data(cp, + pp->mediasize - pp->sectorsize * (2 + left), + pp->sectorsize * left, &error); + if (buf == NULL) { + G_RAID_DEBUG(1, "Cannot read remaining metadata" + " part from %s (error=%d).", + pp->name, error); + free(meta, M_MD_INTEL); + return (NULL); + } + memcpy(((char *)meta) + pp->sectorsize, buf, + pp->sectorsize * left); + g_free(buf); + } + + /* Check metadata checksum. */ + for (checksum = 0, ptr = (uint32_t *)meta, i = 0; + i < (meta->config_size / sizeof(uint32_t)); i++) { + checksum += *ptr++; + } + checksum -= meta->checksum; + if (checksum != meta->checksum) { + G_RAID_DEBUG(1, "Intel checksum check failed on %s", pp->name); + free(meta, M_MD_INTEL); + return (NULL); + } + + return (meta); +} + +static int +intel_meta_write(struct g_consumer *cp, struct intel_raid_conf *meta) +{ + struct g_provider *pp; + char *buf; + int error, i, sectors; + uint32_t checksum, *ptr; + + pp = cp->provider; + + /* Recalculate checksum for case if metadata were changed. */ + meta->checksum = 0; + for (checksum = 0, ptr = (uint32_t *)meta, i = 0; + i < (meta->config_size / sizeof(uint32_t)); i++) { + checksum += *ptr++; + } + meta->checksum = checksum; + + /* Create and fill buffer. */ + sectors = (meta->config_size + pp->sectorsize - 1) / pp->sectorsize; + buf = malloc(sectors * pp->sectorsize, M_MD_INTEL, M_WAITOK | M_ZERO); + if (sectors > 1) { + memcpy(buf, ((char *)meta) + pp->sectorsize, + (sectors - 1) * pp->sectorsize); + } + memcpy(buf + (sectors - 1) * pp->sectorsize, meta, pp->sectorsize); + + error = g_write_data(cp, + pp->mediasize - pp->sectorsize * (1 + sectors), + buf, pp->sectorsize * sectors); + if (error != 0) { + G_RAID_DEBUG(1, "Cannot write metadata to %s (error=%d).", + pp->name, error); + } + + free(buf, M_MD_INTEL); + return (error); +} + #if 0 static struct g_raid_disk * g_raid_md_intel_get_disk(struct g_raid_softc *sc, int id) @@ -299,13 +411,13 @@ g_raid_md_intel_get_disk(struct g_raid_s static struct g_raid_volume * g_raid_md_intel_get_volume(struct g_raid_softc *sc, int id) { - struct g_raid_volume *vol; + struct g_raid_volume *mvol; - LIST_FOREACH(vol, &sc->sc_volumes, v_next) { - if ((intptr_t)(vol->v_md_data) == id) + LIST_FOREACH(mvol, &sc->sc_volumes, v_next) { + if ((intptr_t)(mvol->v_md_data) == id) break; } - return (vol); + return (mvol); } static void @@ -319,7 +431,7 @@ g_raid_md_intel_start_disk(struct g_raid struct g_raid_md_intel_perdisk *pd; struct intel_raid_conf *meta, *pdmeta; struct intel_raid_vol *mvol; - struct intel_raid_map *map; + struct intel_raid_map *mmap; int i, j; sc = disk->d_softc; @@ -340,18 +452,18 @@ g_raid_md_intel_start_disk(struct g_raid /* Create subdisks. */ for (i = 0; i < meta->total_volumes; i++) { mvol = intel_get_volume(meta, i); - map = intel_get_map(mvol, 0); - for (j = 0; j < map->total_disks; j++) { - if ((map->disk_idx[j] & INTEL_DI_IDX) == pd->pd_disk_pos) + mmap = intel_get_map(mvol, 0); + for (j = 0; j < mmap->total_disks; j++) { + if ((mmap->disk_idx[j] & INTEL_DI_IDX) == pd->pd_disk_pos) break; } - if (j == map->total_disks) + if (j == mmap->total_disks) continue; vol = g_raid_md_intel_get_volume(sc, i); sd = &vol->v_subdisks[j]; sd->sd_disk = disk; - sd->sd_offset = map->offset * 512; //ZZZ - sd->sd_size = map->disk_sectors; + sd->sd_offset = mmap->offset * 512; //ZZZ + sd->sd_size = mmap->disk_sectors; LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); @@ -366,7 +478,7 @@ g_raid_md_intel_start(struct g_raid_soft struct g_raid_md_intel_object *mdi; struct intel_raid_conf *meta; struct intel_raid_vol *mvol; - struct intel_raid_map *map; + struct intel_raid_map *mmap; struct g_raid_volume *vol; struct g_raid_disk *disk; int i; @@ -377,23 +489,23 @@ g_raid_md_intel_start(struct g_raid_soft /* Create volumes */ for (i = 0; i < meta->total_volumes; i++) { mvol = intel_get_volume(meta, i); - map = intel_get_map(mvol, 0); + mmap = intel_get_map(mvol, 0); vol = g_raid_create_volume(sc, mvol->name); vol->v_md_data = (void *)(intptr_t)i; - if (map->type == INTEL_T_RAID0) + if (mmap->type == INTEL_T_RAID0) vol->v_raid_level = G_RAID_VOLUME_RL_RAID0; - else if (map->type == INTEL_T_RAID1 && - map->total_disks < 4) + else if (mmap->type == INTEL_T_RAID1 && + mmap->total_disks < 4) vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; - else if (map->type == INTEL_T_RAID1) + else if (mmap->type == INTEL_T_RAID1) vol->v_raid_level = G_RAID_VOLUME_RL_RAID10; - else if (map->type == INTEL_T_RAID5) + else if (mmap->type == INTEL_T_RAID5) vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; else vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; - vol->v_strip_size = map->stripe_sectors * 512; //ZZZ - vol->v_disks_count = map->total_disks; + vol->v_strip_size = mmap->stripe_sectors * 512; //ZZZ + vol->v_disks_count = mmap->total_disks; vol->v_mediasize = mvol->total_sectors * 512; //ZZZ vol->v_sectorsize = 512; //ZZZ g_raid_start_volume(vol); @@ -500,9 +612,7 @@ g_raid_md_taste_intel(struct g_raid_md_o struct intel_raid_conf *meta; struct g_raid_md_intel_perdisk *pd; struct g_geom *geom; - uint32_t checksum, *ptr; - char *buf, *tmp; - int i, error, serial_len, disk_pos, result; + int error, serial_len, disk_pos, result; char serial[INTEL_SERIAL_LEN]; char name[16]; @@ -511,9 +621,9 @@ g_raid_md_taste_intel(struct g_raid_md_o pp = cp->provider; /* Read metadata from device. */ - meta = malloc(pp->sectorsize * 2, M_MD_INTEL, M_WAITOK | M_ZERO); + meta = NULL; if (g_access(cp, 1, 0, 0) != 0) - goto fail1; + return (G_RAID_MD_TASTE_FAIL); g_topology_unlock(); serial_len = sizeof(serial); error = g_io_getattr("GEOM::ident", cp, &serial_len, serial); @@ -522,35 +632,13 @@ g_raid_md_taste_intel(struct g_raid_md_o pp->name, error); goto fail2; } - buf = g_read_data(cp, - pp->mediasize - pp->sectorsize * 3, pp->sectorsize * 2, - &error); - if (buf == NULL) { - G_RAID_DEBUG(1, "Cannot read metadata from %s (error=%d).", - pp->name, error); - goto fail2; - } + meta = intel_meta_read(cp); g_topology_lock(); g_access(cp, -1, 0, 0); - tmp = (char *)meta; - memcpy(tmp, buf + pp->sectorsize, pp->sectorsize); - memcpy(tmp + pp->sectorsize, buf, pp->sectorsize); - g_free(buf); + if (meta == NULL) + return (G_RAID_MD_TASTE_FAIL); - /* Check if this is a Intel RAID struct */ - if (strncmp(meta->intel_id, INTEL_MAGIC, strlen(INTEL_MAGIC))) { - G_RAID_DEBUG(1, "Intel signature check failed on %s", pp->name); - goto fail1; - } - for (checksum = 0, ptr = (uint32_t *)meta, i = 0; - i < (meta->config_size / sizeof(uint32_t)); i++) { - checksum += *ptr++; - } - checksum -= meta->checksum; - if (checksum != meta->checksum) { - G_RAID_DEBUG(1, "Intel checksum check failed on %s", pp->name); - goto fail1; - } + /* Check this disk position in obtained metadata. */ for (disk_pos = 0; disk_pos < meta->total_disks; disk_pos++) { if (strncmp(meta->disk[disk_pos].serial, serial, serial_len)) { G_RAID_DEBUG(1, "Intel serial mismatch '%s' '%s'", @@ -658,6 +746,188 @@ g_raid_md_event_intel(struct g_raid_md_o } static int +g_raid_md_ctl_intel(struct g_raid_md_object *md, + struct gctl_req *req) +{ + struct g_raid_softc *sc; + struct g_raid_disk *disk; + struct g_raid_md_intel_object *mdi; + struct g_raid_md_intel_perdisk *pd; + struct g_consumer *cp; + struct g_provider *pp; + struct intel_raid_conf *meta; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap; + char arg[16]; + const char *verb, *volname, *levelname, *diskname; + int *nargs; + uint64_t size, sectorsize; + int numdisks, i, level, qual, serial_len; + int error; + + sc = md->mdo_softc; + mdi = (struct g_raid_md_intel_object *)md; + verb = gctl_get_param(req, "verb", NULL); + nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); + if (strcmp(verb, "label") == 0) { + + if (*nargs < 4) { + gctl_error(req, "Invalid number of arguments."); + return (-1); + } + volname = gctl_get_asciiparam(req, "arg1"); + if (volname == NULL) { + gctl_error(req, "No volume name."); + return (-2); + } + levelname = gctl_get_asciiparam(req, "arg2"); + if (levelname == NULL) { + gctl_error(req, "No RAID level."); + return (-3); + } + if (g_raid_volume_str2level(levelname, &level, &qual)) { + gctl_error(req, "Unknown RAID level '%s'.", levelname); + return (-4); + } + if (level != G_RAID_VOLUME_RL_RAID0 && + level != G_RAID_VOLUME_RL_RAID1 && + level != G_RAID_VOLUME_RL_RAID5 && + level != G_RAID_VOLUME_RL_RAID10) { + gctl_error(req, "Unsupported RAID level."); + return (-5); + } + numdisks = *nargs - 3; + meta = mdi->mdio_meta = malloc(INTEL_MAX_MD_SIZE(numdisks), + M_MD_INTEL, M_WAITOK | M_ZERO); + memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); + memcpy(&meta->version[0], INTEL_VERSION_1200, + sizeof(INTEL_VERSION_1200)); + meta->config_size = INTEL_MAX_MD_SIZE(numdisks); + meta->config_id = mdi->mdio_config_id; + meta->generation = 1; + meta->total_disks = numdisks; + meta->total_volumes = 1; + error = 0; + size = 0xffffffffffffffffllu; + sectorsize = 0; + for (i = 0; i < numdisks; i++) { + snprintf(arg, sizeof(arg), "arg%d", i + 3); + diskname = gctl_get_asciiparam(req, arg); + if (diskname == NULL) { + gctl_error(req, "No disk name (%s).", arg); + error = -6; + break; + } + if (strncmp(diskname, "/dev/", 5) == 0) + diskname += 5; + g_topology_lock(); + pp = g_provider_by_name(diskname); + if (pp == NULL) { + gctl_error(req, "Provider '%s' not found.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + gctl_error(req, "Can't attach provider '%s'.", + diskname); + g_destroy_consumer(cp); + g_topology_unlock(); + error = -7; + break; + } + if (g_access(cp, 1, 1, 1) != 0) { + gctl_error(req, "Can't open provider '%s'.", + diskname); + g_detach(cp); + g_destroy_consumer(cp); + g_topology_unlock(); + error = -7; + break; + } + + pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); + pd->pd_disk_pos = i; + disk = g_raid_create_disk(sc); + disk->d_md_data = (void *)pd; + disk->d_consumer = cp; + cp->private = disk; + + g_topology_unlock(); + + serial_len = sizeof(meta->disk[i].serial); + error = g_io_getattr("GEOM::ident", cp, + &serial_len, &meta->disk[i].serial[0]); + if (error != 0) { + gctl_error(req, + "Can't get serial for provider '%s'.", + diskname); + error = -8; + break; + } + meta->disk[i].sectors = pp->mediasize / pp->sectorsize; + if (size > meta->disk[i].sectors) + size = meta->disk[i].sectors; + if (sectorsize < pp->sectorsize) + sectorsize = pp->sectorsize; + meta->disk[i].id = 0xffffffff; + meta->disk[i].flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; + } + if (error != 0) + return (error); + + /* Reserve some space for metadata. */ + size -= (4096 + sectorsize - 1) / sectorsize + 1; + + size &= ~127; /* Assume stripe size 64K */ + mvol = intel_get_volume(meta, 0); + strlcpy(&mvol->name[0], volname, sizeof(mvol->name)); + if (level == G_RAID_VOLUME_RL_RAID0) + mvol->total_sectors = size * numdisks; + else if (level == G_RAID_VOLUME_RL_RAID5) + mvol->total_sectors = size * (numdisks - 1); + else + mvol->total_sectors = size * (numdisks / 2); + mmap = intel_get_map(mvol, 0); + mmap->offset = 0; + mmap->disk_sectors = size; + mmap->stripe_count = size / 128; + mmap->stripe_sectors = 128; + mmap->status = INTEL_S_READY; + if (level == G_RAID_VOLUME_RL_RAID0) + mmap->type = INTEL_T_RAID0; + else if (level == G_RAID_VOLUME_RL_RAID1 || + level == G_RAID_VOLUME_RL_RAID10) + mmap->type = INTEL_T_RAID1; + else + mmap->type = INTEL_T_RAID5; + mmap->total_disks = numdisks; + if (level == G_RAID_VOLUME_RL_RAID10) + mmap->total_domains = numdisks / 2; + else if (level == G_RAID_VOLUME_RL_RAID1) + mmap->total_domains = numdisks; + else + mmap->total_domains = 1; + mmap->failed_disk_num = ~0; + mmap->ddf = 1; + for (i = 0; i < numdisks; i++) + mmap->disk_idx[i] = i; + g_raid_md_intel_print(meta); + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + pd->pd_meta = intel_meta_copy(meta); + intel_meta_write(disk->d_consumer, meta); + } + mdi->mdio_started = 1; + g_raid_md_intel_start(sc); + return (0); + } + return (-100); +} + +static int g_raid_md_write_intel(struct g_raid_md_object *md, struct g_raid_disk *disk) { From owner-svn-src-projects@FreeBSD.ORG Fri Dec 24 01:37:14 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C96EA106564A; Fri, 24 Dec 2010 01:37:14 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B46B38FC0A; Fri, 24 Dec 2010 01:37:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBO1bEZs074704; Fri, 24 Dec 2010 01:37:14 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBO1bEpa074674; Fri, 24 Dec 2010 01:37:14 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201012240137.oBO1bEpa074674@svn.freebsd.org> From: Dimitry Andric Date: Fri, 24 Dec 2010 01:37:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216683 - in projects/binutils-2.17: . bin/kill bin/sh bin/sh/bltin contrib/bsnmp/lib contrib/bsnmp/snmp_target contrib/bsnmp/snmp_usm contrib/bsnmp/snmp_vacm contrib/bsnmp/snmpd contri... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Dec 2010 01:37:14 -0000 Author: dim Date: Fri Dec 24 01:37:13 2010 New Revision: 216683 URL: http://svn.freebsd.org/changeset/base/216683 Log: Sync: merge r216506 through r216682 from ^/head. Added: projects/binutils-2.17/contrib/bsnmp/lib/tc.def - copied unchanged from r216682, head/contrib/bsnmp/lib/tc.def projects/binutils-2.17/contrib/bsnmp/snmp_target/ - copied from r216682, head/contrib/bsnmp/snmp_target/ projects/binutils-2.17/lib/libthr/thread/thr_sleepq.c - copied unchanged from r216682, head/lib/libthr/thread/thr_sleepq.c projects/binutils-2.17/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu - copied unchanged from r216682, head/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu projects/binutils-2.17/sys/kern/kern_hhook.c - copied unchanged from r216682, head/sys/kern/kern_hhook.c projects/binutils-2.17/sys/kern/kern_khelp.c - copied unchanged from r216682, head/sys/kern/kern_khelp.c projects/binutils-2.17/sys/sys/hhook.h - copied unchanged from r216682, head/sys/sys/hhook.h projects/binutils-2.17/sys/sys/khelp.h - copied unchanged from r216682, head/sys/sys/khelp.h projects/binutils-2.17/sys/sys/module_khelp.h - copied unchanged from r216682, head/sys/sys/module_khelp.h projects/binutils-2.17/sys/x86/include/bus.h - copied unchanged from r216682, head/sys/x86/include/bus.h projects/binutils-2.17/tools/regression/bin/sh/builtins/printf3.0 - copied unchanged from r216682, head/tools/regression/bin/sh/builtins/printf3.0 projects/binutils-2.17/tools/regression/bin/sh/builtins/printf4.0 - copied unchanged from r216682, head/tools/regression/bin/sh/builtins/printf4.0 projects/binutils-2.17/tools/regression/bin/sh/expansion/arith8.0 - copied unchanged from r216682, head/tools/regression/bin/sh/expansion/arith8.0 projects/binutils-2.17/usr.sbin/bsnmpd/modules/snmp_target/ - copied from r216682, head/usr.sbin/bsnmpd/modules/snmp_target/ Deleted: projects/binutils-2.17/sys/contrib/dev/wpi/iwlwifi-3945-2.14.4.fw.uu Modified: projects/binutils-2.17/Makefile projects/binutils-2.17/UPDATING projects/binutils-2.17/bin/kill/kill.1 projects/binutils-2.17/bin/kill/kill.c projects/binutils-2.17/bin/sh/Makefile projects/binutils-2.17/bin/sh/alias.c projects/binutils-2.17/bin/sh/arith_lex.l projects/binutils-2.17/bin/sh/bltin/bltin.h projects/binutils-2.17/bin/sh/builtins.def projects/binutils-2.17/bin/sh/cd.c projects/binutils-2.17/bin/sh/error.c projects/binutils-2.17/bin/sh/error.h projects/binutils-2.17/bin/sh/expand.c projects/binutils-2.17/bin/sh/jobs.c projects/binutils-2.17/bin/sh/sh.1 projects/binutils-2.17/bin/sh/trap.c projects/binutils-2.17/contrib/bsnmp/lib/bsnmplib.3 projects/binutils-2.17/contrib/bsnmp/lib/snmp.c projects/binutils-2.17/contrib/bsnmp/lib/snmp.h projects/binutils-2.17/contrib/bsnmp/lib/snmpagent.c projects/binutils-2.17/contrib/bsnmp/lib/snmpclient.c projects/binutils-2.17/contrib/bsnmp/lib/snmppriv.h projects/binutils-2.17/contrib/bsnmp/snmp_usm/snmp_usm.3 projects/binutils-2.17/contrib/bsnmp/snmp_usm/usm_tree.def projects/binutils-2.17/contrib/bsnmp/snmp_vacm/vacm_tree.def projects/binutils-2.17/contrib/bsnmp/snmpd/main.c projects/binutils-2.17/contrib/bsnmp/snmpd/snmpmod.3 projects/binutils-2.17/contrib/bsnmp/snmpd/snmpmod.h projects/binutils-2.17/contrib/bsnmp/snmpd/trap.c projects/binutils-2.17/contrib/bsnmp/snmpd/tree.def projects/binutils-2.17/etc/snmpd.config projects/binutils-2.17/games/factor/factor.c projects/binutils-2.17/include/unistd.h projects/binutils-2.17/lib/libc/sys/shmat.2 projects/binutils-2.17/lib/libc/sys/shmctl.2 projects/binutils-2.17/lib/libc/sys/shmget.2 projects/binutils-2.17/lib/libthr/thread/Makefile.inc projects/binutils-2.17/lib/libthr/thread/thr_cond.c projects/binutils-2.17/lib/libthr/thread/thr_init.c projects/binutils-2.17/lib/libthr/thread/thr_kern.c projects/binutils-2.17/lib/libthr/thread/thr_list.c projects/binutils-2.17/lib/libthr/thread/thr_mutex.c projects/binutils-2.17/lib/libthr/thread/thr_private.h projects/binutils-2.17/lib/libthr/thread/thr_umtx.c projects/binutils-2.17/lib/libthr/thread/thr_umtx.h projects/binutils-2.17/libexec/getty/chat.c projects/binutils-2.17/libexec/getty/main.c projects/binutils-2.17/libexec/rbootd/rbootd.c projects/binutils-2.17/libexec/rlogind/rlogind.c projects/binutils-2.17/libexec/rpc.rwalld/rwalld.c projects/binutils-2.17/sbin/geom/class/part/geom_part.c projects/binutils-2.17/sbin/ping6/ping6.c projects/binutils-2.17/share/man/man1/builtin.1 projects/binutils-2.17/share/man/man4/altq.4 projects/binutils-2.17/share/man/man4/ixgb.4 projects/binutils-2.17/share/man/man4/ixgbe.4 projects/binutils-2.17/share/man/man4/jme.4 projects/binutils-2.17/share/man/man4/miibus.4 projects/binutils-2.17/share/man/man4/vlan.4 projects/binutils-2.17/share/man/man4/xen.4 projects/binutils-2.17/share/man/man5/core.5 projects/binutils-2.17/share/man/man9/VOP_READDIR.9 projects/binutils-2.17/share/mk/bsd.own.mk projects/binutils-2.17/sys/amd64/amd64/cpu_switch.S projects/binutils-2.17/sys/amd64/amd64/exception.S projects/binutils-2.17/sys/amd64/amd64/fpu.c projects/binutils-2.17/sys/amd64/amd64/genassym.c projects/binutils-2.17/sys/amd64/amd64/machdep.c projects/binutils-2.17/sys/amd64/amd64/sys_machdep.c projects/binutils-2.17/sys/amd64/amd64/vm_machdep.c projects/binutils-2.17/sys/amd64/ia32/ia32_reg.c projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c projects/binutils-2.17/sys/amd64/include/atomic.h projects/binutils-2.17/sys/amd64/include/bus.h projects/binutils-2.17/sys/amd64/include/pcb.h projects/binutils-2.17/sys/amd64/linux32/linux32_machdep.c projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c projects/binutils-2.17/sys/arm/xscale/ixp425/avila_gpio.c projects/binutils-2.17/sys/compat/freebsd32/freebsd32.h projects/binutils-2.17/sys/compat/ndis/hal_var.h projects/binutils-2.17/sys/conf/files projects/binutils-2.17/sys/contrib/dev/wpi/LICENSE projects/binutils-2.17/sys/dev/acpica/acpi.c projects/binutils-2.17/sys/dev/acpica/acpivar.h projects/binutils-2.17/sys/dev/atkbdc/atkbdc.c projects/binutils-2.17/sys/dev/atkbdc/atkbdc_isa.c projects/binutils-2.17/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c projects/binutils-2.17/sys/dev/cxgb/ulp/tom/cxgb_ddp.c projects/binutils-2.17/sys/dev/cxgb/ulp/tom/cxgb_vm.c projects/binutils-2.17/sys/dev/cxgb/ulp/tom/cxgb_vm.h projects/binutils-2.17/sys/dev/hifn/hifn7751.c projects/binutils-2.17/sys/dev/if_ndis/if_ndis_pci.c projects/binutils-2.17/sys/dev/jme/if_jme.c projects/binutils-2.17/sys/dev/jme/if_jmereg.h projects/binutils-2.17/sys/dev/jme/if_jmevar.h projects/binutils-2.17/sys/dev/le/if_le_pci.c projects/binutils-2.17/sys/dev/lmc/if_lmc.c projects/binutils-2.17/sys/dev/malo/if_malo_pci.c projects/binutils-2.17/sys/dev/mii/jmphy.c projects/binutils-2.17/sys/dev/mii/jmphyreg.h projects/binutils-2.17/sys/dev/mii/nsgphy.c projects/binutils-2.17/sys/dev/pci/vga_pci.c projects/binutils-2.17/sys/dev/puc/pucdata.c projects/binutils-2.17/sys/dev/sis/if_sis.c projects/binutils-2.17/sys/dev/sound/pci/atiixp.c projects/binutils-2.17/sys/dev/sound/pci/csa.c projects/binutils-2.17/sys/dev/sound/pci/ich.c projects/binutils-2.17/sys/dev/uart/uart_cpu_amd64.c projects/binutils-2.17/sys/dev/uart/uart_cpu_i386.c projects/binutils-2.17/sys/dev/uart/uart_cpu_pc98.c projects/binutils-2.17/sys/dev/wpi/if_wpi.c projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdstate.c projects/binutils-2.17/sys/i386/i386/pmap.c projects/binutils-2.17/sys/i386/include/atomic.h projects/binutils-2.17/sys/i386/include/bus.h projects/binutils-2.17/sys/kern/kern_fail.c projects/binutils-2.17/sys/kern/kern_umtx.c projects/binutils-2.17/sys/kern/sys_pipe.c projects/binutils-2.17/sys/kern/sys_process.c projects/binutils-2.17/sys/kern/vfs_bio.c projects/binutils-2.17/sys/mips/conf/SENTRY5 projects/binutils-2.17/sys/modules/wpifw/Makefile projects/binutils-2.17/sys/netinet/sctp_cc_functions.c projects/binutils-2.17/sys/netinet/sctp_indata.c projects/binutils-2.17/sys/netinet/sctp_input.c projects/binutils-2.17/sys/netinet/sctp_output.c projects/binutils-2.17/sys/netinet/sctp_sysctl.h projects/binutils-2.17/sys/netinet/sctp_timer.c projects/binutils-2.17/sys/netinet/sctp_usrreq.c projects/binutils-2.17/sys/netinet/tcp_timer.c projects/binutils-2.17/sys/netinet6/in6_ifattach.c projects/binutils-2.17/sys/netinet6/sctp6_usrreq.c projects/binutils-2.17/sys/nfsserver/nfs.h projects/binutils-2.17/sys/nfsserver/nfs_serv.c projects/binutils-2.17/sys/nfsserver/nfs_srvsubs.c projects/binutils-2.17/sys/pc98/include/bus.h projects/binutils-2.17/sys/powerpc/aim/mmu_oea.c projects/binutils-2.17/sys/powerpc/aim/mmu_oea64.c projects/binutils-2.17/sys/powerpc/include/vmparam.h projects/binutils-2.17/sys/sparc64/include/cpufunc.h projects/binutils-2.17/sys/sparc64/include/vmparam.h projects/binutils-2.17/sys/sparc64/sparc64/tick.c projects/binutils-2.17/sys/sys/_umtx.h projects/binutils-2.17/sys/sys/fail.h projects/binutils-2.17/sys/sys/mount.h projects/binutils-2.17/sys/sys/osd.h projects/binutils-2.17/sys/sys/param.h projects/binutils-2.17/sys/sys/umtx.h projects/binutils-2.17/sys/ufs/ffs/ffs_softdep.c projects/binutils-2.17/sys/vm/vm_extern.h projects/binutils-2.17/sys/vm/vm_fault.c projects/binutils-2.17/sys/vm/vm_map.h projects/binutils-2.17/sys/vm/vm_page.c projects/binutils-2.17/sys/vm/vm_page.h projects/binutils-2.17/sys/x86/x86/io_apic.c projects/binutils-2.17/sys/x86/x86/nexus.c projects/binutils-2.17/usr.bin/csup/rcsfile.c projects/binutils-2.17/usr.bin/csup/rcsfile.h projects/binutils-2.17/usr.bin/mail/cmd1.c projects/binutils-2.17/usr.bin/mail/cmd2.c projects/binutils-2.17/usr.bin/mail/cmd3.c projects/binutils-2.17/usr.bin/mail/collect.c projects/binutils-2.17/usr.bin/mail/edit.c projects/binutils-2.17/usr.bin/mail/fio.c projects/binutils-2.17/usr.bin/mail/getname.c projects/binutils-2.17/usr.bin/mail/head.c projects/binutils-2.17/usr.bin/mail/lex.c projects/binutils-2.17/usr.bin/mail/list.c projects/binutils-2.17/usr.bin/mail/main.c projects/binutils-2.17/usr.bin/mail/names.c projects/binutils-2.17/usr.bin/mail/popen.c projects/binutils-2.17/usr.bin/mail/quit.c projects/binutils-2.17/usr.bin/mail/send.c projects/binutils-2.17/usr.bin/mail/strings.c projects/binutils-2.17/usr.bin/mail/temp.c projects/binutils-2.17/usr.bin/mail/tty.c projects/binutils-2.17/usr.bin/mail/util.c projects/binutils-2.17/usr.bin/mail/v7.local.c projects/binutils-2.17/usr.bin/mail/vars.c projects/binutils-2.17/usr.bin/printf/printf.c projects/binutils-2.17/usr.bin/rsh/rsh.c projects/binutils-2.17/usr.bin/stat/stat.c projects/binutils-2.17/usr.sbin/bsnmpd/bsnmpd/Makefile projects/binutils-2.17/usr.sbin/bsnmpd/modules/Makefile projects/binutils-2.17/usr.sbin/bsnmpd/modules/snmp_bridge/bridge_tree.def projects/binutils-2.17/usr.sbin/bsnmpd/modules/snmp_wlan/wlan_tree.def projects/binutils-2.17/usr.sbin/lmcconfig/Makefile projects/binutils-2.17/usr.sbin/lmcconfig/lmcconfig.c projects/binutils-2.17/usr.sbin/mld6query/mld6.c projects/binutils-2.17/usr.sbin/mountd/mountd.c projects/binutils-2.17/usr.sbin/ngctl/main.c projects/binutils-2.17/usr.sbin/ngctl/msg.c projects/binutils-2.17/usr.sbin/pkg_install/add/main.c projects/binutils-2.17/usr.sbin/portsnap/portsnap/portsnap.sh projects/binutils-2.17/usr.sbin/rpc.lockd/Makefile projects/binutils-2.17/usr.sbin/rpc.lockd/lockd.c projects/binutils-2.17/usr.sbin/rpc.lockd/lockd_lock.c projects/binutils-2.17/usr.sbin/rtadvd/Makefile projects/binutils-2.17/usr.sbin/rtadvd/rtadvd.8 projects/binutils-2.17/usr.sbin/rtadvd/rtadvd.c projects/binutils-2.17/usr.sbin/sysinstall/menus.c projects/binutils-2.17/usr.sbin/wpa/hostapd/driver_freebsd.c Directory Properties: projects/binutils-2.17/ (props changed) projects/binutils-2.17/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/contrib/bind9/ (props changed) projects/binutils-2.17/contrib/binutils/ (props changed) projects/binutils-2.17/contrib/bzip2/ (props changed) projects/binutils-2.17/contrib/ee/ (props changed) projects/binutils-2.17/contrib/expat/ (props changed) projects/binutils-2.17/contrib/file/ (props changed) projects/binutils-2.17/contrib/gdb/ (props changed) projects/binutils-2.17/contrib/gdtoa/ (props changed) projects/binutils-2.17/contrib/gnu-sort/ (props changed) projects/binutils-2.17/contrib/groff/ (props changed) projects/binutils-2.17/contrib/less/ (props changed) projects/binutils-2.17/contrib/libpcap/ (props changed) projects/binutils-2.17/contrib/llvm/ (props changed) projects/binutils-2.17/contrib/llvm/tools/clang/ (props changed) projects/binutils-2.17/contrib/ncurses/ (props changed) projects/binutils-2.17/contrib/netcat/ (props changed) projects/binutils-2.17/contrib/ntp/ (props changed) projects/binutils-2.17/contrib/one-true-awk/ (props changed) projects/binutils-2.17/contrib/openbsm/ (props changed) projects/binutils-2.17/contrib/openpam/ (props changed) projects/binutils-2.17/contrib/pf/ (props changed) projects/binutils-2.17/contrib/sendmail/ (props changed) projects/binutils-2.17/contrib/tcpdump/ (props changed) projects/binutils-2.17/contrib/tcsh/ (props changed) projects/binutils-2.17/contrib/top/ (props changed) projects/binutils-2.17/contrib/top/install-sh (props changed) projects/binutils-2.17/contrib/tzcode/stdtime/ (props changed) projects/binutils-2.17/contrib/tzcode/zic/ (props changed) projects/binutils-2.17/contrib/tzdata/ (props changed) projects/binutils-2.17/contrib/wpa/ (props changed) projects/binutils-2.17/contrib/xz/ (props changed) projects/binutils-2.17/crypto/openssh/ (props changed) projects/binutils-2.17/crypto/openssl/ (props changed) projects/binutils-2.17/lib/libc/ (props changed) projects/binutils-2.17/lib/libc/stdtime/ (props changed) projects/binutils-2.17/lib/libutil/ (props changed) projects/binutils-2.17/lib/libz/ (props changed) projects/binutils-2.17/sbin/ (props changed) projects/binutils-2.17/sbin/ipfw/ (props changed) projects/binutils-2.17/share/mk/bsd.arch.inc.mk (props changed) projects/binutils-2.17/share/zoneinfo/ (props changed) projects/binutils-2.17/sys/ (props changed) projects/binutils-2.17/sys/amd64/include/xen/ (props changed) projects/binutils-2.17/sys/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/sys/contrib/dev/acpica/ (props changed) projects/binutils-2.17/sys/contrib/octeon-sdk/ (props changed) projects/binutils-2.17/sys/contrib/pf/ (props changed) projects/binutils-2.17/sys/contrib/x86emu/ (props changed) projects/binutils-2.17/usr.bin/calendar/ (props changed) projects/binutils-2.17/usr.bin/csup/ (props changed) projects/binutils-2.17/usr.bin/procstat/ (props changed) projects/binutils-2.17/usr.sbin/zic/ (props changed) Modified: projects/binutils-2.17/Makefile ============================================================================== --- projects/binutils-2.17/Makefile Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/Makefile Fri Dec 24 01:37:13 2010 (r216683) @@ -281,7 +281,15 @@ tinderbox: # existing system is. # .if make(universe) || make(universe_kernels) || make(tinderbox) -TARGETS?=amd64 i386 ia64 pc98 powerpc sparc64 sun4v mips +TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 sun4v +TARGET_ARCHES_arm?= arm armeb +TARGET_ARCHES_mips?= mipsel mipseb +TARGET_ARCHES_powerpc?= powerpc powerpc64 +TARGET_ARCHES_pc98?= i386 +TARGET_ARCHES_sun4v?= sparc64 +.for target in ${TARGETS} +TARGET_ARCHES_${target}?= ${target} +.endfor .if defined(DOING_TINDERBOX) FAILFILE=tinderbox.failed @@ -301,16 +309,24 @@ universe_prologue: .for target in ${TARGETS} universe: universe_${target} .ORDER: universe_prologue universe_${target} universe_epilogue -universe_${target}: -.if !defined(MAKE_JUST_KERNELS) +universe_${target}: universe_${target}_prologue +universe_${target}_prologue: @echo ">> ${target} started on `LC_ALL=C date`" +.if !defined(MAKE_JUST_KERNELS) +.for target_arch in ${TARGET_ARCHES_${target}} +universe_${target}: universe_${target}_${target_arch} +universe_${target}_${target_arch}: universe_${target}_prologue + @echo ">> ${target}.${target_arch} buildworld started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ ${MAKE} ${JFLAG} buildworld \ TARGET=${target} \ - > _.${target}.buildworld 2>&1 || \ - (echo "${target} world failed," \ - "check _.${target}.buildworld for details" | ${MAKEFAIL})) - @echo ">> ${target} buildworld completed on `LC_ALL=C date`" + TARGET_ARCH=${target_arch} \ + > _.${target}.${target_arch}.buildworld 2>&1 || \ + (echo "${target}.${target_arch} world failed," \ + "check _.${target}.${target_arch}.buildworld for details" | \ + ${MAKEFAIL})) + @echo ">> ${target}.${target_arch} buildworld completed on `LC_ALL=C date`" +.endfor .endif .if !defined(MAKE_JUST_WORLDS) .if exists(${.CURDIR}/sys/${target}/conf/NOTES) @@ -333,9 +349,15 @@ KERNCONFS!= cd ${.CURDIR}/sys/${TARGET}/ ! -name DEFAULTS ! -name NOTES universe_kernconfs: .for kernel in ${KERNCONFS} +TARGET_ARCH_${kernel}!= cd ${.CURDIR}/sys/${TARGET}/conf && \ + config -m ${.CURDIR}/sys/${TARGET}/conf/${kernel} | \ + cut -f 2 +universe_kernconfs: universe_kernconf_${TARGET}_${kernel} +universe_kernconf_${TARGET}_${kernel}: @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ ${MAKE} ${JFLAG} buildkernel \ TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH_${kernel}} \ KERNCONF=${kernel} \ > _.${TARGET}.${kernel} 2>&1 || \ (echo "${TARGET} ${kernel} kernel failed," \ Modified: projects/binutils-2.17/UPDATING ============================================================================== --- projects/binutils-2.17/UPDATING Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/UPDATING Fri Dec 24 01:37:13 2010 (r216683) @@ -1136,8 +1136,8 @@ COMMON ITEMS: [3] mergemaster -p [5] make installworld - make delete-old mergemaster -i [4] + make delete-old [6] @@ -1174,8 +1174,8 @@ COMMON ITEMS: [3] mergemaster -p [5] make installworld - make delete-old mergemaster -i [4] + make delete-old [6] Make sure that you've read the UPDATING file to understand the @@ -1218,6 +1218,10 @@ COMMON ITEMS: install) after the buildworld before this step if you last updated from current before 20020224 or from -stable before 20020408. + [6] This only deletes old files and directories. Old libraries + can be deleted by "make delete-old-libs", but you have to make + sure that no program is using those libraries anymore. + [8] In order to have a kernel that can run the 4.x binaries needed to do an installworld, you must include the COMPAT_FREEBSD4 option in your kernel. Failure to do so may leave you with a system that is Modified: projects/binutils-2.17/bin/kill/kill.1 ============================================================================== --- projects/binutils-2.17/bin/kill/kill.1 Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/kill/kill.1 Fri Dec 24 01:37:13 2010 (r216683) @@ -134,6 +134,7 @@ Terminate the process group with PGID 11 .Xr csh 1 , .Xr killall 1 , .Xr ps 1 , +.Xr sh 1 , .Xr kill 2 , .Xr sigaction 2 .Sh STANDARDS Modified: projects/binutils-2.17/bin/kill/kill.c ============================================================================== --- projects/binutils-2.17/bin/kill/kill.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/kill/kill.c Fri Dec 24 01:37:13 2010 (r216683) @@ -49,6 +49,12 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef SHELL +#define main killcmd +#include "bltin/bltin.h" +#include "error.h" +#endif + static void nosig(const char *); static void printsignals(FILE *); static int signame_to_signum(const char *); @@ -75,16 +81,16 @@ main(int argc, char *argv[]) usage(); numsig = strtol(*argv, &ep, 10); if (!**argv || *ep) - errx(1, "illegal signal number: %s", *argv); + errx(2, "illegal signal number: %s", *argv); if (numsig >= 128) numsig -= 128; if (numsig <= 0 || numsig >= sys_nsig) nosig(*argv); printf("%s\n", sys_signame[numsig]); - exit(0); + return (0); } printsignals(stdout); - exit(0); + return (0); } if (!strcmp(*argv, "-s")) { @@ -107,7 +113,7 @@ main(int argc, char *argv[]) } else if (isdigit(**argv)) { numsig = strtol(*argv, &ep, 10); if (!**argv || *ep) - errx(1, "illegal signal number: %s", *argv); + errx(2, "illegal signal number: %s", *argv); if (numsig < 0) nosig(*argv); } else @@ -122,16 +128,23 @@ main(int argc, char *argv[]) usage(); for (errors = 0; argc; argc--, argv++) { - pid = strtol(*argv, &ep, 10); - if (!**argv || *ep) - errx(1, "illegal process id: %s", *argv); - else if (kill(pid, numsig) == -1) { +#ifdef SHELL + if (**argv == '%') + pid = getjobpgrp(*argv); + else +#endif + { + pid = strtol(*argv, &ep, 10); + if (!**argv || *ep) + errx(2, "illegal process id: %s", *argv); + } + if (kill(pid, numsig) == -1) { warn("%s", *argv); errors = 1; } } - exit(errors); + return (errors); } static int @@ -154,7 +167,11 @@ nosig(const char *name) warnx("unknown signal %s; valid signals:", name); printsignals(stderr); - exit(1); +#ifdef SHELL + error(NULL); +#else + exit(2); +#endif } static void @@ -180,5 +197,9 @@ usage(void) " kill -l [exit_status]", " kill -signal_name pid ...", " kill -signal_number pid ..."); - exit(1); +#ifdef SHELL + error(NULL); +#else + exit(2); +#endif } Modified: projects/binutils-2.17/bin/sh/Makefile ============================================================================== --- projects/binutils-2.17/bin/sh/Makefile Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/Makefile Fri Dec 24 01:37:13 2010 (r216683) @@ -4,7 +4,7 @@ PROG= sh INSTALLFLAGS= -S SHSRCS= alias.c arith.y arith_lex.l cd.c echo.c error.c eval.c exec.c expand.c \ - histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \ + histedit.c input.c jobs.c kill.c mail.c main.c memalloc.c miscbltin.c \ mystring.c options.c output.c parser.c printf.c redir.c show.c \ test.c trap.c var.c GENSRCS= builtins.c init.c nodes.c syntax.c @@ -26,6 +26,7 @@ WARNS?= 2 WFORMAT=0 .PATH: ${.CURDIR}/bltin \ + ${.CURDIR}/../kill \ ${.CURDIR}/../test \ ${.CURDIR}/../../usr.bin/printf Modified: projects/binutils-2.17/bin/sh/alias.c ============================================================================== --- projects/binutils-2.17/bin/sh/alias.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/alias.c Fri Dec 24 01:37:13 2010 (r216683) @@ -246,7 +246,7 @@ aliascmd(int argc, char **argv) while ((n = *++argv) != NULL) { if ((v = strchr(n+1, '=')) == NULL) /* n+1: funny ksh stuff */ if ((ap = lookupalias(n, 0)) == NULL) { - outfmt(out2, "alias: %s not found\n", n); + warning("%s not found", n); ret = 1; } else printalias(ap); Modified: projects/binutils-2.17/bin/sh/arith_lex.l ============================================================================== --- projects/binutils-2.17/bin/sh/arith_lex.l Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/arith_lex.l Fri Dec 24 01:37:13 2010 (r216683) @@ -74,12 +74,12 @@ int yylex(void); return ARITH_NUM; } -0[0-7]+ { +0[0-7]* { yylval.l_value = strtoarith_t(yytext, NULL, 8); return ARITH_NUM; } -[0-9]+ { +[1-9][0-9]* { yylval.l_value = strtoarith_t(yytext, NULL, 10); return ARITH_NUM; } Modified: projects/binutils-2.17/bin/sh/bltin/bltin.h ============================================================================== --- projects/binutils-2.17/bin/sh/bltin/bltin.h Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/bltin/bltin.h Fri Dec 24 01:37:13 2010 (r216683) @@ -43,6 +43,7 @@ #include "../mystring.h" #ifdef SHELL #include "../output.h" +#define FILE struct output #undef stdout #define stdout out1 #undef stderr @@ -57,21 +58,9 @@ #define fwrite(ptr, size, nmemb, file) outbin(ptr, (size) * (nmemb), file) #define fflush flushout #define INITARGS(argv) -#define warnx1(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a); \ - error("%s", buf); \ -} -#define warnx2(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a, b); \ - error("%s", buf); \ -} -#define warnx3(a, b, c) { \ - char buf[64]; \ - (void)snprintf(buf, sizeof(buf), a, b, c); \ - error("%s", buf); \ -} +#define warnx warning +#define warn(fmt, ...) warning(fmt ": %s", __VA_ARGS__, strerror(errno)) +#define errx(exitstatus, ...) error(__VA_ARGS__) #else #undef NULL @@ -80,8 +69,11 @@ #define INITARGS(argv) if ((commandname = argv[0]) == NULL) {fputs("Argc is zero\n", stderr); exit(2);} else #endif +#include + pointer stalloc(int); void error(const char *, ...) __printf0like(1, 2); +pid_t getjobpgrp(char *); int echocmd(int, char **); int testcmd(int, char **); Modified: projects/binutils-2.17/bin/sh/builtins.def ============================================================================== --- projects/binutils-2.17/bin/sh/builtins.def Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/builtins.def Fri Dec 24 01:37:13 2010 (r216683) @@ -70,6 +70,7 @@ hashcmd hash histcmd -h fc jobidcmd jobid jobscmd jobs +killcmd kill localcmd local printfcmd printf pwdcmd pwd Modified: projects/binutils-2.17/bin/sh/cd.c ============================================================================== --- projects/binutils-2.17/bin/sh/cd.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/cd.c Fri Dec 24 01:37:13 2010 (r216683) @@ -224,7 +224,7 @@ cdphysical(char *dest) } p = findcwd(NULL); if (p == NULL) - out2fmt_flush("cd: warning: failed to get name of current directory\n"); + warning("warning: failed to get name of current directory"); updatepwd(p); INTON; return (0); Modified: projects/binutils-2.17/bin/sh/error.c ============================================================================== --- projects/binutils-2.17/bin/sh/error.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/error.c Fri Dec 24 01:37:13 2010 (r216683) @@ -134,6 +134,26 @@ onint(void) } +static void +vwarning(const char *msg, va_list ap) +{ + if (commandname) + outfmt(out2, "%s: ", commandname); + doformat(out2, msg, ap); + out2fmt_flush("\n"); +} + + +void +warning(const char *msg, ...) +{ + va_list ap; + va_start(ap, msg); + vwarning(msg, ap); + va_end(ap); +} + + /* * Exverror is called to raise the error exception. If the first argument * is not NULL then error prints an error message using printf style @@ -158,12 +178,8 @@ exverror(int cond, const char *msg, va_l else TRACE(("exverror(%d, NULL) pid=%d\n", cond, getpid())); #endif - if (msg) { - if (commandname) - outfmt(out2, "%s: ", commandname); - doformat(out2, msg, ap); - out2c('\n'); - } + if (msg) + vwarning(msg, ap); flushall(); exraise(cond); } Modified: projects/binutils-2.17/bin/sh/error.h ============================================================================== --- projects/binutils-2.17/bin/sh/error.h Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/error.h Fri Dec 24 01:37:13 2010 (r216683) @@ -80,6 +80,7 @@ extern volatile sig_atomic_t intpending; void exraise(int) __dead2; void onint(void); +void warning(const char *, ...) __printflike(1, 2); void error(const char *, ...) __printf0like(1, 2) __dead2; void exerror(int, const char *, ...) __printf0like(2, 3) __dead2; Modified: projects/binutils-2.17/bin/sh/expand.c ============================================================================== --- projects/binutils-2.17/bin/sh/expand.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/expand.c Fri Dec 24 01:37:13 2010 (r216683) @@ -557,8 +557,6 @@ subevalvar(char *p, char *str, int strlo amount = startp - expdest; STADJUST(amount, expdest); varflags &= ~VSNUL; - if (c != 0) - *loc = c; return 1; case VSQUESTION: Modified: projects/binutils-2.17/bin/sh/jobs.c ============================================================================== --- projects/binutils-2.17/bin/sh/jobs.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/jobs.c Fri Dec 24 01:37:13 2010 (r216683) @@ -632,6 +632,14 @@ currentjob: if ((jp = getcurjob(NULL)) = } +pid_t +getjobpgrp(char *name) +{ + struct job *jp; + + jp = getjob(name); + return -jp->ps[0].pid; +} /* * Return a new job structure, Modified: projects/binutils-2.17/bin/sh/sh.1 ============================================================================== --- projects/binutils-2.17/bin/sh/sh.1 Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/sh.1 Fri Dec 24 01:37:13 2010 (r216683) @@ -32,7 +32,7 @@ .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" $FreeBSD$ .\" -.Dd December 3, 2010 +.Dd December 21, 2010 .Dt SH 1 .Os .Sh NAME @@ -456,9 +456,10 @@ would become Aliases provide a convenient way for naive users to create shorthands for commands without having to learn how to create functions with arguments. -They can also be -used to create lexically obscure code. -This use is discouraged. +Using aliases in scripts is discouraged +because the command that defines them must be executed +before the code that uses them is parsed. +This is fragile and not portable. .Pp An alias name may be escaped in a command line, so that it is not replaced by its alias value, by using quoting characters within or @@ -2049,6 +2050,10 @@ If the .Fl s option is specified, only the PIDs of the job commands are printed, one per line. +.It Ic kill +A built-in equivalent of +.Xr kill 1 +that additionally supports sending signals to jobs. .It Ic local Oo Ar variable ... Oc Op Fl See the .Sx Functions @@ -2477,6 +2482,7 @@ will return the argument. .Xr echo 1 , .Xr ed 1 , .Xr emacs 1 , +.Xr kill 1 , .Xr printf 1 , .Xr pwd 1 , .Xr test 1 , Modified: projects/binutils-2.17/bin/sh/trap.c ============================================================================== --- projects/binutils-2.17/bin/sh/trap.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/bin/sh/trap.c Fri Dec 24 01:37:13 2010 (r216683) @@ -185,7 +185,7 @@ trapcmd(int argc, char **argv) } while (*argv) { if ((signo = sigstring_to_signum(*argv)) == -1) { - out2fmt_flush("trap: bad signal %s\n", *argv); + warning("bad signal %s", *argv); errors = 1; } INTOFF; Modified: projects/binutils-2.17/contrib/bsnmp/lib/bsnmplib.3 ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/bsnmplib.3 Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/bsnmplib.3 Fri Dec 24 01:37:13 2010 (r216683) @@ -37,7 +37,7 @@ .\" .\" $Begemot: bsnmp/lib/bsnmplib.3,v 1.9 2005/10/04 08:46:51 brandt_h Exp $ .\" -.Dd September 9, 2010 +.Dd December 19, 2010 .Dt BSNMPLIB 3 .Os .Sh NAME @@ -50,6 +50,7 @@ .Nm snmp_pdu_decode_header , .Nm snmp_pdu_decode_scoped , .Nm snmp_pdu_decode_secmode , +.Nm snmp_pdu_init_secparams , .Nm snmp_pdu_dump , .Nm snmp_passwd_to_keys , .Nm snmp_get_local_keys , @@ -83,6 +84,8 @@ Begemot SNMP library .Ft enum snmp_code .Fn snmp_pdu_decode_secmode "struct asn_buf *buf" "struct snmp_pdu *pdu" .Ft void +.Fn snmp_pdu_init_secparams "struct snmp_pdu *pdu" +.Ft void .Fn snmp_pdu_dump "const struct snmp_pdu *pdu" .Ft enum snmp_code .Fn snmp_passwd_to_keys "struct snmp_user *user" "char *passwd" @@ -175,12 +178,18 @@ This structure represents an SNMP engine Architecture described in RFC 3411. .Pp .Bd -literal -offset indent -#define SNMP_USM_NAME_SIZ (32 + 1) +#define SNMP_ADM_STR32_SIZ (32 + 1) #define SNMP_AUTH_KEY_SIZ 40 #define SNMP_PRIV_KEY_SIZ 32 +enum snmp_usm_level { + SNMP_noAuthNoPriv = 1, + SNMP_authNoPriv = 2, + SNMP_authPriv = 3 +}; + struct snmp_user { - char sec_name[SNMP_USM_NAME_SIZ]; + char sec_name[SNMP_ADM_STR32_SIZ]; enum snmp_authentication auth_proto; enum snmp_privacy priv_proto; uint8_t auth_key[SNMP_AUTH_KEY_SIZ]; @@ -230,7 +239,9 @@ contain the authentication and privacy k #define SNMP_MSG_PRIV_FLAG 0x2 #define SNMP_MSG_REPORT_FLAG 0x4 -#define SNMP_SECMODEL_USM 3 +#define SNMP_MPM_SNMP_V1 0 +#define SNMP_MPM_SNMP_V2c 1 +#define SNMP_MPM_SNMP_V3 3 struct snmp_pdu { char community[SNMP_COMMUNITY_MAXLEN + 1]; @@ -296,7 +307,17 @@ and is the type of the PDU. .Fa security_model is the security model used for SNMPv3 PDUs. The only supported -value currently is 3 (User-based Security Model). +value currently is 3 (User-based Security Model). Additional values for any, +unknown, SNMPv1 and SNMPv2c security models are also enumerated +.Bd -literal -offset indent +enum snmp_secmodel { + SNMP_SECMODEL_ANY = 0, + SNMP_SECMODEL_SNMPv1 = 1, + SNMP_SECMODEL_SNMPv2c = 2, + SNMP_SECMODEL_USM = 3, + SNMP_SECMODEL_UNKNOWN +}; +.Ed .Pp The function .Fn snmp_value_free @@ -366,6 +387,13 @@ if the PDU is encrypted, decrypts the PD If successfull, a plain text scoped PDU is stored in the buffer. .Pp The function +.Fn snmp_pdu_init_secparams +calculates the initialization vector for the privacy protocol in use before +the PDU pointed to by +.Fa pdu +may be encrypted or decrypted. +.Pp +The function .Fn snmp_pdu_dump dumps the PDU in a human readable form by calling .Fn snmp_printf . Modified: projects/binutils-2.17/contrib/bsnmp/lib/snmp.c ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/snmp.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/snmp.c Fri Dec 24 01:37:13 2010 (r216683) @@ -764,6 +764,7 @@ snmp_pdu_encode_header(struct asn_buf *b if (pdu->type != SNMP_PDU_RESPONSE && pdu->type != SNMP_PDU_TRAP && + pdu->type != SNMP_PDU_TRAP2 && pdu->type != SNMP_PDU_REPORT) pdu->flags |= SNMP_MSG_REPORT_FLAG; @@ -1176,23 +1177,19 @@ snmp_value_copy(struct snmp_value *to, c } void -snmp_pdu_init_secparams(struct snmp_pdu *pdu, struct snmp_engine *eng, - struct snmp_user *user) +snmp_pdu_init_secparams(struct snmp_pdu *pdu) { int32_t rval; - memcpy(&pdu->engine, eng, sizeof(pdu->engine)); - memcpy(&pdu->user, user, sizeof(pdu->user)); - - if (user->auth_proto != SNMP_AUTH_NOAUTH) + if (pdu->user.auth_proto != SNMP_AUTH_NOAUTH) pdu->flags |= SNMP_MSG_AUTH_FLAG; - switch (user->priv_proto) { + switch (pdu->user.priv_proto) { case SNMP_PRIV_DES: - memcpy(pdu->msg_salt, &eng->engine_boots, - sizeof(eng->engine_boots)); + memcpy(pdu->msg_salt, &pdu->engine.engine_boots, + sizeof(pdu->engine.engine_boots)); rval = random(); - memcpy(pdu->msg_salt + sizeof(eng->engine_boots), &rval, + memcpy(pdu->msg_salt + sizeof(pdu->engine.engine_boots), &rval, sizeof(int32_t)); pdu->flags |= SNMP_MSG_PRIV_FLAG; break; Modified: projects/binutils-2.17/contrib/bsnmp/lib/snmp.h ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/snmp.h Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/snmp.h Fri Dec 24 01:37:13 2010 (r216683) @@ -89,6 +89,10 @@ enum snmp_version { SNMP_V3, }; +#define SNMP_MPM_SNMP_V1 0 +#define SNMP_MPM_SNMP_V2c 1 +#define SNMP_MPM_SNMP_V3 3 + #define SNMP_ADM_STR32_SIZ (32 + 1) #define SNMP_AUTH_KEY_SIZ 40 #define SNMP_PRIV_KEY_SIZ 32 @@ -255,6 +259,7 @@ int snmp_value_parse(const char *, enum int snmp_value_copy(struct snmp_value *, const struct snmp_value *); void snmp_pdu_free(struct snmp_pdu *); +void snmp_pdu_init_secparams(struct snmp_pdu *); enum snmp_code snmp_pdu_decode(struct asn_buf *b, struct snmp_pdu *pdu, int32_t *); enum snmp_code snmp_pdu_decode_header(struct asn_buf *, struct snmp_pdu *); enum snmp_code snmp_pdu_decode_scoped(struct asn_buf *, struct snmp_pdu *, int32_t *); Modified: projects/binutils-2.17/contrib/bsnmp/lib/snmpagent.c ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/snmpagent.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/snmpagent.c Fri Dec 24 01:37:13 2010 (r216683) @@ -178,7 +178,9 @@ snmp_pdu_create_response(struct snmp_pdu if (resp->version != SNMP_V3) return; - snmp_pdu_init_secparams(resp, &pdu->engine, &pdu->user); + memcpy(&resp->engine, &pdu->engine, sizeof(pdu->engine)); + memcpy(&resp->user, &pdu->user, sizeof(pdu->user)); + snmp_pdu_init_secparams(resp); resp->identifier = pdu->identifier; resp->security_model = pdu->security_model; resp->context_engine_len = pdu->context_engine_len; Modified: projects/binutils-2.17/contrib/bsnmp/lib/snmpclient.c ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/snmpclient.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/snmpclient.c Fri Dec 24 01:37:13 2010 (r216683) @@ -1160,10 +1160,11 @@ snmp_pdu_create(struct snmp_pdu *pdu, u_ pdu->flags = 0; pdu->security_model = snmp_client.security_model; - if (snmp_client.security_model == SNMP_SECMODEL_USM) - snmp_pdu_init_secparams(pdu, &snmp_client.engine, - &snmp_client.user); - else + if (snmp_client.security_model == SNMP_SECMODEL_USM) { + memcpy(&pdu->engine, &snmp_client.engine, sizeof(pdu->engine)); + memcpy(&pdu->user, &snmp_client.user, sizeof(pdu->user)); + snmp_pdu_init_secparams(pdu); + } else seterr(&snmp_client, "unknown security model"); if (snmp_client.clen > 0) { @@ -1440,9 +1441,11 @@ snmp_receive_packet(struct snmp_pdu *pdu abuf.asn_len = ret; memset(pdu, 0, sizeof(*pdu)); - if (snmp_client.security_model == SNMP_SECMODEL_USM) - snmp_pdu_init_secparams(pdu, &snmp_client.engine, - &snmp_client.user); + if (snmp_client.security_model == SNMP_SECMODEL_USM) { + memcpy(&pdu->engine, &snmp_client.engine, sizeof(pdu->engine)); + memcpy(&pdu->user, &snmp_client.user, sizeof(pdu->user)); + snmp_pdu_init_secparams(pdu); + } if (SNMP_CODE_OK != (ret = snmp_pdu_decode(&abuf, pdu, &ip))) { seterr(&snmp_client, "snmp_decode_pdu: failed %d", ret); Modified: projects/binutils-2.17/contrib/bsnmp/lib/snmppriv.h ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/lib/snmppriv.h Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/lib/snmppriv.h Fri Dec 24 01:37:13 2010 (r216683) @@ -38,9 +38,6 @@ enum snmp_code snmp_fix_encoding(struct enum asn_err snmp_parse_pdus_hdr(struct asn_buf *b, struct snmp_pdu *pdu, asn_len_t *lenp); -void snmp_pdu_init_secparams(struct snmp_pdu *, struct snmp_engine *, - struct snmp_user *); - enum snmp_code snmp_pdu_calc_digest(const struct snmp_pdu *, uint8_t *); enum snmp_code snmp_pdu_encrypt(const struct snmp_pdu *); enum snmp_code snmp_pdu_decrypt(const struct snmp_pdu *); Copied: projects/binutils-2.17/contrib/bsnmp/lib/tc.def (from r216682, head/contrib/bsnmp/lib/tc.def) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/binutils-2.17/contrib/bsnmp/lib/tc.def Fri Dec 24 01:37:13 2010 (r216683, copy of r216682, head/contrib/bsnmp/lib/tc.def) @@ -0,0 +1,40 @@ +#- +# Copyright (C) 2010 The FreeBSD Foundation +# All rights reserved. +# +# This software was developed by Shteryana Sotirova Shopova under +# sponsorship from the FreeBSD Foundation. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +typedef RowStatus ENUM ( + 1 active + 2 notInService + 3 notReady + 4 createAndGo + 5 createAndWait + 6 destroy +) + Modified: projects/binutils-2.17/contrib/bsnmp/snmp_usm/snmp_usm.3 ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/snmp_usm/snmp_usm.3 Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/snmp_usm/snmp_usm.3 Fri Dec 24 01:37:13 2010 (r216683) @@ -112,7 +112,7 @@ Applications always have this column set lost when the module is restarted. A SET operation on this column is not allowed. .It Va usmUserStatus -This column is used to create new USM user entries or delete exsiting ones from +This column is used to create new USM user entries or delete existing ones from the table. .El .EL Modified: projects/binutils-2.17/contrib/bsnmp/snmp_usm/usm_tree.def ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/snmp_usm/usm_tree.def Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/snmp_usm/usm_tree.def Fri Dec 24 01:37:13 2010 (r216683) @@ -29,13 +29,7 @@ # $FreeBSD$ # -typedef StorageType ENUM ( - 1 other - 2 volatile - 3 nonVolatile - 4 permanent - 5 readOnly -) +#include "tc.def" typedef RowStatus ENUM ( 1 active @@ -46,6 +40,14 @@ typedef RowStatus ENUM ( 6 destroy ) +typedef StorageType ENUM ( + 1 other + 2 volatile + 3 nonVolatile + 4 permanent + 5 readOnly +) + (1 internet (6 snmpV2 (3 snmpModules Modified: projects/binutils-2.17/contrib/bsnmp/snmp_vacm/vacm_tree.def ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/snmp_vacm/vacm_tree.def Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/snmp_vacm/vacm_tree.def Fri Dec 24 01:37:13 2010 (r216683) @@ -29,13 +29,7 @@ # $FreeBSD$ # -typedef StorageType ENUM ( - 1 other - 2 volatile - 3 nonVolatile - 4 permanent - 5 readOnly -) +#include "tc.def" typedef RowStatus ENUM ( 1 active @@ -46,6 +40,14 @@ typedef RowStatus ENUM ( 6 destroy ) +typedef StorageType ENUM ( + 1 other + 2 volatile + 3 nonVolatile + 4 permanent + 5 readOnly +) + (1 internet (6 snmpV2 (3 snmpModules Modified: projects/binutils-2.17/contrib/bsnmp/snmpd/main.c ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/snmpd/main.c Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/snmpd/main.c Fri Dec 24 01:37:13 2010 (r216683) @@ -5,6 +5,12 @@ * * Author: Harti Brandt * + * Copyright (c) 2010 The FreeBSD Foundation + * All rights reserved. + * + * Portions of this software were developed by Shteryana Sotirova Shopova + * under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -98,6 +104,8 @@ struct snmp_engine snmpd_engine; /* snmpSerialNo */ int32_t snmp_serial_no; +struct snmpd_target_stats snmpd_target_stats; + /* search path for config files */ const char *syspath = PATH_SYSCONFIG; @@ -361,7 +369,7 @@ snmp_pdu_auth_user(struct snmp_pdu *pdu) * Check whether access to each of var bindings in the PDU is allowed based * on the user credentials against the configured User groups & VACM views. */ -static enum snmp_code +enum snmp_code snmp_pdu_auth_access(struct snmp_pdu *pdu, int32_t *ip) { const char *uname; @@ -1838,14 +1846,14 @@ main(int argc, char *argv[]) exit(1); } - snmp_send_trap(&oid_coldStart, (struct snmp_value *)NULL); - while ((m = TAILQ_FIRST(&modules_start)) != NULL) { m->flags &= ~LM_ONSTARTLIST; TAILQ_REMOVE(&modules_start, m, start); lm_start(m); } + snmp_send_trap(&oid_coldStart, (struct snmp_value *)NULL); + for (;;) { #ifndef USE_LIBBEGEMOT evEvent event; Modified: projects/binutils-2.17/contrib/bsnmp/snmpd/snmpmod.3 ============================================================================== --- projects/binutils-2.17/contrib/bsnmp/snmpd/snmpmod.3 Thu Dec 23 20:23:17 2010 (r216682) +++ projects/binutils-2.17/contrib/bsnmp/snmpd/snmpmod.3 Fri Dec 24 01:37:13 2010 (r216683) @@ -31,7 +31,7 @@ .\" .\" $Begemot: bsnmp/snmpd/snmpmod.3,v 1.14 2005/10/04 13:30:35 brandt_h Exp $ .\" -.Dd September 9, 2010 +.Dd December 19, 2010 .Dt SNMPMOD 3 .Os .Sh NAME @@ -83,6 +83,7 @@ .Nm snmp_output , .Nm snmp_send_port , .Nm snmp_send_trap , +.Nm snmp_pdu_auth_access .Nm string_save , .Nm string_commit , .Nm string_rollback , @@ -102,6 +103,7 @@ .Nm index_compare_off , .Nm index_append , .Nm index_append_off, +.Nm snmpd_usmstats, .Nm bsnmpd_get_usm_stats, .Nm bsnmpd_reset_usm_stats, .Nm usm_first_user, @@ -111,6 +113,25 @@ .Nm usm_delete_user, .Nm usm_flush_users, .Nm usm_user +.Nm snmpd_target_stat +.Nm bsnmpd_get_target_stats +.Nm target_first_address +.Nm target_next_address +.Nm target_new_address +.Nm target_activate_address +.Nm target_delete_address +.Nm target_first_param +.Nm target_next_param +.Nm target_new_param +.Nm target_delete_param +.Nm target_first_notify +.Nm target_next_notify +.Nm target_new_notify +.Nm target_delete_notify +.Nm target_flush_all +.Nm target_address +.Nm target_param +.Nm target_notify .Nd "SNMP daemon loadable module interface" .Sh LIBRARY Begemot SNMP library @@ -201,6 +222,8 @@ Begemot SNMP library .Fc .Ft void .Fn snmp_send_trap "const struct asn_oid *oid" "..." +.Ft enum snmp_code +.Fn snmp_pdu_auth_access "struct snmp_pdu *pdu" "int32_t *ip" .Ft int .Fn string_save "struct snmp_value *val" "struct snmp_context *ctx" "ssize_t req_size" "u_char **strp" .Ft void @@ -239,6 +262,7 @@ Begemot SNMP library .Fn index_append "struct asn_oid *dst" "u_int sub" "const struct asn_oid *src" .Ft void .Fn index_append_off "struct asn_oid *dst" "u_int sub" "const struct asn_oid *src" "u_int off" +.Vt extern struct snmpd_usmstat snmpd_usmstats ; .Ft struct snmpd_usmstat * .Fn bsnmpd_get_usm_stats "void" .Ft void @@ -256,6 +280,36 @@ Begemot SNMP library .Ft void .Fn usm_flush_users "void" .Vt extern struct usm_user *usm_user; +.Ft struct snmpd_target_stats * +.Fn bsnmpd_get_target_stats "void" +.Ft struct target_address * +.Fn target_first_address "void" +.Ft struct target_address * +.Fn target_next_address "struct target_address *" +.Ft struct target_address * +.Fn target_new_address "char *" +.Ft int +.Fn target_activate_address "struct target_address *" +.Ft int +.Fn target_delete_address "struct target_address *" +.Ft struct target_param * +.Fn target_first_param "void" +.Ft struct target_param * +.Fn target_next_param "struct target_param *" +.Ft struct target_param * +.Fn target_new_param "char *" +.Ft int +.Fn target_delete_param "struct target_param *" +.Ft struct target_notify * +.Fn target_first_notify "void" +.Ft struct target_notify * +.Fn target_next_notify "struct target_notify *" +.Ft struct target_notify * +.Fn target_new_notify "char *" +.Ft int +.Fn target_delete_notify "struct target_notify *" +.Ft void +.Fn target_flush_all "void" .Vt extern const struct asn_oid oid_usmUnknownEngineIDs; .Vt extern const struct asn_oid oid_usmNotInTimeWindows; .Sh DESCRIPTION @@ -603,7 +657,7 @@ struct usm_user { struct snmp_user suser; uint8_t user_engine_id[SNMP_ENGINE_ID_SIZ]; uint32_t user_engine_len; - char user_public[SNMP_USM_NAME_SIZ]; + char user_public[SNMP_ADM_STR32_SIZ]; uint32_t user_public_len; int32_t status; int32_t type; @@ -640,6 +694,103 @@ and or .Li NULL if an user with the specified name and engine id is not present in the list. +.Ss THE MANAGEMENT TARGET GROUP +The Management Target group holds target address information used when sending +SNMPv3 notifications. +.Pp +The scalar statistics of the Management Target group are held in the global +variable +.Va snmpd_target_stats : +.Bd -literal -offset indent +struct snmpd_target_stats { + uint32_t unavail_contexts; + uint32_t unknown_contexts; +}; +.Ed +.Fn bsnmpd_get_target_stats +returns a pointer to the global structure containing the statistics. +.Pp +Three global lists of configured management target addresses, parameters and +notifications respectively are maintained by the daemon. +.Bd -literal -offset indent +struct target_address { + char name[SNMP_ADM_STR32_SIZ]; + uint8_t address[SNMP_UDP_ADDR_SIZ]; + int32_t timeout; + int32_t retry; + char taglist[SNMP_TAG_SIZ]; + char paramname[SNMP_ADM_STR32_SIZ]; + int32_t type; + int32_t socket; + int32_t status; + SLIST_ENTRY(target_address) ta; +}; +.Ed +This structure represents a SNMPv3 Management Target address. Each time a SNMP +TRAP is send the daemon will send the Trap to all active Management Target +addresses in its global list. +.Bd -literal -offset indent +struct target_param { + char name[SNMP_ADM_STR32_SIZ]; + int32_t mpmodel; + int32_t sec_model; + char secname[SNMP_ADM_STR32_SIZ]; + enum snmp_usm_level sec_level; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Dec 24 11:07:32 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5ADC8106566B; Fri, 24 Dec 2010 11:07:32 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 475998FC17; Fri, 24 Dec 2010 11:07:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBOB7WvW088904; Fri, 24 Dec 2010 11:07:32 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBOB7W9t088898; Fri, 24 Dec 2010 11:07:32 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012241107.oBOB7W9t088898@svn.freebsd.org> From: Alexander Motin Date: Fri, 24 Dec 2010 11:07:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216688 - in projects/graid/8: . contrib/bsnmp/snmpd contrib/top contrib/xz etc/periodic/daily gnu/usr.bin lib/libusb release/picobsd/floppy.tree/sbin sbin/geom/class/raid sbin/geom/cla... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Dec 2010 11:07:32 -0000 Author: mav Date: Fri Dec 24 11:07:31 2010 New Revision: 216688 URL: http://svn.freebsd.org/changeset/base/216688 Log: MFH r216649, r216666, r216670, r216682 Modified: projects/graid/8/sbin/geom/class/raid/geom_raid.c projects/graid/8/sys/geom/raid/g_raid.c projects/graid/8/sys/geom/raid/g_raid.h projects/graid/8/sys/geom/raid/g_raid_ctl.c projects/graid/8/sys/geom/raid/g_raid_md_if.m projects/graid/8/sys/geom/raid/md_intel.c Directory Properties: projects/graid/8/ (props changed) projects/graid/8/Makefile (props changed) projects/graid/8/Makefile.inc1 (props changed) projects/graid/8/ObsoleteFiles.inc (props changed) projects/graid/8/UPDATING (props changed) projects/graid/8/bin/ (props changed) projects/graid/8/bin/chio/ (props changed) projects/graid/8/bin/chmod/ (props changed) projects/graid/8/bin/cp/ (props changed) projects/graid/8/bin/csh/ (props changed) projects/graid/8/bin/date/ (props changed) projects/graid/8/bin/echo/ (props changed) projects/graid/8/bin/expr/ (props changed) projects/graid/8/bin/getfacl/ (props changed) projects/graid/8/bin/kill/ (props changed) projects/graid/8/bin/ln/ (props changed) projects/graid/8/bin/ls/ (props changed) projects/graid/8/bin/mv/ (props changed) projects/graid/8/bin/pax/ (props changed) projects/graid/8/bin/pkill/ (props changed) projects/graid/8/bin/ps/ (props changed) projects/graid/8/bin/pwait/ (props changed) projects/graid/8/bin/setfacl/ (props changed) projects/graid/8/bin/sh/ (props changed) projects/graid/8/bin/sleep/ (props changed) projects/graid/8/bin/test/ (props changed) projects/graid/8/cddl/compat/opensolaris/ (props changed) projects/graid/8/cddl/contrib/opensolaris/ (props changed) projects/graid/8/cddl/lib/ (props changed) projects/graid/8/cddl/lib/libnvpair/ (props changed) projects/graid/8/cddl/lib/libzpool/ (props changed) projects/graid/8/cddl/usr.bin/ (props changed) projects/graid/8/cddl/usr.sbin/ (props changed) projects/graid/8/contrib/ (props changed) projects/graid/8/contrib/bind9/ (props changed) projects/graid/8/contrib/binutils/ (props changed) projects/graid/8/contrib/bsnmp/ (props changed) projects/graid/8/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/8/contrib/bzip2/ (props changed) projects/graid/8/contrib/com_err/ (props changed) projects/graid/8/contrib/csup/ (props changed) projects/graid/8/contrib/ee/ (props changed) projects/graid/8/contrib/expat/ (props changed) projects/graid/8/contrib/file/ (props changed) projects/graid/8/contrib/gcc/ (props changed) projects/graid/8/contrib/gdb/ (props changed) projects/graid/8/contrib/gdtoa/ (props changed) projects/graid/8/contrib/groff/ (props changed) projects/graid/8/contrib/ipfilter/ (props changed) projects/graid/8/contrib/less/ (props changed) projects/graid/8/contrib/libpcap/ (props changed) projects/graid/8/contrib/ncurses/ (props changed) projects/graid/8/contrib/netcat/ (props changed) projects/graid/8/contrib/ntp/ (props changed) projects/graid/8/contrib/nvi/ (props changed) projects/graid/8/contrib/one-true-awk/ (props changed) projects/graid/8/contrib/openbsm/ (props changed) projects/graid/8/contrib/openpam/ (props changed) projects/graid/8/contrib/pf/ (props changed) projects/graid/8/contrib/sendmail/ (props changed) projects/graid/8/contrib/tcp_wrappers/ (props changed) projects/graid/8/contrib/tcpdump/ (props changed) projects/graid/8/contrib/tcsh/ (props changed) projects/graid/8/contrib/telnet/ (props changed) projects/graid/8/contrib/top/ (props changed) projects/graid/8/contrib/top/install-sh (props changed) projects/graid/8/contrib/traceroute/ (props changed) projects/graid/8/contrib/wpa/ (props changed) projects/graid/8/contrib/xz/ (props changed) projects/graid/8/contrib/xz/AUTHORS (props changed) projects/graid/8/contrib/xz/COPYING (props changed) projects/graid/8/contrib/xz/ChangeLog (props changed) projects/graid/8/contrib/xz/FREEBSD-Xlist (props changed) projects/graid/8/contrib/xz/FREEBSD-upgrade (props changed) projects/graid/8/contrib/xz/README (props changed) projects/graid/8/contrib/xz/THANKS (props changed) projects/graid/8/contrib/xz/TODO (props changed) projects/graid/8/contrib/xz/po/ (props changed) projects/graid/8/contrib/xz/src/ (props changed) projects/graid/8/crypto/heimdal/ (props changed) projects/graid/8/crypto/openssh/ (props changed) projects/graid/8/crypto/openssl/ (props changed) projects/graid/8/etc/ (props changed) projects/graid/8/etc/periodic/daily/ (props changed) projects/graid/8/etc/periodic/daily/800.scrub-zfs (props changed) projects/graid/8/etc/periodic/security/ (props changed) projects/graid/8/games/factor/ (props changed) projects/graid/8/games/fortune/ (props changed) projects/graid/8/games/grdc/ (props changed) projects/graid/8/games/pom/ (props changed) projects/graid/8/gnu/lib/csu/ (props changed) projects/graid/8/gnu/lib/libgcc/ (props changed) projects/graid/8/gnu/lib/libstdc++/ (props changed) projects/graid/8/gnu/usr.bin/ (props changed) projects/graid/8/gnu/usr.bin/Makefile (props changed) projects/graid/8/gnu/usr.bin/dialog/ (props changed) projects/graid/8/gnu/usr.bin/gdb/ (props changed) projects/graid/8/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/8/gnu/usr.bin/groff/ (props changed) projects/graid/8/gnu/usr.bin/patch/ (props changed) projects/graid/8/include/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_krb5/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_spnego/ (props changed) projects/graid/8/kerberos5/usr.bin/kdestroy/ (props changed) projects/graid/8/kerberos5/usr.bin/kpasswd/ (props changed) projects/graid/8/lib/ (props changed) projects/graid/8/lib/bind/ (props changed) projects/graid/8/lib/csu/ (props changed) projects/graid/8/lib/libarchive/ (props changed) projects/graid/8/lib/libbluetooth/ (props changed) projects/graid/8/lib/libc/ (props changed) projects/graid/8/lib/libc/locale/ (props changed) projects/graid/8/lib/libc/stdtime/ (props changed) projects/graid/8/lib/libc/sys/ (props changed) projects/graid/8/lib/libc_r/ (props changed) projects/graid/8/lib/libcam/ (props changed) projects/graid/8/lib/libcompat/ (props changed) projects/graid/8/lib/libdevinfo/ (props changed) projects/graid/8/lib/libdisk/ (props changed) projects/graid/8/lib/libedit/ (props changed) projects/graid/8/lib/libelf/ (props changed) projects/graid/8/lib/libexpat/ (props changed) projects/graid/8/lib/libfetch/ (props changed) projects/graid/8/lib/libgeom/ (props changed) projects/graid/8/lib/libgpib/ (props changed) projects/graid/8/lib/libgssapi/ (props changed) projects/graid/8/lib/libjail/ (props changed) projects/graid/8/lib/libkse/ (props changed) projects/graid/8/lib/libkvm/ (props changed) projects/graid/8/lib/liblzma/ (props changed) projects/graid/8/lib/libmagic/ (props changed) projects/graid/8/lib/libmemstat/ (props changed) projects/graid/8/lib/libpam/ (props changed) projects/graid/8/lib/libpmc/ (props changed) projects/graid/8/lib/libproc/ (props changed) projects/graid/8/lib/libradius/ (props changed) projects/graid/8/lib/librpcsec_gss/ (props changed) projects/graid/8/lib/librtld_db/ (props changed) projects/graid/8/lib/libsm/ (props changed) projects/graid/8/lib/libstand/ (props changed) projects/graid/8/lib/libtacplus/ (props changed) projects/graid/8/lib/libthr/ (props changed) projects/graid/8/lib/libthread_db/ (props changed) projects/graid/8/lib/libufs/ (props changed) projects/graid/8/lib/libugidfw/ (props changed) projects/graid/8/lib/libusb/ (props changed) projects/graid/8/lib/libusb/usb.h (props changed) projects/graid/8/lib/libusbhid/ (props changed) projects/graid/8/lib/libutil/ (props changed) projects/graid/8/lib/libz/ (props changed) projects/graid/8/lib/libz/contrib/ (props changed) projects/graid/8/lib/msun/ (props changed) projects/graid/8/libexec/ (props changed) projects/graid/8/libexec/ftpd/ (props changed) projects/graid/8/libexec/rtld-elf/ (props changed) projects/graid/8/libexec/tftpd/ (props changed) projects/graid/8/release/ (props changed) projects/graid/8/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/8/release/picobsd/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/dhclient-script (props changed) projects/graid/8/release/picobsd/qemu/ (props changed) projects/graid/8/release/picobsd/tinyware/login/ (props changed) projects/graid/8/release/powerpc/ (props changed) projects/graid/8/sbin/ (props changed) projects/graid/8/sbin/atacontrol/ (props changed) projects/graid/8/sbin/bsdlabel/ (props changed) projects/graid/8/sbin/camcontrol/ (props changed) projects/graid/8/sbin/ddb/ (props changed) projects/graid/8/sbin/devd/ (props changed) projects/graid/8/sbin/devfs/ (props changed) projects/graid/8/sbin/dhclient/ (props changed) projects/graid/8/sbin/dump/ (props changed) projects/graid/8/sbin/dumpfs/ (props changed) projects/graid/8/sbin/fdisk/ (props changed) projects/graid/8/sbin/fsck/ (props changed) projects/graid/8/sbin/fsck_ffs/ (props changed) projects/graid/8/sbin/fsck_msdosfs/ (props changed) projects/graid/8/sbin/fsirand/ (props changed) projects/graid/8/sbin/geom/ (props changed) projects/graid/8/sbin/geom/class/multipath/ (props changed) projects/graid/8/sbin/geom/class/part/ (props changed) projects/graid/8/sbin/geom/class/sched/gsched.8 (props changed) projects/graid/8/sbin/geom/class/stripe/ (props changed) projects/graid/8/sbin/ggate/ (props changed) projects/graid/8/sbin/growfs/ (props changed) projects/graid/8/sbin/hastctl/ (props changed) projects/graid/8/sbin/hastd/ (props changed) projects/graid/8/sbin/ifconfig/ (props changed) projects/graid/8/sbin/ipfw/ (props changed) projects/graid/8/sbin/iscontrol/ (props changed) projects/graid/8/sbin/kldload/ (props changed) projects/graid/8/sbin/kldstat/ (props changed) projects/graid/8/sbin/mdconfig/ (props changed) projects/graid/8/sbin/mksnap_ffs/ (props changed) projects/graid/8/sbin/mount/ (props changed) projects/graid/8/sbin/mount_cd9660/ (props changed) projects/graid/8/sbin/mount_msdosfs/ (props changed) projects/graid/8/sbin/mount_nfs/ (props changed) projects/graid/8/sbin/natd/ (props changed) projects/graid/8/sbin/newfs/ (props changed) projects/graid/8/sbin/newfs_msdos/ (props changed) projects/graid/8/sbin/ping6/ (props changed) projects/graid/8/sbin/reboot/ (props changed) projects/graid/8/sbin/restore/ (props changed) projects/graid/8/sbin/routed/ (props changed) projects/graid/8/sbin/setkey/ (props changed) projects/graid/8/sbin/spppcontrol/ (props changed) projects/graid/8/sbin/sysctl/ (props changed) projects/graid/8/sbin/tunefs/ (props changed) projects/graid/8/sbin/umount/ (props changed) projects/graid/8/secure/ (props changed) projects/graid/8/secure/lib/libcrypto/ (props changed) projects/graid/8/secure/lib/libssl/ (props changed) projects/graid/8/secure/usr.bin/bdes/ (props changed) projects/graid/8/secure/usr.bin/openssl/ (props changed) projects/graid/8/share/dict/ (props changed) projects/graid/8/share/doc/papers/jail/ (props changed) projects/graid/8/share/doc/smm/01.setup/ (props changed) projects/graid/8/share/examples/ (props changed) projects/graid/8/share/examples/etc/ (props changed) projects/graid/8/share/examples/kld/syscall/ (props changed) projects/graid/8/share/man/ (props changed) projects/graid/8/share/man/man1/ (props changed) projects/graid/8/share/man/man3/ (props changed) projects/graid/8/share/man/man4/ (props changed) projects/graid/8/share/man/man5/ (props changed) projects/graid/8/share/man/man7/ (props changed) projects/graid/8/share/man/man8/ (props changed) projects/graid/8/share/man/man9/ (props changed) projects/graid/8/share/misc/ (props changed) projects/graid/8/share/mk/ (props changed) projects/graid/8/share/syscons/ (props changed) projects/graid/8/share/termcap/ (props changed) projects/graid/8/share/timedef/ (props changed) projects/graid/8/share/zoneinfo/ (props changed) projects/graid/8/sys/ (props changed) projects/graid/8/sys/amd64/include/xen/ (props changed) projects/graid/8/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/8/sys/contrib/dev/acpica/ (props changed) projects/graid/8/sys/contrib/pf/ (props changed) projects/graid/8/tools/ (props changed) projects/graid/8/tools/build/mk/ (props changed) projects/graid/8/tools/build/options/ (props changed) projects/graid/8/tools/debugscripts/ (props changed) projects/graid/8/tools/kerneldoc/subsys/ (props changed) projects/graid/8/tools/regression/acltools/ (props changed) projects/graid/8/tools/regression/aio/aiotest/ (props changed) projects/graid/8/tools/regression/bin/ (props changed) projects/graid/8/tools/regression/bin/sh/ (props changed) projects/graid/8/tools/regression/fifo/ (props changed) projects/graid/8/tools/regression/geom/ (props changed) projects/graid/8/tools/regression/lib/libc/ (props changed) projects/graid/8/tools/regression/lib/msun/test-conj.t (props changed) projects/graid/8/tools/regression/mqueue/mqtest1/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest2/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest3/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest4/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest5/ (props changed) projects/graid/8/tools/regression/poll/ (props changed) projects/graid/8/tools/regression/posixsem/ (props changed) projects/graid/8/tools/regression/priv/ (props changed) projects/graid/8/tools/regression/sockets/unix_gc/ (props changed) projects/graid/8/tools/regression/usr.bin/ (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_s.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pkill-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/sed/ (props changed) projects/graid/8/tools/regression/usr.bin/tr/ (props changed) projects/graid/8/tools/test/ (props changed) projects/graid/8/tools/tools/ (props changed) projects/graid/8/tools/tools/ath/ (props changed) projects/graid/8/tools/tools/ath/common/dumpregs.h (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5210.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5211.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5212.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5416.c (props changed) projects/graid/8/tools/tools/nanobsd/ (props changed) projects/graid/8/tools/tools/netrate/ (props changed) projects/graid/8/tools/tools/netrate/tcpp/ (props changed) projects/graid/8/tools/tools/termcap/termcap.pl (props changed) projects/graid/8/tools/tools/umastat/ (props changed) projects/graid/8/tools/tools/vimage/ (props changed) projects/graid/8/usr.bin/ (props changed) projects/graid/8/usr.bin/apply/ (props changed) projects/graid/8/usr.bin/ar/ (props changed) projects/graid/8/usr.bin/awk/ (props changed) projects/graid/8/usr.bin/biff/ (props changed) projects/graid/8/usr.bin/c89/ (props changed) projects/graid/8/usr.bin/c99/ (props changed) projects/graid/8/usr.bin/calendar/ (props changed) projects/graid/8/usr.bin/catman/ (props changed) projects/graid/8/usr.bin/column/ (props changed) projects/graid/8/usr.bin/comm/ (props changed) projects/graid/8/usr.bin/cpio/ (props changed) projects/graid/8/usr.bin/csup/ (props changed) projects/graid/8/usr.bin/du/ (props changed) projects/graid/8/usr.bin/ee/ (props changed) projects/graid/8/usr.bin/enigma/ (props changed) projects/graid/8/usr.bin/fetch/ (props changed) projects/graid/8/usr.bin/find/ (props changed) projects/graid/8/usr.bin/finger/ (props changed) projects/graid/8/usr.bin/fold/ (props changed) projects/graid/8/usr.bin/fstat/ (props changed) projects/graid/8/usr.bin/gcore/ (props changed) projects/graid/8/usr.bin/getopt/ (props changed) projects/graid/8/usr.bin/gzip/ (props changed) projects/graid/8/usr.bin/hexdump/ (props changed) projects/graid/8/usr.bin/indent/ (props changed) projects/graid/8/usr.bin/jot/ (props changed) projects/graid/8/usr.bin/kdump/ (props changed) projects/graid/8/usr.bin/killall/ (props changed) projects/graid/8/usr.bin/ktrace/ (props changed) projects/graid/8/usr.bin/ldd/ (props changed) projects/graid/8/usr.bin/lex/ (props changed) projects/graid/8/usr.bin/locale/ (props changed) projects/graid/8/usr.bin/locate/ (props changed) projects/graid/8/usr.bin/lockf/ (props changed) projects/graid/8/usr.bin/look/ (props changed) projects/graid/8/usr.bin/mail/ (props changed) projects/graid/8/usr.bin/make/ (props changed) projects/graid/8/usr.bin/makewhatis/ (props changed) projects/graid/8/usr.bin/minigzip/ (props changed) projects/graid/8/usr.bin/ncal/ (props changed) projects/graid/8/usr.bin/netstat/ (props changed) projects/graid/8/usr.bin/pathchk/ (props changed) projects/graid/8/usr.bin/perror/ (props changed) projects/graid/8/usr.bin/procstat/ (props changed) projects/graid/8/usr.bin/rpcgen/ (props changed) projects/graid/8/usr.bin/ruptime/ (props changed) projects/graid/8/usr.bin/script/ (props changed) projects/graid/8/usr.bin/sed/ (props changed) projects/graid/8/usr.bin/sockstat/ (props changed) projects/graid/8/usr.bin/split/ (props changed) projects/graid/8/usr.bin/stat/ (props changed) projects/graid/8/usr.bin/systat/ (props changed) projects/graid/8/usr.bin/tar/ (props changed) projects/graid/8/usr.bin/tftp/ (props changed) projects/graid/8/usr.bin/top/ (props changed) projects/graid/8/usr.bin/touch/ (props changed) projects/graid/8/usr.bin/tr/ (props changed) projects/graid/8/usr.bin/truss/ (props changed) projects/graid/8/usr.bin/uname/ (props changed) projects/graid/8/usr.bin/unifdef/ (props changed) projects/graid/8/usr.bin/uniq/ (props changed) projects/graid/8/usr.bin/unzip/ (props changed) projects/graid/8/usr.bin/uudecode/ (props changed) projects/graid/8/usr.bin/vmstat/ (props changed) projects/graid/8/usr.bin/w/ (props changed) projects/graid/8/usr.bin/whois/ (props changed) projects/graid/8/usr.bin/xinstall/ (props changed) projects/graid/8/usr.bin/xlint/ (props changed) projects/graid/8/usr.bin/xz/ (props changed) projects/graid/8/usr.bin/yacc/ (props changed) projects/graid/8/usr.sbin/ (props changed) projects/graid/8/usr.sbin/Makefile (props changed) projects/graid/8/usr.sbin/acpi/ (props changed) projects/graid/8/usr.sbin/arp/ (props changed) projects/graid/8/usr.sbin/asf/ (props changed) projects/graid/8/usr.sbin/bluetooth/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidcontrol/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidd/ (props changed) projects/graid/8/usr.sbin/boot0cfg/ (props changed) projects/graid/8/usr.sbin/bsnmpd/ (props changed) projects/graid/8/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/8/usr.sbin/burncd/ (props changed) projects/graid/8/usr.sbin/cdcontrol/ (props changed) projects/graid/8/usr.sbin/chown/ (props changed) projects/graid/8/usr.sbin/config/ (props changed) projects/graid/8/usr.sbin/config/SMM.doc/ (props changed) projects/graid/8/usr.sbin/cpucontrol/ (props changed) projects/graid/8/usr.sbin/crashinfo/ (props changed) projects/graid/8/usr.sbin/cron/ (props changed) projects/graid/8/usr.sbin/crunch/examples/ (props changed) projects/graid/8/usr.sbin/ctm/ (props changed) projects/graid/8/usr.sbin/cxgbtool/ (props changed) projects/graid/8/usr.sbin/devinfo/ (props changed) projects/graid/8/usr.sbin/diskinfo/ (props changed) projects/graid/8/usr.sbin/dumpcis/cardinfo.h (props changed) projects/graid/8/usr.sbin/dumpcis/cis.h (props changed) projects/graid/8/usr.sbin/faithd/ (props changed) projects/graid/8/usr.sbin/fdcontrol/ (props changed) projects/graid/8/usr.sbin/fdformat/ (props changed) projects/graid/8/usr.sbin/fdread/ (props changed) projects/graid/8/usr.sbin/fdwrite/ (props changed) projects/graid/8/usr.sbin/fifolog/ (props changed) projects/graid/8/usr.sbin/flowctl/ (props changed) projects/graid/8/usr.sbin/freebsd-update/ (props changed) projects/graid/8/usr.sbin/i2c/ (props changed) projects/graid/8/usr.sbin/inetd/ (props changed) projects/graid/8/usr.sbin/iostat/ (props changed) projects/graid/8/usr.sbin/jail/ (props changed) projects/graid/8/usr.sbin/jls/ (props changed) projects/graid/8/usr.sbin/lpr/ (props changed) projects/graid/8/usr.sbin/mailwrapper/ (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/8/usr.sbin/makefs/getid.c (props changed) projects/graid/8/usr.sbin/mergemaster/ (props changed) projects/graid/8/usr.sbin/mfiutil/ (props changed) projects/graid/8/usr.sbin/mountd/ (props changed) projects/graid/8/usr.sbin/moused/ (props changed) projects/graid/8/usr.sbin/mptutil/ (props changed) projects/graid/8/usr.sbin/mtest/ (props changed) projects/graid/8/usr.sbin/mtree/ (props changed) projects/graid/8/usr.sbin/named/ (props changed) projects/graid/8/usr.sbin/ndp/ (props changed) projects/graid/8/usr.sbin/newsyslog/ (props changed) projects/graid/8/usr.sbin/nfsdumpstate/ (props changed) projects/graid/8/usr.sbin/ntp/ (props changed) projects/graid/8/usr.sbin/pciconf/ (props changed) projects/graid/8/usr.sbin/periodic/ (props changed) projects/graid/8/usr.sbin/pkg_install/ (props changed) projects/graid/8/usr.sbin/pmcannotate/ (props changed) projects/graid/8/usr.sbin/pmccontrol/ (props changed) projects/graid/8/usr.sbin/pmcstat/ (props changed) projects/graid/8/usr.sbin/powerd/ (props changed) projects/graid/8/usr.sbin/ppp/ (props changed) projects/graid/8/usr.sbin/pppctl/ (props changed) projects/graid/8/usr.sbin/pstat/ (props changed) projects/graid/8/usr.sbin/rpc.lockd/ (props changed) projects/graid/8/usr.sbin/rpc.umntall/ (props changed) projects/graid/8/usr.sbin/rtadvd/ (props changed) projects/graid/8/usr.sbin/rtsold/ (props changed) projects/graid/8/usr.sbin/sade/ (props changed) projects/graid/8/usr.sbin/service/ (props changed) projects/graid/8/usr.sbin/services_mkdb/ (props changed) projects/graid/8/usr.sbin/setfmac/ (props changed) projects/graid/8/usr.sbin/setpmac/ (props changed) projects/graid/8/usr.sbin/smbmsg/ (props changed) projects/graid/8/usr.sbin/sysinstall/ (props changed) projects/graid/8/usr.sbin/syslogd/ (props changed) projects/graid/8/usr.sbin/traceroute/ (props changed) projects/graid/8/usr.sbin/traceroute6/ (props changed) projects/graid/8/usr.sbin/uathload/ (props changed) projects/graid/8/usr.sbin/ugidfw/ (props changed) projects/graid/8/usr.sbin/uhsoctl/ (props changed) projects/graid/8/usr.sbin/usbconfig/ (props changed) projects/graid/8/usr.sbin/vidcontrol/ (props changed) projects/graid/8/usr.sbin/watchdogd/ (props changed) projects/graid/8/usr.sbin/wpa/ (props changed) projects/graid/8/usr.sbin/ypserv/ (props changed) projects/graid/8/usr.sbin/zic/ (props changed) Modified: projects/graid/8/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/8/sbin/geom/class/raid/geom_raid.c Fri Dec 24 07:41:39 2010 (r216687) +++ projects/graid/8/sbin/geom/class/raid/geom_raid.c Fri Dec 24 11:07:31 2010 (r216688) @@ -1,5 +1,4 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek * Copyright (c) 2010 Alexander Motin * All rights reserved. * @@ -49,81 +48,19 @@ uint32_t version = G_RAID_VERSION; #define GRAID_SLICE "4096" #define GRAID_PRIORITY "0" -#if 0 -static void raid_main(struct gctl_req *req, unsigned flags); -static void raid_activate(struct gctl_req *req); -static void raid_clear(struct gctl_req *req); -static void raid_dump(struct gctl_req *req); -static void raid_label(struct gctl_req *req); -#endif +//static void raid_main(struct gctl_req *req, unsigned flags); struct g_command class_commands[] = { -/* - { "activate", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "clear", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] prov ..." - }, - { "configure", G_FLAG_VERBOSE, NULL, - { - { 'a', "autosync", NULL, G_TYPE_BOOL }, - { 'b', "balance", "", G_TYPE_STRING }, - { 'd', "dynamic", NULL, G_TYPE_BOOL }, - { 'f', "failsync", NULL, G_TYPE_BOOL }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 'p', "priority", "-1", G_TYPE_NUMBER }, - { 's', "slice", "-1", G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-adfFhnv] [-b balance] [-s slice] name\n" - "[-v] -p priority name prov" - }, - { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "dump", 0, raid_main, G_NULL_OPTS, - "prov ..." - }, - { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "name ..." - }, - { "label", G_FLAG_VERBOSE, raid_main, - { - { 'b', "balance", GRAID_BALANCE, G_TYPE_STRING }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 's', "slice", GRAID_SLICE, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-Fhnv] [-b balance] [-s slice] name prov ..." - }, - { "insert", G_FLAG_VERBOSE, NULL, - { - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'i', "inactive", NULL, G_TYPE_BOOL }, - { 'p', "priority", GRAID_PRIORITY, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-hiv] [-p priority] name prov ..." - }, - { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." + { "label", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, + "format name level prov ..." }, { "stop", G_FLAG_VERBOSE, NULL, { { 'f', "force", NULL, G_TYPE_BOOL }, G_OPT_SENTINEL }, - "[-fv] name ..." + NULL, "[-fv] name ..." }, -*/ G_CMD_SENTINEL }; @@ -143,7 +80,6 @@ raid_main(struct gctl_req *req, unsigned gctl_error(req, "No '%s' argument.", "verb"); return; } -#if 0 if (strcmp(name, "label") == 0) raid_label(req); else if (strcmp(name, "clear") == 0) @@ -153,235 +89,7 @@ raid_main(struct gctl_req *req, unsigned else if (strcmp(name, "activate") == 0) raid_activate(req); else -#endif gctl_error(req, "Unknown command: %s.", name); } - -static void -raid_label(struct gctl_req *req) -{ - struct g_raid_metadata md; - u_char sector[512]; - const char *str; - unsigned sectorsize; - off_t mediasize; - intmax_t val; - int error, i, nargs, bal, hardcode; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - - strlcpy(md.md_magic, G_RAID_MAGIC, sizeof(md.md_magic)); - md.md_version = G_RAID_VERSION; - str = gctl_get_ascii(req, "arg0"); - strlcpy(md.md_name, str, sizeof(md.md_name)); - md.md_mid = arc4random(); - md.md_all = nargs - 1; - md.md_mflags = 0; - md.md_dflags = 0; - md.md_genid = 0; - md.md_syncid = 1; - md.md_sync_offset = 0; - val = gctl_get_intmax(req, "slice"); - md.md_slice = val; - str = gctl_get_ascii(req, "balance"); - bal = balance_id(str); - if (bal == -1) { - gctl_error(req, "Invalid balance algorithm."); - return; - } - md.md_balance = bal; - if (gctl_get_int(req, "noautosync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - if (gctl_get_int(req, "nofailsync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - hardcode = gctl_get_int(req, "hardcode"); - - /* - * Calculate sectorsize by finding least common multiple from - * sectorsizes of every disk and find the smallest mediasize. - */ - mediasize = 0; - sectorsize = 0; - for (i = 1; i < nargs; i++) { - unsigned ssize; - off_t msize; - - str = gctl_get_ascii(req, "arg%d", i); - msize = g_get_mediasize(str); - ssize = g_get_sectorsize(str); - if (msize == 0 || ssize == 0) { - gctl_error(req, "Can't get informations about %s: %s.", - str, strerror(errno)); - return; - } - msize -= ssize; - if (mediasize == 0 || (mediasize > 0 && msize < mediasize)) - mediasize = msize; - if (sectorsize == 0) - sectorsize = ssize; - else - sectorsize = g_lcm(sectorsize, ssize); - } - md.md_mediasize = mediasize; - md.md_sectorsize = sectorsize; - md.md_mediasize -= (md.md_mediasize % md.md_sectorsize); - - /* - * Clear last sector first, to spoil all components if device exists. - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(str, NULL); - if (error != 0) { - gctl_error(req, "Can't store metadata on %s: %s.", str, - strerror(error)); - return; - } - } - - /* - * Ok, store metadata (use disk number as priority). - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - md.md_did = arc4random(); - md.md_priority = i - 1; - md.md_provsize = g_get_mediasize(str); - assert(md.md_provsize != 0); - if (!hardcode) - bzero(md.md_provider, sizeof(md.md_provider)); - else { - if (strncmp(str, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) - str += sizeof(_PATH_DEV) - 1; - strlcpy(md.md_provider, str, sizeof(md.md_provider)); - } - raid_metadata_encode(&md, sector); - error = g_metadata_store(str, sector, sizeof(sector)); - if (error != 0) { - fprintf(stderr, "Can't store metadata on %s: %s.\n", - str, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata value stored on %s.\n", str); - } -} - -static void -raid_clear(struct gctl_req *req) -{ - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(name, G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't clear metadata on %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata cleared on %s.\n", name); - } -} - -static void -raid_dump(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(name, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't read metadata from %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, "MD5 hash mismatch for %s, skipping.\n", - name); - gctl_error(req, "Not fully done."); - continue; - } - printf("Metadata on %s:\n", name); - raid_metadata_dump(&md); - printf("\n"); - } -} - -static void -raid_activate(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name, *path; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_ascii(req, "arg0"); - - for (i = 1; i < nargs; i++) { - path = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(path, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Cannot read metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, - "MD5 hash mismatch for provider %s, skipping.\n", - path); - gctl_error(req, "Not fully done."); - continue; - } - if (strcmp(md.md_name, name) != 0) { - fprintf(stderr, - "Provider %s is not the raid %s component.\n", - path, name); - gctl_error(req, "Not fully done."); - continue; - } - md.md_dflags &= ~G_RAID_DISK_FLAG_INACTIVE; - raid_metadata_encode(&md, (u_char *)&tmpmd); - error = g_metadata_store(path, (u_char *)&tmpmd, sizeof(tmpmd)); - if (error != 0) { - fprintf(stderr, "Cannot write metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Provider %s activated.\n", path); - } -} #endif + Modified: projects/graid/8/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.c Fri Dec 24 07:41:39 2010 (r216687) +++ projects/graid/8/sys/geom/raid/g_raid.c Fri Dec 24 11:07:31 2010 (r216688) @@ -55,7 +55,7 @@ u_int g_raid_debug = 1000; TUNABLE_INT("kern.geom.raid.debug", &g_raid_debug); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, debug, CTLFLAG_RW, &g_raid_debug, 0, "Debug level"); -static u_int g_raid_start_timeout = 4; +u_int g_raid_start_timeout = 4; TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout, 0, "Time to wait on all mirror components"); @@ -92,7 +92,7 @@ static void g_raid_fini(struct g_class * struct g_class g_raid_class = { .name = G_RAID_CLASS_NAME, .version = G_VERSION, - .ctlreq = g_raid_config, + .ctlreq = g_raid_ctl, .taste = g_raid_taste, .destroy_geom = g_raid_destroy_geom, .init = g_raid_init, @@ -122,6 +122,8 @@ g_raid_disk_state2str(int state) return ("SPARE"); case G_RAID_DISK_S_OFFLINE: return ("OFFLINE"); + case G_RAID_DISK_S_STALE: + return ("STALE"); default: return ("INVALID"); } @@ -217,7 +219,7 @@ g_raid_volume_event2str(int event) } } -static const char * +const char * g_raid_volume_level2str(int level, int qual) { @@ -251,6 +253,41 @@ g_raid_volume_level2str(int level, int q } } +int +g_raid_volume_str2level(const char *str, int *level, int *qual) +{ + + *level = G_RAID_VOLUME_RL_UNKNOWN; + *qual = G_RAID_VOLUME_RLQ_NONE; + if (strcasecmp(str, "RAID0") == 0) + *level = G_RAID_VOLUME_RL_RAID0; + else if (strcasecmp(str, "RAID1") == 0) + *level = G_RAID_VOLUME_RL_RAID1; + else if (strcasecmp(str, "RAID3") == 0) + *level = G_RAID_VOLUME_RL_RAID3; + else if (strcasecmp(str, "RAID4") == 0) + *level = G_RAID_VOLUME_RL_RAID4; + else if (strcasecmp(str, "RAID5") == 0) + *level = G_RAID_VOLUME_RL_RAID5; + else if (strcasecmp(str, "RAID6") == 0) + *level = G_RAID_VOLUME_RL_RAID6; + else if (strcasecmp(str, "RAID10") == 0) + *level = G_RAID_VOLUME_RL_RAID10; + else if (strcasecmp(str, "RAID1E") == 0) + *level = G_RAID_VOLUME_RL_RAID1E; + else if (strcasecmp(str, "SINGLE") == 0) + *level = G_RAID_VOLUME_RL_SINGLE; + else if (strcasecmp(str, "CONCAT") == 0) + *level = G_RAID_VOLUME_RL_CONCAT; + else if (strcasecmp(str, "RAID5E") == 0) + *level = G_RAID_VOLUME_RL_RAID5E; + else if (strcasecmp(str, "RAID5EE") == 0) + *level = G_RAID_VOLUME_RL_RAID5EE; + else + return (-1); + return (0); +} + static const char * g_raid_get_diskname(struct g_raid_disk *disk) { @@ -1231,12 +1268,15 @@ g_raid_destroy_node(struct g_raid_softc kobj_delete((kobj_t)sc->sc_md, M_RAID); sc->sc_md = NULL; } - G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); - g_topology_lock(); - sc->sc_geom->softc = NULL; - g_wither_geom(sc->sc_geom, ENXIO); - g_topology_unlock(); - sc->sc_geom = NULL; + if (sc->sc_geom != NULL) { + G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); + g_topology_lock(); + sc->sc_geom->softc = NULL; + g_wither_geom(sc->sc_geom, ENXIO); + g_topology_unlock(); + sc->sc_geom = NULL; + } else + G_RAID_DEBUG(1, "Destroying node."); if (worker) { mtx_destroy(&sc->sc_queue_mtx); sx_xunlock(&sc->sc_lock); @@ -1297,12 +1337,13 @@ g_raid_destroy_volume(struct g_raid_volu } int -g_raid_stop_disk(struct g_raid_disk *disk) +g_raid_destroy_disk(struct g_raid_disk *disk) { struct g_raid_softc *sc; struct g_raid_subdisk *sd, *tmp; sc = disk->d_softc; + G_RAID_DEBUG(2, "Destroying disk."); if (disk->d_consumer) { g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); @@ -1315,21 +1356,9 @@ g_raid_stop_disk(struct g_raid_disk *dis LIST_REMOVE(sd, sd_next); sd->sd_disk = NULL; } - return (0); -} - -int -g_raid_destroy_disk(struct g_raid_disk *disk) -{ - struct g_raid_softc *sc; - int error; - - sc = disk->d_softc; - G_RAID_DEBUG(2, "Destroying disk."); - error = g_raid_stop_disk(disk); - if (error) - return (error); LIST_REMOVE(disk, d_next); + if (sc->sc_md) + G_RAID_MD_FREE_DISK(sc->sc_md, disk); free(disk, M_RAID); return (0); } @@ -1432,6 +1461,31 @@ g_raid_taste(struct g_class *mp, struct return (geom); } +int +g_raid_create_node_format(const char *format, struct g_geom **gp) +{ + struct g_raid_md_class *class; + struct g_raid_md_object *obj; + int status; + + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + LIST_FOREACH(class, &g_raid_md_classes, mdc_list) { + if (strcasecmp(class->name, format) == 0) + break; + } + if (class == NULL) { + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + return (G_RAID_MD_TASTE_FAIL); + } + obj = (void *)kobj_create((kobj_class_t)class, M_RAID, + M_WAITOK); + obj->mdo_class = class; + status = G_RAID_MD_CREATE(obj, &g_raid_class, gp); + if (status != G_RAID_MD_TASTE_NEW) + kobj_delete((kobj_t)obj, M_RAID); + return (status); +} + static int g_raid_destroy_geom(struct gctl_req *req __unused, struct g_class *mp __unused, struct g_geom *gp) Modified: projects/graid/8/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.h Fri Dec 24 07:41:39 2010 (r216687) +++ projects/graid/8/sys/geom/raid/g_raid.h Fri Dec 24 11:07:31 2010 (r216688) @@ -58,6 +58,7 @@ struct g_raid_tr_object; #ifdef _KERNEL extern u_int g_raid_debug; +extern u_int g_raid_start_timeout; #define G_RAID_DEBUG(lvl, fmt, ...) do { \ if (g_raid_debug >= (lvl)) { \ @@ -101,6 +102,7 @@ struct g_raid_event { #define G_RAID_DISK_S_ACTIVE 0x01 #define G_RAID_DISK_S_SPARE 0x02 #define G_RAID_DISK_S_OFFLINE 0x03 +#define G_RAID_DISK_S_STALE 0x04 #define G_RAID_DISK_E_DISCONNECTED 0x01 @@ -276,18 +278,18 @@ int g_raid_tr_modevent(module_t, int, vo }; \ DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) +const char * g_raid_volume_level2str(int level, int qual); +int g_raid_volume_str2level(const char *str, int *level, int *qual); + struct g_raid_softc * g_raid_create_node(struct g_class *mp, const char *name, struct g_raid_md_object *md); +int g_raid_create_node_format(const char *format, struct g_geom **gp); struct g_raid_volume * g_raid_create_volume(struct g_raid_softc *sc, const char *name); struct g_raid_disk * g_raid_create_disk(struct g_raid_softc *sc); int g_raid_start_volume(struct g_raid_volume *vol); -int g_raid_stop_node(struct g_raid_softc *sc); -int g_raid_stop_volume(struct g_raid_volume *vol); -int g_raid_stop_disk(struct g_raid_disk *disk); - int g_raid_destroy_node(struct g_raid_softc *sc, int worker); int g_raid_destroy_volume(struct g_raid_volume *vol); int g_raid_destroy_disk(struct g_raid_disk *disk); @@ -309,7 +311,7 @@ u_int g_raid_nsubdisks(struct g_raid_vol int g_raid_destroy(struct g_raid_softc *sc, int how); int g_raid_event_send(void *arg, int event, int flags); -g_ctl_req_t g_raid_config; +g_ctl_req_t g_raid_ctl; #endif /* _KERNEL */ #endif /* !_G_RAID_H_ */ Modified: projects/graid/8/sys/geom/raid/g_raid_ctl.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid_ctl.c Fri Dec 24 07:41:39 2010 (r216687) +++ projects/graid/8/sys/geom/raid/g_raid_ctl.c Fri Dec 24 11:07:31 2010 (r216688) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek + * Copyright (c) 2010 Alexander Motin * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -43,547 +43,149 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include "g_raid_md_if.h" -#if 0 static struct g_raid_softc * -g_raid_find_device(struct g_class *mp, const char *name) +g_raid_find_node(struct g_class *mp, const char *name) { struct g_raid_softc *sc; struct g_geom *gp; - g_topology_lock(); LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; if (sc == NULL) continue; if (sc->sc_stopping != 0) continue; - if (strcmp(gp->name, name) == 0 || - strcmp(sc->sc_name, name) == 0) { - g_topology_unlock(); - sx_xlock(&sc->sc_lock); + if (strcasecmp(sc->sc_name, name) == 0) return (sc); - } - } - g_topology_unlock(); - return (NULL); -} - -static struct g_raid_disk * -g_raid_find_disk(struct g_raid_softc *sc, const char *name) -{ - struct g_raid_disk *disk; - - sx_assert(&sc->sc_lock, SX_XLOCKED); - if (strncmp(name, "/dev/", 5) == 0) - name += 5; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - if (disk->d_consumer == NULL) - continue; - if (disk->d_consumer->provider == NULL) - continue; - if (strcmp(disk->d_consumer->provider->name, name) == 0) - return (disk); } return (NULL); } static void -g_raid_ctl_configure(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_label(struct gctl_req *req, struct g_class *mp) { + struct g_geom *geom; struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name, *balancep, *prov; - intmax_t *slicep, *priority; - uint32_t slice; - uint8_t balance; - int *autosync, *noautosync, *failsync, *nofailsync, *hardcode, *dynamic; - int *nargs, do_sync = 0, dirty = 1, do_priority = 0; + const char *format; + int *nargs; + int crstatus, ctlstatus; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs != 1 && *nargs != 2) { - gctl_error(req, "Invalid number of arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); - return; - } - balancep = gctl_get_asciiparam(req, "balance"); - if (balancep == NULL) { - gctl_error(req, "No '%s' argument.", "balance"); - return; - } - autosync = gctl_get_paraml(req, "autosync", sizeof(*autosync)); - if (autosync == NULL) { - gctl_error(req, "No '%s' argument.", "autosync"); - return; - } - noautosync = gctl_get_paraml(req, "noautosync", sizeof(*noautosync)); - if (noautosync == NULL) { - gctl_error(req, "No '%s' argument.", "noautosync"); - return; - } - failsync = gctl_get_paraml(req, "failsync", sizeof(*failsync)); - if (failsync == NULL) { - gctl_error(req, "No '%s' argument.", "failsync"); - return; - } - nofailsync = gctl_get_paraml(req, "nofailsync", sizeof(*nofailsync)); - if (nofailsync == NULL) { - gctl_error(req, "No '%s' argument.", "nofailsync"); - return; - } - hardcode = gctl_get_paraml(req, "hardcode", sizeof(*hardcode)); - if (hardcode == NULL) { - gctl_error(req, "No '%s' argument.", "hardcode"); - return; - } - dynamic = gctl_get_paraml(req, "dynamic", sizeof(*dynamic)); - if (dynamic == NULL) { - gctl_error(req, "No '%s' argument.", "dynamic"); - return; - } - priority = gctl_get_paraml(req, "priority", sizeof(*priority)); - if (priority == NULL) { - gctl_error(req, "No '%s' argument.", "priority"); - return; - } - if (*priority < -1 || *priority > 255) { - gctl_error(req, "Priority range is 0 to 255, %jd given", - *priority); - return; - } - /* - * Since we have a priority, we also need a provider now. - * Note: be WARNS safe, by always assigning prov and only throw an - * error if *priority != -1. - */ - prov = gctl_get_asciiparam(req, "arg1"); - if (*priority > -1) { - if (prov == NULL) { - gctl_error(req, "Priority needs a disk name"); - return; - } - do_priority = 1; - } - if (*autosync && *noautosync) { - gctl_error(req, "'%s' and '%s' specified.", "autosync", - "noautosync"); - return; - } - if (*failsync && *nofailsync) { - gctl_error(req, "'%s' and '%s' specified.", "failsync", - "nofailsync"); - return; - } - if (*hardcode && *dynamic) { - gctl_error(req, "'%s' and '%s' specified.", "hardcode", - "dynamic"); - return; - } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); - return; - } - if (*balancep == '\0') - balance = sc->sc_balance; - else { - if (balance_id(balancep) == -1) { - gctl_error(req, "Invalid balance algorithm."); - sx_xunlock(&sc->sc_lock); - return; - } - balance = balance_id(balancep); - } - slicep = gctl_get_paraml(req, "slice", sizeof(*slicep)); - if (slicep == NULL) { - gctl_error(req, "No '%s' argument.", "slice"); - sx_xunlock(&sc->sc_lock); - return; - } - if (*slicep == -1) - slice = sc->sc_slice; - else - slice = *slicep; - /* Enforce usage() of -p not allowing any other options. */ - if (do_priority && (*autosync || *noautosync || *failsync || - *nofailsync || *hardcode || *dynamic || *slicep != -1 || - *balancep != '\0')) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "only -p accepted when setting priority"); - return; - } - if (sc->sc_balance == balance && sc->sc_slice == slice && !*autosync && - !*noautosync && !*failsync && !*nofailsync && !*hardcode && - !*dynamic && !do_priority) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Nothing has changed."); - return; - } - if ((!do_priority && *nargs != 1) || (do_priority && *nargs != 2)) { - sx_xunlock(&sc->sc_lock); + if (*nargs < 4) { gctl_error(req, "Invalid number of arguments."); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - sc->sc_balance = balance; - sc->sc_slice = slice; - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) { - if (*autosync) { - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOAUTOSYNC; - do_sync = 1; - } - } else { - if (*noautosync) - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - } - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOFAILSYNC) != 0) { - if (*failsync) - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOFAILSYNC; - } else { - if (*nofailsync) { - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - dirty = 0; - } - } - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - /* - * Handle priority first, since we only need one disk, do one - * operation on it and then we're done. No need to check other - * flags, as usage doesn't allow it. - */ - if (do_priority) { - if (strcmp(disk->d_consumer->provider->name, prov) == 0) { - if (disk->d_priority == *priority) - gctl_error(req, "Nothing has changed."); - else { - disk->d_priority = *priority; - g_raid_update_metadata(disk); - } - break; - } - continue; - } - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_SYNCHRONIZING) - disk->d_flags &= ~G_RAID_DISK_FLAG_FORCE_SYNC; - } - if (!dirty) - disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; - g_raid_update_metadata(disk); - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_STALE) { - g_raid_event_send(disk, - G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_DISK); - } - } - } - sx_xunlock(&sc->sc_lock); -} - -static void -g_raid_ctl_rebuild(struct gctl_req *req, struct g_class *mp) -{ - struct g_raid_metadata md; - struct g_raid_softc *sc; - struct g_raid_disk *disk; - struct g_provider *pp; - const char *name; - char param[16]; - int error, *nargs; - u_int i; - - nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); - if (nargs == NULL) { - gctl_error(req, "No '%s' argument.", "nargs"); - return; - } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + format = gctl_get_asciiparam(req, "arg0"); + if (format == NULL) { + gctl_error(req, "No format recieved."); return; } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + crstatus = g_raid_create_node_format(format, &geom); + if (crstatus == G_RAID_MD_TASTE_FAIL) { + gctl_error(req, "Failed to create node with format '%s'.", + format); return; } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; - } - if (g_raid_ndisks(sc, G_RAID_DISK_STATE_ACTIVE) == 1 && - disk->d_state == G_RAID_DISK_STATE_ACTIVE) { - /* - * This is the last active disk. There will be nothing - * to rebuild it from, so deny this request. - */ - gctl_error(req, - "Provider %s is the last active provider in %s.", - name, sc->sc_geom->name); - break; - } - /* - * Do rebuild by resetting syncid, disconnecting the disk and - * connecting it again. - */ - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) - disk->d_flags |= G_RAID_DISK_FLAG_FORCE_SYNC; - g_raid_update_metadata(disk); - pp = disk->d_consumer->provider; - g_topology_lock(); - error = g_raid_read_metadata(disk->d_consumer, &md); - g_topology_unlock(); - g_raid_event_send(disk, G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_WAIT); - if (error != 0) { - gctl_error(req, "Cannot read metadata from %s.", - pp->name); - continue; - } - error = g_raid_add_disk(sc, pp, &md); - if (error != 0) { - gctl_error(req, "Cannot reconnect component %s.", - pp->name); - continue; - } + sc = (struct g_raid_softc *)geom->softc; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + ctlstatus = G_RAID_MD_CTL(sc->sc_md, req); + if (ctlstatus < 0) { + gctl_error(req, "Command failed: %d.", ctlstatus); + if (crstatus == G_RAID_MD_TASTE_NEW) + g_raid_destroy_node(sc, 0); } sx_xunlock(&sc->sc_lock); + g_topology_lock(); } static void -g_raid_ctl_remove(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_stop(struct gctl_req *req, struct g_class *mp) { struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name; - char param[16]; - int *nargs; - u_int i; + const char *nodename; + int *nargs, *force; + int error, how; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); + if (*nargs < 1) { + gctl_error(req, "Invalid number of arguments."); return; } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + nodename = gctl_get_asciiparam(req, "arg0"); + if (nodename == NULL) { + gctl_error(req, "No node name recieved."); return; } - sc = g_raid_find_device(mp, name); + sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + gctl_error(req, "Node '%s' not found.", nodename); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { + force = gctl_get_paraml(req, "force", sizeof(*force)); + if (force != NULL && *force) + how = G_RAID_DESTROY_HARD; + else + how = G_RAID_DESTROY_SOFT; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + error = g_raid_destroy(sc, how); + if (error != 0) sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Dec 24 11:08:31 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 285D51065670; Fri, 24 Dec 2010 11:08:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 14E358FC0A; Fri, 24 Dec 2010 11:08:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBOB8Ui5088968; Fri, 24 Dec 2010 11:08:30 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBOB8Uh2088962; Fri, 24 Dec 2010 11:08:30 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012241108.oBOB8Uh2088962@svn.freebsd.org> From: Alexander Motin Date: Fri, 24 Dec 2010 11:08:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216689 - in projects/graid/7: . contrib/bsnmp/snmpd contrib/wpa_supplicant gnu/usr.bin/groff/tmac sbin/geom/class/raid share/misc sys/geom/raid tools/tools/nanobsd usr.sbin usr.sbin/bs... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Dec 2010 11:08:31 -0000 Author: mav Date: Fri Dec 24 11:08:30 2010 New Revision: 216689 URL: http://svn.freebsd.org/changeset/base/216689 Log: MFH r216649, r216666, r216670, r216682 Modified: projects/graid/7/sbin/geom/class/raid/geom_raid.c projects/graid/7/sys/geom/raid/g_raid.c projects/graid/7/sys/geom/raid/g_raid.h projects/graid/7/sys/geom/raid/g_raid_ctl.c projects/graid/7/sys/geom/raid/g_raid_md_if.m projects/graid/7/sys/geom/raid/md_intel.c Directory Properties: projects/graid/7/ (props changed) projects/graid/7/COPYRIGHT (props changed) projects/graid/7/Makefile (props changed) projects/graid/7/Makefile.inc1 (props changed) projects/graid/7/ObsoleteFiles.inc (props changed) projects/graid/7/UPDATING (props changed) projects/graid/7/bin/ (props changed) projects/graid/7/bin/chflags/ (props changed) projects/graid/7/bin/chio/ (props changed) projects/graid/7/bin/cp/ (props changed) projects/graid/7/bin/csh/ (props changed) projects/graid/7/bin/dd/ (props changed) projects/graid/7/bin/df/ (props changed) projects/graid/7/bin/echo/ (props changed) projects/graid/7/bin/expr/ (props changed) projects/graid/7/bin/kill/ (props changed) projects/graid/7/bin/ln/ (props changed) projects/graid/7/bin/ls/ (props changed) projects/graid/7/bin/pax/ (props changed) projects/graid/7/bin/ps/ (props changed) projects/graid/7/bin/rm/ (props changed) projects/graid/7/bin/sh/ (props changed) projects/graid/7/bin/test/ (props changed) projects/graid/7/cddl/contrib/opensolaris/ (props changed) projects/graid/7/cddl/lib/libzpool/ (props changed) projects/graid/7/contrib/bind9/ (props changed) projects/graid/7/contrib/binutils/ (props changed) projects/graid/7/contrib/bsnmp/ (props changed) projects/graid/7/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/7/contrib/cpio/ (props changed) projects/graid/7/contrib/csup/ (props changed) projects/graid/7/contrib/expat/ (props changed) projects/graid/7/contrib/gcc/ (props changed) projects/graid/7/contrib/gdb/ (props changed) projects/graid/7/contrib/gdtoa/ (props changed) projects/graid/7/contrib/groff/ (props changed) projects/graid/7/contrib/ipfilter/ (props changed) projects/graid/7/contrib/less/ (props changed) projects/graid/7/contrib/libpcap/ (props changed) projects/graid/7/contrib/ncurses/ (props changed) projects/graid/7/contrib/netcat/ (props changed) projects/graid/7/contrib/ntp/ (props changed) projects/graid/7/contrib/nvi/ (props changed) projects/graid/7/contrib/pf/ (props changed) projects/graid/7/contrib/sendmail/ (props changed) projects/graid/7/contrib/smbfs/ (props changed) projects/graid/7/contrib/tcp_wrappers/ (props changed) projects/graid/7/contrib/tcsh/ (props changed) projects/graid/7/contrib/telnet/ (props changed) projects/graid/7/contrib/top/ (props changed) projects/graid/7/contrib/traceroute/ (props changed) projects/graid/7/contrib/wpa_supplicant/ (props changed) projects/graid/7/contrib/wpa_supplicant/wpa_supplicant.conf (props changed) projects/graid/7/crypto/openssh/ (props changed) projects/graid/7/crypto/openssl/ (props changed) projects/graid/7/etc/ (props changed) projects/graid/7/games/factor/ (props changed) projects/graid/7/games/fortune/ (props changed) projects/graid/7/games/grdc/ (props changed) projects/graid/7/gnu/ (props changed) projects/graid/7/gnu/lib/libstdc++/ (props changed) projects/graid/7/gnu/usr.bin/ (props changed) projects/graid/7/gnu/usr.bin/cc/ (props changed) projects/graid/7/gnu/usr.bin/cpio/ (props changed) projects/graid/7/gnu/usr.bin/cvs/ (props changed) projects/graid/7/gnu/usr.bin/gdb/ (props changed) projects/graid/7/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/7/gnu/usr.bin/grep/ (props changed) projects/graid/7/gnu/usr.bin/groff/ (props changed) projects/graid/7/gnu/usr.bin/groff/tmac/mdoc.local (props changed) projects/graid/7/gnu/usr.bin/man/ (props changed) projects/graid/7/gnu/usr.bin/sort/ (props changed) projects/graid/7/include/ (props changed) projects/graid/7/kerberos5/ (props changed) projects/graid/7/lib/ (props changed) projects/graid/7/lib/bind/ (props changed) projects/graid/7/lib/csu/ (props changed) projects/graid/7/lib/libarchive/ (props changed) projects/graid/7/lib/libbluetooth/ (props changed) projects/graid/7/lib/libc/ (props changed) projects/graid/7/lib/libc/stdtime/ (props changed) projects/graid/7/lib/libc_r/ (props changed) projects/graid/7/lib/libcam/ (props changed) projects/graid/7/lib/libdisk/ (props changed) projects/graid/7/lib/libdwarf/ (props changed) projects/graid/7/lib/libelf/ (props changed) projects/graid/7/lib/libexpat/ (props changed) projects/graid/7/lib/libfetch/ (props changed) projects/graid/7/lib/libftpio/ (props changed) projects/graid/7/lib/libgeom/ (props changed) projects/graid/7/lib/libgssapi/ (props changed) projects/graid/7/lib/libkse/ (props changed) projects/graid/7/lib/libkvm/ (props changed) projects/graid/7/lib/libmagic/ (props changed) projects/graid/7/lib/libmemstat/ (props changed) projects/graid/7/lib/libpmc/ (props changed) projects/graid/7/lib/libradius/ (props changed) projects/graid/7/lib/libsm/ (props changed) projects/graid/7/lib/libstand/ (props changed) projects/graid/7/lib/libthr/ (props changed) projects/graid/7/lib/libthread_db/ (props changed) projects/graid/7/lib/libufs/ (props changed) projects/graid/7/lib/libutil/ (props changed) projects/graid/7/lib/msun/ (props changed) projects/graid/7/libexec/ (props changed) projects/graid/7/libexec/ftpd/ (props changed) projects/graid/7/libexec/rpc.rquotad/ (props changed) projects/graid/7/libexec/rpc.rstatd/ (props changed) projects/graid/7/libexec/rtld-elf/ (props changed) projects/graid/7/libexec/tftpd/ (props changed) projects/graid/7/release/ (props changed) projects/graid/7/release/doc/ (props changed) projects/graid/7/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/7/release/picobsd/tinyware/login/ (props changed) projects/graid/7/rescue/ (props changed) projects/graid/7/sbin/ (props changed) projects/graid/7/sbin/atacontrol/ (props changed) projects/graid/7/sbin/bsdlabel/ (props changed) projects/graid/7/sbin/clri/ (props changed) projects/graid/7/sbin/ddb/ (props changed) projects/graid/7/sbin/devd/ (props changed) projects/graid/7/sbin/devfs/ (props changed) projects/graid/7/sbin/dhclient/ (props changed) projects/graid/7/sbin/dumpfs/ (props changed) projects/graid/7/sbin/fdisk/ (props changed) projects/graid/7/sbin/fdisk_pc98/ (props changed) projects/graid/7/sbin/fsck/ (props changed) projects/graid/7/sbin/fsck_ffs/ (props changed) projects/graid/7/sbin/fsck_msdosfs/ (props changed) projects/graid/7/sbin/geom/ (props changed) projects/graid/7/sbin/geom/class/label/ (props changed) projects/graid/7/sbin/geom/class/part/ (props changed) projects/graid/7/sbin/geom/class/stripe/ (props changed) projects/graid/7/sbin/geom/misc/ (props changed) projects/graid/7/sbin/growfs/ (props changed) projects/graid/7/sbin/ifconfig/ (props changed) projects/graid/7/sbin/init/ (props changed) projects/graid/7/sbin/ipf/ (props changed) projects/graid/7/sbin/ipfw/ (props changed) projects/graid/7/sbin/md5/ (props changed) projects/graid/7/sbin/mdconfig/ (props changed) projects/graid/7/sbin/mksnap_ffs/ (props changed) projects/graid/7/sbin/mount/ (props changed) projects/graid/7/sbin/mount_msdosfs/ (props changed) projects/graid/7/sbin/natd/ (props changed) projects/graid/7/sbin/newfs/ (props changed) projects/graid/7/sbin/newfs_msdos/ (props changed) projects/graid/7/sbin/ping6/ (props changed) projects/graid/7/sbin/reboot/ (props changed) projects/graid/7/sbin/restore/ (props changed) projects/graid/7/sbin/route/ (props changed) projects/graid/7/sbin/savecore/ (props changed) projects/graid/7/sbin/sconfig/ (props changed) projects/graid/7/sbin/shutdown/ (props changed) projects/graid/7/sbin/sysctl/ (props changed) projects/graid/7/sbin/tunefs/ (props changed) projects/graid/7/secure/lib/libcrypto/ (props changed) projects/graid/7/secure/lib/libssh/ (props changed) projects/graid/7/secure/lib/libssl/ (props changed) projects/graid/7/secure/libexec/sftp-server/ (props changed) projects/graid/7/secure/usr.bin/bdes/ (props changed) projects/graid/7/secure/usr.bin/openssl/ (props changed) projects/graid/7/secure/usr.bin/ssh/ (props changed) projects/graid/7/secure/usr.sbin/sshd/ (props changed) projects/graid/7/share/ (props changed) projects/graid/7/share/colldef/ (props changed) projects/graid/7/share/dict/ (props changed) projects/graid/7/share/doc/bind9/ (props changed) projects/graid/7/share/doc/papers/jail/ (props changed) projects/graid/7/share/doc/smm/01.setup/ (props changed) projects/graid/7/share/examples/ (props changed) projects/graid/7/share/man/ (props changed) projects/graid/7/share/man/man1/ (props changed) projects/graid/7/share/man/man3/ (props changed) projects/graid/7/share/man/man4/ (props changed) projects/graid/7/share/man/man5/ (props changed) projects/graid/7/share/man/man7/ (props changed) projects/graid/7/share/man/man8/ (props changed) projects/graid/7/share/man/man9/ (props changed) projects/graid/7/share/misc/ (props changed) projects/graid/7/share/misc/iso639 (props changed) projects/graid/7/share/misc/pci_vendors (props changed) projects/graid/7/share/mk/ (props changed) projects/graid/7/share/mklocale/ (props changed) projects/graid/7/share/monetdef/ (props changed) projects/graid/7/share/msgdef/ (props changed) projects/graid/7/share/numericdef/ (props changed) projects/graid/7/share/sendmail/ (props changed) projects/graid/7/share/syscons/ (props changed) projects/graid/7/share/syscons/keymaps/ (props changed) projects/graid/7/share/termcap/ (props changed) projects/graid/7/share/timedef/ (props changed) projects/graid/7/share/zoneinfo/ (props changed) projects/graid/7/sys/ (props changed) projects/graid/7/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/7/sys/contrib/dev/acpica/ (props changed) projects/graid/7/sys/contrib/pf/ (props changed) projects/graid/7/tools/ (props changed) projects/graid/7/tools/build/ (props changed) projects/graid/7/tools/build/options/ (props changed) projects/graid/7/tools/debugscripts/ (props changed) projects/graid/7/tools/regression/atm/ (props changed) projects/graid/7/tools/regression/bin/ (props changed) projects/graid/7/tools/regression/bin/sh/ (props changed) projects/graid/7/tools/regression/file/ (props changed) projects/graid/7/tools/regression/file/flock/ (props changed) projects/graid/7/tools/regression/lib/libc/ (props changed) projects/graid/7/tools/regression/usr.bin/ (props changed) projects/graid/7/tools/regression/usr.bin/jot/ (props changed) projects/graid/7/tools/regression/usr.bin/tr/ (props changed) projects/graid/7/tools/sched/ (props changed) projects/graid/7/tools/test/ (props changed) projects/graid/7/tools/tools/ (props changed) projects/graid/7/tools/tools/aac/ (props changed) projects/graid/7/tools/tools/crypto/ (props changed) projects/graid/7/tools/tools/editing/ (props changed) projects/graid/7/tools/tools/nanobsd/ (props changed) projects/graid/7/tools/tools/nanobsd/FlashDevice.sub (props changed) projects/graid/7/tools/tools/nanobsd/nanobsd.sh (props changed) projects/graid/7/tools/tools/netrate/ (props changed) projects/graid/7/tools/tools/umastat/ (props changed) projects/graid/7/tools/tools/usb/ (props changed) projects/graid/7/usr.bin/ (props changed) projects/graid/7/usr.bin/basename/ (props changed) projects/graid/7/usr.bin/bluetooth/rfcomm_sppd/ (props changed) projects/graid/7/usr.bin/calendar/ (props changed) projects/graid/7/usr.bin/catman/ (props changed) projects/graid/7/usr.bin/cksum/ (props changed) projects/graid/7/usr.bin/comm/ (props changed) projects/graid/7/usr.bin/cpuset/ (props changed) projects/graid/7/usr.bin/csup/ (props changed) projects/graid/7/usr.bin/dirname/ (props changed) projects/graid/7/usr.bin/du/ (props changed) projects/graid/7/usr.bin/fetch/ (props changed) projects/graid/7/usr.bin/file/ (props changed) projects/graid/7/usr.bin/find/ (props changed) projects/graid/7/usr.bin/finger/ (props changed) projects/graid/7/usr.bin/fold/ (props changed) projects/graid/7/usr.bin/fstat/ (props changed) projects/graid/7/usr.bin/gcore/ (props changed) projects/graid/7/usr.bin/gprof/ (props changed) projects/graid/7/usr.bin/gzip/ (props changed) projects/graid/7/usr.bin/hexdump/ (props changed) projects/graid/7/usr.bin/id/ (props changed) projects/graid/7/usr.bin/indent/ (props changed) projects/graid/7/usr.bin/ipcrm/ (props changed) projects/graid/7/usr.bin/ipcs/ (props changed) projects/graid/7/usr.bin/jot/ (props changed) projects/graid/7/usr.bin/kdump/ (props changed) projects/graid/7/usr.bin/ktrace/ (props changed) projects/graid/7/usr.bin/ldd/ (props changed) projects/graid/7/usr.bin/less/ (props changed) projects/graid/7/usr.bin/locate/ (props changed) projects/graid/7/usr.bin/lockf/ (props changed) projects/graid/7/usr.bin/logger/ (props changed) projects/graid/7/usr.bin/make/ (props changed) projects/graid/7/usr.bin/ncal/ (props changed) projects/graid/7/usr.bin/netstat/ (props changed) projects/graid/7/usr.bin/newgrp/ (props changed) projects/graid/7/usr.bin/nsupdate/ (props changed) projects/graid/7/usr.bin/pkill/ (props changed) projects/graid/7/usr.bin/procstat/ (props changed) projects/graid/7/usr.bin/quota/ (props changed) projects/graid/7/usr.bin/rpcgen/ (props changed) projects/graid/7/usr.bin/ruptime/ (props changed) projects/graid/7/usr.bin/script/ (props changed) projects/graid/7/usr.bin/sed/ (props changed) projects/graid/7/usr.bin/shar/ (props changed) projects/graid/7/usr.bin/sockstat/ (props changed) projects/graid/7/usr.bin/stat/ (props changed) projects/graid/7/usr.bin/su/ (props changed) projects/graid/7/usr.bin/systat/ (props changed) projects/graid/7/usr.bin/tail/ (props changed) projects/graid/7/usr.bin/tar/ (props changed) projects/graid/7/usr.bin/tftp/ (props changed) projects/graid/7/usr.bin/tip/ (props changed) projects/graid/7/usr.bin/top/ (props changed) projects/graid/7/usr.bin/truncate/ (props changed) projects/graid/7/usr.bin/truss/ (props changed) projects/graid/7/usr.bin/uname/ (props changed) projects/graid/7/usr.bin/unifdef/ (props changed) projects/graid/7/usr.bin/units/ (props changed) projects/graid/7/usr.bin/uudecode/ (props changed) projects/graid/7/usr.bin/vmstat/ (props changed) projects/graid/7/usr.bin/w/ (props changed) projects/graid/7/usr.bin/wc/ (props changed) projects/graid/7/usr.bin/whereis/ (props changed) projects/graid/7/usr.bin/whois/ (props changed) projects/graid/7/usr.bin/window/ (props changed) projects/graid/7/usr.bin/xargs/ (props changed) projects/graid/7/usr.bin/ypcat/ (props changed) projects/graid/7/usr.bin/ypmatch/ (props changed) projects/graid/7/usr.bin/ypwhich/ (props changed) projects/graid/7/usr.sbin/ (props changed) projects/graid/7/usr.sbin/Makefile (props changed) projects/graid/7/usr.sbin/acpi/ (props changed) projects/graid/7/usr.sbin/adduser/ (props changed) projects/graid/7/usr.sbin/arp/ (props changed) projects/graid/7/usr.sbin/bluetooth/ (props changed) projects/graid/7/usr.sbin/bluetooth/btpand/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcsecd/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcseriald/ (props changed) projects/graid/7/usr.sbin/bluetooth/rfcomm_pppd/ (props changed) projects/graid/7/usr.sbin/bluetooth/sdpd/ (props changed) projects/graid/7/usr.sbin/boot0cfg/ (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_pf/ (props changed) projects/graid/7/usr.sbin/burncd/ (props changed) projects/graid/7/usr.sbin/cdcontrol/ (props changed) projects/graid/7/usr.sbin/chown/ (props changed) projects/graid/7/usr.sbin/chroot/ (props changed) projects/graid/7/usr.sbin/config/ (props changed) projects/graid/7/usr.sbin/config/SMM.doc/ (props changed) projects/graid/7/usr.sbin/cpucontrol/ (props changed) projects/graid/7/usr.sbin/crashinfo/ (props changed) projects/graid/7/usr.sbin/cron/ (props changed) projects/graid/7/usr.sbin/cron/cron/ (props changed) projects/graid/7/usr.sbin/crunch/ (props changed) projects/graid/7/usr.sbin/cxgbtool/ (props changed) projects/graid/7/usr.sbin/eeprom/ (props changed) projects/graid/7/usr.sbin/extattr/ (props changed) projects/graid/7/usr.sbin/faithd/ (props changed) projects/graid/7/usr.sbin/fdcontrol/ (props changed) projects/graid/7/usr.sbin/fdformat/ (props changed) projects/graid/7/usr.sbin/fdread/ (props changed) projects/graid/7/usr.sbin/fdwrite/ (props changed) projects/graid/7/usr.sbin/fifolog/ (props changed) projects/graid/7/usr.sbin/freebsd-update/ (props changed) projects/graid/7/usr.sbin/fwcontrol/ (props changed) projects/graid/7/usr.sbin/gstat/ (props changed) projects/graid/7/usr.sbin/iostat/ (props changed) projects/graid/7/usr.sbin/jail/ (props changed) projects/graid/7/usr.sbin/jexec/ (props changed) projects/graid/7/usr.sbin/jls/ (props changed) projects/graid/7/usr.sbin/lpr/ (props changed) projects/graid/7/usr.sbin/mailwrapper/ (props changed) projects/graid/7/usr.sbin/makefs/ (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/7/usr.sbin/makefs/getid.c (props changed) projects/graid/7/usr.sbin/mergemaster/ (props changed) projects/graid/7/usr.sbin/mfiutil/ (props changed) projects/graid/7/usr.sbin/mountd/ (props changed) projects/graid/7/usr.sbin/mptutil/ (props changed) projects/graid/7/usr.sbin/mtree/ (props changed) projects/graid/7/usr.sbin/ndiscvt/ (props changed) projects/graid/7/usr.sbin/ndp/ (props changed) projects/graid/7/usr.sbin/newsyslog/ (props changed) projects/graid/7/usr.sbin/nscd/ (props changed) projects/graid/7/usr.sbin/ntp/ (props changed) projects/graid/7/usr.sbin/pciconf/ (props changed) projects/graid/7/usr.sbin/pkg_install/ (props changed) projects/graid/7/usr.sbin/pmccontrol/ (props changed) projects/graid/7/usr.sbin/pmcstat/ (props changed) projects/graid/7/usr.sbin/portsnap/ (props changed) projects/graid/7/usr.sbin/powerd/ (props changed) projects/graid/7/usr.sbin/ppp/ (props changed) projects/graid/7/usr.sbin/pstat/ (props changed) projects/graid/7/usr.sbin/pw/ (props changed) projects/graid/7/usr.sbin/pwd_mkdb/ (props changed) projects/graid/7/usr.sbin/rpc.lockd/ (props changed) projects/graid/7/usr.sbin/rpc.statd/ (props changed) projects/graid/7/usr.sbin/rpc.yppasswdd/ (props changed) projects/graid/7/usr.sbin/rtadvd/ (props changed) projects/graid/7/usr.sbin/rtsold/ (props changed) projects/graid/7/usr.sbin/sade/ (props changed) projects/graid/7/usr.sbin/service/ (props changed) projects/graid/7/usr.sbin/setfib/ (props changed) projects/graid/7/usr.sbin/sysinstall/ (props changed) projects/graid/7/usr.sbin/syslogd/ (props changed) projects/graid/7/usr.sbin/traceroute/ (props changed) projects/graid/7/usr.sbin/traceroute6/ (props changed) projects/graid/7/usr.sbin/tzsetup/ (props changed) projects/graid/7/usr.sbin/ugidfw/ (props changed) projects/graid/7/usr.sbin/wpa/wpa_supplicant/ (props changed) projects/graid/7/usr.sbin/ypserv/ (props changed) projects/graid/7/usr.sbin/zic/ (props changed) Modified: projects/graid/7/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/7/sbin/geom/class/raid/geom_raid.c Fri Dec 24 11:07:31 2010 (r216688) +++ projects/graid/7/sbin/geom/class/raid/geom_raid.c Fri Dec 24 11:08:30 2010 (r216689) @@ -1,5 +1,4 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek * Copyright (c) 2010 Alexander Motin * All rights reserved. * @@ -49,81 +48,19 @@ uint32_t version = G_RAID_VERSION; #define GRAID_SLICE "4096" #define GRAID_PRIORITY "0" -#if 0 -static void raid_main(struct gctl_req *req, unsigned flags); -static void raid_activate(struct gctl_req *req); -static void raid_clear(struct gctl_req *req); -static void raid_dump(struct gctl_req *req); -static void raid_label(struct gctl_req *req); -#endif +//static void raid_main(struct gctl_req *req, unsigned flags); struct g_command class_commands[] = { -/* - { "activate", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "clear", G_FLAG_VERBOSE, raid_main, G_NULL_OPTS, - "[-v] prov ..." - }, - { "configure", G_FLAG_VERBOSE, NULL, - { - { 'a', "autosync", NULL, G_TYPE_BOOL }, - { 'b', "balance", "", G_TYPE_STRING }, - { 'd', "dynamic", NULL, G_TYPE_BOOL }, - { 'f', "failsync", NULL, G_TYPE_BOOL }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 'p', "priority", "-1", G_TYPE_NUMBER }, - { 's', "slice", "-1", G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-adfFhnv] [-b balance] [-s slice] name\n" - "[-v] -p priority name prov" - }, - { "deactivate", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "dump", 0, raid_main, G_NULL_OPTS, - "prov ..." - }, - { "forget", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "name ..." - }, - { "label", G_FLAG_VERBOSE, raid_main, - { - { 'b', "balance", GRAID_BALANCE, G_TYPE_STRING }, - { 'F', "nofailsync", NULL, G_TYPE_BOOL }, - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'n', "noautosync", NULL, G_TYPE_BOOL }, - { 's', "slice", GRAID_SLICE, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-Fhnv] [-b balance] [-s slice] name prov ..." - }, - { "insert", G_FLAG_VERBOSE, NULL, - { - { 'h', "hardcode", NULL, G_TYPE_BOOL }, - { 'i', "inactive", NULL, G_TYPE_BOOL }, - { 'p', "priority", GRAID_PRIORITY, G_TYPE_NUMBER }, - G_OPT_SENTINEL - }, - "[-hiv] [-p priority] name prov ..." - }, - { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." - }, - { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "[-v] name prov ..." + { "label", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, + "format name level prov ..." }, { "stop", G_FLAG_VERBOSE, NULL, { { 'f', "force", NULL, G_TYPE_BOOL }, G_OPT_SENTINEL }, - "[-fv] name ..." + NULL, "[-fv] name ..." }, -*/ G_CMD_SENTINEL }; @@ -143,7 +80,6 @@ raid_main(struct gctl_req *req, unsigned gctl_error(req, "No '%s' argument.", "verb"); return; } -#if 0 if (strcmp(name, "label") == 0) raid_label(req); else if (strcmp(name, "clear") == 0) @@ -153,235 +89,7 @@ raid_main(struct gctl_req *req, unsigned else if (strcmp(name, "activate") == 0) raid_activate(req); else -#endif gctl_error(req, "Unknown command: %s.", name); } - -static void -raid_label(struct gctl_req *req) -{ - struct g_raid_metadata md; - u_char sector[512]; - const char *str; - unsigned sectorsize; - off_t mediasize; - intmax_t val; - int error, i, nargs, bal, hardcode; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - - strlcpy(md.md_magic, G_RAID_MAGIC, sizeof(md.md_magic)); - md.md_version = G_RAID_VERSION; - str = gctl_get_ascii(req, "arg0"); - strlcpy(md.md_name, str, sizeof(md.md_name)); - md.md_mid = arc4random(); - md.md_all = nargs - 1; - md.md_mflags = 0; - md.md_dflags = 0; - md.md_genid = 0; - md.md_syncid = 1; - md.md_sync_offset = 0; - val = gctl_get_intmax(req, "slice"); - md.md_slice = val; - str = gctl_get_ascii(req, "balance"); - bal = balance_id(str); - if (bal == -1) { - gctl_error(req, "Invalid balance algorithm."); - return; - } - md.md_balance = bal; - if (gctl_get_int(req, "noautosync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - if (gctl_get_int(req, "nofailsync")) - md.md_mflags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - hardcode = gctl_get_int(req, "hardcode"); - - /* - * Calculate sectorsize by finding least common multiple from - * sectorsizes of every disk and find the smallest mediasize. - */ - mediasize = 0; - sectorsize = 0; - for (i = 1; i < nargs; i++) { - unsigned ssize; - off_t msize; - - str = gctl_get_ascii(req, "arg%d", i); - msize = g_get_mediasize(str); - ssize = g_get_sectorsize(str); - if (msize == 0 || ssize == 0) { - gctl_error(req, "Can't get informations about %s: %s.", - str, strerror(errno)); - return; - } - msize -= ssize; - if (mediasize == 0 || (mediasize > 0 && msize < mediasize)) - mediasize = msize; - if (sectorsize == 0) - sectorsize = ssize; - else - sectorsize = g_lcm(sectorsize, ssize); - } - md.md_mediasize = mediasize; - md.md_sectorsize = sectorsize; - md.md_mediasize -= (md.md_mediasize % md.md_sectorsize); - - /* - * Clear last sector first, to spoil all components if device exists. - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(str, NULL); - if (error != 0) { - gctl_error(req, "Can't store metadata on %s: %s.", str, - strerror(error)); - return; - } - } - - /* - * Ok, store metadata (use disk number as priority). - */ - for (i = 1; i < nargs; i++) { - str = gctl_get_ascii(req, "arg%d", i); - md.md_did = arc4random(); - md.md_priority = i - 1; - md.md_provsize = g_get_mediasize(str); - assert(md.md_provsize != 0); - if (!hardcode) - bzero(md.md_provider, sizeof(md.md_provider)); - else { - if (strncmp(str, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) - str += sizeof(_PATH_DEV) - 1; - strlcpy(md.md_provider, str, sizeof(md.md_provider)); - } - raid_metadata_encode(&md, sector); - error = g_metadata_store(str, sector, sizeof(sector)); - if (error != 0) { - fprintf(stderr, "Can't store metadata on %s: %s.\n", - str, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata value stored on %s.\n", str); - } -} - -static void -raid_clear(struct gctl_req *req) -{ - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_clear(name, G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't clear metadata on %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Metadata cleared on %s.\n", name); - } -} - -static void -raid_dump(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 1) { - gctl_error(req, "Too few arguments."); - return; - } - - for (i = 0; i < nargs; i++) { - name = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(name, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Can't read metadata from %s: %s.\n", - name, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, "MD5 hash mismatch for %s, skipping.\n", - name); - gctl_error(req, "Not fully done."); - continue; - } - printf("Metadata on %s:\n", name); - raid_metadata_dump(&md); - printf("\n"); - } -} - -static void -raid_activate(struct gctl_req *req) -{ - struct g_raid_metadata md, tmpmd; - const char *name, *path; - int error, i, nargs; - - nargs = gctl_get_int(req, "nargs"); - if (nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_ascii(req, "arg0"); - - for (i = 1; i < nargs; i++) { - path = gctl_get_ascii(req, "arg%d", i); - error = g_metadata_read(path, (u_char *)&tmpmd, sizeof(tmpmd), - G_RAID_MAGIC); - if (error != 0) { - fprintf(stderr, "Cannot read metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (raid_metadata_decode((u_char *)&tmpmd, &md) != 0) { - fprintf(stderr, - "MD5 hash mismatch for provider %s, skipping.\n", - path); - gctl_error(req, "Not fully done."); - continue; - } - if (strcmp(md.md_name, name) != 0) { - fprintf(stderr, - "Provider %s is not the raid %s component.\n", - path, name); - gctl_error(req, "Not fully done."); - continue; - } - md.md_dflags &= ~G_RAID_DISK_FLAG_INACTIVE; - raid_metadata_encode(&md, (u_char *)&tmpmd); - error = g_metadata_store(path, (u_char *)&tmpmd, sizeof(tmpmd)); - if (error != 0) { - fprintf(stderr, "Cannot write metadata from %s: %s.\n", - path, strerror(error)); - gctl_error(req, "Not fully done."); - continue; - } - if (verbose) - printf("Provider %s activated.\n", path); - } -} #endif + Modified: projects/graid/7/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.c Fri Dec 24 11:07:31 2010 (r216688) +++ projects/graid/7/sys/geom/raid/g_raid.c Fri Dec 24 11:08:30 2010 (r216689) @@ -55,7 +55,7 @@ u_int g_raid_debug = 1000; TUNABLE_INT("kern.geom.raid.debug", &g_raid_debug); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, debug, CTLFLAG_RW, &g_raid_debug, 0, "Debug level"); -static u_int g_raid_start_timeout = 4; +u_int g_raid_start_timeout = 4; TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout, 0, "Time to wait on all mirror components"); @@ -92,7 +92,7 @@ static void g_raid_fini(struct g_class * struct g_class g_raid_class = { .name = G_RAID_CLASS_NAME, .version = G_VERSION, - .ctlreq = g_raid_config, + .ctlreq = g_raid_ctl, .taste = g_raid_taste, .destroy_geom = g_raid_destroy_geom, .init = g_raid_init, @@ -122,6 +122,8 @@ g_raid_disk_state2str(int state) return ("SPARE"); case G_RAID_DISK_S_OFFLINE: return ("OFFLINE"); + case G_RAID_DISK_S_STALE: + return ("STALE"); default: return ("INVALID"); } @@ -217,7 +219,7 @@ g_raid_volume_event2str(int event) } } -static const char * +const char * g_raid_volume_level2str(int level, int qual) { @@ -251,6 +253,41 @@ g_raid_volume_level2str(int level, int q } } +int +g_raid_volume_str2level(const char *str, int *level, int *qual) +{ + + *level = G_RAID_VOLUME_RL_UNKNOWN; + *qual = G_RAID_VOLUME_RLQ_NONE; + if (strcasecmp(str, "RAID0") == 0) + *level = G_RAID_VOLUME_RL_RAID0; + else if (strcasecmp(str, "RAID1") == 0) + *level = G_RAID_VOLUME_RL_RAID1; + else if (strcasecmp(str, "RAID3") == 0) + *level = G_RAID_VOLUME_RL_RAID3; + else if (strcasecmp(str, "RAID4") == 0) + *level = G_RAID_VOLUME_RL_RAID4; + else if (strcasecmp(str, "RAID5") == 0) + *level = G_RAID_VOLUME_RL_RAID5; + else if (strcasecmp(str, "RAID6") == 0) + *level = G_RAID_VOLUME_RL_RAID6; + else if (strcasecmp(str, "RAID10") == 0) + *level = G_RAID_VOLUME_RL_RAID10; + else if (strcasecmp(str, "RAID1E") == 0) + *level = G_RAID_VOLUME_RL_RAID1E; + else if (strcasecmp(str, "SINGLE") == 0) + *level = G_RAID_VOLUME_RL_SINGLE; + else if (strcasecmp(str, "CONCAT") == 0) + *level = G_RAID_VOLUME_RL_CONCAT; + else if (strcasecmp(str, "RAID5E") == 0) + *level = G_RAID_VOLUME_RL_RAID5E; + else if (strcasecmp(str, "RAID5EE") == 0) + *level = G_RAID_VOLUME_RL_RAID5EE; + else + return (-1); + return (0); +} + static const char * g_raid_get_diskname(struct g_raid_disk *disk) { @@ -1231,12 +1268,15 @@ g_raid_destroy_node(struct g_raid_softc kobj_delete((kobj_t)sc->sc_md, M_RAID); sc->sc_md = NULL; } - G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); - g_topology_lock(); - sc->sc_geom->softc = NULL; - g_wither_geom(sc->sc_geom, ENXIO); - g_topology_unlock(); - sc->sc_geom = NULL; + if (sc->sc_geom != NULL) { + G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); + g_topology_lock(); + sc->sc_geom->softc = NULL; + g_wither_geom(sc->sc_geom, ENXIO); + g_topology_unlock(); + sc->sc_geom = NULL; + } else + G_RAID_DEBUG(1, "Destroying node."); if (worker) { mtx_destroy(&sc->sc_queue_mtx); sx_xunlock(&sc->sc_lock); @@ -1297,12 +1337,13 @@ g_raid_destroy_volume(struct g_raid_volu } int -g_raid_stop_disk(struct g_raid_disk *disk) +g_raid_destroy_disk(struct g_raid_disk *disk) { struct g_raid_softc *sc; struct g_raid_subdisk *sd, *tmp; sc = disk->d_softc; + G_RAID_DEBUG(2, "Destroying disk."); if (disk->d_consumer) { g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); @@ -1315,21 +1356,9 @@ g_raid_stop_disk(struct g_raid_disk *dis LIST_REMOVE(sd, sd_next); sd->sd_disk = NULL; } - return (0); -} - -int -g_raid_destroy_disk(struct g_raid_disk *disk) -{ - struct g_raid_softc *sc; - int error; - - sc = disk->d_softc; - G_RAID_DEBUG(2, "Destroying disk."); - error = g_raid_stop_disk(disk); - if (error) - return (error); LIST_REMOVE(disk, d_next); + if (sc->sc_md) + G_RAID_MD_FREE_DISK(sc->sc_md, disk); free(disk, M_RAID); return (0); } @@ -1432,6 +1461,31 @@ g_raid_taste(struct g_class *mp, struct return (geom); } +int +g_raid_create_node_format(const char *format, struct g_geom **gp) +{ + struct g_raid_md_class *class; + struct g_raid_md_object *obj; + int status; + + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + LIST_FOREACH(class, &g_raid_md_classes, mdc_list) { + if (strcasecmp(class->name, format) == 0) + break; + } + if (class == NULL) { + G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + return (G_RAID_MD_TASTE_FAIL); + } + obj = (void *)kobj_create((kobj_class_t)class, M_RAID, + M_WAITOK); + obj->mdo_class = class; + status = G_RAID_MD_CREATE(obj, &g_raid_class, gp); + if (status != G_RAID_MD_TASTE_NEW) + kobj_delete((kobj_t)obj, M_RAID); + return (status); +} + static int g_raid_destroy_geom(struct gctl_req *req __unused, struct g_class *mp __unused, struct g_geom *gp) Modified: projects/graid/7/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.h Fri Dec 24 11:07:31 2010 (r216688) +++ projects/graid/7/sys/geom/raid/g_raid.h Fri Dec 24 11:08:30 2010 (r216689) @@ -58,6 +58,7 @@ struct g_raid_tr_object; #ifdef _KERNEL extern u_int g_raid_debug; +extern u_int g_raid_start_timeout; #define G_RAID_DEBUG(lvl, fmt, ...) do { \ if (g_raid_debug >= (lvl)) { \ @@ -101,6 +102,7 @@ struct g_raid_event { #define G_RAID_DISK_S_ACTIVE 0x01 #define G_RAID_DISK_S_SPARE 0x02 #define G_RAID_DISK_S_OFFLINE 0x03 +#define G_RAID_DISK_S_STALE 0x04 #define G_RAID_DISK_E_DISCONNECTED 0x01 @@ -276,18 +278,18 @@ int g_raid_tr_modevent(module_t, int, vo }; \ DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) +const char * g_raid_volume_level2str(int level, int qual); +int g_raid_volume_str2level(const char *str, int *level, int *qual); + struct g_raid_softc * g_raid_create_node(struct g_class *mp, const char *name, struct g_raid_md_object *md); +int g_raid_create_node_format(const char *format, struct g_geom **gp); struct g_raid_volume * g_raid_create_volume(struct g_raid_softc *sc, const char *name); struct g_raid_disk * g_raid_create_disk(struct g_raid_softc *sc); int g_raid_start_volume(struct g_raid_volume *vol); -int g_raid_stop_node(struct g_raid_softc *sc); -int g_raid_stop_volume(struct g_raid_volume *vol); -int g_raid_stop_disk(struct g_raid_disk *disk); - int g_raid_destroy_node(struct g_raid_softc *sc, int worker); int g_raid_destroy_volume(struct g_raid_volume *vol); int g_raid_destroy_disk(struct g_raid_disk *disk); @@ -309,7 +311,7 @@ u_int g_raid_nsubdisks(struct g_raid_vol int g_raid_destroy(struct g_raid_softc *sc, int how); int g_raid_event_send(void *arg, int event, int flags); -g_ctl_req_t g_raid_config; +g_ctl_req_t g_raid_ctl; #endif /* _KERNEL */ #endif /* !_G_RAID_H_ */ Modified: projects/graid/7/sys/geom/raid/g_raid_ctl.c ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid_ctl.c Fri Dec 24 11:07:31 2010 (r216688) +++ projects/graid/7/sys/geom/raid/g_raid_ctl.c Fri Dec 24 11:08:30 2010 (r216689) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2004-2009 Pawel Jakub Dawidek + * Copyright (c) 2010 Alexander Motin * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -43,547 +43,149 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include "g_raid_md_if.h" -#if 0 static struct g_raid_softc * -g_raid_find_device(struct g_class *mp, const char *name) +g_raid_find_node(struct g_class *mp, const char *name) { struct g_raid_softc *sc; struct g_geom *gp; - g_topology_lock(); LIST_FOREACH(gp, &mp->geom, geom) { sc = gp->softc; if (sc == NULL) continue; if (sc->sc_stopping != 0) continue; - if (strcmp(gp->name, name) == 0 || - strcmp(sc->sc_name, name) == 0) { - g_topology_unlock(); - sx_xlock(&sc->sc_lock); + if (strcasecmp(sc->sc_name, name) == 0) return (sc); - } - } - g_topology_unlock(); - return (NULL); -} - -static struct g_raid_disk * -g_raid_find_disk(struct g_raid_softc *sc, const char *name) -{ - struct g_raid_disk *disk; - - sx_assert(&sc->sc_lock, SX_XLOCKED); - if (strncmp(name, "/dev/", 5) == 0) - name += 5; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - if (disk->d_consumer == NULL) - continue; - if (disk->d_consumer->provider == NULL) - continue; - if (strcmp(disk->d_consumer->provider->name, name) == 0) - return (disk); } return (NULL); } static void -g_raid_ctl_configure(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_label(struct gctl_req *req, struct g_class *mp) { + struct g_geom *geom; struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name, *balancep, *prov; - intmax_t *slicep, *priority; - uint32_t slice; - uint8_t balance; - int *autosync, *noautosync, *failsync, *nofailsync, *hardcode, *dynamic; - int *nargs, do_sync = 0, dirty = 1, do_priority = 0; + const char *format; + int *nargs; + int crstatus, ctlstatus; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs != 1 && *nargs != 2) { - gctl_error(req, "Invalid number of arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); - return; - } - balancep = gctl_get_asciiparam(req, "balance"); - if (balancep == NULL) { - gctl_error(req, "No '%s' argument.", "balance"); - return; - } - autosync = gctl_get_paraml(req, "autosync", sizeof(*autosync)); - if (autosync == NULL) { - gctl_error(req, "No '%s' argument.", "autosync"); - return; - } - noautosync = gctl_get_paraml(req, "noautosync", sizeof(*noautosync)); - if (noautosync == NULL) { - gctl_error(req, "No '%s' argument.", "noautosync"); - return; - } - failsync = gctl_get_paraml(req, "failsync", sizeof(*failsync)); - if (failsync == NULL) { - gctl_error(req, "No '%s' argument.", "failsync"); - return; - } - nofailsync = gctl_get_paraml(req, "nofailsync", sizeof(*nofailsync)); - if (nofailsync == NULL) { - gctl_error(req, "No '%s' argument.", "nofailsync"); - return; - } - hardcode = gctl_get_paraml(req, "hardcode", sizeof(*hardcode)); - if (hardcode == NULL) { - gctl_error(req, "No '%s' argument.", "hardcode"); - return; - } - dynamic = gctl_get_paraml(req, "dynamic", sizeof(*dynamic)); - if (dynamic == NULL) { - gctl_error(req, "No '%s' argument.", "dynamic"); - return; - } - priority = gctl_get_paraml(req, "priority", sizeof(*priority)); - if (priority == NULL) { - gctl_error(req, "No '%s' argument.", "priority"); - return; - } - if (*priority < -1 || *priority > 255) { - gctl_error(req, "Priority range is 0 to 255, %jd given", - *priority); - return; - } - /* - * Since we have a priority, we also need a provider now. - * Note: be WARNS safe, by always assigning prov and only throw an - * error if *priority != -1. - */ - prov = gctl_get_asciiparam(req, "arg1"); - if (*priority > -1) { - if (prov == NULL) { - gctl_error(req, "Priority needs a disk name"); - return; - } - do_priority = 1; - } - if (*autosync && *noautosync) { - gctl_error(req, "'%s' and '%s' specified.", "autosync", - "noautosync"); - return; - } - if (*failsync && *nofailsync) { - gctl_error(req, "'%s' and '%s' specified.", "failsync", - "nofailsync"); - return; - } - if (*hardcode && *dynamic) { - gctl_error(req, "'%s' and '%s' specified.", "hardcode", - "dynamic"); - return; - } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); - return; - } - if (*balancep == '\0') - balance = sc->sc_balance; - else { - if (balance_id(balancep) == -1) { - gctl_error(req, "Invalid balance algorithm."); - sx_xunlock(&sc->sc_lock); - return; - } - balance = balance_id(balancep); - } - slicep = gctl_get_paraml(req, "slice", sizeof(*slicep)); - if (slicep == NULL) { - gctl_error(req, "No '%s' argument.", "slice"); - sx_xunlock(&sc->sc_lock); - return; - } - if (*slicep == -1) - slice = sc->sc_slice; - else - slice = *slicep; - /* Enforce usage() of -p not allowing any other options. */ - if (do_priority && (*autosync || *noautosync || *failsync || - *nofailsync || *hardcode || *dynamic || *slicep != -1 || - *balancep != '\0')) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "only -p accepted when setting priority"); - return; - } - if (sc->sc_balance == balance && sc->sc_slice == slice && !*autosync && - !*noautosync && !*failsync && !*nofailsync && !*hardcode && - !*dynamic && !do_priority) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Nothing has changed."); - return; - } - if ((!do_priority && *nargs != 1) || (do_priority && *nargs != 2)) { - sx_xunlock(&sc->sc_lock); + if (*nargs < 4) { gctl_error(req, "Invalid number of arguments."); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { - sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - sc->sc_balance = balance; - sc->sc_slice = slice; - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) { - if (*autosync) { - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOAUTOSYNC; - do_sync = 1; - } - } else { - if (*noautosync) - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOAUTOSYNC; - } - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOFAILSYNC) != 0) { - if (*failsync) - sc->sc_flags &= ~G_RAID_DEVICE_FLAG_NOFAILSYNC; - } else { - if (*nofailsync) { - sc->sc_flags |= G_RAID_DEVICE_FLAG_NOFAILSYNC; - dirty = 0; - } - } - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - /* - * Handle priority first, since we only need one disk, do one - * operation on it and then we're done. No need to check other - * flags, as usage doesn't allow it. - */ - if (do_priority) { - if (strcmp(disk->d_consumer->provider->name, prov) == 0) { - if (disk->d_priority == *priority) - gctl_error(req, "Nothing has changed."); - else { - disk->d_priority = *priority; - g_raid_update_metadata(disk); - } - break; - } - continue; - } - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_SYNCHRONIZING) - disk->d_flags &= ~G_RAID_DISK_FLAG_FORCE_SYNC; - } - if (!dirty) - disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; - g_raid_update_metadata(disk); - if (do_sync) { - if (disk->d_state == G_RAID_DISK_STATE_STALE) { - g_raid_event_send(disk, - G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_DISK); - } - } - } - sx_xunlock(&sc->sc_lock); -} - -static void -g_raid_ctl_rebuild(struct gctl_req *req, struct g_class *mp) -{ - struct g_raid_metadata md; - struct g_raid_softc *sc; - struct g_raid_disk *disk; - struct g_provider *pp; - const char *name; - char param[16]; - int error, *nargs; - u_int i; - - nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); - if (nargs == NULL) { - gctl_error(req, "No '%s' argument.", "nargs"); - return; - } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); - return; - } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + format = gctl_get_asciiparam(req, "arg0"); + if (format == NULL) { + gctl_error(req, "No format recieved."); return; } - sc = g_raid_find_device(mp, name); - if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + crstatus = g_raid_create_node_format(format, &geom); + if (crstatus == G_RAID_MD_TASTE_FAIL) { + gctl_error(req, "Failed to create node with format '%s'.", + format); return; } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; - } - if (g_raid_ndisks(sc, G_RAID_DISK_STATE_ACTIVE) == 1 && - disk->d_state == G_RAID_DISK_STATE_ACTIVE) { - /* - * This is the last active disk. There will be nothing - * to rebuild it from, so deny this request. - */ - gctl_error(req, - "Provider %s is the last active provider in %s.", - name, sc->sc_geom->name); - break; - } - /* - * Do rebuild by resetting syncid, disconnecting the disk and - * connecting it again. - */ - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOAUTOSYNC) != 0) - disk->d_flags |= G_RAID_DISK_FLAG_FORCE_SYNC; - g_raid_update_metadata(disk); - pp = disk->d_consumer->provider; - g_topology_lock(); - error = g_raid_read_metadata(disk->d_consumer, &md); - g_topology_unlock(); - g_raid_event_send(disk, G_RAID_DISK_STATE_DISCONNECTED, - G_RAID_EVENT_WAIT); - if (error != 0) { - gctl_error(req, "Cannot read metadata from %s.", - pp->name); - continue; - } - error = g_raid_add_disk(sc, pp, &md); - if (error != 0) { - gctl_error(req, "Cannot reconnect component %s.", - pp->name); - continue; - } + sc = (struct g_raid_softc *)geom->softc; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + ctlstatus = G_RAID_MD_CTL(sc->sc_md, req); + if (ctlstatus < 0) { + gctl_error(req, "Command failed: %d.", ctlstatus); + if (crstatus == G_RAID_MD_TASTE_NEW) + g_raid_destroy_node(sc, 0); } sx_xunlock(&sc->sc_lock); + g_topology_lock(); } static void -g_raid_ctl_remove(struct gctl_req *req, struct g_class *mp) +g_raid_ctl_stop(struct gctl_req *req, struct g_class *mp) { struct g_raid_softc *sc; - struct g_raid_disk *disk; - const char *name; - char param[16]; - int *nargs; - u_int i; + const char *nodename; + int *nargs, *force; + int error, how; nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); if (nargs == NULL) { gctl_error(req, "No '%s' argument.", "nargs"); return; } - if (*nargs < 2) { - gctl_error(req, "Too few arguments."); + if (*nargs < 1) { + gctl_error(req, "Invalid number of arguments."); return; } - name = gctl_get_asciiparam(req, "arg0"); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", 0); + nodename = gctl_get_asciiparam(req, "arg0"); + if (nodename == NULL) { + gctl_error(req, "No node name recieved."); return; } - sc = g_raid_find_device(mp, name); + sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "No such device: %s.", name); + gctl_error(req, "Node '%s' not found.", nodename); return; } - if (g_raid_ndisks(sc, -1) < sc->sc_ndisks) { + force = gctl_get_paraml(req, "force", sizeof(*force)); + if (force != NULL && *force) + how = G_RAID_DESTROY_HARD; + else + how = G_RAID_DESTROY_SOFT; + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + error = g_raid_destroy(sc, how); + if (error != 0) sx_xunlock(&sc->sc_lock); - gctl_error(req, "Not all disks connected. Try 'forget' command " - "first."); - return; - } - for (i = 1; i < (u_int)*nargs; i++) { - snprintf(param, sizeof(param), "arg%u", i); - name = gctl_get_asciiparam(req, param); - if (name == NULL) { - gctl_error(req, "No 'arg%u' argument.", i); - continue; - } - disk = g_raid_find_disk(sc, name); - if (disk == NULL) { - gctl_error(req, "No such provider: %s.", name); - continue; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Dec 24 15:36:13 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 28676106564A; Fri, 24 Dec 2010 15:36:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0C5C08FC17; Fri, 24 Dec 2010 15:36:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBOFaCDn094495; Fri, 24 Dec 2010 15:36:12 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBOFaCEZ094493; Fri, 24 Dec 2010 15:36:12 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201012241536.oBOFaCEZ094493@svn.freebsd.org> From: Alexander Motin Date: Fri, 24 Dec 2010 15:36:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216690 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Dec 2010 15:36:13 -0000 Author: mav Date: Fri Dec 24 15:36:12 2010 New Revision: 216690 URL: http://svn.freebsd.org/changeset/base/216690 Log: Hold root mounting while metadata module waits for disks. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Fri Dec 24 11:08:30 2010 (r216689) +++ projects/graid/head/sys/geom/raid/md_intel.c Fri Dec 24 15:36:12 2010 (r216690) @@ -157,6 +157,7 @@ struct g_raid_md_intel_object { struct callout mdio_start_co; /* STARTING state timer. */ int mdio_disks_present; int mdio_started; + struct root_hold_token *mdio_rootmount; /* Root mount delay token. */ }; static g_raid_md_create_t g_raid_md_create_intel; @@ -486,6 +487,7 @@ g_raid_md_intel_start(struct g_raid_soft md = sc->sc_md; mdi = (struct g_raid_md_intel_object *)md; meta = mdi->mdio_meta; + /* Create volumes */ for (i = 0; i < meta->total_volumes; i++) { mvol = intel_get_volume(meta, i); @@ -510,9 +512,14 @@ g_raid_md_intel_start(struct g_raid_soft vol->v_sectorsize = 512; //ZZZ g_raid_start_volume(vol); } - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + LIST_FOREACH(disk, &sc->sc_disks, d_next) g_raid_md_intel_start_disk(disk); - } + + mdi->mdio_started = 1; + callout_stop(&mdi->mdio_start_co); + G_RAID_DEBUG(1, "root_mount_rel %p", mdi->mdio_rootmount); + root_mount_rel(mdi->mdio_rootmount); + mdi->mdio_rootmount = NULL; } static void @@ -553,11 +560,8 @@ g_raid_md_intel_new_disk(struct g_raid_d if (mdi->mdio_started) { g_raid_md_intel_start_disk(disk); } else { - if (mdi->mdio_disks_present == meta->total_disks) { - mdi->mdio_started = 1; - callout_stop(&mdi->mdio_start_co); + if (mdi->mdio_disks_present == meta->total_disks) g_raid_md_intel_start(sc); - } } } @@ -574,7 +578,6 @@ g_raid_intel_go(void *arg) sx_xlock(&sc->sc_lock); if (!mdi->mdio_started) { G_RAID_DEBUG(0, "Force node %s start due to timeout.", sc->sc_name); - mdi->mdio_started = 1; g_raid_md_intel_start(sc); } sx_xunlock(&sc->sc_lock); @@ -695,6 +698,8 @@ g_raid_md_taste_intel(struct g_raid_md_o callout_init(&mdi->mdio_start_co, 1); callout_reset(&mdi->mdio_start_co, g_raid_start_timeout * hz, g_raid_intel_go, sc); + mdi->mdio_rootmount = root_mount_hold("GRAID-Intel"); + G_RAID_DEBUG(1, "root_mount_hold %p", mdi->mdio_rootmount); } rcp = g_new_consumer(geom); @@ -920,7 +925,6 @@ g_raid_md_ctl_intel(struct g_raid_md_obj pd->pd_meta = intel_meta_copy(meta); intel_meta_write(disk->d_consumer, meta); } - mdi->mdio_started = 1; g_raid_md_intel_start(sc); return (0); } @@ -960,6 +964,9 @@ g_raid_md_free_intel(struct g_raid_md_ob if (!mdi->mdio_started) { mdi->mdio_started = 0; callout_stop(&mdi->mdio_start_co); + G_RAID_DEBUG(1, "root_mount_rel %p", mdi->mdio_rootmount); + root_mount_rel(mdi->mdio_rootmount); + mdi->mdio_rootmount = NULL; } if (mdi->mdio_meta != NULL) { free(mdi->mdio_meta, M_MD_INTEL);