Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Feb 2011 14:21:07 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r218679 - 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:  <201102141421.p1EEL75m095586@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Mon Feb 14 14:21:07 2011
New Revision: 218679
URL: http://svn.freebsd.org/changeset/base/218679

Log:
  MFH r218600, r218608, r218622, r218624, r218630, r218632, r218638,
  r218649, r218651, r218653, r218669, r218674, r218678.

Added:
  projects/graid/8/sys/geom/raid/tr_raid1e.c
     - copied, changed from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c
Modified:
  projects/graid/8/sbin/geom/class/raid/graid.8
  projects/graid/8/sys/conf/files
  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_raid0.c
  projects/graid/8/sys/geom/raid/tr_raid1.c
  projects/graid/8/sys/modules/geom/geom_raid/Makefile
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/graid.8
==============================================================================
--- projects/graid/8/sbin/geom/class/raid/graid.8	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sbin/geom/class/raid/graid.8	Mon Feb 14 14:21:07 2011	(r218679)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd February 10, 2011
+.Dd February 13, 2011
 .Dt GRAID 8
 .Os
 .Sh NAME
@@ -211,7 +211,8 @@ risk: RAID1 (3+ disks), RAID1E (3+ disks
 .Sh SUPPORTED RAID LEVELS
 The GEOM RAID class follows a modular design, allowing different RAID levels
 to be used.
-Support for the following RAID levels is currently implemented: RAID0, RAID1.
+Support for the following RAID levels is currently implemented: RAID0, RAID1,
+RAID1E, RAID10.
 .Sh EXIT STATUS
 Exit status is 0 on success, and non-zero if the command fails.
 .Sh SEE ALSO

Modified: projects/graid/8/sys/conf/files
==============================================================================
--- projects/graid/8/sys/conf/files	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/conf/files	Mon Feb 14 14:21:07 2011	(r218679)
@@ -2021,6 +2021,7 @@ geom/raid/g_raid_tr_if.m	optional geom_r
 geom/raid/md_intel.c		optional geom_raid
 geom/raid/tr_raid0.c		optional geom_raid
 geom/raid/tr_raid1.c		optional geom_raid
+geom/raid/tr_raid1e.c		optional geom_raid
 geom/raid3/g_raid3.c		optional geom_raid3
 geom/raid3/g_raid3_ctl.c	optional geom_raid3
 geom/shsec/g_shsec.c		optional geom_shsec

Modified: projects/graid/8/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.c	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/geom/raid/g_raid.c	Mon Feb 14 14:21:07 2011	(r218679)
@@ -59,14 +59,20 @@ u_int g_raid_debug = 2;
 TUNABLE_INT("kern.geom.raid.debug", &g_raid_debug);
 SYSCTL_UINT(_kern_geom_raid, OID_AUTO, debug, CTLFLAG_RW, &g_raid_debug, 0,
     "Debug level");
+int g_raid_read_err_thresh = 10;
+TUNABLE_INT("kern.geom.raid.read_err_thresh", &g_raid_read_err_thresh);
+SYSCTL_UINT(_kern_geom_raid, OID_AUTO, read_err_thresh, CTLFLAG_RW,
+    &g_raid_read_err_thresh, 0,
+    "Number of read errors equated to disk failure");
 u_int g_raid_start_timeout = 15;
 TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout);
-SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout,
-    0, "Time to wait for all array components");
-static u_int g_raid_cleantime = 5;
-TUNABLE_INT("kern.geom.raid.cleantime", &g_raid_cleantime);
-SYSCTL_UINT(_kern_geom_raid, OID_AUTO, cleantime, CTLFLAG_RW,
-    &g_raid_cleantime, 0, "Mark volume as clean when idling");
+SYSCTL_UINT(_kern_geom_raid, OID_AUTO, start_timeout, CTLFLAG_RW,
+    &g_raid_start_timeout, 0,
+    "Time to wait for all array components");
+static u_int g_raid_clean_time = 5;
+TUNABLE_INT("kern.geom.raid.clean_time", &g_raid_clean_time);
+SYSCTL_UINT(_kern_geom_raid, OID_AUTO, clean_time, CTLFLAG_RW,
+    &g_raid_clean_time, 0, "Mark volume as clean when idling");
 static u_int g_raid_disconnect_on_failure = 1;
 TUNABLE_INT("kern.geom.raid.disconnect_on_failure",
     &g_raid_disconnect_on_failure);
@@ -709,7 +715,7 @@ g_raid_clean(struct g_raid_volume *vol, 
 		return (0);
 	if (acw > 0 || (acw == -1 &&
 	    vol->v_provider != NULL && vol->v_provider->acw > 0)) {
-		timeout = g_raid_cleantime - (time_uptime - vol->v_last_write);
+		timeout = g_raid_clean_time - (time_uptime - vol->v_last_write);
 		if (timeout > 0)
 			return (timeout);
 	}
@@ -737,6 +743,54 @@ g_raid_dirty(struct g_raid_volume *vol)
 	g_raid_write_metadata(sc, vol, NULL, NULL);
 }
 
