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 ***