Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Feb 2011 14:29:34 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r218520 - in projects/graid/8: . contrib/bsnmp/snmpd contrib/top contrib/xz gnu/usr.bin lib lib/liblzma lib/librtld_db lib/libusb release/picobsd/floppy.tree/sbin sbin/geom/class/raid s...
Message-ID:  <201102101429.p1AETYIr024728@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Thu Feb 10 14:29:34 2011
New Revision: 218520
URL: http://svn.freebsd.org/changeset/base/218520

Log:
  MFH
  r218470, r218472, r218479, r218480, r218481, r218486, r218491, r218504,
  r218512, r218514, r218515, r218516, r218518, r218519

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/md_intel.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/LOCKS   (props changed)
  projects/graid/8/MAINTAINERS   (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/README   (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/   (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/amd/   (props changed)
  projects/graid/8/contrib/bc/   (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/cvs/   (props changed)
  projects/graid/8/contrib/diff/   (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/gcclibs/   (props changed)
  projects/graid/8/contrib/gdb/   (props changed)
  projects/graid/8/contrib/gdtoa/   (props changed)
  projects/graid/8/contrib/gnu-sort/   (props changed)
  projects/graid/8/contrib/gperf/   (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/libbegemot/   (props changed)
  projects/graid/8/contrib/libf2c/   (props changed)
  projects/graid/8/contrib/libobjc/   (props changed)
  projects/graid/8/contrib/libpcap/   (props changed)
  projects/graid/8/contrib/libreadline/   (props changed)
  projects/graid/8/contrib/libstdc++/   (props changed)
  projects/graid/8/contrib/lukemftp/   (props changed)
  projects/graid/8/contrib/lukemftpd/   (props changed)
  projects/graid/8/contrib/ncurses/   (props changed)
  projects/graid/8/contrib/netcat/   (props changed)
  projects/graid/8/contrib/ngatm/   (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/opie/   (props changed)
  projects/graid/8/contrib/pam_modules/   (props changed)
  projects/graid/8/contrib/pf/   (props changed)
  projects/graid/8/contrib/pnpinfo/   (props changed)
  projects/graid/8/contrib/sendmail/   (props changed)
  projects/graid/8/contrib/smbfs/   (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/texinfo/   (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/   (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/   (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/   (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/   (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/Makefile   (props changed)
  projects/graid/8/lib/Makefile.inc   (props changed)
  projects/graid/8/lib/bind/   (props changed)
  projects/graid/8/lib/csu/   (props changed)
  projects/graid/8/lib/libalias/   (props changed)
  projects/graid/8/lib/libarchive/   (props changed)
  projects/graid/8/lib/libauditd/   (props changed)
  projects/graid/8/lib/libautofs/   (props changed)
  projects/graid/8/lib/libbegemot/   (props changed)
  projects/graid/8/lib/libbluetooth/   (props changed)
  projects/graid/8/lib/libbsm/   (props changed)
  projects/graid/8/lib/libbsnmp/   (props changed)
  projects/graid/8/lib/libbz2/   (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/libcalendar/   (props changed)
  projects/graid/8/lib/libcam/   (props changed)
  projects/graid/8/lib/libcom_err/   (props changed)
  projects/graid/8/lib/libcompat/   (props changed)
  projects/graid/8/lib/libcrypt/   (props changed)
  projects/graid/8/lib/libdevinfo/   (props changed)
  projects/graid/8/lib/libdevstat/   (props changed)
  projects/graid/8/lib/libdisk/   (props changed)
  projects/graid/8/lib/libdwarf/   (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/libftpio/   (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/libipsec/   (props changed)
  projects/graid/8/lib/libipx/   (props changed)
  projects/graid/8/lib/libjail/   (props changed)
  projects/graid/8/lib/libkiconv/   (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/liblzma/Makefile   (props changed)
  projects/graid/8/lib/liblzma/Symbol.map   (props changed)
  projects/graid/8/lib/liblzma/Versions.def   (props changed)
  projects/graid/8/lib/liblzma/config.h   (props changed)
  projects/graid/8/lib/libmagic/   (props changed)
  projects/graid/8/lib/libmd/   (props changed)
  projects/graid/8/lib/libmemstat/   (props changed)
  projects/graid/8/lib/libmilter/   (props changed)
  projects/graid/8/lib/libmp/   (props changed)
  projects/graid/8/lib/libncp/   (props changed)
  projects/graid/8/lib/libnetgraph/   (props changed)
  projects/graid/8/lib/libngatm/   (props changed)
  projects/graid/8/lib/libopie/   (props changed)
  projects/graid/8/lib/libpam/   (props changed)
  projects/graid/8/lib/libpcap/   (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/librpcsvc/   (props changed)
  projects/graid/8/lib/librt/   (props changed)
  projects/graid/8/lib/librtld_db/   (props changed)
  projects/graid/8/lib/librtld_db/Makefile   (props changed)
  projects/graid/8/lib/librtld_db/librtld_db.3   (props changed)
  projects/graid/8/lib/librtld_db/rtld_db.c   (props changed)
  projects/graid/8/lib/librtld_db/rtld_db.h   (props changed)
  projects/graid/8/lib/libsbuf/   (props changed)
  projects/graid/8/lib/libsdp/   (props changed)
  projects/graid/8/lib/libsm/   (props changed)
  projects/graid/8/lib/libsmb/   (props changed)
  projects/graid/8/lib/libsmdb/   (props changed)
  projects/graid/8/lib/libsmutil/   (props changed)
  projects/graid/8/lib/libstand/   (props changed)
  projects/graid/8/lib/libtacplus/   (props changed)
  projects/graid/8/lib/libtelnet/   (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/libvgl/   (props changed)
  projects/graid/8/lib/libwrap/   (props changed)
  projects/graid/8/lib/liby/   (props changed)
  projects/graid/8/lib/libypclnt/   (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/lib/ncurses/   (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/rescue/   (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/   (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/IPXrouted/   (props changed)
  projects/graid/8/usr.sbin/Makefile   (props changed)
  projects/graid/8/usr.sbin/Makefile.inc   (props changed)
  projects/graid/8/usr.sbin/ac/   (props changed)
  projects/graid/8/usr.sbin/accton/   (props changed)
  projects/graid/8/usr.sbin/acpi/   (props changed)
  projects/graid/8/usr.sbin/adduser/   (props changed)
  projects/graid/8/usr.sbin/amd/   (props changed)
  projects/graid/8/usr.sbin/ancontrol/   (props changed)
  projects/graid/8/usr.sbin/apm/   (props changed)
  projects/graid/8/usr.sbin/apmd/   (props changed)
  projects/graid/8/usr.sbin/arp/   (props changed)
  projects/graid/8/usr.sbin/asf/   (props changed)
  projects/graid/8/usr.sbin/audit/   (props changed)
  projects/graid/8/usr.sbin/auditd/   (props changed)
  projects/graid/8/usr.sbin/auditreduce/   (props changed)
  projects/graid/8/usr.sbin/authpf/   (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/boot98cfg/   (props changed)
  projects/graid/8/usr.sbin/bootparamd/   (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/btxld/   (props changed)
  projects/graid/8/usr.sbin/burncd/   (props changed)
  projects/graid/8/usr.sbin/cdcontrol/   (props changed)
  projects/graid/8/usr.sbin/chkgrp/   (props changed)
  projects/graid/8/usr.sbin/chown/   (props changed)
  projects/graid/8/usr.sbin/chroot/   (props changed)
  projects/graid/8/usr.sbin/ckdist/   (props changed)
  projects/graid/8/usr.sbin/clear_locks/   (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/   (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/daemon/   (props changed)
  projects/graid/8/usr.sbin/dconschat/   (props changed)
  projects/graid/8/usr.sbin/devinfo/   (props changed)
  projects/graid/8/usr.sbin/digictl/   (props changed)
  projects/graid/8/usr.sbin/diskinfo/   (props changed)
  projects/graid/8/usr.sbin/dnssec-dsfromkey/   (props changed)
  projects/graid/8/usr.sbin/dnssec-keyfromlabel/   (props changed)
  projects/graid/8/usr.sbin/dnssec-keygen/   (props changed)
  projects/graid/8/usr.sbin/dnssec-signzone/   (props changed)
  projects/graid/8/usr.sbin/dumpcis/   (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/editmap/   (props changed)
  projects/graid/8/usr.sbin/edquota/   (props changed)
  projects/graid/8/usr.sbin/eeprom/   (props changed)
  projects/graid/8/usr.sbin/extattr/   (props changed)
  projects/graid/8/usr.sbin/extattrctl/   (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/ftp-proxy/   (props changed)
  projects/graid/8/usr.sbin/fwcontrol/   (props changed)
  projects/graid/8/usr.sbin/getfmac/   (props changed)
  projects/graid/8/usr.sbin/getpmac/   (props changed)
  projects/graid/8/usr.sbin/gssd/   (props changed)
  projects/graid/8/usr.sbin/gstat/   (props changed)
  projects/graid/8/usr.sbin/i2c/   (props changed)
  projects/graid/8/usr.sbin/ifmcstat/   (props changed)
  projects/graid/8/usr.sbin/inetd/   (props changed)
  projects/graid/8/usr.sbin/iostat/   (props changed)
  projects/graid/8/usr.sbin/ip6addrctl/   (props changed)
  projects/graid/8/usr.sbin/ipfwpcap/   (props changed)
  projects/graid/8/usr.sbin/jail/   (props changed)
  projects/graid/8/usr.sbin/jexec/   (props changed)
  projects/graid/8/usr.sbin/jls/   (props changed)
  projects/graid/8/usr.sbin/kbdcontrol/   (props changed)
  projects/graid/8/usr.sbin/kbdmap/   (props changed)
  projects/graid/8/usr.sbin/kernbb/   (props changed)
  projects/graid/8/usr.sbin/keyserv/   (props changed)
  projects/graid/8/usr.sbin/kgmon/   (props changed)
  projects/graid/8/usr.sbin/kgzip/   (props changed)
  projects/graid/8/usr.sbin/kldxref/   (props changed)
  projects/graid/8/usr.sbin/lastlogin/   (props changed)
  projects/graid/8/usr.sbin/lmcconfig/   (props changed)
  projects/graid/8/usr.sbin/lpr/   (props changed)
  projects/graid/8/usr.sbin/lptcontrol/   (props changed)
  projects/graid/8/usr.sbin/mailstats/   (props changed)
  projects/graid/8/usr.sbin/mailwrapper/   (props changed)
  projects/graid/8/usr.sbin/makefs/   (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/makemap/   (props changed)
  projects/graid/8/usr.sbin/manctl/   (props changed)
  projects/graid/8/usr.sbin/memcontrol/   (props changed)
  projects/graid/8/usr.sbin/mergemaster/   (props changed)
  projects/graid/8/usr.sbin/mfiutil/   (props changed)
  projects/graid/8/usr.sbin/mixer/   (props changed)
  projects/graid/8/usr.sbin/mld6query/   (props changed)
  projects/graid/8/usr.sbin/mlxcontrol/   (props changed)
  projects/graid/8/usr.sbin/mount_nwfs/   (props changed)
  projects/graid/8/usr.sbin/mount_portalfs/   (props changed)
  projects/graid/8/usr.sbin/mount_smbfs/   (props changed)
  projects/graid/8/usr.sbin/mountd/   (props changed)
  projects/graid/8/usr.sbin/moused/   (props changed)
  projects/graid/8/usr.sbin/mptable/   (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/named-checkconf/   (props changed)
  projects/graid/8/usr.sbin/named-checkzone/   (props changed)
  projects/graid/8/usr.sbin/named.reload/   (props changed)
  projects/graid/8/usr.sbin/ndiscvt/   (props changed)
  projects/graid/8/usr.sbin/ndp/   (props changed)
  projects/graid/8/usr.sbin/newsyslog/   (props changed)
  projects/graid/8/usr.sbin/nfscbd/   (props changed)
  projects/graid/8/usr.sbin/nfsd/   (props changed)
  projects/graid/8/usr.sbin/nfsdumpstate/   (props changed)
  projects/graid/8/usr.sbin/nfsrevoke/   (props changed)
  projects/graid/8/usr.sbin/nfsuserd/   (props changed)
  projects/graid/8/usr.sbin/ngctl/   (props changed)
  projects/graid/8/usr.sbin/nghook/   (props changed)
  projects/graid/8/usr.sbin/nologin/   (props changed)
  projects/graid/8/usr.sbin/nscd/   (props changed)
  projects/graid/8/usr.sbin/ntp/   (props changed)
  projects/graid/8/usr.sbin/nvram/   (props changed)
  projects/graid/8/usr.sbin/ofwdump/   (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/pnpinfo/   (props changed)
  projects/graid/8/usr.sbin/portsnap/   (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/praliases/   (props changed)
  projects/graid/8/usr.sbin/praudit/   (props changed)
  projects/graid/8/usr.sbin/procctl/   (props changed)
  projects/graid/8/usr.sbin/pstat/   (props changed)
  projects/graid/8/usr.sbin/pw/   (props changed)
  projects/graid/8/usr.sbin/pwd_mkdb/   (props changed)
  projects/graid/8/usr.sbin/quot/   (props changed)
  projects/graid/8/usr.sbin/quotaon/   (props changed)
  projects/graid/8/usr.sbin/rarpd/   (props changed)
  projects/graid/8/usr.sbin/repquota/   (props changed)
  projects/graid/8/usr.sbin/rip6query/   (props changed)
  projects/graid/8/usr.sbin/rmt/   (props changed)
  projects/graid/8/usr.sbin/rndc/   (props changed)
  projects/graid/8/usr.sbin/rndc-confgen/   (props changed)
  projects/graid/8/usr.sbin/route6d/   (props changed)
  projects/graid/8/usr.sbin/rpc.lockd/   (props changed)
  projects/graid/8/usr.sbin/rpc.statd/   (props changed)
  projects/graid/8/usr.sbin/rpc.umntall/   (props changed)
  projects/graid/8/usr.sbin/rpc.yppasswdd/   (props changed)
  projects/graid/8/usr.sbin/rpc.ypupdated/   (props changed)
  projects/graid/8/usr.sbin/rpc.ypxfrd/   (props changed)
  projects/graid/8/usr.sbin/rpcbind/   (props changed)
  projects/graid/8/usr.sbin/rrenumd/   (props changed)
  projects/graid/8/usr.sbin/rtadvd/   (props changed)
  projects/graid/8/usr.sbin/rtprio/   (props changed)
  projects/graid/8/usr.sbin/rtsold/   (props changed)
  projects/graid/8/usr.sbin/rwhod/   (props changed)
  projects/graid/8/usr.sbin/sa/   (props changed)
  projects/graid/8/usr.sbin/sade/   (props changed)
  projects/graid/8/usr.sbin/sendmail/   (props changed)
  projects/graid/8/usr.sbin/service/   (props changed)
  projects/graid/8/usr.sbin/service/Makefile   (props changed)
  projects/graid/8/usr.sbin/service/service.8   (props changed)
  projects/graid/8/usr.sbin/service/service.sh   (props changed)
  projects/graid/8/usr.sbin/services_mkdb/   (props changed)
  projects/graid/8/usr.sbin/services_mkdb/Makefile   (props changed)
  projects/graid/8/usr.sbin/services_mkdb/services_mkdb.8   (props changed)
  projects/graid/8/usr.sbin/services_mkdb/services_mkdb.c   (props changed)
  projects/graid/8/usr.sbin/services_mkdb/uniq.c   (props changed)
  projects/graid/8/usr.sbin/setfib/   (props changed)
  projects/graid/8/usr.sbin/setfmac/   (props changed)
  projects/graid/8/usr.sbin/setpmac/   (props changed)
  projects/graid/8/usr.sbin/sicontrol/   (props changed)
  projects/graid/8/usr.sbin/smbmsg/   (props changed)
  projects/graid/8/usr.sbin/snapinfo/   (props changed)
  projects/graid/8/usr.sbin/spkrtest/   (props changed)
  projects/graid/8/usr.sbin/spray/   (props changed)
  projects/graid/8/usr.sbin/sysinstall/   (props changed)
  projects/graid/8/usr.sbin/syslogd/   (props changed)
  projects/graid/8/usr.sbin/tcpdchk/   (props changed)
  projects/graid/8/usr.sbin/tcpdmatch/   (props changed)
  projects/graid/8/usr.sbin/tcpdrop/   (props changed)
  projects/graid/8/usr.sbin/tcpdump/   (props changed)
  projects/graid/8/usr.sbin/timed/   (props changed)
  projects/graid/8/usr.sbin/traceroute/   (props changed)
  projects/graid/8/usr.sbin/traceroute6/   (props changed)
  projects/graid/8/usr.sbin/trpt/   (props changed)
  projects/graid/8/usr.sbin/tzsetup/   (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/usbdevs/   (props changed)
  projects/graid/8/usr.sbin/vidcontrol/   (props changed)
  projects/graid/8/usr.sbin/vipw/   (props changed)
  projects/graid/8/usr.sbin/wake/   (props changed)
  projects/graid/8/usr.sbin/watch/   (props changed)
  projects/graid/8/usr.sbin/watchdogd/   (props changed)
  projects/graid/8/usr.sbin/wlandebug/   (props changed)
  projects/graid/8/usr.sbin/wlconfig/   (props changed)
  projects/graid/8/usr.sbin/wpa/   (props changed)
  projects/graid/8/usr.sbin/yp_mkdb/   (props changed)
  projects/graid/8/usr.sbin/ypbind/   (props changed)
  projects/graid/8/usr.sbin/yppoll/   (props changed)
  projects/graid/8/usr.sbin/yppush/   (props changed)
  projects/graid/8/usr.sbin/ypserv/   (props changed)
  projects/graid/8/usr.sbin/ypset/   (props changed)
  projects/graid/8/usr.sbin/zic/   (props changed)
  projects/graid/8/usr.sbin/zzz/   (props changed)

Modified: projects/graid/8/sbin/geom/class/raid/geom_raid.c
==============================================================================
--- projects/graid/8/sbin/geom/class/raid/geom_raid.c	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sbin/geom/class/raid/geom_raid.c	Thu Feb 10 14:29:34 2011	(r218520)
@@ -47,19 +47,21 @@ uint32_t version = G_RAID_VERSION;
 struct g_command class_commands[] = {
 	{ "label", G_FLAG_VERBOSE, NULL,
 	    {
+		{ 'f', "force", NULL, G_TYPE_BOOL },
 		{ 'S', "size", G_VAL_OPTIONAL, G_TYPE_NUMBER },
 		{ 's', "strip", G_VAL_OPTIONAL, G_TYPE_NUMBER },
 		G_OPT_SENTINEL
 	    },
-	    NULL, "[-S size] [-s stripsize] format label level prov ..."
+	    NULL, "[-fv] [-S size] [-s stripsize] format label level prov ..."
 	},
 	{ "add", G_FLAG_VERBOSE, NULL,
 	    {
+		{ 'f', "force", NULL, G_TYPE_BOOL },
 		{ 'S', "size", G_VAL_OPTIONAL, G_TYPE_NUMBER },
 		{ 's', "strip", G_VAL_OPTIONAL, G_TYPE_NUMBER },
 		G_OPT_SENTINEL
 	    },
-	    NULL, "[-S size] [-s stripsize] name label level"
+	    NULL, "[-fv] [-S size] [-s stripsize] name label level"
 	},
 	{ "delete", G_FLAG_VERBOSE, NULL,
 	    {

Modified: projects/graid/8/sbin/geom/class/raid/graid.8
==============================================================================
--- projects/graid/8/sbin/geom/class/raid/graid.8	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sbin/geom/class/raid/graid.8	Thu Feb 10 14:29:34 2011	(r218520)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 5, 2011
+.Dd February 10, 2011
 .Dt GRAID 8
 .Os
 .Sh NAME
@@ -33,6 +33,7 @@
 .Sh SYNOPSIS
 .Nm
 .Cm label
+.Op Fl f
 .Op Fl S Ar size
 .Op Fl s Ar strip
 .Ar format
@@ -41,6 +42,7 @@
 .Ar prov ...
 .Nm
 .Cm add
+.Op Fl f
 .Op Fl S Ar size
 .Op Fl s Ar strip
 .Ar name
@@ -114,6 +116,9 @@ and metadata format.
 .Pp
 Additional options include:
 .Bl -tag -width ".Fl s Ar strip"
+.It Fl f
+Enforce specified configuration creation if it is officially unsupported,
+but technically can be created.
 .It Fl S Ar size
 Use
 .Ar size
@@ -200,6 +205,8 @@ The format used by Intel RAID BIOS.
 Supports up to two volumes per array.
 Supports configurations: RAID0 (2+ disks), RAID1 (2 disks),
 RAID5 (3+ disks), RAID10 (4 disks).
+Configurations not supported by Intel RAID BIOS, but enforsable on your own
+risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks).
 .El
 .Sh SUPPORTED RAID LEVELS
 The GEOM RAID class follows a modular design, allowing different RAID levels

Modified: projects/graid/8/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.c	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sys/geom/raid/g_raid.c	Thu Feb 10 14:29:34 2011	(r218520)
@@ -275,8 +275,6 @@ g_raid_volume_level2str(int level, int q
 		return ("RAID5");
 	case G_RAID_VOLUME_RL_RAID6:
 		return ("RAID6");
-	case G_RAID_VOLUME_RL_RAID10:
-		return ("RAID10");
 	case G_RAID_VOLUME_RL_RAID1E:
 		return ("RAID1E");
 	case G_RAID_VOLUME_RL_SINGLE:
@@ -310,9 +308,8 @@ g_raid_volume_str2level(const char *str,
 		*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)
+	else if (strcasecmp(str, "RAID10") == 0 ||
+		 strcasecmp(str, "RAID1E") == 0)
 		*level = G_RAID_VOLUME_RL_RAID1E;
 	else if (strcasecmp(str, "SINGLE") == 0)
 		*level = G_RAID_VOLUME_RL_SINGLE;
@@ -910,6 +907,7 @@ g_raid_start_request(struct bio *bp)
 	sc = bp->bio_to->geom->softc;
 	sx_assert(&sc->sc_lock, SX_LOCKED);
 	vol = bp->bio_to->private;
+
 	/*
 	 * Check to see if this item is in a locked range.  If so,
 	 * queue it to our locked queue and return.  We'll requeue
@@ -1073,7 +1071,7 @@ void
 g_raid_subdisk_iostart(struct g_raid_subdisk *sd, struct bio *bp)
 {
 	struct g_consumer *cp;
-	struct g_raid_disk *disk;
+	struct g_raid_disk *disk, *tdisk;
 
 	bp->bio_caller1 = sd;
 
@@ -1103,6 +1101,17 @@ nodisk:
 	bp->bio_from = cp;
 	bp->bio_to = cp->provider;
 	cp->index++;
+
+	/* Update average disks load. */
+	TAILQ_FOREACH(tdisk, &sd->sd_softc->sc_disks, d_next) {
+		if (tdisk->d_consumer == NULL)
+			tdisk->d_load = 0;
+		else
+			tdisk->d_load = (tdisk->d_consumer->index *
+			    G_RAID_SUBDISK_LOAD_SCALE + tdisk->d_load * 7) / 8;
+	}
+
+	disk->d_last_offset = bp->bio_offset + bp->bio_length;
 	if (dumping) {
 		G_RAID_LOGREQ(3, bp, "Sending dumping request.");
 		if (bp->bio_cmd == BIO_WRITE) {
@@ -1309,10 +1318,11 @@ out:
 static void
 g_raid_launch_provider(struct g_raid_volume *vol)
 {
-//	struct g_raid_disk *disk;
+	struct g_raid_disk *disk;
 	struct g_raid_softc *sc;
 	struct g_provider *pp;
 	char name[G_RAID_MAX_VOLUMENAME];
+	off_t off;
 
 	sc = vol->v_softc;
 	sx_assert(&sc->sc_lock, SX_LOCKED);
@@ -1331,14 +1341,25 @@ g_raid_launch_provider(struct g_raid_vol
 	pp->sectorsize = vol->v_sectorsize;
 	pp->stripesize = 0;
 	pp->stripeoffset = 0;
-#if 0
-	TAILQ_FOREACH(disk, &sc->sc_disks, d_next) {
-		if (disk->d_consumer && disk->d_consumer->provider &&
-		    disk->d_consumer->provider->stripesize > pp->stripesize) {
+	if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 ||
+	    vol->v_raid_level == G_RAID_VOLUME_RL_RAID3 ||
+	    vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE ||
+	    vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) {
+		if ((disk = vol->v_subdisks[0].sd_disk) != NULL &&
+		    disk->d_consumer != NULL &&
+		    disk->d_consumer->provider != NULL) {
 			pp->stripesize = disk->d_consumer->provider->stripesize;
+			off = disk->d_consumer->provider->stripeoffset;
+			pp->stripeoffset = off + vol->v_subdisks[0].sd_offset;
+			if (off > 0)
+				pp->stripeoffset %= off;
 		}
-	}
-#endif
+		if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID3) {
+			pp->stripesize *= (vol->v_disks_count - 1);
+			pp->stripeoffset *= (vol->v_disks_count - 1);
+		}
+	} else
+		pp->stripesize = vol->v_strip_size;
 	vol->v_provider = pp;
 	g_error_provider(pp, 0);
 	g_topology_unlock();

Modified: projects/graid/8/sys/geom/raid/g_raid.h
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.h	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sys/geom/raid/g_raid.h	Thu Feb 10 14:29:34 2011	(r218520)
@@ -98,6 +98,7 @@ extern struct g_class g_raid_class;
  *				doing some desirable action such as bad
  *				block remapping after we detect a bad part
  *				of the disk.
+ * G_RAID_BIO_FLAG_LOCKED	I/O holds range lock that should re released.
  *
  * and the following meta item:
  * G_RAID_BIO_FLAG_SPECIAL	And of the I/O flags that need to make it
@@ -107,8 +108,9 @@ extern struct g_class g_raid_class;
  */
 #define	G_RAID_BIO_FLAG_SYNC		0x01
 #define	G_RAID_BIO_FLAG_REMAP		0x02
-#define G_RAID_BIO_FLAG_SPECIAL \
+#define	G_RAID_BIO_FLAG_SPECIAL \
 		(G_RAID_BIO_FLAG_SYNC|G_RAID_BIO_FLAG_REMAP)
+#define	G_RAID_BIO_FLAG_LOCKED		0x80
 
 struct g_raid_lock {
 	off_t			 l_offset;
@@ -145,10 +147,11 @@ struct g_raid_disk {
 	struct g_consumer	*d_consumer;	/* GEOM disk consumer. */
 	void			*d_md_data;	/* Disk's metadata storage. */
 	struct g_kerneldump	 d_kd;		/* Kernel dumping method/args. */
-	u_int			 d_state;	/* Disk state. */
 	uint64_t		 d_flags;	/* Additional flags. */
+	u_int			 d_state;	/* Disk state. */
 	u_int			 d_load;	/* Disk average load. */
 	off_t			 d_last_offset;	/* Last head offset. */
+	int			 d_read_errs;	/* Count of the read errors */
 	TAILQ_HEAD(, g_raid_subdisk)	 d_subdisks; /* List of subdisks. */
 	TAILQ_ENTRY(g_raid_disk)	 d_next;	/* Next disk in the node. */
 };
@@ -167,6 +170,13 @@ struct g_raid_disk {
 #define G_RAID_SUBDISK_E_DISCONNECTED	0x03	/* A subdisk removed from volume. */
 #define G_RAID_SUBDISK_E_FIRST_TR_PRIVATE 0x80	/* translation private events */
 
+#define G_RAID_SUBDISK_POS(sd)						\
+    ((sd)->sd_disk ? ((sd)->sd_disk->d_last_offset - (sd)->sd_offset) : 0)
+#define G_RAID_SUBDISK_TRACK_SIZE	(1 * 1024 * 1024)
+#define G_RAID_SUBDISK_LOAD(sd)						\
+    ((sd)->sd_disk ? ((sd)->sd_disk->d_load) : 0)
+#define G_RAID_SUBDISK_LOAD_SCALE	256
+
 struct g_raid_subdisk {
 	struct g_raid_softc	*sd_softc;	/* Back-pointer to softc. */
 	struct g_raid_disk	*sd_disk;	/* Where this subdisk lives. */
@@ -176,7 +186,7 @@ struct g_raid_subdisk {
 	u_int			 sd_pos;	/* Position in volume. */
 	u_int			 sd_state;	/* Subdisk state. */
 	off_t			 sd_rebuild_pos; /* Rebuild position. */
-	int			 sd_read_errs;  /* Count of the read errors */
+	int			 sd_recovery;	/* Count of recovery reqs. */
 	TAILQ_ENTRY(g_raid_subdisk)	 sd_next; /* Next subdisk on disk. */
 };
 
@@ -206,7 +216,6 @@ struct g_raid_subdisk {
 #define G_RAID_VOLUME_RL_RAID4		0x04
 #define G_RAID_VOLUME_RL_RAID5		0x05
 #define G_RAID_VOLUME_RL_RAID6		0x06
-#define G_RAID_VOLUME_RL_RAID10		0x0a
 #define G_RAID_VOLUME_RL_RAID1E		0x11
 #define G_RAID_VOLUME_RL_SINGLE		0x0f
 #define G_RAID_VOLUME_RL_CONCAT		0x1f

Modified: projects/graid/8/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/8/sys/geom/raid/md_intel.c	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sys/geom/raid/md_intel.c	Thu Feb 10 14:29:34 2011	(r218520)
@@ -568,6 +568,43 @@ g_raid_md_intel_get_disk(struct g_raid_s
 	return (disk);
 }
 
+static int
+g_raid_md_intel_supported(int level, int qual, int disks, int force)
+{
+
+	switch (level) {
+	case G_RAID_VOLUME_RL_RAID0:
+		if (disks < 1)
+			return (0);
+		if (!force && (disks < 2 || disks > 6))
+			return (0);
+		break;
+	case G_RAID_VOLUME_RL_RAID1:
+		if (disks < 1)
+			return (0);
+		if (!force && (disks != 2))
+			return (0);
+		break;
+	case G_RAID_VOLUME_RL_RAID1E:
+		if (disks < 3)
+			return (0);
+		if (!force && (disks != 4))
+			return (0);
+		break;
+	case G_RAID_VOLUME_RL_RAID5:
+		if (disks < 3)
+			return (0);
+		if (!force && disks > 6)
+			return (0);
+		break;
+	default:
+		return (0);
+	}
+	if (qual != G_RAID_VOLUME_RLQ_NONE)
+		return (0);
+	return (1);
+}
+
 static struct g_raid_volume *
 g_raid_md_intel_get_volume(struct g_raid_softc *sc, int id)
 {
@@ -898,11 +935,20 @@ g_raid_md_intel_start(struct g_raid_soft
 		if (mmap->type == INTEL_T_RAID0)
 			vol->v_raid_level = G_RAID_VOLUME_RL_RAID0;
 		else if (mmap->type == INTEL_T_RAID1 &&
-		    mmap->total_disks < 4) /* >= 4 disks -> RAID10 */
-			vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
-		else if (mmap->type == INTEL_T_RAID1) /* SIC */
-			vol->v_raid_level = G_RAID_VOLUME_RL_RAID10;
-		else if (mmap->type == INTEL_T_RAID5)
+		    mmap->total_domains >= 2 &&
+		    mmap->total_domains <= mmap->total_disks) {
+			/* Assume total_domains is correct. */
+			if (mmap->total_domains == mmap->total_disks)
+				vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
+			else
+				vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E;
+		} else if (mmap->type == INTEL_T_RAID1) {
+			/* total_domains looks wrong. */
+			if (mmap->total_disks <= 2)
+				vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
+			else
+				vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E;
+		} else if (mmap->type == INTEL_T_RAID5)
 			vol->v_raid_level = G_RAID_VOLUME_RL_RAID5;
 		else
 			vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN;
@@ -954,6 +1000,8 @@ g_raid_md_intel_start(struct g_raid_soft
 	} while (disk != NULL);
 
 	mdi->mdio_started = 1;
+	G_RAID_DEBUG1(0, sc, "Array started.");
+	g_raid_md_write_intel(md, NULL, NULL, NULL);
 
 	/* Pickup any STALE/SPARE disks to refill array if needed. */
 	g_raid_md_intel_refill(sc);
@@ -1348,16 +1396,17 @@ g_raid_md_ctl_intel(struct g_raid_md_obj
 			gctl_error(req, "Unknown RAID level '%s'.", levelname);
 			return (-4);
 		}
-		if (level != G_RAID_VOLUME_RL_RAID0 &&
-		    level != G_RAID_VOLUME_RL_RAID1 &&
-		    level != G_RAID_VOLUME_RL_RAID5 &&
-		    level != G_RAID_VOLUME_RL_RAID10) {
-			gctl_error(req, "Unsupported RAID level.");
+		numdisks = *nargs - 3;
+		force = gctl_get_paraml(req, "force", sizeof(*force));
+		if (!g_raid_md_intel_supported(level, qual, numdisks,
+		    force ? *force : 0)) {
+			gctl_error(req, "Unsupported RAID level "
+			    "(0x%02x/0x%02x), or number of disks (%d).",
+			    level, qual, numdisks);
 			return (-5);
 		}
 
 		/* Search for disks, connect them and probe. */
-		numdisks = *nargs - 3;
 		size = 0x7fffffffffffffffllu;
 		sectorsize = 0;
 		for (i = 0; i < numdisks; i++) {
@@ -1515,8 +1564,10 @@ makedisk:
 			vol->v_mediasize = size;
 		else if (level == G_RAID_VOLUME_RL_RAID5)
 			vol->v_mediasize = size * (numdisks - 1);
-		else /* RAID10 */
-			vol->v_mediasize = size * (numdisks / 2);
+		else { /* RAID1E */
+			vol->v_mediasize = ((size * numdisks) / strip / 2) *
+			    strip;
+		}
 		vol->v_sectorsize = sectorsize;
 		g_raid_start_volume(vol);
 
@@ -1541,6 +1592,7 @@ makedisk:
 		}
 
 		/* Write metadata based on created entities. */
+		G_RAID_DEBUG1(0, sc, "Array started.");
 		g_raid_md_write_intel(md, NULL, NULL, NULL);
 
 		/* Pickup any STALE/SPARE disks to refill array if needed. */
@@ -1570,13 +1622,6 @@ makedisk:
 			gctl_error(req, "Unknown RAID level '%s'.", levelname);
 			return (-4);
 		}
-		if (level != G_RAID_VOLUME_RL_RAID0 &&
-		    level != G_RAID_VOLUME_RL_RAID1 &&
-		    level != G_RAID_VOLUME_RL_RAID5 &&
-		    level != G_RAID_VOLUME_RL_RAID10) {
-			gctl_error(req, "Unsupported RAID level.");
-			return (-5);
-		}
 
 		/* Look for existing volumes. */
 		i = 0;
@@ -1594,10 +1639,19 @@ makedisk:
 			return (-7);
 		}
 
+		numdisks = vol1->v_disks_count;
+		force = gctl_get_paraml(req, "force", sizeof(*force));
+		if (!g_raid_md_intel_supported(level, qual, numdisks,
+		    force ? *force : 0)) {
+			gctl_error(req, "Unsupported RAID level "
+			    "(0x%02x/0x%02x), or number of disks (%d).",
+			    level, qual, numdisks);
+			return (-5);
+		}
+
 		/* Collect info about present disks. */
 		size = 0x7fffffffffffffffllu;
 		sectorsize = 512;
-		numdisks = vol1->v_disks_count;
 		for (i = 0; i < numdisks; i++) {
 			disk = vol1->v_subdisks[i].sd_disk;
 			pd = (struct g_raid_md_intel_perdisk *)
@@ -1692,8 +1746,10 @@ makedisk:
 			vol->v_mediasize = size;
 		else if (level == G_RAID_VOLUME_RL_RAID5)
 			vol->v_mediasize = size * (numdisks - 1);
-		else /* RAID10 */
-			vol->v_mediasize = size * (numdisks / 2);
+		else { /* RAID1E */
+			vol->v_mediasize = ((size * numdisks) / strip / 2) *
+			    strip;
+		}
 		vol->v_sectorsize = sectorsize;
 		g_raid_start_volume(vol);
 
@@ -2138,15 +2194,15 @@ g_raid_md_write_intel(struct g_raid_md_o
 		if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0)
 			mmap0->type = INTEL_T_RAID0;
 		else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 ||
-		    vol->v_raid_level == G_RAID_VOLUME_RL_RAID10)
+		    vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E)
 			mmap0->type = INTEL_T_RAID1;
 		else
 			mmap0->type = INTEL_T_RAID5;
 		mmap0->total_disks = vol->v_disks_count;
-		if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID10)
-			mmap0->total_domains = vol->v_disks_count / 2;
-		else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1)
+		if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1)
 			mmap0->total_domains = vol->v_disks_count;
+		else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E)
+			mmap0->total_domains = 2;
 		else
 			mmap0->total_domains = 1;
 		mmap0->stripe_count = sd->sd_size / vol->v_strip_size /

Modified: projects/graid/8/sys/geom/raid/tr_raid1.c
==============================================================================
--- projects/graid/8/sys/geom/raid/tr_raid1.c	Thu Feb 10 12:34:27 2011	(r218519)
+++ projects/graid/8/sys/geom/raid/tr_raid1.c	Thu Feb 10 14:29:34 2011	(r218520)
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/endian.h>
 #include <sys/kernel.h>
 #include <sys/kobj.h>
+#include <sys/limits.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/mutex.h>
@@ -162,10 +163,12 @@ g_raid_tr_update_state_raid1(struct g_ra
     struct g_raid_subdisk *sd)
 {
 	struct g_raid_tr_raid1_object *trs;
+	struct g_raid_softc *sc;
 	struct g_raid_subdisk *tsd, *bestsd;
 	u_int s;
 	int i, na, ns;
 
+	sc = vol->v_softc;
 	trs = (struct g_raid_tr_raid1_object *)vol->v_tr;
 	if (trs->trso_stopping &&
 	    (trs->trso_flags & TR_RAID1_F_DOING_SOME) == 0)
@@ -193,13 +196,13 @@ g_raid_tr_update_state_raid1(struct g_ra
 			}
 			if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED) {
 				/* We found reasonable candidate. */
-				G_RAID_DEBUG1(1, vol->v_softc,
+				G_RAID_DEBUG1(1, sc,
 				    "Promote subdisk %s:%d from %s to ACTIVE.",
 				    vol->v_name, bestsd->sd_pos,
 				    g_raid_subdisk_state2str(bestsd->sd_state));
 				g_raid_change_subdisk_state(bestsd,
 				    G_RAID_SUBDISK_S_ACTIVE);
-				g_raid_write_metadata(vol->v_softc,
+				g_raid_write_metadata(sc,
 				    vol, bestsd, bestsd->sd_disk);
 			}
 		}
@@ -221,11 +224,32 @@ g_raid_tr_update_state_raid1(struct g_ra
 		    G_RAID_VOLUME_E_UP : G_RAID_VOLUME_E_DOWN,
 		    G_RAID_EVENT_VOLUME);
 		g_raid_change_volume_state(vol, s);
+		if (!trs->trso_starting && !trs->trso_stopping)
+			g_raid_write_metadata(sc, vol, NULL, NULL);
 	}
 	return (0);
 }
 
 static void
+g_raid_tr_raid1_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd,
+    struct g_raid_disk *disk)
+{
+	/*
+	 * We don't fail the last disk in the pack, since it still has decent
+	 * data on it and that's better than failing the disk if it is the root
+	 * file system.
+	 *
+	 * XXX should this be controlled via a tunable?  It makes sense for
+	 * the volume that has / on it.  I can't think of a case where we'd
+	 * want the volume to go away on this kind of event.
+	 */
+	if (g_raid_nsubdisks(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == 1 &&
+	    g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == sd)
+		return;
+	g_raid_fail_disk(sc, sd, disk);
+}
+
+static void
 g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr,
     struct g_raid_subdisk *sd)
 {
@@ -471,22 +495,46 @@ g_raid_tr_stop_raid1(struct g_raid_tr_ob
 }
 
 /*
- * Select the disk to do the reads to.  For now, we just pick the first one in
- * the list that's active always.  This ensures we favor one disk on boot, and
- * have more deterministic recovery from the weird edge cases of power
- * failure.  In the future, we can imagine policies that go for the least
- * loaded disk to improve performance, or we need to limit reads to a disk
- * during some kind of error recovery with that disk.
+ * Select the disk to read from.  Take into account: subdisk state, running
+ * error recovery, average disk load, head position and possible cache hits.
  */
+#define ABS(x)		(((x) >= 0) ? (x) : (-(x)))
 static struct g_raid_subdisk *
-g_raid_tr_raid1_select_read_disk(struct g_raid_volume *vol)
+g_raid_tr_raid1_select_read_disk(struct g_raid_volume *vol, struct bio *bp,
+    u_int mask)
 {
-	int i;
+	struct g_raid_subdisk *sd, *best;
+	int i, prio, bestprio;
 
-	for (i = 0; i < vol->v_disks_count; i++)
-		if (vol->v_subdisks[i].sd_state == G_RAID_SUBDISK_S_ACTIVE)
-			return (&vol->v_subdisks[i]);
-	return (NULL);
+	best = NULL;
+	bestprio = INT_MAX;
+	for (i = 0; i < vol->v_disks_count; i++) {
+		sd = &vol->v_subdisks[i];
+		if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE &&
+		    !((sd->sd_state == G_RAID_SUBDISK_S_REBUILD ||
+		       sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && 
+		      bp->bio_offset + bp->bio_length <
+		       sd->sd_rebuild_pos))
+			continue;
+		if ((mask & (1 << i)) != 0)
+			continue;
+		prio = G_RAID_SUBDISK_LOAD(sd);
+		prio += min(sd->sd_recovery, 255) << 22;
+		prio += (G_RAID_SUBDISK_S_ACTIVE - sd->sd_state) << 16;
+		/* If disk head is precisely in position - highly prefer it. */
+		if (G_RAID_SUBDISK_POS(sd) == bp->bio_offset)
+			prio -= 2 * G_RAID_SUBDISK_LOAD_SCALE;
+		else
+		/* If disk head is close to position - prefer it. */
+		if (ABS(G_RAID_SUBDISK_POS(sd) - bp->bio_offset) <
+		    G_RAID_SUBDISK_TRACK_SIZE)
+			prio -= 1 * G_RAID_SUBDISK_LOAD_SCALE;
+		if (prio < bestprio) {
+			best = sd;
+			bestprio = prio;
+		}
+	}
+	return (best);
 }
 
 static void
@@ -495,7 +543,7 @@ g_raid_tr_iostart_raid1_read(struct g_ra
 	struct g_raid_subdisk *sd;
 	struct bio *cbp;
 
-	sd = g_raid_tr_raid1_select_read_disk(tr->tro_volume);
+	sd = g_raid_tr_raid1_select_read_disk(tr->tro_volume, bp, 0);
 	KASSERT(sd != NULL, ("No active disks in volume %s.",
 		tr->tro_volume->v_name));
 
@@ -630,10 +678,11 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 	struct g_raid_volume *vol;
 	struct bio *pbp;
 	struct g_raid_tr_raid1_object *trs;
-	int i, error;
+	uintptr_t *mask;
+	int error, do_write;
 
 	trs = (struct g_raid_tr_raid1_object *)tr;
-	pbp = bp->bio_parent;
+	vol = tr->tro_volume;
 	if (bp->bio_cflags & G_RAID_BIO_FLAG_SYNC) {
 		/*
 		 * This operation is part of a rebuild or resync operation.
@@ -650,20 +699,30 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		 * 5MB of data, for inactive ones, we do 50MB.
 		 */
 		if (trs->trso_type == TR_RAID1_REBUILD) {
-			vol = tr->tro_volume;
 			if (bp->bio_cmd == BIO_READ) {
+
+				/* Immediately abort rebuild, if requested. */
+				if (trs->trso_flags & TR_RAID1_F_ABORT) {
+					trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
+					g_raid_tr_raid1_rebuild_abort(tr);
+					return;
+				}
+
+				/* On read error, skip and cross fingers. */
+				if (bp->bio_error != 0) {
+					G_RAID_LOGREQ(0, bp,
+					    "Read error during rebuild (%d), "
+					    "possible data loss!",
+					    bp->bio_error);
+					goto rebuild_round_done;
+				}
+
 				/*
 				 * The read operation finished, queue the
 				 * write and get out.
 				 */
 				G_RAID_LOGREQ(4, bp, "rebuild read done. %d",
 				    bp->bio_error);
-				if (bp->bio_error != 0 ||
-				    trs->trso_flags & TR_RAID1_F_ABORT) {
-					trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
-					g_raid_tr_raid1_rebuild_abort(tr);
-					return;
-				}
 				bp->bio_cmd = BIO_WRITE;
 				bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
 				bp->bio_offset = bp->bio_offset;
@@ -685,7 +744,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 				    trs->trso_flags & TR_RAID1_F_ABORT) {
 					if ((trs->trso_flags &
 					    TR_RAID1_F_ABORT) == 0) {
-						g_raid_fail_disk(sd->sd_softc,
+						g_raid_tr_raid1_fail_disk(sd->sd_softc,
 						    nsd, nsd->sd_disk);
 					}
 					trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
@@ -693,6 +752,8 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 					return;
 				}
 /* XXX A lot of the following is needed when we kick of the work -- refactor */
+rebuild_round_done:
+				nsd = trs->trso_failed_sd;
 				trs->trso_flags &= ~TR_RAID1_F_LOCKED;
 				g_raid_unlock_range(sd->sd_volume,
 				    bp->bio_offset, bp->bio_length);
@@ -749,6 +810,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		}
 		return;
 	}
+	pbp = bp->bio_parent;
 	pbp->bio_inbed++;
 	if (bp->bio_cmd == BIO_READ && bp->bio_error != 0) {
 		/*
@@ -756,11 +818,10 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		 * another disk drive, if available, before erroring out the
 		 * read.
 		 */
-		vol = tr->tro_volume;
-		sd->sd_read_errs++;
+		sd->sd_disk->d_read_errs++;
 		G_RAID_LOGREQ(0, bp,
 		    "Read error (%d), %d read errors total",
-		    bp->bio_error, sd->sd_read_errs);
+		    bp->bio_error, sd->sd_disk->d_read_errs);
 
 		/*
 		 * If there are too many read errors, we move to degraded.
@@ -768,33 +829,37 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		 * everything to get it back in sync), or just degrade the
 		 * drive, which kicks off a resync?
 		 */
-		if (sd->sd_read_errs > g_raid1_read_err_thresh) {
-			g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk);
+		do_write = 1;
+		if (sd->sd_disk->d_read_errs > g_raid1_read_err_thresh) {
+			g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk);
 			if (pbp->bio_children == 1)
-				goto remapdone;
+				do_write = 0;
 		}
 
 		/*
 		 * Find the other disk, and try to do the I/O to it.
 		 */
-		for (nsd = NULL, i = 0; i < vol->v_disks_count; i++) {
-			if (pbp->bio_children > 1)
-				break;
-			nsd = &vol->v_subdisks[i];
-			if (sd == nsd)
-				continue;
-			if (nsd->sd_state != G_RAID_SUBDISK_S_ACTIVE)
-				continue;
-			cbp = g_clone_bio(pbp);
-			if (cbp == NULL)
-				break;
-			G_RAID_LOGREQ(2, cbp, "Retrying read");
-			pbp->bio_driver1 = sd; /* Save original subdisk. */
-			cbp->bio_caller1 = nsd;
-			cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP;
-			/* Lock callback starts I/O */
-			g_raid_lock_range(sd->sd_volume,
-			    cbp->bio_offset, cbp->bio_length, pbp, cbp);
+		mask = (uintptr_t *)(&pbp->bio_driver2);
+		if (pbp->bio_children == 1) {
+			/* Save original subdisk. */
+			pbp->bio_driver1 = do_write ? sd : NULL;
+			*mask = 0;
+		}
+		*mask |= 1 << sd->sd_pos;
+		nsd = g_raid_tr_raid1_select_read_disk(vol, pbp, *mask);
+		if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) {
+			G_RAID_LOGREQ(2, cbp, "Retrying read from %d",
+			    nsd->sd_pos);
+			if (pbp->bio_children == 2 && do_write) {
+				sd->sd_recovery++;
+				cbp->bio_caller1 = nsd;
+				pbp->bio_pflags = G_RAID_BIO_FLAG_LOCKED;
+				/* Lock callback starts I/O */
+				g_raid_lock_range(sd->sd_volume,
+				    cbp->bio_offset, cbp->bio_length, pbp, cbp);
+			} else {
+				g_raid_subdisk_iostart(nsd, cbp);
+			}
 			return;
 		}
 		/*
@@ -805,10 +870,12 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		 */
 		G_RAID_LOGREQ(2, bp, "Couldn't retry read, failing it");
 	}
-	if (bp->bio_cmd == BIO_READ && bp->bio_error == 0 &&
-	    pbp->bio_children > 1) {
+	if (bp->bio_cmd == BIO_READ &&
+	    bp->bio_error == 0 &&
+	    pbp->bio_children > 1 &&
+	    pbp->bio_driver1 != NULL) {
 		/*
-		 * If it was a read, and bio_children is 2, then we just
+		 * If it was a read, and bio_children is >1, then we just
 		 * recovered the data from the second drive.  We should try to
 		 * write that data to the first drive if sector remapping is
 		 * enabled.  A write should put the data in a new place on the
@@ -823,16 +890,15 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 		if (cbp != NULL) {
 			cbp->bio_cmd = BIO_WRITE;
 			cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP;
-			G_RAID_LOGREQ(3, cbp,
+			G_RAID_LOGREQ(2, cbp,
 			    "Attempting bad sector remap on failing drive.");
 			g_raid_subdisk_iostart(pbp->bio_driver1, cbp);
 			return;
 		}
 	}
-remapdone:
-	if (bp->bio_cflags & G_RAID_BIO_FLAG_REMAP) {
+	if (pbp->bio_pflags & G_RAID_BIO_FLAG_LOCKED) {
 		/*
-		 * We're done with a remap write, mark the range as unlocked.
+		 * We're done with a recovery, mark the range as unlocked.
 		 * For any write errors, we agressively fail the disk since
 		 * there was both a READ and a WRITE error at this location.
 		 * Both types of errors generally indicates the drive is on
@@ -840,12 +906,16 @@ remapdone:
 		 * it now.  However, we need to reset error to 0 in that case
 		 * because we're not failing the original I/O which succeeded.
 		 */
-		if (pbp->bio_cmd == BIO_WRITE && bp->bio_error) {
+		if (bp->bio_cmd == BIO_WRITE && bp->bio_error) {
 			G_RAID_LOGREQ(0, bp, "Remap write failed: "
 			    "failing subdisk.");
-			g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk);
+			g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk);
 			bp->bio_error = 0;
 		}
+		if (pbp->bio_driver1 != NULL) {
+			((struct g_raid_subdisk *)pbp->bio_driver1)
+			    ->sd_recovery--;
+		}
 		G_RAID_LOGREQ(2, bp, "REMAP done %d.", bp->bio_error);
 		g_raid_unlock_range(sd->sd_volume, bp->bio_offset,
 		    bp->bio_length);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102101429.p1AETYIr024728>