+void
+g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp)
+{
+	struct g_raid_softc *sc;
+	struct g_raid_volume *vol;
+	struct g_raid_subdisk *sd;
+	struct bio_queue_head queue;
+	struct bio *cbp;
+	int i;
+
+	vol = tr->tro_volume;
+	sc = vol->v_softc;
+
+	/*
+	 * Allocate all bios before sending any request, so we can return
+	 * ENOMEM in nice and clean way.
+	 */
+	bioq_init(&queue);
+	for (i = 0; i < vol->v_disks_count; i++) {
+		sd = &vol->v_subdisks[i];
+		if (sd->sd_state == G_RAID_SUBDISK_S_NONE ||
+		    sd->sd_state == G_RAID_SUBDISK_S_FAILED)
+			continue;
+		cbp = g_clone_bio(bp);
+		if (cbp == NULL)
+			goto failure;
+		cbp->bio_caller1 = sd;
+		bioq_insert_tail(&queue, cbp);
+	}
+	for (cbp = bioq_first(&queue); cbp != NULL;
+	    cbp = bioq_first(&queue)) {
+		bioq_remove(&queue, cbp);
+		sd = cbp->bio_caller1;
+		cbp->bio_caller1 = NULL;
+		g_raid_subdisk_iostart(sd, cbp);
+	}
+	return;
+failure:
+	for (cbp = bioq_first(&queue); cbp != NULL;
+	    cbp = bioq_first(&queue)) {
+		bioq_remove(&queue, cbp);
+		g_destroy_bio(cbp);
+	}
+	if (bp->bio_error == 0)
+		bp->bio_error = ENOMEM;
+	g_raid_iodone(bp, bp->bio_error);
+}
+
 static void
 g_raid_tr_kerneldump_common_done(struct bio *bp)
 {
@@ -832,10 +886,8 @@ g_raid_start(struct bio *bp)
 	case BIO_READ:
 	case BIO_WRITE:
 	case BIO_DELETE:
-		break;
 	case BIO_FLUSH:
-		g_io_deliver(bp, EOPNOTSUPP);
-		return;
+		break;
 	case BIO_GETATTR:
 		if (!strcmp(bp->bio_attribute, "GEOM::kerneldump"))
 			g_raid_kerneldump(sc, bp);
@@ -995,6 +1047,7 @@ g_raid_iodone(struct bio *bp, int error)
 	bioq_remove(&vol->v_inflight, bp);
 	if (vol->v_pending_lock && g_raid_is_in_locked_range(vol, bp))
 		g_raid_finish_with_locked_ranges(vol, bp);
+	getmicrouptime(&vol->v_last_done);
 	g_io_deliver(bp, error);
 }
 
@@ -1221,6 +1274,7 @@ g_raid_worker(void *arg)
 	struct g_raid_event *ep;
 	struct g_raid_volume *vol;
 	struct bio *bp;
+	struct timeval now, t;
 	int timeout, rv;
 
 	sc = arg;
@@ -1244,38 +1298,59 @@ g_raid_worker(void *arg)
 		else if ((bp = bioq_takefirst(&sc->sc_queue)) != NULL)
 			;
 		else {
-			/*
-			 * Two steps to avoid overflows at HZ=1000
-			 * and idle timeouts > 2.1s.  Some rounding errors
-			 * can occur, but they are < 1tick, which is deemed to
-			 * be close enough for this purpose.
-			 */
-			int micpertic = 1000000 / hz;
-			timeout = g_raid_idle_threshold / micpertic;
-			sx_xunlock(&sc->sc_lock);
-			MSLEEP(rv, sc, &sc->sc_queue_mtx, PRIBIO | PDROP, "-",
-			    timeout);
-			sx_xlock(&sc->sc_lock);
-			goto process;
+			getmicrouptime(&now);
+			t = now;
+			TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) {
+				if (bioq_first(&vol->v_inflight) == NULL &&
+				    timevalcmp(&vol->v_last_done, &t, < ))
+					t = vol->v_last_done;
+			}
+			timevalsub(&t, &now);
+			timeout = g_raid_idle_threshold +
+			    t.tv_sec * 1000000 + t.tv_usec;
+			if (timeout > 0) {
+				/*
+				 * Two steps to avoid overflows at HZ=1000
+				 * and idle timeouts > 2.1s.  Some rounding
+				 * errors can occur, but they are < 1tick,
+				 * which is deemed to be close enough for
+				 * this purpose.
+				 */
+				int micpertic = 1000000 / hz;
+				timeout = (timeout + micpertic - 1) / micpertic;
+				sx_xunlock(&sc->sc_lock);
+				MSLEEP(rv, sc, &sc->sc_queue_mtx,
+				    PRIBIO | PDROP, "-", timeout);
+				sx_xlock(&sc->sc_lock);
+				goto process;
+			} else
+				rv = EWOULDBLOCK;
 		}
 		mtx_unlock(&sc->sc_queue_mtx);
 process:
-		if (ep != NULL)
+		if (ep != NULL) {
 			g_raid_handle_event(sc, ep);
-		if (bp != NULL) {
+		} else if (bp != NULL) {
 			if (bp->bio_to != NULL &&
 			    bp->bio_to->geom == sc->sc_geom)
 				g_raid_start_request(bp);
 			else
 				g_raid_disk_done_request(bp);
-		}
-		if (rv == EWOULDBLOCK) {
+		} else if (rv == EWOULDBLOCK) {
 			TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) {
 				if (vol->v_writes == 0 && vol->v_dirty)
 					g_raid_clean(vol, -1);
 				if (bioq_first(&vol->v_inflight) == NULL &&
-				    vol->v_tr)
-					G_RAID_TR_IDLE(vol->v_tr);
+				    vol->v_tr) {
+					t.tv_sec = g_raid_idle_threshold / 1000000;
+					t.tv_usec = g_raid_idle_threshold % 1000000;
+					timevaladd(&t, &vol->v_last_done);
+					getmicrouptime(&now);
+					if (timevalcmp(&t, &now, <= )) {
+						G_RAID_TR_IDLE(vol->v_tr);
+						vol->v_last_done = now;
+					}
+				}
 			}
 		}
 		if (sc->sc_stopping == G_RAID_DESTROY_HARD)

