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...
Alexander Motin
mav at FreeBSD.org
Tue Feb 8 12:51:54 UTC 2011
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 ***
More information about the svn-src-projects
mailing list