svn commit: r218520 - in projects/graid/8: . contrib/bsnmp/snmpd
contrib/top contrib/xz gnu/usr.bin lib lib/liblzma
lib/librtld_db lib/libusb release/picobsd/floppy.tree/sbin
sbin/geom/class/raid s...
Alexander Motin
mav at FreeBSD.org
Thu Feb 10 14:29:35 UTC 2011
Author: mav
Date: Thu Feb 10 14:29:34 2011
New Revision: 218520
URL: http://svn.freebsd.org/changeset/base/218520
Log:
MFH
r218470, r218472, r218479, r218480, r218481, r218486, r218491, r218504,
r218512, r218514, r218515, r218516, r218518, r218519
Modified:
projects/graid/8/sbin/geom/class/raid/geom_raid.c
projects/graid/8/sbin/geom/class/raid/graid.8
projects/graid/8/sys/geom/raid/g_raid.c
projects/graid/8/sys/geom/raid/g_raid.h
projects/graid/8/sys/geom/raid/md_intel.c
projects/graid/8/sys/geom/raid/tr_raid1.c
Directory Properties:
projects/graid/8/ (props changed)
projects/graid/8/COPYRIGHT (props changed)
projects/graid/8/LOCKS (props changed)
projects/graid/8/MAINTAINERS (props changed)
projects/graid/8/Makefile (props changed)
projects/graid/8/Makefile.inc1 (props changed)
projects/graid/8/ObsoleteFiles.inc (props changed)
projects/graid/8/README (props changed)
projects/graid/8/UPDATING (props changed)
projects/graid/8/bin/ (props changed)
projects/graid/8/bin/chio/ (props changed)
projects/graid/8/bin/chmod/ (props changed)
projects/graid/8/bin/cp/ (props changed)
projects/graid/8/bin/csh/ (props changed)
projects/graid/8/bin/date/ (props changed)
projects/graid/8/bin/echo/ (props changed)
projects/graid/8/bin/expr/ (props changed)
projects/graid/8/bin/getfacl/ (props changed)
projects/graid/8/bin/kill/ (props changed)
projects/graid/8/bin/ln/ (props changed)
projects/graid/8/bin/ls/ (props changed)
projects/graid/8/bin/mv/ (props changed)
projects/graid/8/bin/pax/ (props changed)
projects/graid/8/bin/pkill/ (props changed)
projects/graid/8/bin/ps/ (props changed)
projects/graid/8/bin/pwait/ (props changed)
projects/graid/8/bin/setfacl/ (props changed)
projects/graid/8/bin/sh/ (props changed)
projects/graid/8/bin/sleep/ (props changed)
projects/graid/8/bin/test/ (props changed)
projects/graid/8/cddl/ (props changed)
projects/graid/8/cddl/compat/opensolaris/ (props changed)
projects/graid/8/cddl/contrib/opensolaris/ (props changed)
projects/graid/8/cddl/lib/ (props changed)
projects/graid/8/cddl/lib/libnvpair/ (props changed)
projects/graid/8/cddl/lib/libzpool/ (props changed)
projects/graid/8/cddl/usr.bin/ (props changed)
projects/graid/8/cddl/usr.sbin/ (props changed)
projects/graid/8/contrib/ (props changed)
projects/graid/8/contrib/amd/ (props changed)
projects/graid/8/contrib/bc/ (props changed)
projects/graid/8/contrib/bind9/ (props changed)
projects/graid/8/contrib/binutils/ (props changed)
projects/graid/8/contrib/bsnmp/ (props changed)
projects/graid/8/contrib/bsnmp/snmpd/bsnmpd.1 (props changed)
projects/graid/8/contrib/bzip2/ (props changed)
projects/graid/8/contrib/com_err/ (props changed)
projects/graid/8/contrib/csup/ (props changed)
projects/graid/8/contrib/cvs/ (props changed)
projects/graid/8/contrib/diff/ (props changed)
projects/graid/8/contrib/ee/ (props changed)
projects/graid/8/contrib/expat/ (props changed)
projects/graid/8/contrib/file/ (props changed)
projects/graid/8/contrib/gcc/ (props changed)
projects/graid/8/contrib/gcclibs/ (props changed)
projects/graid/8/contrib/gdb/ (props changed)
projects/graid/8/contrib/gdtoa/ (props changed)
projects/graid/8/contrib/gnu-sort/ (props changed)
projects/graid/8/contrib/gperf/ (props changed)
projects/graid/8/contrib/groff/ (props changed)
projects/graid/8/contrib/ipfilter/ (props changed)
projects/graid/8/contrib/less/ (props changed)
projects/graid/8/contrib/libbegemot/ (props changed)
projects/graid/8/contrib/libf2c/ (props changed)
projects/graid/8/contrib/libobjc/ (props changed)
projects/graid/8/contrib/libpcap/ (props changed)
projects/graid/8/contrib/libreadline/ (props changed)
projects/graid/8/contrib/libstdc++/ (props changed)
projects/graid/8/contrib/lukemftp/ (props changed)
projects/graid/8/contrib/lukemftpd/ (props changed)
projects/graid/8/contrib/ncurses/ (props changed)
projects/graid/8/contrib/netcat/ (props changed)
projects/graid/8/contrib/ngatm/ (props changed)
projects/graid/8/contrib/ntp/ (props changed)
projects/graid/8/contrib/nvi/ (props changed)
projects/graid/8/contrib/one-true-awk/ (props changed)
projects/graid/8/contrib/openbsm/ (props changed)
projects/graid/8/contrib/openpam/ (props changed)
projects/graid/8/contrib/opie/ (props changed)
projects/graid/8/contrib/pam_modules/ (props changed)
projects/graid/8/contrib/pf/ (props changed)
projects/graid/8/contrib/pnpinfo/ (props changed)
projects/graid/8/contrib/sendmail/ (props changed)
projects/graid/8/contrib/smbfs/ (props changed)
projects/graid/8/contrib/tcp_wrappers/ (props changed)
projects/graid/8/contrib/tcpdump/ (props changed)
projects/graid/8/contrib/tcsh/ (props changed)
projects/graid/8/contrib/telnet/ (props changed)
projects/graid/8/contrib/texinfo/ (props changed)
projects/graid/8/contrib/top/ (props changed)
projects/graid/8/contrib/top/install-sh (props changed)
projects/graid/8/contrib/traceroute/ (props changed)
projects/graid/8/contrib/wpa/ (props changed)
projects/graid/8/contrib/xz/ (props changed)
projects/graid/8/contrib/xz/AUTHORS (props changed)
projects/graid/8/contrib/xz/COPYING (props changed)
projects/graid/8/contrib/xz/ChangeLog (props changed)
projects/graid/8/contrib/xz/FREEBSD-Xlist (props changed)
projects/graid/8/contrib/xz/FREEBSD-upgrade (props changed)
projects/graid/8/contrib/xz/README (props changed)
projects/graid/8/contrib/xz/THANKS (props changed)
projects/graid/8/contrib/xz/TODO (props changed)
projects/graid/8/contrib/xz/po/ (props changed)
projects/graid/8/contrib/xz/src/ (props changed)
projects/graid/8/crypto/ (props changed)
projects/graid/8/crypto/heimdal/ (props changed)
projects/graid/8/crypto/openssh/ (props changed)
projects/graid/8/crypto/openssl/ (props changed)
projects/graid/8/etc/ (props changed)
projects/graid/8/games/ (props changed)
projects/graid/8/games/factor/ (props changed)
projects/graid/8/games/fortune/ (props changed)
projects/graid/8/games/grdc/ (props changed)
projects/graid/8/games/pom/ (props changed)
projects/graid/8/gnu/ (props changed)
projects/graid/8/gnu/lib/csu/ (props changed)
projects/graid/8/gnu/lib/libgcc/ (props changed)
projects/graid/8/gnu/lib/libstdc++/ (props changed)
projects/graid/8/gnu/usr.bin/ (props changed)
projects/graid/8/gnu/usr.bin/Makefile (props changed)
projects/graid/8/gnu/usr.bin/dialog/ (props changed)
projects/graid/8/gnu/usr.bin/gdb/ (props changed)
projects/graid/8/gnu/usr.bin/gdb/kgdb/ (props changed)
projects/graid/8/gnu/usr.bin/groff/ (props changed)
projects/graid/8/gnu/usr.bin/patch/ (props changed)
projects/graid/8/include/ (props changed)
projects/graid/8/kerberos5/ (props changed)
projects/graid/8/kerberos5/lib/libgssapi_krb5/ (props changed)
projects/graid/8/kerberos5/lib/libgssapi_spnego/ (props changed)
projects/graid/8/kerberos5/usr.bin/kdestroy/ (props changed)
projects/graid/8/kerberos5/usr.bin/kpasswd/ (props changed)
projects/graid/8/lib/ (props changed)
projects/graid/8/lib/Makefile (props changed)
projects/graid/8/lib/Makefile.inc (props changed)
projects/graid/8/lib/bind/ (props changed)
projects/graid/8/lib/csu/ (props changed)
projects/graid/8/lib/libalias/ (props changed)
projects/graid/8/lib/libarchive/ (props changed)
projects/graid/8/lib/libauditd/ (props changed)
projects/graid/8/lib/libautofs/ (props changed)
projects/graid/8/lib/libbegemot/ (props changed)
projects/graid/8/lib/libbluetooth/ (props changed)
projects/graid/8/lib/libbsm/ (props changed)
projects/graid/8/lib/libbsnmp/ (props changed)
projects/graid/8/lib/libbz2/ (props changed)
projects/graid/8/lib/libc/ (props changed)
projects/graid/8/lib/libc/stdtime/ (props changed)
projects/graid/8/lib/libc_r/ (props changed)
projects/graid/8/lib/libcalendar/ (props changed)
projects/graid/8/lib/libcam/ (props changed)
projects/graid/8/lib/libcom_err/ (props changed)
projects/graid/8/lib/libcompat/ (props changed)
projects/graid/8/lib/libcrypt/ (props changed)
projects/graid/8/lib/libdevinfo/ (props changed)
projects/graid/8/lib/libdevstat/ (props changed)
projects/graid/8/lib/libdisk/ (props changed)
projects/graid/8/lib/libdwarf/ (props changed)
projects/graid/8/lib/libedit/ (props changed)
projects/graid/8/lib/libelf/ (props changed)
projects/graid/8/lib/libexpat/ (props changed)
projects/graid/8/lib/libfetch/ (props changed)
projects/graid/8/lib/libftpio/ (props changed)
projects/graid/8/lib/libgeom/ (props changed)
projects/graid/8/lib/libgpib/ (props changed)
projects/graid/8/lib/libgssapi/ (props changed)
projects/graid/8/lib/libipsec/ (props changed)
projects/graid/8/lib/libipx/ (props changed)
projects/graid/8/lib/libjail/ (props changed)
projects/graid/8/lib/libkiconv/ (props changed)
projects/graid/8/lib/libkse/ (props changed)
projects/graid/8/lib/libkvm/ (props changed)
projects/graid/8/lib/liblzma/ (props changed)
projects/graid/8/lib/liblzma/Makefile (props changed)
projects/graid/8/lib/liblzma/Symbol.map (props changed)
projects/graid/8/lib/liblzma/Versions.def (props changed)
projects/graid/8/lib/liblzma/config.h (props changed)
projects/graid/8/lib/libmagic/ (props changed)
projects/graid/8/lib/libmd/ (props changed)
projects/graid/8/lib/libmemstat/ (props changed)
projects/graid/8/lib/libmilter/ (props changed)
projects/graid/8/lib/libmp/ (props changed)
projects/graid/8/lib/libncp/ (props changed)
projects/graid/8/lib/libnetgraph/ (props changed)
projects/graid/8/lib/libngatm/ (props changed)
projects/graid/8/lib/libopie/ (props changed)
projects/graid/8/lib/libpam/ (props changed)
projects/graid/8/lib/libpcap/ (props changed)
projects/graid/8/lib/libpmc/ (props changed)
projects/graid/8/lib/libproc/ (props changed)
projects/graid/8/lib/libradius/ (props changed)
projects/graid/8/lib/librpcsec_gss/ (props changed)
projects/graid/8/lib/librpcsvc/ (props changed)
projects/graid/8/lib/librt/ (props changed)
projects/graid/8/lib/librtld_db/ (props changed)
projects/graid/8/lib/librtld_db/Makefile (props changed)
projects/graid/8/lib/librtld_db/librtld_db.3 (props changed)
projects/graid/8/lib/librtld_db/rtld_db.c (props changed)
projects/graid/8/lib/librtld_db/rtld_db.h (props changed)
projects/graid/8/lib/libsbuf/ (props changed)
projects/graid/8/lib/libsdp/ (props changed)
projects/graid/8/lib/libsm/ (props changed)
projects/graid/8/lib/libsmb/ (props changed)
projects/graid/8/lib/libsmdb/ (props changed)
projects/graid/8/lib/libsmutil/ (props changed)
projects/graid/8/lib/libstand/ (props changed)
projects/graid/8/lib/libtacplus/ (props changed)
projects/graid/8/lib/libtelnet/ (props changed)
projects/graid/8/lib/libthr/ (props changed)
projects/graid/8/lib/libthread_db/ (props changed)
projects/graid/8/lib/libufs/ (props changed)
projects/graid/8/lib/libugidfw/ (props changed)
projects/graid/8/lib/libusb/ (props changed)
projects/graid/8/lib/libusb/usb.h (props changed)
projects/graid/8/lib/libusbhid/ (props changed)
projects/graid/8/lib/libutil/ (props changed)
projects/graid/8/lib/libvgl/ (props changed)
projects/graid/8/lib/libwrap/ (props changed)
projects/graid/8/lib/liby/ (props changed)
projects/graid/8/lib/libypclnt/ (props changed)
projects/graid/8/lib/libz/ (props changed)
projects/graid/8/lib/libz/contrib/ (props changed)
projects/graid/8/lib/msun/ (props changed)
projects/graid/8/lib/ncurses/ (props changed)
projects/graid/8/libexec/ (props changed)
projects/graid/8/libexec/ftpd/ (props changed)
projects/graid/8/libexec/rtld-elf/ (props changed)
projects/graid/8/libexec/tftpd/ (props changed)
projects/graid/8/release/ (props changed)
projects/graid/8/release/doc/en_US.ISO8859-1/hardware/ (props changed)
projects/graid/8/release/picobsd/ (props changed)
projects/graid/8/release/picobsd/floppy.tree/sbin/ (props changed)
projects/graid/8/release/picobsd/floppy.tree/sbin/dhclient-script (props changed)
projects/graid/8/release/picobsd/qemu/ (props changed)
projects/graid/8/release/picobsd/tinyware/login/ (props changed)
projects/graid/8/release/powerpc/ (props changed)
projects/graid/8/rescue/ (props changed)
projects/graid/8/sbin/ (props changed)
projects/graid/8/sbin/atacontrol/ (props changed)
projects/graid/8/sbin/bsdlabel/ (props changed)
projects/graid/8/sbin/camcontrol/ (props changed)
projects/graid/8/sbin/ddb/ (props changed)
projects/graid/8/sbin/devd/ (props changed)
projects/graid/8/sbin/devfs/ (props changed)
projects/graid/8/sbin/dhclient/ (props changed)
projects/graid/8/sbin/dump/ (props changed)
projects/graid/8/sbin/dumpfs/ (props changed)
projects/graid/8/sbin/fdisk/ (props changed)
projects/graid/8/sbin/fsck/ (props changed)
projects/graid/8/sbin/fsck_ffs/ (props changed)
projects/graid/8/sbin/fsck_msdosfs/ (props changed)
projects/graid/8/sbin/fsirand/ (props changed)
projects/graid/8/sbin/geom/ (props changed)
projects/graid/8/sbin/geom/class/multipath/ (props changed)
projects/graid/8/sbin/geom/class/part/ (props changed)
projects/graid/8/sbin/geom/class/sched/gsched.8 (props changed)
projects/graid/8/sbin/geom/class/stripe/ (props changed)
projects/graid/8/sbin/ggate/ (props changed)
projects/graid/8/sbin/growfs/ (props changed)
projects/graid/8/sbin/hastctl/ (props changed)
projects/graid/8/sbin/hastd/ (props changed)
projects/graid/8/sbin/ifconfig/ (props changed)
projects/graid/8/sbin/ipfw/ (props changed)
projects/graid/8/sbin/iscontrol/ (props changed)
projects/graid/8/sbin/kldload/ (props changed)
projects/graid/8/sbin/kldstat/ (props changed)
projects/graid/8/sbin/mdconfig/ (props changed)
projects/graid/8/sbin/mksnap_ffs/ (props changed)
projects/graid/8/sbin/mount/ (props changed)
projects/graid/8/sbin/mount_cd9660/ (props changed)
projects/graid/8/sbin/mount_msdosfs/ (props changed)
projects/graid/8/sbin/mount_nfs/ (props changed)
projects/graid/8/sbin/natd/ (props changed)
projects/graid/8/sbin/newfs/ (props changed)
projects/graid/8/sbin/newfs_msdos/ (props changed)
projects/graid/8/sbin/ping6/ (props changed)
projects/graid/8/sbin/reboot/ (props changed)
projects/graid/8/sbin/restore/ (props changed)
projects/graid/8/sbin/route/ (props changed)
projects/graid/8/sbin/routed/ (props changed)
projects/graid/8/sbin/setkey/ (props changed)
projects/graid/8/sbin/spppcontrol/ (props changed)
projects/graid/8/sbin/sysctl/ (props changed)
projects/graid/8/sbin/tunefs/ (props changed)
projects/graid/8/sbin/umount/ (props changed)
projects/graid/8/secure/ (props changed)
projects/graid/8/secure/lib/libcrypto/ (props changed)
projects/graid/8/secure/lib/libssl/ (props changed)
projects/graid/8/secure/usr.bin/bdes/ (props changed)
projects/graid/8/secure/usr.bin/openssl/ (props changed)
projects/graid/8/share/ (props changed)
projects/graid/8/share/dict/ (props changed)
projects/graid/8/share/doc/papers/jail/ (props changed)
projects/graid/8/share/doc/smm/01.setup/ (props changed)
projects/graid/8/share/examples/ (props changed)
projects/graid/8/share/examples/etc/ (props changed)
projects/graid/8/share/examples/kld/syscall/ (props changed)
projects/graid/8/share/man/ (props changed)
projects/graid/8/share/man/man1/ (props changed)
projects/graid/8/share/man/man3/ (props changed)
projects/graid/8/share/man/man4/ (props changed)
projects/graid/8/share/man/man5/ (props changed)
projects/graid/8/share/man/man7/ (props changed)
projects/graid/8/share/man/man8/ (props changed)
projects/graid/8/share/man/man9/ (props changed)
projects/graid/8/share/misc/ (props changed)
projects/graid/8/share/mk/ (props changed)
projects/graid/8/share/syscons/ (props changed)
projects/graid/8/share/termcap/ (props changed)
projects/graid/8/share/timedef/ (props changed)
projects/graid/8/share/zoneinfo/ (props changed)
projects/graid/8/sys/ (props changed)
projects/graid/8/sys/amd64/include/xen/ (props changed)
projects/graid/8/sys/cddl/contrib/opensolaris/ (props changed)
projects/graid/8/sys/contrib/dev/acpica/ (props changed)
projects/graid/8/sys/contrib/pf/ (props changed)
projects/graid/8/tools/ (props changed)
projects/graid/8/tools/build/mk/ (props changed)
projects/graid/8/tools/build/options/ (props changed)
projects/graid/8/tools/debugscripts/ (props changed)
projects/graid/8/tools/kerneldoc/subsys/ (props changed)
projects/graid/8/tools/regression/acct/ (props changed)
projects/graid/8/tools/regression/acltools/ (props changed)
projects/graid/8/tools/regression/aio/aiotest/ (props changed)
projects/graid/8/tools/regression/bin/ (props changed)
projects/graid/8/tools/regression/bin/date/ (props changed)
projects/graid/8/tools/regression/bin/sh/ (props changed)
projects/graid/8/tools/regression/fifo/ (props changed)
projects/graid/8/tools/regression/geom/ (props changed)
projects/graid/8/tools/regression/lib/libc/ (props changed)
projects/graid/8/tools/regression/lib/msun/test-conj.t (props changed)
projects/graid/8/tools/regression/mqueue/mqtest1/ (props changed)
projects/graid/8/tools/regression/mqueue/mqtest2/ (props changed)
projects/graid/8/tools/regression/mqueue/mqtest3/ (props changed)
projects/graid/8/tools/regression/mqueue/mqtest4/ (props changed)
projects/graid/8/tools/regression/mqueue/mqtest5/ (props changed)
projects/graid/8/tools/regression/netinet/ (props changed)
projects/graid/8/tools/regression/poll/ (props changed)
projects/graid/8/tools/regression/posixsem/ (props changed)
projects/graid/8/tools/regression/priv/ (props changed)
projects/graid/8/tools/regression/sockets/unix_gc/ (props changed)
projects/graid/8/tools/regression/usr.bin/ (props changed)
projects/graid/8/tools/regression/usr.bin/pkill/ (props changed)
projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_g.t (props changed)
projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_s.t (props changed)
projects/graid/8/tools/regression/usr.bin/pkill/pkill-_g.t (props changed)
projects/graid/8/tools/regression/usr.bin/sed/ (props changed)
projects/graid/8/tools/regression/usr.bin/tr/ (props changed)
projects/graid/8/tools/test/ (props changed)
projects/graid/8/tools/tools/ (props changed)
projects/graid/8/tools/tools/ath/ (props changed)
projects/graid/8/tools/tools/ath/common/dumpregs.h (props changed)
projects/graid/8/tools/tools/ath/common/dumpregs_5210.c (props changed)
projects/graid/8/tools/tools/ath/common/dumpregs_5211.c (props changed)
projects/graid/8/tools/tools/ath/common/dumpregs_5212.c (props changed)
projects/graid/8/tools/tools/ath/common/dumpregs_5416.c (props changed)
projects/graid/8/tools/tools/mctest/ (props changed)
projects/graid/8/tools/tools/nanobsd/ (props changed)
projects/graid/8/tools/tools/netrate/ (props changed)
projects/graid/8/tools/tools/netrate/tcpp/ (props changed)
projects/graid/8/tools/tools/termcap/termcap.pl (props changed)
projects/graid/8/tools/tools/umastat/ (props changed)
projects/graid/8/tools/tools/vimage/ (props changed)
projects/graid/8/usr.bin/ (props changed)
projects/graid/8/usr.bin/apply/ (props changed)
projects/graid/8/usr.bin/ar/ (props changed)
projects/graid/8/usr.bin/awk/ (props changed)
projects/graid/8/usr.bin/biff/ (props changed)
projects/graid/8/usr.bin/c89/ (props changed)
projects/graid/8/usr.bin/c99/ (props changed)
projects/graid/8/usr.bin/calendar/ (props changed)
projects/graid/8/usr.bin/catman/ (props changed)
projects/graid/8/usr.bin/chpass/Makefile (props changed)
projects/graid/8/usr.bin/column/ (props changed)
projects/graid/8/usr.bin/comm/ (props changed)
projects/graid/8/usr.bin/cpio/ (props changed)
projects/graid/8/usr.bin/csup/ (props changed)
projects/graid/8/usr.bin/du/ (props changed)
projects/graid/8/usr.bin/ee/ (props changed)
projects/graid/8/usr.bin/enigma/ (props changed)
projects/graid/8/usr.bin/fetch/ (props changed)
projects/graid/8/usr.bin/find/ (props changed)
projects/graid/8/usr.bin/finger/ (props changed)
projects/graid/8/usr.bin/fold/ (props changed)
projects/graid/8/usr.bin/fstat/ (props changed)
projects/graid/8/usr.bin/gcore/ (props changed)
projects/graid/8/usr.bin/getopt/ (props changed)
projects/graid/8/usr.bin/gzip/ (props changed)
projects/graid/8/usr.bin/hexdump/ (props changed)
projects/graid/8/usr.bin/indent/ (props changed)
projects/graid/8/usr.bin/jot/ (props changed)
projects/graid/8/usr.bin/kdump/ (props changed)
projects/graid/8/usr.bin/killall/ (props changed)
projects/graid/8/usr.bin/ktrace/ (props changed)
projects/graid/8/usr.bin/ldd/ (props changed)
projects/graid/8/usr.bin/lex/ (props changed)
projects/graid/8/usr.bin/locale/ (props changed)
projects/graid/8/usr.bin/locate/ (props changed)
projects/graid/8/usr.bin/lockf/ (props changed)
projects/graid/8/usr.bin/look/ (props changed)
projects/graid/8/usr.bin/mail/ (props changed)
projects/graid/8/usr.bin/make/ (props changed)
projects/graid/8/usr.bin/makewhatis/ (props changed)
projects/graid/8/usr.bin/minigzip/ (props changed)
projects/graid/8/usr.bin/ncal/ (props changed)
projects/graid/8/usr.bin/netstat/ (props changed)
projects/graid/8/usr.bin/pathchk/ (props changed)
projects/graid/8/usr.bin/perror/ (props changed)
projects/graid/8/usr.bin/procstat/ (props changed)
projects/graid/8/usr.bin/rpcgen/ (props changed)
projects/graid/8/usr.bin/ruptime/ (props changed)
projects/graid/8/usr.bin/script/ (props changed)
projects/graid/8/usr.bin/sed/ (props changed)
projects/graid/8/usr.bin/sockstat/ (props changed)
projects/graid/8/usr.bin/split/ (props changed)
projects/graid/8/usr.bin/stat/ (props changed)
projects/graid/8/usr.bin/systat/ (props changed)
projects/graid/8/usr.bin/tar/ (props changed)
projects/graid/8/usr.bin/tftp/ (props changed)
projects/graid/8/usr.bin/top/ (props changed)
projects/graid/8/usr.bin/touch/ (props changed)
projects/graid/8/usr.bin/tr/ (props changed)
projects/graid/8/usr.bin/truss/ (props changed)
projects/graid/8/usr.bin/uname/ (props changed)
projects/graid/8/usr.bin/unifdef/ (props changed)
projects/graid/8/usr.bin/uniq/ (props changed)
projects/graid/8/usr.bin/unzip/ (props changed)
projects/graid/8/usr.bin/uudecode/ (props changed)
projects/graid/8/usr.bin/vmstat/ (props changed)
projects/graid/8/usr.bin/w/ (props changed)
projects/graid/8/usr.bin/whois/ (props changed)
projects/graid/8/usr.bin/xinstall/ (props changed)
projects/graid/8/usr.bin/xlint/ (props changed)
projects/graid/8/usr.bin/xz/ (props changed)
projects/graid/8/usr.bin/yacc/ (props changed)
projects/graid/8/usr.sbin/ (props changed)
projects/graid/8/usr.sbin/IPXrouted/ (props changed)
projects/graid/8/usr.sbin/Makefile (props changed)
projects/graid/8/usr.sbin/Makefile.inc (props changed)
projects/graid/8/usr.sbin/ac/ (props changed)
projects/graid/8/usr.sbin/accton/ (props changed)
projects/graid/8/usr.sbin/acpi/ (props changed)
projects/graid/8/usr.sbin/adduser/ (props changed)
projects/graid/8/usr.sbin/amd/ (props changed)
projects/graid/8/usr.sbin/ancontrol/ (props changed)
projects/graid/8/usr.sbin/apm/ (props changed)
projects/graid/8/usr.sbin/apmd/ (props changed)
projects/graid/8/usr.sbin/arp/ (props changed)
projects/graid/8/usr.sbin/asf/ (props changed)
projects/graid/8/usr.sbin/audit/ (props changed)
projects/graid/8/usr.sbin/auditd/ (props changed)
projects/graid/8/usr.sbin/auditreduce/ (props changed)
projects/graid/8/usr.sbin/authpf/ (props changed)
projects/graid/8/usr.sbin/bluetooth/ (props changed)
projects/graid/8/usr.sbin/bluetooth/bthidcontrol/ (props changed)
projects/graid/8/usr.sbin/bluetooth/bthidd/ (props changed)
projects/graid/8/usr.sbin/boot0cfg/ (props changed)
projects/graid/8/usr.sbin/boot98cfg/ (props changed)
projects/graid/8/usr.sbin/bootparamd/ (props changed)
projects/graid/8/usr.sbin/bsnmpd/ (props changed)
projects/graid/8/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed)
projects/graid/8/usr.sbin/btxld/ (props changed)
projects/graid/8/usr.sbin/burncd/ (props changed)
projects/graid/8/usr.sbin/cdcontrol/ (props changed)
projects/graid/8/usr.sbin/chkgrp/ (props changed)
projects/graid/8/usr.sbin/chown/ (props changed)
projects/graid/8/usr.sbin/chroot/ (props changed)
projects/graid/8/usr.sbin/ckdist/ (props changed)
projects/graid/8/usr.sbin/clear_locks/ (props changed)
projects/graid/8/usr.sbin/config/ (props changed)
projects/graid/8/usr.sbin/config/SMM.doc/ (props changed)
projects/graid/8/usr.sbin/cpucontrol/ (props changed)
projects/graid/8/usr.sbin/crashinfo/ (props changed)
projects/graid/8/usr.sbin/cron/ (props changed)
projects/graid/8/usr.sbin/crunch/ (props changed)
projects/graid/8/usr.sbin/crunch/examples/ (props changed)
projects/graid/8/usr.sbin/ctm/ (props changed)
projects/graid/8/usr.sbin/cxgbtool/ (props changed)
projects/graid/8/usr.sbin/daemon/ (props changed)
projects/graid/8/usr.sbin/dconschat/ (props changed)
projects/graid/8/usr.sbin/devinfo/ (props changed)
projects/graid/8/usr.sbin/digictl/ (props changed)
projects/graid/8/usr.sbin/diskinfo/ (props changed)
projects/graid/8/usr.sbin/dnssec-dsfromkey/ (props changed)
projects/graid/8/usr.sbin/dnssec-keyfromlabel/ (props changed)
projects/graid/8/usr.sbin/dnssec-keygen/ (props changed)
projects/graid/8/usr.sbin/dnssec-signzone/ (props changed)
projects/graid/8/usr.sbin/dumpcis/ (props changed)
projects/graid/8/usr.sbin/dumpcis/cardinfo.h (props changed)
projects/graid/8/usr.sbin/dumpcis/cis.h (props changed)
projects/graid/8/usr.sbin/editmap/ (props changed)
projects/graid/8/usr.sbin/edquota/ (props changed)
projects/graid/8/usr.sbin/eeprom/ (props changed)
projects/graid/8/usr.sbin/extattr/ (props changed)
projects/graid/8/usr.sbin/extattrctl/ (props changed)
projects/graid/8/usr.sbin/faithd/ (props changed)
projects/graid/8/usr.sbin/fdcontrol/ (props changed)
projects/graid/8/usr.sbin/fdformat/ (props changed)
projects/graid/8/usr.sbin/fdread/ (props changed)
projects/graid/8/usr.sbin/fdwrite/ (props changed)
projects/graid/8/usr.sbin/fifolog/ (props changed)
projects/graid/8/usr.sbin/flowctl/ (props changed)
projects/graid/8/usr.sbin/freebsd-update/ (props changed)
projects/graid/8/usr.sbin/ftp-proxy/ (props changed)
projects/graid/8/usr.sbin/fwcontrol/ (props changed)
projects/graid/8/usr.sbin/getfmac/ (props changed)
projects/graid/8/usr.sbin/getpmac/ (props changed)
projects/graid/8/usr.sbin/gssd/ (props changed)
projects/graid/8/usr.sbin/gstat/ (props changed)
projects/graid/8/usr.sbin/i2c/ (props changed)
projects/graid/8/usr.sbin/ifmcstat/ (props changed)
projects/graid/8/usr.sbin/inetd/ (props changed)
projects/graid/8/usr.sbin/iostat/ (props changed)
projects/graid/8/usr.sbin/ip6addrctl/ (props changed)
projects/graid/8/usr.sbin/ipfwpcap/ (props changed)
projects/graid/8/usr.sbin/jail/ (props changed)
projects/graid/8/usr.sbin/jexec/ (props changed)
projects/graid/8/usr.sbin/jls/ (props changed)
projects/graid/8/usr.sbin/kbdcontrol/ (props changed)
projects/graid/8/usr.sbin/kbdmap/ (props changed)
projects/graid/8/usr.sbin/kernbb/ (props changed)
projects/graid/8/usr.sbin/keyserv/ (props changed)
projects/graid/8/usr.sbin/kgmon/ (props changed)
projects/graid/8/usr.sbin/kgzip/ (props changed)
projects/graid/8/usr.sbin/kldxref/ (props changed)
projects/graid/8/usr.sbin/lastlogin/ (props changed)
projects/graid/8/usr.sbin/lmcconfig/ (props changed)
projects/graid/8/usr.sbin/lpr/ (props changed)
projects/graid/8/usr.sbin/lptcontrol/ (props changed)
projects/graid/8/usr.sbin/mailstats/ (props changed)
projects/graid/8/usr.sbin/mailwrapper/ (props changed)
projects/graid/8/usr.sbin/makefs/ (props changed)
projects/graid/8/usr.sbin/makefs/ffs/ffs_bswap.c (props changed)
projects/graid/8/usr.sbin/makefs/ffs/ffs_subr.c (props changed)
projects/graid/8/usr.sbin/makefs/ffs/ufs_bswap.h (props changed)
projects/graid/8/usr.sbin/makefs/getid.c (props changed)
projects/graid/8/usr.sbin/makemap/ (props changed)
projects/graid/8/usr.sbin/manctl/ (props changed)
projects/graid/8/usr.sbin/memcontrol/ (props changed)
projects/graid/8/usr.sbin/mergemaster/ (props changed)
projects/graid/8/usr.sbin/mfiutil/ (props changed)
projects/graid/8/usr.sbin/mixer/ (props changed)
projects/graid/8/usr.sbin/mld6query/ (props changed)
projects/graid/8/usr.sbin/mlxcontrol/ (props changed)
projects/graid/8/usr.sbin/mount_nwfs/ (props changed)
projects/graid/8/usr.sbin/mount_portalfs/ (props changed)
projects/graid/8/usr.sbin/mount_smbfs/ (props changed)
projects/graid/8/usr.sbin/mountd/ (props changed)
projects/graid/8/usr.sbin/moused/ (props changed)
projects/graid/8/usr.sbin/mptable/ (props changed)
projects/graid/8/usr.sbin/mptutil/ (props changed)
projects/graid/8/usr.sbin/mtest/ (props changed)
projects/graid/8/usr.sbin/mtree/ (props changed)
projects/graid/8/usr.sbin/named/ (props changed)
projects/graid/8/usr.sbin/named-checkconf/ (props changed)
projects/graid/8/usr.sbin/named-checkzone/ (props changed)
projects/graid/8/usr.sbin/named.reload/ (props changed)
projects/graid/8/usr.sbin/ndiscvt/ (props changed)
projects/graid/8/usr.sbin/ndp/ (props changed)
projects/graid/8/usr.sbin/newsyslog/ (props changed)
projects/graid/8/usr.sbin/nfscbd/ (props changed)
projects/graid/8/usr.sbin/nfsd/ (props changed)
projects/graid/8/usr.sbin/nfsdumpstate/ (props changed)
projects/graid/8/usr.sbin/nfsrevoke/ (props changed)
projects/graid/8/usr.sbin/nfsuserd/ (props changed)
projects/graid/8/usr.sbin/ngctl/ (props changed)
projects/graid/8/usr.sbin/nghook/ (props changed)
projects/graid/8/usr.sbin/nologin/ (props changed)
projects/graid/8/usr.sbin/nscd/ (props changed)
projects/graid/8/usr.sbin/ntp/ (props changed)
projects/graid/8/usr.sbin/nvram/ (props changed)
projects/graid/8/usr.sbin/ofwdump/ (props changed)
projects/graid/8/usr.sbin/pciconf/ (props changed)
projects/graid/8/usr.sbin/periodic/ (props changed)
projects/graid/8/usr.sbin/pkg_install/ (props changed)
projects/graid/8/usr.sbin/pmcannotate/ (props changed)
projects/graid/8/usr.sbin/pmccontrol/ (props changed)
projects/graid/8/usr.sbin/pmcstat/ (props changed)
projects/graid/8/usr.sbin/pnpinfo/ (props changed)
projects/graid/8/usr.sbin/portsnap/ (props changed)
projects/graid/8/usr.sbin/powerd/ (props changed)
projects/graid/8/usr.sbin/ppp/ (props changed)
projects/graid/8/usr.sbin/pppctl/ (props changed)
projects/graid/8/usr.sbin/praliases/ (props changed)
projects/graid/8/usr.sbin/praudit/ (props changed)
projects/graid/8/usr.sbin/procctl/ (props changed)
projects/graid/8/usr.sbin/pstat/ (props changed)
projects/graid/8/usr.sbin/pw/ (props changed)
projects/graid/8/usr.sbin/pwd_mkdb/ (props changed)
projects/graid/8/usr.sbin/quot/ (props changed)
projects/graid/8/usr.sbin/quotaon/ (props changed)
projects/graid/8/usr.sbin/rarpd/ (props changed)
projects/graid/8/usr.sbin/repquota/ (props changed)
projects/graid/8/usr.sbin/rip6query/ (props changed)
projects/graid/8/usr.sbin/rmt/ (props changed)
projects/graid/8/usr.sbin/rndc/ (props changed)
projects/graid/8/usr.sbin/rndc-confgen/ (props changed)
projects/graid/8/usr.sbin/route6d/ (props changed)
projects/graid/8/usr.sbin/rpc.lockd/ (props changed)
projects/graid/8/usr.sbin/rpc.statd/ (props changed)
projects/graid/8/usr.sbin/rpc.umntall/ (props changed)
projects/graid/8/usr.sbin/rpc.yppasswdd/ (props changed)
projects/graid/8/usr.sbin/rpc.ypupdated/ (props changed)
projects/graid/8/usr.sbin/rpc.ypxfrd/ (props changed)
projects/graid/8/usr.sbin/rpcbind/ (props changed)
projects/graid/8/usr.sbin/rrenumd/ (props changed)
projects/graid/8/usr.sbin/rtadvd/ (props changed)
projects/graid/8/usr.sbin/rtprio/ (props changed)
projects/graid/8/usr.sbin/rtsold/ (props changed)
projects/graid/8/usr.sbin/rwhod/ (props changed)
projects/graid/8/usr.sbin/sa/ (props changed)
projects/graid/8/usr.sbin/sade/ (props changed)
projects/graid/8/usr.sbin/sendmail/ (props changed)
projects/graid/8/usr.sbin/service/ (props changed)
projects/graid/8/usr.sbin/service/Makefile (props changed)
projects/graid/8/usr.sbin/service/service.8 (props changed)
projects/graid/8/usr.sbin/service/service.sh (props changed)
projects/graid/8/usr.sbin/services_mkdb/ (props changed)
projects/graid/8/usr.sbin/services_mkdb/Makefile (props changed)
projects/graid/8/usr.sbin/services_mkdb/services_mkdb.8 (props changed)
projects/graid/8/usr.sbin/services_mkdb/services_mkdb.c (props changed)
projects/graid/8/usr.sbin/services_mkdb/uniq.c (props changed)
projects/graid/8/usr.sbin/setfib/ (props changed)
projects/graid/8/usr.sbin/setfmac/ (props changed)
projects/graid/8/usr.sbin/setpmac/ (props changed)
projects/graid/8/usr.sbin/sicontrol/ (props changed)
projects/graid/8/usr.sbin/smbmsg/ (props changed)
projects/graid/8/usr.sbin/snapinfo/ (props changed)
projects/graid/8/usr.sbin/spkrtest/ (props changed)
projects/graid/8/usr.sbin/spray/ (props changed)
projects/graid/8/usr.sbin/sysinstall/ (props changed)
projects/graid/8/usr.sbin/syslogd/ (props changed)
projects/graid/8/usr.sbin/tcpdchk/ (props changed)
projects/graid/8/usr.sbin/tcpdmatch/ (props changed)
projects/graid/8/usr.sbin/tcpdrop/ (props changed)
projects/graid/8/usr.sbin/tcpdump/ (props changed)
projects/graid/8/usr.sbin/timed/ (props changed)
projects/graid/8/usr.sbin/traceroute/ (props changed)
projects/graid/8/usr.sbin/traceroute6/ (props changed)
projects/graid/8/usr.sbin/trpt/ (props changed)
projects/graid/8/usr.sbin/tzsetup/ (props changed)
projects/graid/8/usr.sbin/uathload/ (props changed)
projects/graid/8/usr.sbin/ugidfw/ (props changed)
projects/graid/8/usr.sbin/uhsoctl/ (props changed)
projects/graid/8/usr.sbin/usbconfig/ (props changed)
projects/graid/8/usr.sbin/usbdevs/ (props changed)
projects/graid/8/usr.sbin/vidcontrol/ (props changed)
projects/graid/8/usr.sbin/vipw/ (props changed)
projects/graid/8/usr.sbin/wake/ (props changed)
projects/graid/8/usr.sbin/watch/ (props changed)
projects/graid/8/usr.sbin/watchdogd/ (props changed)
projects/graid/8/usr.sbin/wlandebug/ (props changed)
projects/graid/8/usr.sbin/wlconfig/ (props changed)
projects/graid/8/usr.sbin/wpa/ (props changed)
projects/graid/8/usr.sbin/yp_mkdb/ (props changed)
projects/graid/8/usr.sbin/ypbind/ (props changed)
projects/graid/8/usr.sbin/yppoll/ (props changed)
projects/graid/8/usr.sbin/yppush/ (props changed)
projects/graid/8/usr.sbin/ypserv/ (props changed)
projects/graid/8/usr.sbin/ypset/ (props changed)
projects/graid/8/usr.sbin/zic/ (props changed)
projects/graid/8/usr.sbin/zzz/ (props changed)
Modified: projects/graid/8/sbin/geom/class/raid/geom_raid.c
==============================================================================
--- projects/graid/8/sbin/geom/class/raid/geom_raid.c Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sbin/geom/class/raid/geom_raid.c Thu Feb 10 14:29:34 2011 (r218520)
@@ -47,19 +47,21 @@ uint32_t version = G_RAID_VERSION;
struct g_command class_commands[] = {
{ "label", G_FLAG_VERBOSE, NULL,
{
+ { 'f', "force", NULL, G_TYPE_BOOL },
{ 'S', "size", G_VAL_OPTIONAL, G_TYPE_NUMBER },
{ 's', "strip", G_VAL_OPTIONAL, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- NULL, "[-S size] [-s stripsize] format label level prov ..."
+ NULL, "[-fv] [-S size] [-s stripsize] format label level prov ..."
},
{ "add", G_FLAG_VERBOSE, NULL,
{
+ { 'f', "force", NULL, G_TYPE_BOOL },
{ 'S', "size", G_VAL_OPTIONAL, G_TYPE_NUMBER },
{ 's', "strip", G_VAL_OPTIONAL, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- NULL, "[-S size] [-s stripsize] name label level"
+ NULL, "[-fv] [-S size] [-s stripsize] name label level"
},
{ "delete", G_FLAG_VERBOSE, NULL,
{
Modified: projects/graid/8/sbin/geom/class/raid/graid.8
==============================================================================
--- projects/graid/8/sbin/geom/class/raid/graid.8 Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sbin/geom/class/raid/graid.8 Thu Feb 10 14:29:34 2011 (r218520)
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 5, 2011
+.Dd February 10, 2011
.Dt GRAID 8
.Os
.Sh NAME
@@ -33,6 +33,7 @@
.Sh SYNOPSIS
.Nm
.Cm label
+.Op Fl f
.Op Fl S Ar size
.Op Fl s Ar strip
.Ar format
@@ -41,6 +42,7 @@
.Ar prov ...
.Nm
.Cm add
+.Op Fl f
.Op Fl S Ar size
.Op Fl s Ar strip
.Ar name
@@ -114,6 +116,9 @@ and metadata format.
.Pp
Additional options include:
.Bl -tag -width ".Fl s Ar strip"
+.It Fl f
+Enforce specified configuration creation if it is officially unsupported,
+but technically can be created.
.It Fl S Ar size
Use
.Ar size
@@ -200,6 +205,8 @@ The format used by Intel RAID BIOS.
Supports up to two volumes per array.
Supports configurations: RAID0 (2+ disks), RAID1 (2 disks),
RAID5 (3+ disks), RAID10 (4 disks).
+Configurations not supported by Intel RAID BIOS, but enforsable on your own
+risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks).
.El
.Sh SUPPORTED RAID LEVELS
The GEOM RAID class follows a modular design, allowing different RAID levels
Modified: projects/graid/8/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 10 14:29:34 2011 (r218520)
@@ -275,8 +275,6 @@ g_raid_volume_level2str(int level, int q
return ("RAID5");
case G_RAID_VOLUME_RL_RAID6:
return ("RAID6");
- case G_RAID_VOLUME_RL_RAID10:
- return ("RAID10");
case G_RAID_VOLUME_RL_RAID1E:
return ("RAID1E");
case G_RAID_VOLUME_RL_SINGLE:
@@ -310,9 +308,8 @@ g_raid_volume_str2level(const char *str,
*level = G_RAID_VOLUME_RL_RAID5;
else if (strcasecmp(str, "RAID6") == 0)
*level = G_RAID_VOLUME_RL_RAID6;
- else if (strcasecmp(str, "RAID10") == 0)
- *level = G_RAID_VOLUME_RL_RAID10;
- else if (strcasecmp(str, "RAID1E") == 0)
+ else if (strcasecmp(str, "RAID10") == 0 ||
+ strcasecmp(str, "RAID1E") == 0)
*level = G_RAID_VOLUME_RL_RAID1E;
else if (strcasecmp(str, "SINGLE") == 0)
*level = G_RAID_VOLUME_RL_SINGLE;
@@ -910,6 +907,7 @@ g_raid_start_request(struct bio *bp)
sc = bp->bio_to->geom->softc;
sx_assert(&sc->sc_lock, SX_LOCKED);
vol = bp->bio_to->private;
+
/*
* Check to see if this item is in a locked range. If so,
* queue it to our locked queue and return. We'll requeue
@@ -1073,7 +1071,7 @@ void
g_raid_subdisk_iostart(struct g_raid_subdisk *sd, struct bio *bp)
{
struct g_consumer *cp;
- struct g_raid_disk *disk;
+ struct g_raid_disk *disk, *tdisk;
bp->bio_caller1 = sd;
@@ -1103,6 +1101,17 @@ nodisk:
bp->bio_from = cp;
bp->bio_to = cp->provider;
cp->index++;
+
+ /* Update average disks load. */
+ TAILQ_FOREACH(tdisk, &sd->sd_softc->sc_disks, d_next) {
+ if (tdisk->d_consumer == NULL)
+ tdisk->d_load = 0;
+ else
+ tdisk->d_load = (tdisk->d_consumer->index *
+ G_RAID_SUBDISK_LOAD_SCALE + tdisk->d_load * 7) / 8;
+ }
+
+ disk->d_last_offset = bp->bio_offset + bp->bio_length;
if (dumping) {
G_RAID_LOGREQ(3, bp, "Sending dumping request.");
if (bp->bio_cmd == BIO_WRITE) {
@@ -1309,10 +1318,11 @@ out:
static void
g_raid_launch_provider(struct g_raid_volume *vol)
{
-// struct g_raid_disk *disk;
+ struct g_raid_disk *disk;
struct g_raid_softc *sc;
struct g_provider *pp;
char name[G_RAID_MAX_VOLUMENAME];
+ off_t off;
sc = vol->v_softc;
sx_assert(&sc->sc_lock, SX_LOCKED);
@@ -1331,14 +1341,25 @@ g_raid_launch_provider(struct g_raid_vol
pp->sectorsize = vol->v_sectorsize;
pp->stripesize = 0;
pp->stripeoffset = 0;
-#if 0
- TAILQ_FOREACH(disk, &sc->sc_disks, d_next) {
- if (disk->d_consumer && disk->d_consumer->provider &&
- disk->d_consumer->provider->stripesize > pp->stripesize) {
+ if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_RAID3 ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE ||
+ vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) {
+ if ((disk = vol->v_subdisks[0].sd_disk) != NULL &&
+ disk->d_consumer != NULL &&
+ disk->d_consumer->provider != NULL) {
pp->stripesize = disk->d_consumer->provider->stripesize;
+ off = disk->d_consumer->provider->stripeoffset;
+ pp->stripeoffset = off + vol->v_subdisks[0].sd_offset;
+ if (off > 0)
+ pp->stripeoffset %= off;
}
- }
-#endif
+ if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID3) {
+ pp->stripesize *= (vol->v_disks_count - 1);
+ pp->stripeoffset *= (vol->v_disks_count - 1);
+ }
+ } else
+ pp->stripesize = vol->v_strip_size;
vol->v_provider = pp;
g_error_provider(pp, 0);
g_topology_unlock();
Modified: projects/graid/8/sys/geom/raid/g_raid.h
==============================================================================
--- projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 10 14:29:34 2011 (r218520)
@@ -98,6 +98,7 @@ extern struct g_class g_raid_class;
* doing some desirable action such as bad
* block remapping after we detect a bad part
* of the disk.
+ * G_RAID_BIO_FLAG_LOCKED I/O holds range lock that should re released.
*
* and the following meta item:
* G_RAID_BIO_FLAG_SPECIAL And of the I/O flags that need to make it
@@ -107,8 +108,9 @@ extern struct g_class g_raid_class;
*/
#define G_RAID_BIO_FLAG_SYNC 0x01
#define G_RAID_BIO_FLAG_REMAP 0x02
-#define G_RAID_BIO_FLAG_SPECIAL \
+#define G_RAID_BIO_FLAG_SPECIAL \
(G_RAID_BIO_FLAG_SYNC|G_RAID_BIO_FLAG_REMAP)
+#define G_RAID_BIO_FLAG_LOCKED 0x80
struct g_raid_lock {
off_t l_offset;
@@ -145,10 +147,11 @@ struct g_raid_disk {
struct g_consumer *d_consumer; /* GEOM disk consumer. */
void *d_md_data; /* Disk's metadata storage. */
struct g_kerneldump d_kd; /* Kernel dumping method/args. */
- u_int d_state; /* Disk state. */
uint64_t d_flags; /* Additional flags. */
+ u_int d_state; /* Disk state. */
u_int d_load; /* Disk average load. */
off_t d_last_offset; /* Last head offset. */
+ int d_read_errs; /* Count of the read errors */
TAILQ_HEAD(, g_raid_subdisk) d_subdisks; /* List of subdisks. */
TAILQ_ENTRY(g_raid_disk) d_next; /* Next disk in the node. */
};
@@ -167,6 +170,13 @@ struct g_raid_disk {
#define G_RAID_SUBDISK_E_DISCONNECTED 0x03 /* A subdisk removed from volume. */
#define G_RAID_SUBDISK_E_FIRST_TR_PRIVATE 0x80 /* translation private events */
+#define G_RAID_SUBDISK_POS(sd) \
+ ((sd)->sd_disk ? ((sd)->sd_disk->d_last_offset - (sd)->sd_offset) : 0)
+#define G_RAID_SUBDISK_TRACK_SIZE (1 * 1024 * 1024)
+#define G_RAID_SUBDISK_LOAD(sd) \
+ ((sd)->sd_disk ? ((sd)->sd_disk->d_load) : 0)
+#define G_RAID_SUBDISK_LOAD_SCALE 256
+
struct g_raid_subdisk {
struct g_raid_softc *sd_softc; /* Back-pointer to softc. */
struct g_raid_disk *sd_disk; /* Where this subdisk lives. */
@@ -176,7 +186,7 @@ struct g_raid_subdisk {
u_int sd_pos; /* Position in volume. */
u_int sd_state; /* Subdisk state. */
off_t sd_rebuild_pos; /* Rebuild position. */
- int sd_read_errs; /* Count of the read errors */
+ int sd_recovery; /* Count of recovery reqs. */
TAILQ_ENTRY(g_raid_subdisk) sd_next; /* Next subdisk on disk. */
};
@@ -206,7 +216,6 @@ struct g_raid_subdisk {
#define G_RAID_VOLUME_RL_RAID4 0x04
#define G_RAID_VOLUME_RL_RAID5 0x05
#define G_RAID_VOLUME_RL_RAID6 0x06
-#define G_RAID_VOLUME_RL_RAID10 0x0a
#define G_RAID_VOLUME_RL_RAID1E 0x11
#define G_RAID_VOLUME_RL_SINGLE 0x0f
#define G_RAID_VOLUME_RL_CONCAT 0x1f
Modified: projects/graid/8/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 10 14:29:34 2011 (r218520)
@@ -568,6 +568,43 @@ g_raid_md_intel_get_disk(struct g_raid_s
return (disk);
}
+static int
+g_raid_md_intel_supported(int level, int qual, int disks, int force)
+{
+
+ switch (level) {
+ case G_RAID_VOLUME_RL_RAID0:
+ if (disks < 1)
+ return (0);
+ if (!force && (disks < 2 || disks > 6))
+ return (0);
+ break;
+ case G_RAID_VOLUME_RL_RAID1:
+ if (disks < 1)
+ return (0);
+ if (!force && (disks != 2))
+ return (0);
+ break;
+ case G_RAID_VOLUME_RL_RAID1E:
+ if (disks < 3)
+ return (0);
+ if (!force && (disks != 4))
+ return (0);
+ break;
+ case G_RAID_VOLUME_RL_RAID5:
+ if (disks < 3)
+ return (0);
+ if (!force && disks > 6)
+ return (0);
+ break;
+ default:
+ return (0);
+ }
+ if (qual != G_RAID_VOLUME_RLQ_NONE)
+ return (0);
+ return (1);
+}
+
static struct g_raid_volume *
g_raid_md_intel_get_volume(struct g_raid_softc *sc, int id)
{
@@ -898,11 +935,20 @@ g_raid_md_intel_start(struct g_raid_soft
if (mmap->type == INTEL_T_RAID0)
vol->v_raid_level = G_RAID_VOLUME_RL_RAID0;
else if (mmap->type == INTEL_T_RAID1 &&
- mmap->total_disks < 4) /* >= 4 disks -> RAID10 */
- vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
- else if (mmap->type == INTEL_T_RAID1) /* SIC */
- vol->v_raid_level = G_RAID_VOLUME_RL_RAID10;
- else if (mmap->type == INTEL_T_RAID5)
+ mmap->total_domains >= 2 &&
+ mmap->total_domains <= mmap->total_disks) {
+ /* Assume total_domains is correct. */
+ if (mmap->total_domains == mmap->total_disks)
+ vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
+ else
+ vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E;
+ } else if (mmap->type == INTEL_T_RAID1) {
+ /* total_domains looks wrong. */
+ if (mmap->total_disks <= 2)
+ vol->v_raid_level = G_RAID_VOLUME_RL_RAID1;
+ else
+ vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E;
+ } else if (mmap->type == INTEL_T_RAID5)
vol->v_raid_level = G_RAID_VOLUME_RL_RAID5;
else
vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN;
@@ -954,6 +1000,8 @@ g_raid_md_intel_start(struct g_raid_soft
} while (disk != NULL);
mdi->mdio_started = 1;
+ G_RAID_DEBUG1(0, sc, "Array started.");
+ g_raid_md_write_intel(md, NULL, NULL, NULL);
/* Pickup any STALE/SPARE disks to refill array if needed. */
g_raid_md_intel_refill(sc);
@@ -1348,16 +1396,17 @@ g_raid_md_ctl_intel(struct g_raid_md_obj
gctl_error(req, "Unknown RAID level '%s'.", levelname);
return (-4);
}
- if (level != G_RAID_VOLUME_RL_RAID0 &&
- level != G_RAID_VOLUME_RL_RAID1 &&
- level != G_RAID_VOLUME_RL_RAID5 &&
- level != G_RAID_VOLUME_RL_RAID10) {
- gctl_error(req, "Unsupported RAID level.");
+ numdisks = *nargs - 3;
+ force = gctl_get_paraml(req, "force", sizeof(*force));
+ if (!g_raid_md_intel_supported(level, qual, numdisks,
+ force ? *force : 0)) {
+ gctl_error(req, "Unsupported RAID level "
+ "(0x%02x/0x%02x), or number of disks (%d).",
+ level, qual, numdisks);
return (-5);
}
/* Search for disks, connect them and probe. */
- numdisks = *nargs - 3;
size = 0x7fffffffffffffffllu;
sectorsize = 0;
for (i = 0; i < numdisks; i++) {
@@ -1515,8 +1564,10 @@ makedisk:
vol->v_mediasize = size;
else if (level == G_RAID_VOLUME_RL_RAID5)
vol->v_mediasize = size * (numdisks - 1);
- else /* RAID10 */
- vol->v_mediasize = size * (numdisks / 2);
+ else { /* RAID1E */
+ vol->v_mediasize = ((size * numdisks) / strip / 2) *
+ strip;
+ }
vol->v_sectorsize = sectorsize;
g_raid_start_volume(vol);
@@ -1541,6 +1592,7 @@ makedisk:
}
/* Write metadata based on created entities. */
+ G_RAID_DEBUG1(0, sc, "Array started.");
g_raid_md_write_intel(md, NULL, NULL, NULL);
/* Pickup any STALE/SPARE disks to refill array if needed. */
@@ -1570,13 +1622,6 @@ makedisk:
gctl_error(req, "Unknown RAID level '%s'.", levelname);
return (-4);
}
- if (level != G_RAID_VOLUME_RL_RAID0 &&
- level != G_RAID_VOLUME_RL_RAID1 &&
- level != G_RAID_VOLUME_RL_RAID5 &&
- level != G_RAID_VOLUME_RL_RAID10) {
- gctl_error(req, "Unsupported RAID level.");
- return (-5);
- }
/* Look for existing volumes. */
i = 0;
@@ -1594,10 +1639,19 @@ makedisk:
return (-7);
}
+ numdisks = vol1->v_disks_count;
+ force = gctl_get_paraml(req, "force", sizeof(*force));
+ if (!g_raid_md_intel_supported(level, qual, numdisks,
+ force ? *force : 0)) {
+ gctl_error(req, "Unsupported RAID level "
+ "(0x%02x/0x%02x), or number of disks (%d).",
+ level, qual, numdisks);
+ return (-5);
+ }
+
/* Collect info about present disks. */
size = 0x7fffffffffffffffllu;
sectorsize = 512;
- numdisks = vol1->v_disks_count;
for (i = 0; i < numdisks; i++) {
disk = vol1->v_subdisks[i].sd_disk;
pd = (struct g_raid_md_intel_perdisk *)
@@ -1692,8 +1746,10 @@ makedisk:
vol->v_mediasize = size;
else if (level == G_RAID_VOLUME_RL_RAID5)
vol->v_mediasize = size * (numdisks - 1);
- else /* RAID10 */
- vol->v_mediasize = size * (numdisks / 2);
+ else { /* RAID1E */
+ vol->v_mediasize = ((size * numdisks) / strip / 2) *
+ strip;
+ }
vol->v_sectorsize = sectorsize;
g_raid_start_volume(vol);
@@ -2138,15 +2194,15 @@ g_raid_md_write_intel(struct g_raid_md_o
if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0)
mmap0->type = INTEL_T_RAID0;
else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 ||
- vol->v_raid_level == G_RAID_VOLUME_RL_RAID10)
+ vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E)
mmap0->type = INTEL_T_RAID1;
else
mmap0->type = INTEL_T_RAID5;
mmap0->total_disks = vol->v_disks_count;
- if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID10)
- mmap0->total_domains = vol->v_disks_count / 2;
- else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1)
+ if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1)
mmap0->total_domains = vol->v_disks_count;
+ else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E)
+ mmap0->total_domains = 2;
else
mmap0->total_domains = 1;
mmap0->stripe_count = sd->sd_size / vol->v_strip_size /
Modified: projects/graid/8/sys/geom/raid/tr_raid1.c
==============================================================================
--- projects/graid/8/sys/geom/raid/tr_raid1.c Thu Feb 10 12:34:27 2011 (r218519)
+++ projects/graid/8/sys/geom/raid/tr_raid1.c Thu Feb 10 14:29:34 2011 (r218520)
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <sys/endian.h>
#include <sys/kernel.h>
#include <sys/kobj.h>
+#include <sys/limits.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
@@ -162,10 +163,12 @@ g_raid_tr_update_state_raid1(struct g_ra
struct g_raid_subdisk *sd)
{
struct g_raid_tr_raid1_object *trs;
+ struct g_raid_softc *sc;
struct g_raid_subdisk *tsd, *bestsd;
u_int s;
int i, na, ns;
+ sc = vol->v_softc;
trs = (struct g_raid_tr_raid1_object *)vol->v_tr;
if (trs->trso_stopping &&
(trs->trso_flags & TR_RAID1_F_DOING_SOME) == 0)
@@ -193,13 +196,13 @@ g_raid_tr_update_state_raid1(struct g_ra
}
if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED) {
/* We found reasonable candidate. */
- G_RAID_DEBUG1(1, vol->v_softc,
+ G_RAID_DEBUG1(1, sc,
"Promote subdisk %s:%d from %s to ACTIVE.",
vol->v_name, bestsd->sd_pos,
g_raid_subdisk_state2str(bestsd->sd_state));
g_raid_change_subdisk_state(bestsd,
G_RAID_SUBDISK_S_ACTIVE);
- g_raid_write_metadata(vol->v_softc,
+ g_raid_write_metadata(sc,
vol, bestsd, bestsd->sd_disk);
}
}
@@ -221,11 +224,32 @@ g_raid_tr_update_state_raid1(struct g_ra
G_RAID_VOLUME_E_UP : G_RAID_VOLUME_E_DOWN,
G_RAID_EVENT_VOLUME);
g_raid_change_volume_state(vol, s);
+ if (!trs->trso_starting && !trs->trso_stopping)
+ g_raid_write_metadata(sc, vol, NULL, NULL);
}
return (0);
}
static void
+g_raid_tr_raid1_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd,
+ struct g_raid_disk *disk)
+{
+ /*
+ * We don't fail the last disk in the pack, since it still has decent
+ * data on it and that's better than failing the disk if it is the root
+ * file system.
+ *
+ * XXX should this be controlled via a tunable? It makes sense for
+ * the volume that has / on it. I can't think of a case where we'd
+ * want the volume to go away on this kind of event.
+ */
+ if (g_raid_nsubdisks(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == 1 &&
+ g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == sd)
+ return;
+ g_raid_fail_disk(sc, sd, disk);
+}
+
+static void
g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr,
struct g_raid_subdisk *sd)
{
@@ -471,22 +495,46 @@ g_raid_tr_stop_raid1(struct g_raid_tr_ob
}
/*
- * Select the disk to do the reads to. For now, we just pick the first one in
- * the list that's active always. This ensures we favor one disk on boot, and
- * have more deterministic recovery from the weird edge cases of power
- * failure. In the future, we can imagine policies that go for the least
- * loaded disk to improve performance, or we need to limit reads to a disk
- * during some kind of error recovery with that disk.
+ * Select the disk to read from. Take into account: subdisk state, running
+ * error recovery, average disk load, head position and possible cache hits.
*/
+#define ABS(x) (((x) >= 0) ? (x) : (-(x)))
static struct g_raid_subdisk *
-g_raid_tr_raid1_select_read_disk(struct g_raid_volume *vol)
+g_raid_tr_raid1_select_read_disk(struct g_raid_volume *vol, struct bio *bp,
+ u_int mask)
{
- int i;
+ struct g_raid_subdisk *sd, *best;
+ int i, prio, bestprio;
- for (i = 0; i < vol->v_disks_count; i++)
- if (vol->v_subdisks[i].sd_state == G_RAID_SUBDISK_S_ACTIVE)
- return (&vol->v_subdisks[i]);
- return (NULL);
+ best = NULL;
+ bestprio = INT_MAX;
+ for (i = 0; i < vol->v_disks_count; i++) {
+ sd = &vol->v_subdisks[i];
+ if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE &&
+ !((sd->sd_state == G_RAID_SUBDISK_S_REBUILD ||
+ sd->sd_state == G_RAID_SUBDISK_S_RESYNC) &&
+ bp->bio_offset + bp->bio_length <
+ sd->sd_rebuild_pos))
+ continue;
+ if ((mask & (1 << i)) != 0)
+ continue;
+ prio = G_RAID_SUBDISK_LOAD(sd);
+ prio += min(sd->sd_recovery, 255) << 22;
+ prio += (G_RAID_SUBDISK_S_ACTIVE - sd->sd_state) << 16;
+ /* If disk head is precisely in position - highly prefer it. */
+ if (G_RAID_SUBDISK_POS(sd) == bp->bio_offset)
+ prio -= 2 * G_RAID_SUBDISK_LOAD_SCALE;
+ else
+ /* If disk head is close to position - prefer it. */
+ if (ABS(G_RAID_SUBDISK_POS(sd) - bp->bio_offset) <
+ G_RAID_SUBDISK_TRACK_SIZE)
+ prio -= 1 * G_RAID_SUBDISK_LOAD_SCALE;
+ if (prio < bestprio) {
+ best = sd;
+ bestprio = prio;
+ }
+ }
+ return (best);
}
static void
@@ -495,7 +543,7 @@ g_raid_tr_iostart_raid1_read(struct g_ra
struct g_raid_subdisk *sd;
struct bio *cbp;
- sd = g_raid_tr_raid1_select_read_disk(tr->tro_volume);
+ sd = g_raid_tr_raid1_select_read_disk(tr->tro_volume, bp, 0);
KASSERT(sd != NULL, ("No active disks in volume %s.",
tr->tro_volume->v_name));
@@ -630,10 +678,11 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
struct g_raid_volume *vol;
struct bio *pbp;
struct g_raid_tr_raid1_object *trs;
- int i, error;
+ uintptr_t *mask;
+ int error, do_write;
trs = (struct g_raid_tr_raid1_object *)tr;
- pbp = bp->bio_parent;
+ vol = tr->tro_volume;
if (bp->bio_cflags & G_RAID_BIO_FLAG_SYNC) {
/*
* This operation is part of a rebuild or resync operation.
@@ -650,20 +699,30 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
* 5MB of data, for inactive ones, we do 50MB.
*/
if (trs->trso_type == TR_RAID1_REBUILD) {
- vol = tr->tro_volume;
if (bp->bio_cmd == BIO_READ) {
+
+ /* Immediately abort rebuild, if requested. */
+ if (trs->trso_flags & TR_RAID1_F_ABORT) {
+ trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
+ g_raid_tr_raid1_rebuild_abort(tr);
+ return;
+ }
+
+ /* On read error, skip and cross fingers. */
+ if (bp->bio_error != 0) {
+ G_RAID_LOGREQ(0, bp,
+ "Read error during rebuild (%d), "
+ "possible data loss!",
+ bp->bio_error);
+ goto rebuild_round_done;
+ }
+
/*
* The read operation finished, queue the
* write and get out.
*/
G_RAID_LOGREQ(4, bp, "rebuild read done. %d",
bp->bio_error);
- if (bp->bio_error != 0 ||
- trs->trso_flags & TR_RAID1_F_ABORT) {
- trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
- g_raid_tr_raid1_rebuild_abort(tr);
- return;
- }
bp->bio_cmd = BIO_WRITE;
bp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
bp->bio_offset = bp->bio_offset;
@@ -685,7 +744,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
trs->trso_flags & TR_RAID1_F_ABORT) {
if ((trs->trso_flags &
TR_RAID1_F_ABORT) == 0) {
- g_raid_fail_disk(sd->sd_softc,
+ g_raid_tr_raid1_fail_disk(sd->sd_softc,
nsd, nsd->sd_disk);
}
trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
@@ -693,6 +752,8 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
return;
}
/* XXX A lot of the following is needed when we kick of the work -- refactor */
+rebuild_round_done:
+ nsd = trs->trso_failed_sd;
trs->trso_flags &= ~TR_RAID1_F_LOCKED;
g_raid_unlock_range(sd->sd_volume,
bp->bio_offset, bp->bio_length);
@@ -749,6 +810,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
}
return;
}
+ pbp = bp->bio_parent;
pbp->bio_inbed++;
if (bp->bio_cmd == BIO_READ && bp->bio_error != 0) {
/*
@@ -756,11 +818,10 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
* another disk drive, if available, before erroring out the
* read.
*/
- vol = tr->tro_volume;
- sd->sd_read_errs++;
+ sd->sd_disk->d_read_errs++;
G_RAID_LOGREQ(0, bp,
"Read error (%d), %d read errors total",
- bp->bio_error, sd->sd_read_errs);
+ bp->bio_error, sd->sd_disk->d_read_errs);
/*
* If there are too many read errors, we move to degraded.
@@ -768,33 +829,37 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
* everything to get it back in sync), or just degrade the
* drive, which kicks off a resync?
*/
- if (sd->sd_read_errs > g_raid1_read_err_thresh) {
- g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk);
+ do_write = 1;
+ if (sd->sd_disk->d_read_errs > g_raid1_read_err_thresh) {
+ g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk);
if (pbp->bio_children == 1)
- goto remapdone;
+ do_write = 0;
}
/*
* Find the other disk, and try to do the I/O to it.
*/
- for (nsd = NULL, i = 0; i < vol->v_disks_count; i++) {
- if (pbp->bio_children > 1)
- break;
- nsd = &vol->v_subdisks[i];
- if (sd == nsd)
- continue;
- if (nsd->sd_state != G_RAID_SUBDISK_S_ACTIVE)
- continue;
- cbp = g_clone_bio(pbp);
- if (cbp == NULL)
- break;
- G_RAID_LOGREQ(2, cbp, "Retrying read");
- pbp->bio_driver1 = sd; /* Save original subdisk. */
- cbp->bio_caller1 = nsd;
- cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP;
- /* Lock callback starts I/O */
- g_raid_lock_range(sd->sd_volume,
- cbp->bio_offset, cbp->bio_length, pbp, cbp);
+ mask = (uintptr_t *)(&pbp->bio_driver2);
+ if (pbp->bio_children == 1) {
+ /* Save original subdisk. */
+ pbp->bio_driver1 = do_write ? sd : NULL;
+ *mask = 0;
+ }
+ *mask |= 1 << sd->sd_pos;
+ nsd = g_raid_tr_raid1_select_read_disk(vol, pbp, *mask);
+ if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) {
+ G_RAID_LOGREQ(2, cbp, "Retrying read from %d",
+ nsd->sd_pos);
+ if (pbp->bio_children == 2 && do_write) {
+ sd->sd_recovery++;
+ cbp->bio_caller1 = nsd;
+ pbp->bio_pflags = G_RAID_BIO_FLAG_LOCKED;
+ /* Lock callback starts I/O */
+ g_raid_lock_range(sd->sd_volume,
+ cbp->bio_offset, cbp->bio_length, pbp, cbp);
+ } else {
+ g_raid_subdisk_iostart(nsd, cbp);
+ }
return;
}
/*
@@ -805,10 +870,12 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
*/
G_RAID_LOGREQ(2, bp, "Couldn't retry read, failing it");
}
- if (bp->bio_cmd == BIO_READ && bp->bio_error == 0 &&
- pbp->bio_children > 1) {
+ if (bp->bio_cmd == BIO_READ &&
+ bp->bio_error == 0 &&
+ pbp->bio_children > 1 &&
+ pbp->bio_driver1 != NULL) {
/*
- * If it was a read, and bio_children is 2, then we just
+ * If it was a read, and bio_children is >1, then we just
* recovered the data from the second drive. We should try to
* write that data to the first drive if sector remapping is
* enabled. A write should put the data in a new place on the
@@ -823,16 +890,15 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
if (cbp != NULL) {
cbp->bio_cmd = BIO_WRITE;
cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP;
- G_RAID_LOGREQ(3, cbp,
+ G_RAID_LOGREQ(2, cbp,
"Attempting bad sector remap on failing drive.");
g_raid_subdisk_iostart(pbp->bio_driver1, cbp);
return;
}
}
-remapdone:
- if (bp->bio_cflags & G_RAID_BIO_FLAG_REMAP) {
+ if (pbp->bio_pflags & G_RAID_BIO_FLAG_LOCKED) {
/*
- * We're done with a remap write, mark the range as unlocked.
+ * We're done with a recovery, mark the range as unlocked.
* For any write errors, we agressively fail the disk since
* there was both a READ and a WRITE error at this location.
* Both types of errors generally indicates the drive is on
@@ -840,12 +906,16 @@ remapdone:
* it now. However, we need to reset error to 0 in that case
* because we're not failing the original I/O which succeeded.
*/
- if (pbp->bio_cmd == BIO_WRITE && bp->bio_error) {
+ if (bp->bio_cmd == BIO_WRITE && bp->bio_error) {
G_RAID_LOGREQ(0, bp, "Remap write failed: "
"failing subdisk.");
- g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk);
+ g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk);
bp->bio_error = 0;
}
+ if (pbp->bio_driver1 != NULL) {
+ ((struct g_raid_subdisk *)pbp->bio_driver1)
+ ->sd_recovery--;
+ }
G_RAID_LOGREQ(2, bp, "REMAP done %d.", bp->bio_error);
g_raid_unlock_range(sd->sd_volume, bp->bio_offset,
bp->bio_length);
More information about the svn-src-projects
mailing list