Modified: projects/graid/8/sys/geom/raid/g_raid.h
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.h	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/geom/raid/g_raid.h	Mon Feb 14 14:21:07 2011	(r218679)
@@ -32,6 +32,7 @@
 #include <sys/param.h>
 #include <sys/kobj.h>
 #include <sys/bio.h>
+#include <sys/time.h>
 
 #define	G_RAID_CLASS_NAME	"RAID"
 
@@ -50,6 +51,7 @@ struct g_raid_tr_object;
 #ifdef _KERNEL
 extern u_int g_raid_aggressive_spare;
 extern u_int g_raid_debug;
+extern int g_raid_read_err_thresh;
 extern u_int g_raid_start_timeout;
 extern struct g_class g_raid_class;
 
@@ -249,6 +251,7 @@ struct g_raid_volume {
 	LIST_HEAD(, g_raid_lock) v_locks;	 /* List of locked regions. */
 	int			 v_pending_lock; /* writes to locked region */
 	int			 v_dirty;	/* Volume is DIRTY. */
+	struct timeval		 v_last_done;	/* Time of the last I/O. */
 	time_t			 v_last_write;	/* Time of the last write. */
 	u_int			 v_writes;	/* Number of active writes. */
 	struct root_hold_token	*v_rootmount;	/* Root mount delay token. */
@@ -373,6 +376,7 @@ void g_raid_write_metadata(struct g_raid
 void g_raid_fail_disk(struct g_raid_softc *sc,
     struct g_raid_subdisk *sd, struct g_raid_disk *disk);
 
+void g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp);
 int g_raid_tr_kerneldump_common(struct g_raid_tr_object *tr,
     void *virtual, vm_offset_t physical, off_t offset, size_t length);
 

Modified: projects/graid/8/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/8/sys/geom/raid/md_intel.c	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/geom/raid/md_intel.c	Mon Feb 14 14:21:07 2011	(r218679)
@@ -586,7 +586,7 @@ g_raid_md_intel_supported(int level, int
 			return (0);
 		break;
 	case G_RAID_VOLUME_RL_RAID1E:
-		if (disks < 3)
+		if (disks < 2)
 			return (0);
 		if (!force && (disks != 4))
 			return (0);
@@ -776,15 +776,11 @@ nofit:
 			}
 		} else if (mvol->migr_type == INTEL_MT_INIT ||
 			   mvol->migr_type == INTEL_MT_REBUILD) {
-			if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) {
-				/* Up to date disk. */
-				g_raid_change_subdisk_state(sd,
-				    G_RAID_SUBDISK_S_ACTIVE);
-			} else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
+			if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
 				/* Freshly inserted disk. */
 				g_raid_change_subdisk_state(sd,
 				    G_RAID_SUBDISK_S_NEW);
-			} else {
+			} else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
 				/* Rebuilding disk. */
 				g_raid_change_subdisk_state(sd,
 				    G_RAID_SUBDISK_S_REBUILD);
@@ -796,18 +792,22 @@ nofit:
 					    sd->sd_volume->v_strip_size *
 					    mmap0->total_domains;
 				}
-			}
-		} else if (mvol->migr_type == INTEL_MT_VERIFY ||
-			   mvol->migr_type == INTEL_MT_REPAIR) {
-			if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) {
+			} else if (mvol->dirty) {
+				/* Dirty volume (unclean shutdown). */
+				g_raid_change_subdisk_state(sd,
+				    G_RAID_SUBDISK_S_STALE);
+			} else {
 				/* Up to date disk. */
 				g_raid_change_subdisk_state(sd,
 				    G_RAID_SUBDISK_S_ACTIVE);
-			} else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
+			}
+		} else if (mvol->migr_type == INTEL_MT_VERIFY ||
+			   mvol->migr_type == INTEL_MT_REPAIR) {
+			if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
 				/* Freshly inserted disk. */
 				g_raid_change_subdisk_state(sd,
 				    G_RAID_SUBDISK_S_NEW);
-			} else {
+			} else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) {
 				/* Resyncing disk. */
 				g_raid_change_subdisk_state(sd,
 				    G_RAID_SUBDISK_S_RESYNC);
@@ -819,6 +819,14 @@ nofit:
 					    sd->sd_volume->v_strip_size *
 					    mmap0->total_domains;
 				}
+			} else if (mvol->dirty) {
+				/* Dirty volume (unclean shutdown). */
+				g_raid_change_subdisk_state(sd,
+				    G_RAID_SUBDISK_S_STALE);
+			} else {
+				/* Up to date disk. */
+				g_raid_change_subdisk_state(sd,
+				    G_RAID_SUBDISK_S_ACTIVE);
 			}
 		}
 		g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW,
@@ -1539,6 +1547,9 @@ makedisk:
 		/* Round size down to strip or sector. */
 		if (level == G_RAID_VOLUME_RL_RAID1)
 			size -= (size % sectorsize);
