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, ©); + /* 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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102141421.p1EEL75m095586>