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...
Alexander Motin
mav at FreeBSD.org
Mon Feb 14 14:21:08 UTC 2011
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, ©);
+ /* 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, ©);
+ len = vend - virtual;
+ }
+ trs->trso_flags |= TR_RAID1E_F_DOING_SOME;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list