+		else if (level == G_RAID_VOLUME_RL_RAID1E &&
+		    (numdisks & 1) != 0)
+			size -= (size % (2 * strip));
 		else
 			size -= (size % strip);
 		if (size <= 0) {

Modified: projects/graid/8/sys/geom/raid/tr_raid0.c
==============================================================================
--- projects/graid/8/sys/geom/raid/tr_raid0.c	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/geom/raid/tr_raid0.c	Mon Feb 14 14:21:07 2011	(r218679)
@@ -185,13 +185,12 @@ g_raid_tr_stop_raid0(struct g_raid_tr_ob
 static void
 g_raid_tr_iostart_raid0(struct g_raid_tr_object *tr, struct bio *bp)
 {
-	struct g_raid_softc *sc;
 	struct g_raid_volume *vol;
 	struct g_raid_subdisk *sd;
 	struct bio_queue_head queue;
 	struct bio *cbp;
 	char *addr;
-	off_t offset, start, length, nstripe;
+	off_t offset, start, length, nstripe, remain;
 	u_int no, strip_size;
 
 	vol = tr->tro_volume;
@@ -200,8 +199,10 @@ g_raid_tr_iostart_raid0(struct g_raid_tr
 		g_raid_iodone(bp, EIO);
 		return;
 	}
-	sc = vol->v_softc;
-
+	if (bp->bio_cmd == BIO_FLUSH) {
+		g_raid_tr_flush_common(tr, bp);
+		return;
+	}
 	addr = bp->bio_data;
 	strip_size = vol->v_strip_size;
 
@@ -211,55 +212,30 @@ g_raid_tr_iostart_raid0(struct g_raid_tr
 	start = bp->bio_offset % strip_size;
 	/* Disk number. */
 	no = nstripe % vol->v_disks_count;
-	/* Start position in disk. */
-	offset = (nstripe / vol->v_disks_count) * strip_size + start;
+	/* Stripe start position in disk. */
+	offset = (nstripe / vol->v_disks_count) * strip_size;
 	/* Length of data to operate. */
-	length = MIN(bp->bio_length, strip_size - start);
+	remain = bp->bio_length;
 
-	/*
-	 * Allocate all bios before sending any request, so we can
-	 * return ENOMEM in nice and clean way.
-	 */
 	bioq_init(&queue);
-	cbp = g_clone_bio(bp);
-	if (cbp == NULL)
-		goto failure;
-	/*
-	 * Fill in the component buf structure.
-	 */
-	cbp->bio_offset = offset;
-	cbp->bio_data = addr;
-	cbp->bio_length = length;
-	cbp->bio_caller1 = &vol->v_subdisks[no];
-	bioq_insert_tail(&queue, cbp);
-
-	offset -= offset % strip_size;
-	addr += length;
-	length = bp->bio_length - length;
-	for (no++; length > 0;
-	    no++, length -= strip_size, addr += strip_size) {
-		if (no > vol->v_disks_count - 1) {
-			no = 0;
-			offset += strip_size;
-		}
+	do {
+		length = MIN(strip_size - start, remain);
 		cbp = g_clone_bio(bp);
 		if (cbp == NULL)
 			goto failure;
-
-		/*
-		 * Fill in the component buf structure.
-		 */
-		cbp->bio_offset = offset;
+		cbp->bio_offset = offset + start;
 		cbp->bio_data = addr;
-		/*
-		 * MIN() is in case when
-		 * (bp->bio_length % sc->sc_stripesize) != 0.
-		 */
-		cbp->bio_length = MIN(strip_size, length);
-
+		cbp->bio_length = length;
 		cbp->bio_caller1 = &vol->v_subdisks[no];
 		bioq_insert_tail(&queue, cbp);
-	}
+		if (++no >= vol->v_disks_count) {
+			no = 0;
+			offset += strip_size;
+		}
+		remain -= length;
+		addr += length;
+		start = 0;
+	} while (remain > 0);
 	for (cbp = bioq_first(&queue); cbp != NULL;
 	    cbp = bioq_first(&queue)) {
 		bioq_remove(&queue, cbp);
@@ -279,54 +255,47 @@ failure:
 	g_raid_iodone(bp, bp->bio_error);
 }
 
-int
+static int
 g_raid_tr_kerneldump_raid0(struct g_raid_tr_object *tr,
     void *virtual, vm_offset_t physical, off_t boffset, size_t blength)
 {
-	struct g_raid_softc *sc;
 	struct g_raid_volume *vol;
 	char *addr;
-	off_t offset, start, length, nstripe;
+	off_t offset, start, length, nstripe, remain;
 	u_int no, strip_size;
 	int error;
 
 	vol = tr->tro_volume;
 	if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL)
 		return (ENXIO);
-	sc = vol->v_softc;
-
 	addr = virtual;
 	strip_size = vol->v_strip_size;
+
 	/* Stripe number. */
 	nstripe = boffset / strip_size;
 	/* Start position in stripe. */
 	start = boffset % strip_size;
 	/* Disk number. */
 	no = nstripe % vol->v_disks_count;
-	/* Start position in disk. */
-	offset = (nstripe / vol->v_disks_count) * strip_size + start;
+	/* Stripe tart position in disk. */
+	offset = (nstripe / vol->v_disks_count) * strip_size;
 	/* Length of data to operate. */
-	length = MIN(blength, strip_size - start);
+	remain = blength;
 
-	error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no],
-	    addr, 0, offset, length);
-	if (error != 0)
-		return (error);
-
-	offset -= offset % strip_size;
-	addr += length;
-	length = blength - length;
-	for (no++; length > 0;
-	    no++, length -= strip_size, addr += strip_size) {
-		if (no > vol->v_disks_count - 1) {
-			no = 0;
-			offset += strip_size;
-		}
+	do {
+		length = MIN(strip_size - start, remain);
 		error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no],
-		    addr, 0, offset, MIN(strip_size, length));
+		    addr, 0, offset + start, length);
 		if (error != 0)
 			return (error);
-	}
+		if (++no >= vol->v_disks_count) {
+			no = 0;
+			offset += strip_size;
+		}
+		remain -= length;
+		addr += length;
+		start = 0;
+	} while (remain > 0);
 	return (0);
 }
 

