From owner-svn-src-projects@FreeBSD.ORG Tue Feb 8 12:51:54 2011 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 CA3141065674; Tue, 8 Feb 2011 12:51:54 +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 B85EA8FC16; Tue, 8 Feb 2011 12:51:54 +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 p18CpsW7046423; Tue, 8 Feb 2011 12:51:54 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p18CpseE046415; Tue, 8 Feb 2011 12:51:54 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102081251.p18CpseE046415@svn.freebsd.org> From: Alexander Motin Date: Tue, 8 Feb 2011 12:51:54 +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: r218437 - in projects/graid/8: . contrib/bsnmp/snmpd contrib/top contrib/xz gnu/usr.bin lib/libusb release/picobsd/floppy.tree/sbin sbin/geom/class/raid sbin/geom/class/sched sys/geom/r... 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, 08 Feb 2011 12:51:54 -0000 Author: mav Date: Tue Feb 8 12:51:54 2011 New Revision: 218437 URL: http://svn.freebsd.org/changeset/base/218437 Log: MFH r218321, r218322, r218336, r218364, r218367, r218380, r218381, r218394, r218399, r218401, r218404, r218405, r218406, r218407, r218408, r218418, r218435. Modified: projects/graid/8/sbin/geom/class/raid/geom_raid.c projects/graid/8/sbin/geom/class/raid/graid.8 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/md_intel.c projects/graid/8/sys/geom/raid/tr_raid0.c projects/graid/8/sys/geom/raid/tr_raid1.c Directory Properties: projects/graid/8/ (props changed) projects/graid/8/COPYRIGHT (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/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/stdtime/ (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/route/ (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/acct/ (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/date/ (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/netinet/ (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/ (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/mctest/ (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/chpass/Makefile (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 Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sbin/geom/class/raid/geom_raid.c Tue Feb 8 12:51:54 2011 (r218437) @@ -61,8 +61,12 @@ struct g_command class_commands[] = { }, NULL, "[-S size] [-s stripsize] name label level" }, - { "delete", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, - "[-v] name [label|num]" + { "delete", G_FLAG_VERBOSE, NULL, + { + { 'f', "force", NULL, G_TYPE_BOOL }, + G_OPT_SENTINEL + }, + NULL, "[-fv] name [label|num]" }, { "insert", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, "[-v] name prov ..." Modified: projects/graid/8/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/8/sbin/geom/class/raid/graid.8 Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sbin/geom/class/raid/graid.8 Tue Feb 8 12:51:54 2011 (r218437) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 3, 2011 +.Dd February 5, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -48,6 +48,7 @@ .Ar level .Nm .Cm delete +.Op Fl f .Ar name .Op Ar label | Ar num .Nm @@ -142,6 +143,12 @@ Optional or .Ar num arguments allow specifying volume for deletion. +.Pp +Additional options include: +.Bl -tag -width ".Fl f" +.It Fl f +Delete volume(s) even if it is still open. +.El .It Cm insert Insert specified provider(s) into specified array instead of the first missing or failed components. Modified: projects/graid/8/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.c Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sys/geom/raid/g_raid.c Tue Feb 8 12:51:54 2011 (r218437) @@ -133,6 +133,8 @@ g_raid_node_event2str(int event) { switch (event) { + case G_RAID_NODE_E_WAKE: + return ("WAKE"); case G_RAID_NODE_E_START: return ("START"); default: @@ -187,10 +189,12 @@ g_raid_subdisk_state2str(int state) return ("FAILED"); case G_RAID_SUBDISK_S_NEW: return ("NEW"); - case G_RAID_SUBDISK_S_STALE: - return ("STALE"); case G_RAID_SUBDISK_S_REBUILD: return ("REBUILD"); + case G_RAID_SUBDISK_S_UNINITIALIZED: + return ("UNINITIALIZED"); + case G_RAID_SUBDISK_S_STALE: + return ("STALE"); case G_RAID_SUBDISK_S_RESYNC: return ("RESYNC"); case G_RAID_SUBDISK_S_ACTIVE: @@ -323,7 +327,7 @@ g_raid_volume_str2level(const char *str, return (0); } -static const char * +const char * g_raid_get_diskname(struct g_raid_disk *disk) { @@ -332,15 +336,6 @@ g_raid_get_diskname(struct g_raid_disk * return (disk->d_consumer->provider->name); } -static const char * -g_raid_get_subdiskname(struct g_raid_subdisk *subdisk) -{ - - if (subdisk->sd_disk == NULL) - return ("[unknown]"); - return (g_raid_get_diskname(subdisk->sd_disk)); -} - void g_raid_report_disk_state(struct g_raid_disk *disk) { @@ -372,7 +367,7 @@ g_raid_report_disk_state(struct g_raid_d } len = sizeof(s); g_io_getattr("GEOM::setstate", disk->d_consumer, &len, &s); - G_RAID_DEBUG(2, "Disk %s state reported as %d.", + G_RAID_DEBUG1(2, disk->d_softc, "Disk %s state reported as %d.", g_raid_get_diskname(disk), s); } @@ -380,7 +375,7 @@ void g_raid_change_disk_state(struct g_raid_disk *disk, int state) { - G_RAID_DEBUG(1, "Disk %s state changed from %s to %s.", + G_RAID_DEBUG1(0, disk->d_softc, "Disk %s state changed from %s to %s.", g_raid_get_diskname(disk), g_raid_disk_state2str(disk->d_state), g_raid_disk_state2str(state)); @@ -392,8 +387,10 @@ void g_raid_change_subdisk_state(struct g_raid_subdisk *sd, int state) { - G_RAID_DEBUG(1, "Subdisk %s state changed from %s to %s.", - g_raid_get_subdiskname(sd), + G_RAID_DEBUG1(0, sd->sd_softc, + "Subdisk %s:%d-%s state changed from %s to %s.", + sd->sd_volume->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]", g_raid_subdisk_state2str(sd->sd_state), g_raid_subdisk_state2str(state)); sd->sd_state = state; @@ -405,7 +402,8 @@ void g_raid_change_volume_state(struct g_raid_volume *vol, int state) { - G_RAID_DEBUG(1, "Volume %s state changed from %s to %s.", + G_RAID_DEBUG1(0, vol->v_softc, + "Volume %s state changed from %s to %s.", vol->v_name, g_raid_volume_state2str(vol->v_state), g_raid_volume_state2str(state)); @@ -432,7 +430,6 @@ g_raid_event_send(void *arg, int event, int error; ep = malloc(sizeof(*ep), M_RAID, M_WAITOK); - G_RAID_DEBUG(4, "%s: Sending event %p.", __func__, ep); if ((flags & G_RAID_EVENT_VOLUME) != 0) { sc = ((struct g_raid_volume *)arg)->v_softc; } else if ((flags & G_RAID_EVENT_DISK) != 0) { @@ -446,7 +443,7 @@ g_raid_event_send(void *arg, int event, ep->e_event = event; ep->e_flags = flags; ep->e_error = 0; - G_RAID_DEBUG(4, "%s: Waking up %p.", __func__, sc); + G_RAID_DEBUG1(4, sc, "Sending event %p. Waking up %p.", ep, sc); mtx_lock(&sc->sc_queue_mtx); TAILQ_INSERT_TAIL(&sc->sc_events, ep, e_next); mtx_unlock(&sc->sc_queue_mtx); @@ -456,7 +453,7 @@ g_raid_event_send(void *arg, int event, return (0); sx_assert(&sc->sc_lock, SX_XLOCKED); - G_RAID_DEBUG(4, "%s: Sleeping %p.", __func__, ep); + G_RAID_DEBUG1(4, sc, "Sleeping on %p.", ep); sx_xunlock(&sc->sc_lock); while ((ep->e_flags & G_RAID_EVENT_DONE) == 0) { mtx_lock(&sc->sc_queue_mtx); @@ -561,6 +558,30 @@ g_raid_nsubdisks(struct g_raid_volume *v return (n); } +/* + * Return the first subdisk in given state. + * If state is equal to -1, then the first connected disks. + */ +struct g_raid_subdisk * +g_raid_get_subdisk(struct g_raid_volume *vol, int state) +{ + struct g_raid_subdisk *sd; + struct g_raid_softc *sc; + u_int i; + + sc = vol->v_softc; + sx_assert(&sc->sc_lock, SX_LOCKED); + + for (i = 0; i < vol->v_disks_count; i++) { + sd = &vol->v_subdisks[i]; + if ((state == -1 && + sd->sd_state != G_RAID_SUBDISK_S_NONE) || + sd->sd_state == state) + return (sd); + } + return (NULL); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { @@ -576,18 +597,32 @@ g_raid_nrequests(struct g_raid_softc *sc return (nreqs); } +u_int +g_raid_nopens(struct g_raid_softc *sc) +{ + struct g_raid_volume *vol; + u_int opens; + + opens = 0; + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { + if (vol->v_provider_open != 0) + opens++; + } + return (opens); +} + static int g_raid_consumer_is_busy(struct g_raid_softc *sc, struct g_consumer *cp) { if (cp->index > 0) { - G_RAID_DEBUG(2, + G_RAID_DEBUG1(2, sc, "I/O requests for %s exist, can't destroy it now.", cp->provider->name); return (1); } if (g_raid_nrequests(sc, cp) > 0) { - G_RAID_DEBUG(2, + G_RAID_DEBUG1(2, sc, "I/O requests for %s in queue, can't destroy it now.", cp->provider->name); return (1); @@ -625,8 +660,6 @@ g_raid_kill_consumer(struct g_raid_softc if ((pp->geom->flags & G_GEOM_WITHER) == 0) retaste_wait = 1; } - G_RAID_DEBUG(2, "Access %s r%dw%de%d = %d", pp->name, -cp->acr, - -cp->acw, -cp->ace, 0); if (cp->acr > 0 || cp->acw > 0 || cp->ace > 0) g_access(cp, -cp->acr, -cp->acw, -cp->ace); if (retaste_wait) { @@ -684,8 +717,8 @@ g_raid_clean(struct g_raid_volume *vol, return (timeout); } vol->v_dirty = 0; - G_RAID_DEBUG(1, "Volume %s (node %s) marked as clean.", - vol->v_name, sc->sc_name); + G_RAID_DEBUG1(1, sc, "Volume %s marked as clean.", + vol->v_name); g_raid_write_metadata(sc, vol, NULL, NULL); return (0); } @@ -702,8 +735,8 @@ g_raid_dirty(struct g_raid_volume *vol) // if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOFAILSYNC) != 0) // return; vol->v_dirty = 1; - G_RAID_DEBUG(1, "Volume %s (node %s) marked as dirty.", - vol->v_name, sc->sc_name); + G_RAID_DEBUG1(1, sc, "Volume %s marked as dirty.", + vol->v_name); g_raid_write_metadata(sc, vol, NULL, NULL); } @@ -736,7 +769,7 @@ g_raid_tr_kerneldump_common(struct g_rai g_raid_start(&bp); while (!(bp.bio_flags & BIO_DONE)) { - G_RAID_DEBUG(4, "Poll..."); + G_RAID_DEBUG1(4, sc, "Poll..."); g_raid_poll(sc); DELAY(10); } @@ -752,14 +785,11 @@ g_raid_dump(void *arg, int error; vol = (struct g_raid_volume *)arg; - G_RAID_DEBUG(3, "Dumping at off %llu len %llu.", + G_RAID_DEBUG1(3, vol->v_softc, "Dumping at off %llu len %llu.", (long long unsigned)offset, (long long unsigned)length); error = G_RAID_TR_KERNELDUMP(vol->v_tr, virtual, physical, offset, length); - - G_RAID_DEBUG(3, "Dumping at off %llu len %llu done: %d.", - (long long unsigned)offset, (long long unsigned)length, error); return (error); } @@ -823,7 +853,7 @@ g_raid_start(struct bio *bp) bioq_disksort(&sc->sc_queue, bp); mtx_unlock(&sc->sc_queue_mtx); if (!dumping) { - G_RAID_DEBUG(4, "%s: Waking up %p.", __func__, sc); + G_RAID_DEBUG1(4, sc, "Waking up %p.", sc); wakeup(sc); } } @@ -933,13 +963,13 @@ g_raid_finish_with_locked_ranges(struct } if (lp->l_pending) { vol->v_pending_lock = 1; - G_RAID_DEBUG(4, + G_RAID_DEBUG1(4, vol->v_softc, "Deferred lock(%jd, %jd) has %d pending", (intmax_t)off, (intmax_t)(off + len), lp->l_pending); continue; } - G_RAID_DEBUG(4, + G_RAID_DEBUG1(4, vol->v_softc, "Deferred lock of %jd to %jd completed", (intmax_t)off, (intmax_t)(off + len)); G_RAID_TR_LOCKED(vol->v_tr, lp->l_callback_arg); @@ -996,11 +1026,11 @@ g_raid_lock_range(struct g_raid_volume * */ if (lp->l_pending > 0) { vol->v_pending_lock = 1; - G_RAID_DEBUG(4, "Locking range %jd to %jd deferred %d pend", + G_RAID_DEBUG1(4, sc, "Locking range %jd to %jd deferred %d pend", (intmax_t)off, (intmax_t)(off+len), lp->l_pending); return (EBUSY); } - G_RAID_DEBUG(4, "Locking range %jd to %jd", + G_RAID_DEBUG1(4, sc, "Locking range %jd to %jd", (intmax_t)off, (intmax_t)(off+len)); G_RAID_TR_LOCKED(vol->v_tr, lp->l_callback_arg); return (0); @@ -1024,7 +1054,7 @@ g_raid_unlock_range(struct g_raid_volume * when the worker thread runs. * XXX */ - G_RAID_DEBUG(4, "Unlocked %jd to %jd", + G_RAID_DEBUG1(4, sc, "Unlocked %jd to %jd", (intmax_t)lp->l_offset, (intmax_t)(lp->l_offset+lp->l_length)); mtx_lock(&sc->sc_queue_mtx); @@ -1136,8 +1166,7 @@ g_raid_handle_event(struct g_raid_softc g_raid_event_free(ep); } else { ep->e_flags |= G_RAID_EVENT_DONE; - G_RAID_DEBUG(4, "%s: Waking up %p.", __func__, - ep); + G_RAID_DEBUG1(4, sc, "Waking up %p.", ep); mtx_lock(&sc->sc_queue_mtx); wakeup(ep); mtx_unlock(&sc->sc_queue_mtx); @@ -1248,30 +1277,6 @@ out: sx_xunlock(&sc->sc_lock); } -#if 0 -static void -g_raid_update_idle(struct g_raid_softc *sc, struct g_raid_disk *disk) -{ - - sx_assert(&sc->sc_lock, SX_LOCKED); - - if ((sc->sc_flags & G_RAID_DEVICE_FLAG_NOFAILSYNC) != 0) - return; -#if 0 - if (!sc->sc_idle && (disk->d_flags & G_RAID_DISK_FLAG_DIRTY) == 0) { - G_RAID_DEBUG(1, "Disk %s (device %s) marked as dirty.", - g_raid_get_diskname(disk), sc->sc_name); - disk->d_flags |= G_RAID_DISK_FLAG_DIRTY; - } else if (sc->sc_idle && - (disk->d_flags & G_RAID_DISK_FLAG_DIRTY) != 0) { - G_RAID_DEBUG(1, "Disk %s (device %s) marked as clean.", - g_raid_get_diskname(disk), sc->sc_name); - disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; - } -#endif -} -#endif - static void g_raid_launch_provider(struct g_raid_volume *vol) { @@ -1308,7 +1313,8 @@ g_raid_launch_provider(struct g_raid_vol vol->v_provider = pp; g_error_provider(pp, 0); g_topology_unlock(); - G_RAID_DEBUG(0, "Volume %s launched.", pp->name); + G_RAID_DEBUG1(0, sc, "Provider %s for volume %s created.", + pp->name, vol->v_name); } static void @@ -1333,8 +1339,8 @@ g_raid_destroy_provider(struct g_raid_vo g_io_deliver(bp, ENXIO); } mtx_unlock(&sc->sc_queue_mtx); - G_RAID_DEBUG(0, "Node %s: provider %s destroyed.", sc->sc_name, - pp->name); + G_RAID_DEBUG1(0, sc, "Provider %s for volume %s destroyed.", + pp->name, vol->v_name); g_wither_provider(pp, ENXIO); g_topology_unlock(); vol->v_provider = NULL; @@ -1351,7 +1357,7 @@ g_raid_update_volume(struct g_raid_volum sc = vol->v_softc; sx_assert(&sc->sc_lock, SX_XLOCKED); - G_RAID_DEBUG(2, "Event %s for volume %s.", + G_RAID_DEBUG1(2, sc, "Event %s for volume %s.", g_raid_volume_event2str(event), vol->v_name); switch (event) { @@ -1372,7 +1378,7 @@ g_raid_update_volume(struct g_raid_volum /* Manage root mount release. */ if (vol->v_starting) { vol->v_starting = 0; - G_RAID_DEBUG(1, "root_mount_rel %p", vol->v_rootmount); + G_RAID_DEBUG1(1, sc, "root_mount_rel %p", vol->v_rootmount); root_mount_rel(vol->v_rootmount); vol->v_rootmount = NULL; } @@ -1394,9 +1400,10 @@ g_raid_update_subdisk(struct g_raid_subd vol = sd->sd_volume; sx_assert(&sc->sc_lock, SX_XLOCKED); - G_RAID_DEBUG(3, "Event %s for subdisk %s.", + G_RAID_DEBUG1(2, sc, "Event %s for subdisk %s:%d-%s.", g_raid_subdisk_event2str(event), - g_raid_get_subdiskname(sd)); + vol->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); if (vol->v_tr) G_RAID_TR_EVENT(vol->v_tr, sd, event); @@ -1414,7 +1421,7 @@ g_raid_update_disk(struct g_raid_disk *d sc = disk->d_softc; sx_assert(&sc->sc_lock, SX_XLOCKED); - G_RAID_DEBUG(2, "Event %s for disk %s.", + G_RAID_DEBUG1(2, sc, "Event %s for disk %s.", g_raid_disk_event2str(event), g_raid_get_diskname(disk)); @@ -1431,9 +1438,11 @@ g_raid_update_node(struct g_raid_softc * { sx_assert(&sc->sc_lock, SX_XLOCKED); - G_RAID_DEBUG(2, "Event %s for node %s.", - g_raid_node_event2str(event), sc->sc_name); + G_RAID_DEBUG1(2, sc, "Event %s for the array.", + g_raid_node_event2str(event)); + if (event == G_RAID_NODE_E_WAKE) + return (0); if (sc->sc_md) G_RAID_MD_EVENT(sc->sc_md, NULL, event); return (0); @@ -1442,19 +1451,19 @@ g_raid_update_node(struct g_raid_softc * static int g_raid_access(struct g_provider *pp, int acr, int acw, int ace) { - struct g_raid_volume *vol, *vol1; + struct g_raid_volume *vol; struct g_raid_softc *sc; int dcr, dcw, dce, opens, error = 0; g_topology_assert(); - G_RAID_DEBUG(2, "Access request for %s: r%dw%de%d.", pp->name, acr, - acw, ace); - sc = pp->geom->softc; vol = pp->private; KASSERT(sc != NULL, ("NULL softc (provider=%s).", pp->name)); KASSERT(vol != NULL, ("NULL volume (provider=%s).", pp->name)); + G_RAID_DEBUG1(2, sc, "Access request for %s: r%dw%de%d.", pp->name, + acr, acw, ace); + dcr = pp->acr + acr; dcw = pp->acw + acw; dce = pp->ace + ace; @@ -1473,14 +1482,11 @@ g_raid_access(struct g_provider *pp, int if (sc->sc_stopping == G_RAID_DESTROY_DELAYED && vol->v_provider_open == 0) { /* Count open volumes. */ - opens = 0; - TAILQ_FOREACH(vol1, &sc->sc_volumes, v_next) { - if (vol1->v_provider_open != 0) - opens++; - } + opens = g_raid_nopens(sc); if (opens == 0) { sc->sc_stopping = G_RAID_DESTROY_HARD; - g_raid_event_send(sc, 0, 0); /* Wake up worker. */ + /* Wake up worker to make it selfdestruct. */ + g_raid_event_send(sc, G_RAID_NODE_E_WAKE, 0); } } /* Handle open volume destruction. */ @@ -1501,7 +1507,7 @@ g_raid_create_node(struct g_class *mp, int error; g_topology_assert(); - G_RAID_DEBUG(1, "Creating node %s.", name); + G_RAID_DEBUG(1, "Creating array %s.", name); gp = g_new_geomf(mp, "%s", name); sc = malloc(sizeof(*sc), M_RAID, M_WAITOK | M_ZERO); @@ -1523,7 +1529,7 @@ g_raid_create_node(struct g_class *mp, error = kproc_create(g_raid_worker, sc, &sc->sc_worker, 0, 0, "g_raid %s", name); if (error != 0) { - G_RAID_DEBUG(1, "Cannot create kernel thread for %s.", name); + G_RAID_DEBUG(0, "Cannot create kernel thread for %s.", name); mtx_destroy(&sc->sc_queue_mtx); sx_destroy(&sc->sc_lock); g_destroy_geom(sc->sc_geom); @@ -1531,7 +1537,7 @@ g_raid_create_node(struct g_class *mp, return (NULL); } - G_RAID_DEBUG(1, "Node %s created.", name); + G_RAID_DEBUG1(0, sc, "Array %s created.", name); return (sc); } @@ -1541,7 +1547,7 @@ g_raid_create_volume(struct g_raid_softc struct g_raid_volume *vol, *vol1; int i; - G_RAID_DEBUG(1, "Creating volume %s.", name); + G_RAID_DEBUG1(1, sc, "Creating volume %s.", name); vol = malloc(sizeof(*vol), M_RAID, M_WAITOK | M_ZERO); vol->v_softc = sc; strlcpy(vol->v_name, name, G_RAID_MAX_VOLUMENAME); @@ -1572,7 +1578,7 @@ g_raid_create_volume(struct g_raid_softc /* Delay root mounting. */ vol->v_rootmount = root_mount_hold("GRAID"); - G_RAID_DEBUG(1, "root_mount_hold %p", vol->v_rootmount); + G_RAID_DEBUG1(1, sc, "root_mount_hold %p", vol->v_rootmount); vol->v_starting = 1; TAILQ_INSERT_TAIL(&sc->sc_volumes, vol, v_next); return (vol); @@ -1583,7 +1589,7 @@ g_raid_create_disk(struct g_raid_softc * { struct g_raid_disk *disk; - G_RAID_DEBUG(1, "Creating disk."); + G_RAID_DEBUG1(1, sc, "Creating disk."); disk = malloc(sizeof(*disk), M_RAID, M_WAITOK | M_ZERO); disk->d_softc = sc; disk->d_state = G_RAID_DISK_S_NONE; @@ -1598,9 +1604,11 @@ int g_raid_start_volume(struct g_raid_vo struct g_raid_tr_object *obj; int status; - G_RAID_DEBUG(2, "Starting volume %s.", vol->v_name); + G_RAID_DEBUG1(2, vol->v_softc, "Starting volume %s.", vol->v_name); LIST_FOREACH(class, &g_raid_tr_classes, trc_list) { - G_RAID_DEBUG(2, "Tasting %s for %s transformation.", vol->v_name, class->name); + G_RAID_DEBUG1(2, vol->v_softc, + "Tasting volume %s for %s transformation.", + vol->v_name, class->name); obj = (void *)kobj_create((kobj_class_t)class, M_RAID, M_WAITOK); obj->tro_class = class; @@ -1611,7 +1619,8 @@ int g_raid_start_volume(struct g_raid_vo kobj_delete((kobj_t)obj, M_RAID); } if (class == NULL) { - G_RAID_DEBUG(1, "No transformation module found for %s.", + G_RAID_DEBUG1(0, vol->v_softc, + "No transformation module found for %s.", vol->v_name); vol->v_tr = NULL; g_raid_change_volume_state(vol, G_RAID_VOLUME_S_UNSUPPORTED); @@ -1619,7 +1628,8 @@ int g_raid_start_volume(struct g_raid_vo G_RAID_EVENT_VOLUME); return (-1); } - G_RAID_DEBUG(2, "Transformation module %s chosen for %s.", + G_RAID_DEBUG1(2, vol->v_softc, + "Transformation module %s chosen for %s.", class->name, vol->v_name); vol->v_tr = obj; return (0); @@ -1651,14 +1661,14 @@ g_raid_destroy_node(struct g_raid_softc sc->sc_md = NULL; } if (sc->sc_geom != NULL) { - G_RAID_DEBUG(1, "Destroying node %s.", sc->sc_name); + G_RAID_DEBUG1(0, sc, "Array %s destroyed.", 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."); + G_RAID_DEBUG(1, "Array destroyed."); if (worker) { mtx_destroy(&sc->sc_queue_mtx); sx_xunlock(&sc->sc_lock); @@ -1670,7 +1680,7 @@ g_raid_destroy_node(struct g_raid_softc kproc_exit(0); } else { /* Wake up worker to make it selfdestruct. */ - g_raid_event_send(sc, 0, 0); + g_raid_event_send(sc, G_RAID_NODE_E_WAKE, 0); } return (0); } @@ -1683,7 +1693,7 @@ g_raid_destroy_volume(struct g_raid_volu int i; sc = vol->v_softc; - G_RAID_DEBUG(2, "Destroying volume %s.", vol->v_name); + G_RAID_DEBUG1(2, sc, "Destroying volume %s.", vol->v_name); vol->v_stopping = 1; if (vol->v_state != G_RAID_VOLUME_S_STOPPED) { if (vol->v_tr) { @@ -1696,13 +1706,13 @@ g_raid_destroy_volume(struct g_raid_volu return (EBUSY); if (vol->v_provider != NULL) return (EBUSY); + if (vol->v_provider_open != 0) + return (EBUSY); if (vol->v_tr) { G_RAID_TR_FREE(vol->v_tr); kobj_delete((kobj_t)vol->v_tr, M_RAID); vol->v_tr = NULL; } - if (vol->v_provider_open != 0) - return (EBUSY); if (vol->v_rootmount) root_mount_rel(vol->v_rootmount); g_topology_lock(); @@ -1715,10 +1725,12 @@ g_raid_destroy_volume(struct g_raid_volu continue; TAILQ_REMOVE(&disk->d_subdisks, &vol->v_subdisks[i], sd_next); } - G_RAID_DEBUG(2, "Volume %s destroyed.", vol->v_name); + G_RAID_DEBUG1(2, sc, "Volume %s destroyed.", vol->v_name); free(vol, M_RAID); - if (sc->sc_stopping == G_RAID_DESTROY_HARD) - g_raid_event_send(sc, 0, 0); /* Wake up worker. */ + if (sc->sc_stopping == G_RAID_DESTROY_HARD) { + /* Wake up worker to let it selfdestruct. */ + g_raid_event_send(sc, G_RAID_NODE_E_WAKE, 0); + } return (0); } @@ -1729,7 +1741,7 @@ g_raid_destroy_disk(struct g_raid_disk * struct g_raid_subdisk *sd, *tmp; sc = disk->d_softc; - G_RAID_DEBUG(2, "Destroying disk."); + G_RAID_DEBUG1(2, sc, "Destroying disk."); if (disk->d_consumer) { g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); @@ -1752,7 +1764,6 @@ g_raid_destroy_disk(struct g_raid_disk * int g_raid_destroy(struct g_raid_softc *sc, int how) { - struct g_raid_volume *vol; int opens; g_topology_assert_not(); @@ -1761,37 +1772,32 @@ g_raid_destroy(struct g_raid_softc *sc, sx_assert(&sc->sc_lock, SX_XLOCKED); /* Count open volumes. */ - opens = 0; - TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { - if (vol->v_provider_open != 0) - opens++; - } + opens = g_raid_nopens(sc); /* React on some opened volumes. */ if (opens > 0) { switch (how) { case G_RAID_DESTROY_SOFT: - G_RAID_DEBUG(1, - "%d volumes of %s are still open.", - opens, sc->sc_name); + G_RAID_DEBUG1(1, sc, + "%d volumes are still open.", + opens); return (EBUSY); case G_RAID_DESTROY_DELAYED: - G_RAID_DEBUG(1, - "Node %s will be destroyed on last close.", - sc->sc_name); + G_RAID_DEBUG1(1, sc, + "Array will be destroyed on last close."); sc->sc_stopping = G_RAID_DESTROY_DELAYED; return (EBUSY); case G_RAID_DESTROY_HARD: - G_RAID_DEBUG(1, - "%d volumes of %s are still open.", - opens, sc->sc_name); + G_RAID_DEBUG1(1, sc, + "%d volumes are still open.", + opens); } } /* Mark node for destruction. */ sc->sc_stopping = G_RAID_DESTROY_HARD; /* Wake up worker to let it selfdestruct. */ - g_raid_event_send(sc, 0, 0); + g_raid_event_send(sc, G_RAID_NODE_E_WAKE, 0); /* Sleep until node destroyed. */ sx_sleep(&sc->sc_stopping, &sc->sc_lock, PRIBIO | PDROP, "r:destroy", 0); @@ -1817,7 +1823,7 @@ g_raid_taste(struct g_class *mp, struct g_topology_assert(); g_trace(G_T_TOPOLOGY, "%s(%s, %s)", __func__, mp->name, pp->name); - G_RAID_DEBUG(2, "Tasting %s.", pp->name); + G_RAID_DEBUG(2, "Tasting provider %s.", pp->name); gp = g_new_geomf(mp, "mirror:taste"); /* @@ -1829,7 +1835,8 @@ g_raid_taste(struct g_class *mp, struct geom = NULL; LIST_FOREACH(class, &g_raid_md_classes, mdc_list) { - G_RAID_DEBUG(2, "Tasting %s for %s metadata.", pp->name, class->name); + G_RAID_DEBUG(2, "Tasting provider %s for %s metadata.", + pp->name, class->name); obj = (void *)kobj_create((kobj_class_t)class, M_RAID, M_WAITOK); obj->mdo_class = class; @@ -1843,7 +1850,7 @@ g_raid_taste(struct g_class *mp, struct g_detach(cp); g_destroy_consumer(cp); g_destroy_geom(gp); - G_RAID_DEBUG(2, "Tasting %s done.", pp->name); + G_RAID_DEBUG(2, "Tasting provider %s done.", pp->name); return (geom); } @@ -1854,13 +1861,13 @@ g_raid_create_node_format(const char *fo struct g_raid_md_object *obj; int status; - G_RAID_DEBUG(2, "Creating node for %s metadata.", format); + G_RAID_DEBUG(2, "Creating array 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); + G_RAID_DEBUG(1, "No support for %s metadata.", format); return (G_RAID_MD_TASTE_FAIL); } obj = (void *)kobj_create((kobj_class_t)class, M_RAID, @@ -1894,6 +1901,8 @@ void g_raid_write_metadata(struct g_raid struct g_raid_subdisk *sd, struct g_raid_disk *disk) { + if (sc->sc_stopping == G_RAID_DESTROY_HARD) + return; if (sc->sc_md) G_RAID_MD_WRITE(sc->sc_md, vol, sd, disk); } Modified: projects/graid/8/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.h Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sys/geom/raid/g_raid.h Tue Feb 8 12:51:54 2011 (r218437) @@ -64,6 +64,17 @@ extern struct g_class g_raid_class; } \ } \ } while (0) +#define G_RAID_DEBUG1(lvl, sc, fmt, ...) do { \ + if (g_raid_debug >= (lvl)) { \ + if (g_raid_debug > 0) { \ + printf("GEOM_RAID[%u]: %s: " fmt "\n", \ + lvl, (sc)->sc_name, ## __VA_ARGS__); \ + } else { \ + printf("GEOM_RAID: %s: " fmt "\n", \ + (sc)->sc_name, ## __VA_ARGS__); \ + } \ + } \ +} while (0) #define G_RAID_LOGREQ(lvl, bp, fmt, ...) do { \ if (g_raid_debug >= (lvl)) { \ if (g_raid_debug > 0) { \ @@ -240,6 +251,7 @@ struct g_raid_volume { LIST_ENTRY(g_raid_volume) v_global_next; /* Global list entry. */ }; +#define G_RAID_NODE_E_WAKE 0x00 #define G_RAID_NODE_E_START 0x01 struct g_raid_softc { @@ -327,6 +339,7 @@ int g_raid_create_node_format(const char 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); +const char * g_raid_get_diskname(struct g_raid_disk *disk); int g_raid_start_volume(struct g_raid_volume *vol); @@ -356,6 +369,9 @@ int g_raid_tr_kerneldump_common(struct g u_int g_raid_ndisks(struct g_raid_softc *sc, int state); u_int g_raid_nsubdisks(struct g_raid_volume *vol, int state); +u_int g_raid_nopens(struct g_raid_softc *sc); +struct g_raid_subdisk * g_raid_get_subdisk(struct g_raid_volume *vol, + int state); #define G_RAID_DESTROY_SOFT 0 #define G_RAID_DESTROY_DELAYED 1 #define G_RAID_DESTROY_HARD 2 Modified: projects/graid/8/sys/geom/raid/g_raid_ctl.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid_ctl.c Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sys/geom/raid/g_raid_ctl.c Tue Feb 8 12:51:54 2011 (r218437) @@ -90,7 +90,7 @@ g_raid_ctl_label(struct gctl_req *req, s } 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'.", + gctl_error(req, "Failed to create array with format '%s'.", format); return; } @@ -132,12 +132,12 @@ g_raid_ctl_stop(struct gctl_req *req, st } nodename = gctl_get_asciiparam(req, "arg0"); if (nodename == NULL) { - gctl_error(req, "No node name recieved."); + gctl_error(req, "No array name recieved."); return; } sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "Node '%s' not found.", nodename); + gctl_error(req, "Array '%s' not found.", nodename); return; } force = gctl_get_paraml(req, "force", sizeof(*force)); @@ -172,12 +172,12 @@ g_raid_ctl_other(struct gctl_req *req, s } nodename = gctl_get_asciiparam(req, "arg0"); if (nodename == NULL) { - gctl_error(req, "No node name recieved."); + gctl_error(req, "No array name recieved."); return; } sc = g_raid_find_node(mp, nodename); if (sc == NULL) { - gctl_error(req, "Node '%s' not found.", nodename); + gctl_error(req, "Array '%s' not found.", nodename); return; } g_topology_unlock(); Modified: projects/graid/8/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/8/sys/geom/raid/md_intel.c Tue Feb 8 12:49:01 2011 (r218436) +++ projects/graid/8/sys/geom/raid/md_intel.c Tue Feb 8 12:51:54 2011 (r218437) @@ -74,6 +74,19 @@ struct intel_raid_vol { uint8_t name[16]; u_int64_t total_sectors __packed; uint32_t state; +#define INTEL_ST_BOOTABLE 0x00000001 +#define INTEL_ST_BOOT_DEVICE 0x00000002 +#define INTEL_ST_READ_COALESCING 0x00000004 +#define INTEL_ST_WRITE_COALESCING 0x00000008 +#define INTEL_ST_LAST_SHUTDOWN_DIRTY 0x00000010 +#define INTEL_ST_HIDDEN_AT_BOOT 0x00000020 +#define INTEL_ST_CURRENTLY_HIDDEN 0x00000040 +#define INTEL_ST_VERIFY_AND_FIX 0x00000080 +#define INTEL_ST_MAP_STATE_UNINIT 0x00000100 +#define INTEL_ST_NO_AUTO_RECOVERY 0x00000200 +#define INTEL_ST_CLONE_N_GO 0x00000400 +#define INTEL_ST_CLONE_MAN_SYNC 0x00000800 +#define INTEL_ST_CNG_MASTER_DISK_NUM 0x00001000 uint32_t reserved; uint8_t migr_priority; uint8_t num_sub_vols; @@ -330,8 +343,10 @@ intel_meta_read(struct g_consumer *cp) { struct g_provider *pp; struct intel_raid_conf *meta; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap; char *buf; - int error, i, left; + int error, i, j, k, left, size; uint32_t checksum, *ptr; pp = cp->provider; @@ -352,14 +367,15 @@ intel_meta_read(struct g_consumer *cp) g_free(buf); return (NULL); } - if (meta->config_size > 65536) { - G_RAID_DEBUG(1, "Intel metadata size looks too big: %d", + if (meta->config_size > 65536 || + meta->config_size < sizeof(struct intel_raid_conf)) { + G_RAID_DEBUG(1, "Intel metadata size looks wrong: %d", meta->config_size); g_free(buf); return (NULL); } meta = malloc(meta->config_size, M_MD_INTEL, M_WAITOK); - memcpy(meta, buf, pp->sectorsize); + memcpy(meta, buf, min(meta->config_size, pp->sectorsize)); g_free(buf); /* Read all the rest, if needed. */ @@ -392,6 +408,68 @@ intel_meta_read(struct g_consumer *cp) return (NULL); } + /* Validate metadata size. */ + size = sizeof(struct intel_raid_conf) + + sizeof(struct intel_raid_disk) * (meta->total_disks - 1) + + sizeof(struct intel_raid_vol) * meta->total_volumes; + if (size > meta->config_size) { +badsize: + G_RAID_DEBUG(1, "Intel metadata size incorrect %d < %d", + meta->config_size, size); + free(meta, M_MD_INTEL); + return (NULL); + } + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + mmap = intel_get_map(mvol, 0); + size += 4 * (mmap->total_disks - 1); + if (size > meta->config_size) + goto badsize; + if (mvol->migr_state) { + size += sizeof(struct intel_raid_map); + if (size > meta->config_size) + goto badsize; + mmap = intel_get_map(mvol, 1); + size += 4 * (mmap->total_disks - 1); + if (size > meta->config_size) + goto badsize; + } + } + + /* Validate disk indexes. */ + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + for (j = 0; j < (mvol->migr_state ? 2 : 1); j++) { + mmap = intel_get_map(mvol, j); + for (k = 0; k < mmap->total_disks; k++) { + if ((mmap->disk_idx[k] & INTEL_DI_IDX) > + meta->total_disks) { + G_RAID_DEBUG(1, "Intel metadata disk" + " index %d too big (>%d)", + mmap->disk_idx[k] & INTEL_DI_IDX, + meta->total_disks); + free(meta, M_MD_INTEL); + return (NULL); + } + } + } + } + + /* Validate migration types. */ + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + if (mvol->migr_state && + mvol->migr_type != INTEL_MT_INIT && + mvol->migr_type != INTEL_MT_REBUILD && + mvol->migr_type != INTEL_MT_VERIFY && + mvol->migr_type != INTEL_MT_REPAIR) { + G_RAID_DEBUG(1, "Intel metadata has unsupported" + " migration type %d", mvol->migr_type); + free(meta, M_MD_INTEL); + return (NULL); + } + } + return (meta); } @@ -525,7 +603,7 @@ g_raid_md_intel_start_disk(struct g_raid /* Find disk position in metadata by it's serial. */ disk_pos = intel_meta_find_disk(meta, pd->pd_disk_meta.serial); if (disk_pos < 0) { - G_RAID_DEBUG(1, "Unknown, probably new or stale disk"); + G_RAID_DEBUG1(1, sc, "Unknown, probably new or stale disk"); /* Failed stale disk is useless for us. */ if (pd->pd_disk_meta.flags & INTEL_F_FAILED) { g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE_FAILED); @@ -546,7 +624,7 @@ g_raid_md_intel_start_disk(struct g_raid TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { if (sd->sd_offset + sd->sd_size + 4096 > (off_t)pd->pd_disk_meta.sectors * 512) { - G_RAID_DEBUG(1, + G_RAID_DEBUG1(1, sc, "Disk too small (%llu < %llu)", ((unsigned long long) pd->pd_disk_meta.sectors) * 512, @@ -586,7 +664,7 @@ nofit: if (olddisk == NULL) panic("No disk at position %d!", disk_pos); if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { - G_RAID_DEBUG(1, "More then one disk for pos %d", *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***