Modified: projects/graid/8/sys/geom/raid/tr_raid1.c
==============================================================================
--- projects/graid/8/sys/geom/raid/tr_raid1.c	Mon Feb 14 11:56:45 2011	(r218678)
+++ projects/graid/8/sys/geom/raid/tr_raid1.c	Mon Feb 14 14:21:07 2011	(r218679)
@@ -46,19 +46,12 @@ SYSCTL_DECL(_kern_geom_raid);
 SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1, CTLFLAG_RW, 0,
     "RAID1 parameters");
 
-#define RAID1_READ_ERR_THRESH 10 /* errors to cause a rebuild */
-static int g_raid1_read_err_thresh = RAID1_READ_ERR_THRESH;
-TUNABLE_INT("kern.geom.raid.raid1.read_err_thresh", &g_raid1_read_err_thresh);
-SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, read_err_thresh, CTLFLAG_RW,
-    &g_raid1_read_err_thresh, RAID1_READ_ERR_THRESH,
-    "Number of read errors on a subdisk that trigger a rebuild");
-
 #define RAID1_REBUILD_SLAB	(1 << 20) /* One transation in a rebuild */
 static int g_raid1_rebuild_slab = RAID1_REBUILD_SLAB;
 TUNABLE_INT("kern.geom.raid.raid1.rebuild_slab_size",
     &g_raid1_rebuild_slab);
 SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_slab_size, CTLFLAG_RW,
-    &g_raid1_rebuild_slab, RAID1_REBUILD_SLAB,
+    &g_raid1_rebuild_slab, 0,
     "Amount of the disk to rebuild each read/write cycle of the rebuild.");
 
 #define RAID1_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */
@@ -66,7 +59,7 @@ static int g_raid1_rebuild_fair_io = RAI
 TUNABLE_INT("kern.geom.raid.raid1.rebuild_fair_io",
     &g_raid1_rebuild_fair_io);
 SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_fair_io, CTLFLAG_RW,
-    &g_raid1_rebuild_fair_io, RAID1_REBUILD_FAIR_IO,
+    &g_raid1_rebuild_fair_io, 0,
     "Fraction of the I/O bandwidth to use when disk busy for rebuild.");
 
 #define RAID1_REBUILD_CLUSTER_IDLE 100
@@ -74,7 +67,7 @@ static int g_raid1_rebuild_cluster_idle 
 TUNABLE_INT("kern.geom.raid.raid1.rebuild_cluster_idle",
     &g_raid1_rebuild_cluster_idle);
 SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW,
-    &g_raid1_rebuild_cluster_idle, RAID1_REBUILD_CLUSTER_IDLE,
+    &g_raid1_rebuild_cluster_idle, 0,
     "Number of slabs to do each time we trigger a rebuild cycle");
 
 #define RAID1_REBUILD_META_UPDATE 1024 /* update meta data every 1GB or so */
@@ -82,7 +75,7 @@ static int g_raid1_rebuild_meta_update =
 TUNABLE_INT("kern.geom.raid.raid1.rebuild_meta_update",
     &g_raid1_rebuild_meta_update);
 SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_meta_update, CTLFLAG_RW,
-    &g_raid1_rebuild_meta_update, RAID1_REBUILD_META_UPDATE,
+    &g_raid1_rebuild_meta_update, 0,
     "When to update the meta data.");
 
 static MALLOC_DEFINE(M_TR_RAID1, "tr_raid1_data", "GEOM_RAID RAID1 data");
@@ -250,16 +243,16 @@ g_raid_tr_raid1_fail_disk(struct g_raid_
 }
 
 static void
-g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr,
-    struct g_raid_subdisk *sd)
+g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr)
 {
 	struct g_raid_tr_raid1_object *trs;
-	struct g_raid_subdisk *good_sd;
+	struct g_raid_subdisk *sd, *good_sd;
 	struct bio *bp;
 
 	trs = (struct g_raid_tr_raid1_object *)tr;
 	if (trs->trso_flags & TR_RAID1_F_DOING_SOME)
 		return;
+	sd = trs->trso_failed_sd;
 	good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE);
 	if (good_sd == NULL) {
 		g_raid_tr_raid1_rebuild_abort(tr);
@@ -269,13 +262,11 @@ g_raid_tr_raid1_rebuild_some(struct g_ra
 	memset(bp, 0, sizeof(*bp));
 	bp->bio_offset = sd->sd_rebuild_pos;
 	bp->bio_length = MIN(g_raid1_rebuild_slab,
-	    sd->sd_volume->v_mediasize - sd->sd_rebuild_pos);
+	    sd->sd_size - sd->sd_rebuild_pos);
 	bp->bio_data = trs->trso_buffer;
 	bp->bio_cmd = BIO_READ;
 	bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
 	bp->bio_caller1 = good_sd;
-	trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle;
-	trs->trso_fair_io = g_raid1_rebuild_fair_io;
 	trs->trso_flags |= TR_RAID1_F_DOING_SOME;
 	trs->trso_flags |= TR_RAID1_F_LOCKED;
 	g_raid_lock_range(sd->sd_volume,	/* Lock callback starts I/O */
@@ -343,7 +334,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r
 		if (trs->trso_flags & TR_RAID1_F_LOCKED) {
 			trs->trso_flags &= ~TR_RAID1_F_LOCKED;
 			len = MIN(g_raid1_rebuild_slab,
-			    vol->v_mediasize - sd->sd_rebuild_pos);
+			    sd->sd_size - sd->sd_rebuild_pos);
 			g_raid_unlock_range(tr->tro_volume,
 			    sd->sd_rebuild_pos, len);
 		}
@@ -411,7 +402,7 @@ g_raid_tr_raid1_rebuild_start(struct g_r
 	trs->trso_type = TR_RAID1_REBUILD;
 	trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_RAID1, M_WAITOK);
 	trs->trso_meta_update = g_raid1_rebuild_meta_update;
-	g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd);
+	g_raid_tr_raid1_rebuild_some(tr);
 }
 
 
@@ -511,10 +502,9 @@ g_raid_tr_raid1_select_read_disk(struct 
 	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))
+		    ((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;
@@ -601,17 +591,8 @@ g_raid_tr_iostart_raid1_write(struct g_r
 			continue;
 		}
 		cbp = g_clone_bio(bp);
-		if (cbp == NULL) {
-			for (cbp = bioq_first(&queue); cbp != NULL;
-			    cbp = bioq_first(&queue)) {
-				bioq_remove(&queue, cbp);
-				g_destroy_bio(cbp);
-			}
-			if (bp->bio_error == 0)
-				bp->bio_error = ENOMEM;
-			g_raid_iodone(bp, bp->bio_error);
-			return;
-		}
+		if (cbp == NULL)
+			goto failure;
 		cbp->bio_caller1 = sd;
 		bioq_insert_tail(&queue, cbp);
 	}
@@ -622,7 +603,16 @@ g_raid_tr_iostart_raid1_write(struct g_r
 		cbp->bio_caller1 = NULL;
 		g_raid_subdisk_iostart(sd, cbp);
 	}
-
+	return;
+failure:
+	for (cbp = bioq_first(&queue); cbp != NULL;
+	    cbp = bioq_first(&queue)) {
+		bioq_remove(&queue, cbp);
+		g_destroy_bio(cbp);
+	}
+	if (bp->bio_error == 0)
+		bp->bio_error = ENOMEM;
+	g_raid_iodone(bp, bp->bio_error);
 }
 
 static void
@@ -647,10 +637,12 @@ g_raid_tr_iostart_raid1(struct g_raid_tr
 	 */
 	if (trs->trso_failed_sd != NULL &&
 	    !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) {
-		if (--trs->trso_fair_io <= 0)
-			g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd);
 		/* Make this new or running now round short. */
 		trs->trso_recover_slabs = 0;
+		if (--trs->trso_fair_io <= 0) {
+			trs->trso_fair_io = g_raid1_rebuild_fair_io;
+			g_raid_tr_raid1_rebuild_some(tr);
+		}
 	}
 	switch (bp->bio_cmd) {
 	case BIO_READ:
@@ -662,6 +654,9 @@ g_raid_tr_iostart_raid1(struct g_raid_tr
 	case BIO_DELETE:
 		g_raid_iodone(bp, EIO);
 		break;
+	case BIO_FLUSH:
+		g_raid_tr_flush_common(tr, bp);
+		break;
 	default:
 		KASSERT(1 == 0, ("Invalid command here: %u (volume=%s)",
 		    bp->bio_cmd, vol->v_name));
@@ -674,7 +669,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
     struct g_raid_subdisk *sd, struct bio *bp)
 {
 	struct bio *cbp;
-	struct g_raid_subdisk *nsd, *good_sd;
+	struct g_raid_subdisk *nsd;
 	struct g_raid_volume *vol;
 	struct bio *pbp;
 	struct g_raid_tr_raid1_object *trs;
@@ -751,14 +746,13 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
 					g_raid_tr_raid1_rebuild_abort(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);
 				nsd->sd_rebuild_pos += bp->bio_length;
-				if (nsd->sd_rebuild_pos >= vol->v_mediasize) {
+				if (nsd->sd_rebuild_pos >= nsd->sd_size) {
 					g_raid_tr_raid1_rebuild_finish(tr);
 					return;
 				}
@@ -776,29 +770,10 @@ rebuild_round_done:
 					trs->trso_meta_update =
 					    g_raid1_rebuild_meta_update;
 				}
-				if (--trs->trso_recover_slabs <= 0) {
-					trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
+				trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
+				if (--trs->trso_recover_slabs <= 0)
 					return;
-				}
-				good_sd = g_raid_get_subdisk(sd->sd_volume,
-				    G_RAID_SUBDISK_S_ACTIVE);
-				if (good_sd == NULL) {
-					trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
-					g_raid_tr_raid1_rebuild_abort(tr);
-					return;
-				}
-				bp->bio_cmd = BIO_READ;
-				bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
-				bp->bio_offset = nsd->sd_rebuild_pos;
-				bp->bio_length = MIN(g_raid1_rebuild_slab,
-				    vol->v_mediasize - nsd->sd_rebuild_pos);
-				bp->bio_caller1 = good_sd;
-				G_RAID_LOGREQ(4, bp,
-				    "Rebuild read at %jd.", bp->bio_offset);
-				/* Lock callback starts I/O */
-				trs->trso_flags |= TR_RAID1_F_LOCKED;
-				g_raid_lock_range(sd->sd_volume,
-				    bp->bio_offset, bp->bio_length, NULL, bp);
+				g_raid_tr_raid1_rebuild_some(tr);
 			}
 		} else if (trs->trso_type == TR_RAID1_RESYNC) {
 			/*
@@ -830,7 +805,7 @@ rebuild_round_done:
 		 * drive, which kicks off a resync?
 		 */
 		do_write = 1;
-		if (sd->sd_disk->d_read_errs > g_raid1_read_err_thresh) {
+		if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) {
 			g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk);
 			if (pbp->bio_children == 1)
 				do_write = 0;
@@ -848,6 +823,7 @@ rebuild_round_done:
 		*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_destroy_bio(bp);
 			G_RAID_LOGREQ(2, cbp, "Retrying read from %d",
 			    nsd->sd_pos);
 			if (pbp->bio_children == 2 && do_write) {
@@ -888,6 +864,7 @@ rebuild_round_done:
 		G_RAID_LOGREQ(3, bp, "Recovered data from other drive");
 		cbp = g_clone_bio(pbp);
 		if (cbp != NULL) {
+			g_destroy_bio(bp);
 			cbp->bio_cmd = BIO_WRITE;
 			cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP;
 			G_RAID_LOGREQ(2, cbp,
@@ -928,7 +905,7 @@ rebuild_round_done:
 	}
 }
 
-int
+static int
 g_raid_tr_kerneldump_raid1(struct g_raid_tr_object *tr,
     void *virtual, vm_offset_t physical, off_t offset, size_t length)
 {
@@ -992,8 +969,10 @@ g_raid_tr_idle_raid1(struct g_raid_tr_ob
 	struct g_raid_tr_raid1_object *trs;
 
 	trs = (struct g_raid_tr_raid1_object *)tr;
+	trs->trso_fair_io = g_raid1_rebuild_fair_io;
+	trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle;
 	if (trs->trso_type == TR_RAID1_REBUILD)
-		g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd);
+		g_raid_tr_raid1_rebuild_some(tr);
 	return (0);
 }
 

Copied and modified: projects/graid/8/sys/geom/raid/tr_raid1e.c (from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c)
==============================================================================
--- projects/graid/head/sys/geom/raid/tr_raid1e.c	Sun Feb 13 13:21:55 2011	(r218638, copy source)
+++ projects/graid/8/sys/geom/raid/tr_raid1e.c	Mon Feb 14 14:21:07 2011	(r218679)
@@ -101,6 +101,8 @@ struct g_raid_tr_raid1e_object {
 	int			 trso_flags;
 	struct g_raid_subdisk	*trso_failed_sd; /* like per volume */
 	void			*trso_buffer;	 /* Buffer space */
+	off_t			 trso_lock_pos; /* Locked range start. */
+	off_t			 trso_lock_len; /* Locked range length. */
 	struct bio		 trso_bio;
 };
 
@@ -139,6 +141,8 @@ static struct g_raid_tr_class g_raid_tr_
 static void g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr);
 static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr,
     struct g_raid_subdisk *sd);
+static int g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol,
+    int no, off_t off, off_t len, u_int mask);
 
 static inline void
 V2P(struct g_raid_volume *vol, off_t virt,
@@ -202,7 +206,6 @@ g_raid_tr_update_state_raid1e_even(struc
 	state = G_RAID_VOLUME_S_OPTIMAL;
 	for (i = 0; i < vol->v_disks_count / N; i++) {
 		bestsd = &vol->v_subdisks[i * N];
-		worstsd = &vol->v_subdisks[i * N];
 		for (j = 1; j < N; j++) {
 			sd = &vol->v_subdisks[i * N + j];
 			if (sd->sd_state > bestsd->sd_state)
@@ -212,8 +215,6 @@ g_raid_tr_update_state_raid1e_even(struc
 			     sd->sd_state == G_RAID_SUBDISK_S_RESYNC) &&
 			    sd->sd_rebuild_pos > bestsd->sd_rebuild_pos)
 				bestsd = sd;
-			if (sd->sd_state < worstsd->sd_state)
-				worstsd = sd;
 		}
 		if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED &&
 		    bestsd->sd_state != G_RAID_SUBDISK_S_ACTIVE) {
@@ -227,6 +228,12 @@ g_raid_tr_update_state_raid1e_even(struc
 			g_raid_write_metadata(sc,
 			    vol, bestsd, bestsd->sd_disk);
 		}
+		worstsd = &vol->v_subdisks[i * N];
+		for (j = 1; j < N; j++) {
+			sd = &vol->v_subdisks[i * N + j];
+			if (sd->sd_state < worstsd->sd_state)
+				worstsd = sd;
+		}
 		if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE)
 			sstate = G_RAID_VOLUME_S_OPTIMAL;
 		else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE)
@@ -317,7 +324,6 @@ g_raid_tr_update_state_raid1e(struct g_r
 			s = g_raid_tr_update_state_raid1e_even(vol);
 		else
 			s = g_raid_tr_update_state_raid1e_odd(vol);
-		g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd);
 	}
 	if (s != vol->v_state) {
 		g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ?
@@ -327,6 +333,8 @@ g_raid_tr_update_state_raid1e(struct g_r
 		if (!trs->trso_starting && !trs->trso_stopping)
 			g_raid_write_metadata(sc, vol, NULL, NULL);
 	}
+	if (!trs->trso_starting && !trs->trso_stopping)
+		g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd);
 	return (0);
 }
 
@@ -350,37 +358,6 @@ g_raid_tr_raid1e_fail_disk(struct g_raid
 }
 
 static void
-g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr)
-{
-	struct g_raid_tr_raid1e_object *trs;
-	struct g_raid_subdisk *sd, *good_sd;
-	struct bio *bp;
-
-	trs = (struct g_raid_tr_raid1e_object *)tr;
-	if (trs->trso_flags & TR_RAID1E_F_DOING_SOME)
-		return;
-	sd = trs->trso_failed_sd;
-	good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE);
-	if (good_sd == NULL) {
-		g_raid_tr_raid1e_rebuild_abort(tr);
-		return;
-	}
-	bp = &trs->trso_bio;
-	memset(bp, 0, sizeof(*bp));
-	bp->bio_offset = sd->sd_rebuild_pos;
-	bp->bio_length = MIN(g_raid1e_rebuild_slab,
-	    sd->sd_volume->v_mediasize - sd->sd_rebuild_pos);
-	bp->bio_data = trs->trso_buffer;
-	bp->bio_cmd = BIO_READ;
-	bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
-	bp->bio_caller1 = good_sd;
-	trs->trso_flags |= TR_RAID1E_F_DOING_SOME;
-	trs->trso_flags |= TR_RAID1E_F_LOCKED;
-	g_raid_lock_range(sd->sd_volume,	/* Lock callback starts I/O */
-	   bp->bio_offset, bp->bio_length, NULL, bp);
-}
-
-static void
 g_raid_tr_raid1e_rebuild_done(struct g_raid_tr_raid1e_object *trs)
 {
 	struct g_raid_volume *vol;
@@ -421,7 +398,6 @@ g_raid_tr_raid1e_rebuild_abort(struct g_
 	struct g_raid_tr_raid1e_object *trs;
 	struct g_raid_subdisk *sd;
 	struct g_raid_volume *vol;
-	off_t len;
 
 	vol = tr->tro_volume;
 	trs = (struct g_raid_tr_raid1e_object *)tr;
@@ -440,21 +416,94 @@ g_raid_tr_raid1e_rebuild_abort(struct g_
 		trs->trso_flags &= ~TR_RAID1E_F_ABORT;
 		if (trs->trso_flags & TR_RAID1E_F_LOCKED) {
 			trs->trso_flags &= ~TR_RAID1E_F_LOCKED;
-			len = MIN(g_raid1e_rebuild_slab,
-			    vol->v_mediasize - sd->sd_rebuild_pos);
 			g_raid_unlock_range(tr->tro_volume,
-			    sd->sd_rebuild_pos, len);
+			    trs->trso_lock_pos, trs->trso_lock_len);
 		}
 		g_raid_tr_raid1e_rebuild_done(trs);
 	}
 }
 
 static void
+g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr)
+{
+	struct g_raid_tr_raid1e_object *trs;
+	struct g_raid_softc *sc;
+	struct g_raid_volume *vol;
+	struct g_raid_subdisk *sd;
+	struct bio *bp;
+	off_t len, virtual, vend, offset, start;
+	int disk, copy, best;
+
+	trs = (struct g_raid_tr_raid1e_object *)tr;
+	if (trs->trso_flags & TR_RAID1E_F_DOING_SOME)
+		return;
+	vol = tr->tro_volume;
+	sc = vol->v_softc;
+	sd = trs->trso_failed_sd;
+
+	while (1) {
+		if (sd->sd_rebuild_pos >= sd->sd_size) {
+			g_raid_tr_raid1e_rebuild_finish(tr);
+			return;
+		}
+		/* Get virtual offset from physical rebuild position. */
+		P2V(vol, sd->sd_pos, sd->sd_rebuild_pos, &virtual, &copy);
+		/* Get physical offset back to get first stripe position. */
+		V2P(vol, virtual, &disk, &offset, &start);
+		/* Calculate contignous data length. */
+		len = MIN(g_raid1e_rebuild_slab,
+		    sd->sd_size - sd->sd_rebuild_pos);
+		if ((vol->v_disks_count % N) != 0)
+			len = MIN(len, vol->v_strip_size - start);
+		/* Find disk with most accurate data. */
+		best = g_raid_tr_raid1e_select_read_disk(vol, disk,
+		    offset + start, len, 0);
+		if (best < 0) {
+			/* There is no any valid disk. */
+			g_raid_tr_raid1e_rebuild_abort(tr);
+			return;
+		} else if (best != copy) {
+			/* Some other disk has better data. */
+			break;
+		}
+		/* We have the most accurate data. Skip the range. */
+		G_RAID_DEBUG1(3, sc, "Skipping rebuild for range %ju - %ju",
+		    sd->sd_rebuild_pos, sd->sd_rebuild_pos + len);
+		sd->sd_rebuild_pos += len;
+	}
+
+	bp = &trs->trso_bio;
+	memset(bp, 0, sizeof(*bp));
+	bp->bio_offset = offset + start +
+	    ((disk + best >= vol->v_disks_count) ? vol->v_strip_size : 0);
+	bp->bio_length = len;
+	bp->bio_data = trs->trso_buffer;
+	bp->bio_cmd = BIO_READ;
+	bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
+	bp->bio_caller1 = &vol->v_subdisks[(disk + best) % vol->v_disks_count];
+	G_RAID_LOGREQ(3, bp, "Queueing rebuild read");
+	/*
+	 * If we are crossing stripe boundary, correct affected virtual
+	 * range we should lock.
+	 */
+	if (start + len > vol->v_strip_size) {
+		P2V(vol, sd->sd_pos, sd->sd_rebuild_pos + len, &vend, &copy);
+		len = vend - virtual;
+	}
+	trs->trso_flags |= TR_RAID1E_F_DOING_SOME;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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