From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 16:12:56 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 873791065673; Thu, 17 Feb 2011 16:12:56 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 723648FC12; Thu, 17 Feb 2011 16:12:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1HGCufi017245; Thu, 17 Feb 2011 16:12:56 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HGCuIE017236; Thu, 17 Feb 2011 16:12:56 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102171612.p1HGCuIE017236@svn.freebsd.org> From: Alexander Motin Date: Thu, 17 Feb 2011 16:12:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218774 - 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... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Feb 2011 16:12:56 -0000 Author: mav Date: Thu Feb 17 16:12:55 2011 New Revision: 218774 URL: http://svn.freebsd.org/changeset/base/218774 Log: MFH r218702, r218705, r218706, r218721, r218722, r218727, r218728, r218732, r218734, r218740. Added: projects/graid/8/sys/geom/raid/md_jmicron.c - copied, changed from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/8/sys/geom/raid/tr_concat.c - copied unchanged from r218706, projects/graid/head/sys/geom/raid/tr_concat.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/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 Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sbin/geom/class/raid/graid.8 Thu Feb 17 16:12:55 2011 (r218774) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 13, 2011 +.Dd February 15, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -205,14 +205,21 @@ 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 +Configurations not supported by Intel RAID BIOS, but enforceable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks). +.It JMicron +The format used by JMicron RAID BIOS. +Supports one volume per array. +Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), +RAID10 (4 disks), CONCAT (2+ disks). +Configurations not supported by JMicron RAID BIOS, but enforceable on your own +risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks). .El .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, -RAID1E, RAID10. +RAID1E, RAID10, SINGLE, CONCAT. .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 Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/conf/files Thu Feb 17 16:12:55 2011 (r218774) @@ -2019,6 +2019,8 @@ geom/raid/g_raid_ctl.c optional geom_ra geom/raid/g_raid_md_if.m optional geom_raid geom/raid/g_raid_tr_if.m optional geom_raid geom/raid/md_intel.c optional geom_raid +geom/raid/md_jmicron.c optional geom_raid +geom/raid/tr_concat.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 Modified: projects/graid/8/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 17 16:12:55 2011 (r218774) @@ -585,6 +585,32 @@ g_raid_get_subdisk(struct g_raid_volume return (NULL); } +struct g_consumer * +g_raid_open_consumer(struct g_raid_softc *sc, const char *name) +{ + struct g_consumer *cp; + struct g_provider *pp; + + g_topology_assert(); + + if (strncmp(name, "/dev/", 5) == 0) + name += 5; + pp = g_provider_by_name(name); + if (pp == NULL) + return (NULL); + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + g_destroy_consumer(cp); + return (NULL); + } + if (g_access(cp, 1, 1, 1) != 0) { + g_detach(cp); + g_destroy_consumer(cp); + return (NULL); + } + return (cp); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { @@ -652,11 +678,12 @@ g_raid_kill_consumer(struct g_raid_softc struct g_provider *pp; int retaste_wait; - g_topology_assert(); + g_topology_assert_not(); + g_topology_lock(); cp->private = NULL; if (g_raid_consumer_is_busy(sc, cp)) - return; + goto out; pp = cp->provider; retaste_wait = 0; if (cp->acw == 1) { @@ -676,11 +703,13 @@ g_raid_kill_consumer(struct g_raid_softc * after retaste event is sent. */ g_post_event(g_raid_destroy_consumer, cp, M_WAITOK, NULL); - return; + goto out; } G_RAID_DEBUG(1, "Consumer %s destroyed.", pp->name); g_detach(cp); g_destroy_consumer(cp); +out: + g_topology_unlock(); } static void @@ -1228,11 +1257,8 @@ g_raid_disk_done_request(struct bio *bp) if (bp->bio_from != NULL) { bp->bio_from->index--; disk = bp->bio_from->private; - if (disk == NULL) { - g_topology_lock(); + if (disk == NULL) g_raid_kill_consumer(sc, bp->bio_from); - g_topology_unlock(); - } } bp->bio_offset -= sd->sd_offset; @@ -1302,6 +1328,7 @@ g_raid_worker(void *arg) t = now; TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (bioq_first(&vol->v_inflight) == NULL && + vol->v_tr && timevalcmp(&vol->v_last_done, &t, < )) t = vol->v_last_done; } @@ -1868,9 +1895,7 @@ g_raid_destroy_disk(struct g_raid_disk * sc = disk->d_softc; G_RAID_DEBUG1(2, sc, "Destroying disk."); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { @@ -2228,7 +2253,7 @@ g_raid_md_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_md_classes); - if (c == NULL || c->mdc_priority < class->mdc_priority) + if (c == NULL || c->mdc_priority > class->mdc_priority) LIST_INSERT_HEAD(&g_raid_md_classes, class, mdc_list); else { while ((nc = LIST_NEXT(c, mdc_list)) != NULL && @@ -2261,7 +2286,7 @@ g_raid_tr_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_tr_classes); - if (c == NULL || c->trc_priority < class->trc_priority) + if (c == NULL || c->trc_priority > class->trc_priority) LIST_INSERT_HEAD(&g_raid_tr_classes, class, trc_list); else { while ((nc = LIST_NEXT(c, trc_list)) != NULL && Modified: projects/graid/8/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 17 16:12:55 2011 (r218774) @@ -364,6 +364,8 @@ void g_raid_subdisk_iostart(struct g_rai int g_raid_subdisk_kerneldump(struct g_raid_subdisk *sd, void *virtual, vm_offset_t physical, off_t offset, size_t length); +struct g_consumer *g_raid_open_consumer(struct g_raid_softc *sc, + const char *name); void g_raid_kill_consumer(struct g_raid_softc *sc, struct g_consumer *cp); void g_raid_report_disk_state(struct g_raid_disk *disk); Modified: projects/graid/8/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 17 16:12:55 2011 (r218774) @@ -715,9 +715,9 @@ nofit: TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); sd->sd_disk = disk; - oldpd->pd_disk_pos = -2; - pd->pd_disk_pos = disk_pos; } + oldpd->pd_disk_pos = -2; + pd->pd_disk_pos = disk_pos; /* If it was placeholder -- destroy it. */ if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { @@ -1327,9 +1327,7 @@ g_raid_md_event_intel(struct g_raid_md_o if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1428,38 +1426,18 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - break; - } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; disk = g_raid_create_disk(sc); @@ -1467,13 +1445,11 @@ makedisk: disk->d_consumer = cp; if (cp == NULL) { strcpy(&pd->pd_disk_meta.serial[0], "NONE"); - pd->pd_disk_meta.id = 0; pd->pd_disk_meta.id = 0xffffffff; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; continue; } cp->private = disk; - g_topology_unlock(); error = g_raid_md_get_label(cp, @@ -1908,9 +1884,7 @@ makedisk: if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1952,37 +1926,18 @@ makedisk: error = -3; break; } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; /* Try to find provider with specified name. */ g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", diskname); g_topology_unlock(); error = -4; break; } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -5; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -6; - break; - } + pp = cp->provider; g_topology_unlock(); /* Read disk serial. */ @@ -1992,9 +1947,7 @@ makedisk: gctl_error(req, "Can't get serial for provider '%s'.", diskname); - g_topology_lock(); g_raid_kill_consumer(sc, cp); - g_topology_unlock(); error = -7; break; } Copied and modified: projects/graid/8/sys/geom/raid/md_jmicron.c (from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c) ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Tue Feb 15 22:01:39 2011 (r218722, copy source) +++ projects/graid/8/sys/geom/raid/md_jmicron.c Thu Feb 17 16:12:55 2011 (r218774) @@ -91,6 +91,7 @@ struct g_raid_md_jmicron_perdisk { struct jmicron_raid_conf *pd_meta; int pd_disk_pos; int pd_disk_id; + off_t pd_disk_size; }; struct g_raid_md_jmicron_object { @@ -154,7 +155,7 @@ g_raid_md_jmicron_print(struct jmicron_r printf("stripe_shift %d\n", meta->stripe_shift); printf("flags %04x\n", meta->flags); printf("spare "); - for (k = 0; k < 2; k++) + for (k = 0; k < JMICRON_MAX_SPARE; k++) printf(" 0x%08x", meta->spare[k]); printf("\n"); printf("disks "); @@ -247,7 +248,7 @@ jmicron_meta_find_disk(struct jmicron_ra if ((meta->disks[pos] & JMICRON_DISK_MASK) == id) return (pos); } - for (pos = 0; pos < 2; pos++) { + for (pos = 0; pos < JMICRON_MAX_SPARE; pos++) { if ((meta->spare[pos] & JMICRON_DISK_MASK) == id) return (-3); } @@ -389,6 +390,8 @@ g_raid_md_jmicron_supported(int level, i case G_RAID_VOLUME_RL_SINGLE: if (disks != 1) return (0); + if (!force) + return (0); break; case G_RAID_VOLUME_RL_CONCAT: if (disks < 2) @@ -442,23 +445,19 @@ g_raid_md_jmicron_start_disk(struct g_ra if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && tmpdisk->d_state != G_RAID_DISK_S_FAILED) continue; -#if 0 /* Make sure this disk is big enough. */ TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { - if (sd->sd_offset + sd->sd_size + 4096 > - (off_t)pd->pd_disk_meta.sectors * 512) { + if (sd->sd_offset + sd->sd_size + 512 > + pd->pd_disk_size) { G_RAID_DEBUG1(1, sc, - "Disk too small (%llu < %llu)", - ((unsigned long long) - pd->pd_disk_meta.sectors) * 512, - (unsigned long long) - sd->sd_offset + sd->sd_size + 4096); + "Disk too small (%ju < %ju)", + pd->pd_disk_size, + sd->sd_offset + sd->sd_size + 512); break; } } if (sd != NULL) continue; -#endif if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { olddisk = tmpdisk; break; @@ -669,7 +668,10 @@ g_raid_md_jmicron_start(struct g_raid_so vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; vol->v_mediasize = size * mdi->mdio_total_disks / 2; } else if (meta->type == JMICRON_T_CONCAT) { - vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; + if (mdi->mdio_total_disks == 1) + vol->v_raid_level = G_RAID_VOLUME_RL_SINGLE; + else + vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; vol->v_mediasize = 0; } else if (meta->type == JMICRON_T_RAID5) { vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; @@ -746,23 +748,26 @@ g_raid_md_jmicron_new_disk(struct g_raid if (g_raid_md_jmicron_start_disk(disk)) g_raid_md_write_jmicron(md, NULL, NULL, NULL); } else { - /* If we haven't started yet - check metadata freshness. */ - if (mdi->mdio_meta == NULL) { - G_RAID_DEBUG1(1, sc, "Newer disk"); + /* + * If we haven't started yet - update common metadata + * to get subdisks details, avoiding data from spare disks. + */ + if (mdi->mdio_meta == NULL || + jmicron_meta_find_disk(mdi->mdio_meta, + mdi->mdio_meta->disk_id) == -3) { if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_JMICRON); mdi->mdio_meta = jmicron_meta_copy(pdmeta); mdi->mdio_total_disks = jmicron_meta_total_disks(pdmeta); - mdi->mdio_disks_present = 1; - } else { - mdi->mdio_disks_present++; - G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", - mdi->mdio_disks_present, - mdi->mdio_total_disks, - jmicron_meta_total_spare(mdi->mdio_meta)); - mdi->mdio_meta->flags |= - pdmeta->flags & JMICRON_F_BADSEC; } + mdi->mdio_meta->flags |= pdmeta->flags & JMICRON_F_BADSEC; + + mdi->mdio_disks_present++; + G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", + mdi->mdio_disks_present, + mdi->mdio_total_disks, + jmicron_meta_total_spare(mdi->mdio_meta)); + /* If we collected all needed disks - start array. */ if (mdi->mdio_disks_present == mdi->mdio_total_disks + jmicron_meta_total_spare(mdi->mdio_meta)) @@ -928,13 +933,13 @@ search: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_meta = meta; if (spare == 2) { -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; } else { pd->pd_disk_pos = -1; pd->pd_disk_id = meta->disk_id; } + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; disk->d_consumer = rcp; @@ -987,9 +992,7 @@ g_raid_md_event_jmicron(struct g_raid_md if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1087,38 +1090,18 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - break; - } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open '%s'.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; @@ -1128,7 +1111,6 @@ makedisk: if (cp == NULL) continue; cp->private = disk; - g_topology_unlock(); /* Read kernel dumping information. */ @@ -1141,7 +1123,7 @@ makedisk: "Dumping not supported by %s.", cp->provider->name); -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + pd->pd_disk_size = pp->mediasize; if (size > pp->mediasize) size = pp->mediasize; if (sectorsize < pp->sectorsize) @@ -1199,7 +1181,7 @@ makedisk: gctl_error(req, "Size too small."); return (-13); } - if (size > 0xffffffffllu * sectorsize) { + if (size > 0xffffffffffffllu * sectorsize) { gctl_error(req, "Size too big."); return (-14); } @@ -1213,7 +1195,8 @@ makedisk: vol->v_strip_size = strip; vol->v_disks_count = numdisks; if (level == G_RAID_VOLUME_RL_RAID0 || - level == G_RAID_VOLUME_RL_CONCAT) + level == G_RAID_VOLUME_RL_CONCAT || + level == G_RAID_VOLUME_RL_SINGLE) vol->v_mediasize = size * numdisks; else if (level == G_RAID_VOLUME_RL_RAID1) vol->v_mediasize = size; @@ -1319,9 +1302,7 @@ makedisk: if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1363,48 +1344,30 @@ makedisk: error = -3; break; } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; /* Try to find provider with specified name. */ g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", diskname); g_topology_unlock(); error = -4; break; } - cp = g_new_consumer(sc->sc_geom); - if (g_attach(cp, pp) != 0) { - gctl_error(req, "Can't attach provider '%s'.", - diskname); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -5; - break; - } - if (g_access(cp, 1, 1, 1) != 0) { - gctl_error(req, "Can't open provider '%s'.", - diskname); - g_detach(cp); - g_destroy_consumer(cp); - g_topology_unlock(); - error = -6; - break; - } - g_topology_unlock(); + pp = cp->provider; pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_consumer = cp; disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; + g_topology_unlock(); /* Read kernel dumping information. */ disk->d_kd.offset = 0; @@ -1470,7 +1433,8 @@ g_raid_md_write_jmicron(struct g_raid_md meta->type = JMICRON_T_RAID1; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) meta->type = JMICRON_T_RAID01; - else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) + else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT || + vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE) meta->type = JMICRON_T_CONCAT; else meta->type = JMICRON_T_RAID5; Copied: projects/graid/8/sys/geom/raid/tr_concat.c (from r218706, projects/graid/head/sys/geom/raid/tr_concat.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/8/sys/geom/raid/tr_concat.c Thu Feb 17 16:12:55 2011 (r218774, copy of r218706, projects/graid/head/sys/geom/raid/tr_concat.c) @@ -0,0 +1,341 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_tr_if.h" + +static MALLOC_DEFINE(M_TR_CONCAT, "tr_concat_data", "GEOM_RAID CONCAT data"); + +struct g_raid_tr_concat_object { + struct g_raid_tr_object trso_base; + int trso_starting; + int trso_stopped; +}; + +static g_raid_tr_taste_t g_raid_tr_taste_concat; +static g_raid_tr_event_t g_raid_tr_event_concat; +static g_raid_tr_start_t g_raid_tr_start_concat; +static g_raid_tr_stop_t g_raid_tr_stop_concat; +static g_raid_tr_iostart_t g_raid_tr_iostart_concat; +static g_raid_tr_iodone_t g_raid_tr_iodone_concat; +static g_raid_tr_kerneldump_t g_raid_tr_kerneldump_concat; +static g_raid_tr_free_t g_raid_tr_free_concat; + +static kobj_method_t g_raid_tr_concat_methods[] = { + KOBJMETHOD(g_raid_tr_taste, g_raid_tr_taste_concat), + KOBJMETHOD(g_raid_tr_event, g_raid_tr_event_concat), + KOBJMETHOD(g_raid_tr_start, g_raid_tr_start_concat), + KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_concat), + KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_concat), + KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_concat), + KOBJMETHOD(g_raid_tr_kerneldump, g_raid_tr_kerneldump_concat), + KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_concat), + { 0, 0 } +}; + +static struct g_raid_tr_class g_raid_tr_concat_class = { + "CONCAT", + g_raid_tr_concat_methods, + sizeof(struct g_raid_tr_concat_object), + .trc_priority = 100 +}; + +static int +g_raid_tr_taste_concat(struct g_raid_tr_object *tr, struct g_raid_volume *volume) +{ + struct g_raid_tr_concat_object *trs; + + trs = (struct g_raid_tr_concat_object *)tr; + if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_SINGLE && + tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_CONCAT) + return (G_RAID_TR_TASTE_FAIL); + trs->trso_starting = 1; + return (G_RAID_TR_TASTE_SUCCEED); +} + +static int +g_raid_tr_update_state_concat(struct g_raid_volume *vol) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + off_t size; + u_int s; + int i, n, f; + + sc = vol->v_softc; + trs = (struct g_raid_tr_concat_object *)vol->v_tr; + if (trs->trso_stopped) + s = G_RAID_VOLUME_S_STOPPED; + else if (trs->trso_starting) + s = G_RAID_VOLUME_S_STARTING; + else { + n = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); + f = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_FAILED); + if (n + f == vol->v_disks_count) { + if (f == 0) + s = G_RAID_VOLUME_S_OPTIMAL; + else + s = G_RAID_VOLUME_S_SUBOPTIMAL; + } else + s = G_RAID_VOLUME_S_BROKEN; + } + if (s != vol->v_state) { + + /* + * Some metadata modules may not know CONCAT volume + * mediasize until all disks connected. Recalculate. + */ + if (G_RAID_VOLUME_S_ALIVE(s) && + !G_RAID_VOLUME_S_ALIVE(vol->v_state)) { + size = 0; + for (i = 0; i < vol->v_disks_count; i++) { + if (vol->v_subdisks[i].sd_state != + G_RAID_SUBDISK_S_NONE) + size += vol->v_subdisks[i].sd_size; + } + vol->v_mediasize = size; + } + + g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? + 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_stopped) + g_raid_write_metadata(sc, vol, NULL, NULL); + } + return (0); +} + +static int +g_raid_tr_event_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd, u_int event) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + int state; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + sc = vol->v_softc; + + state = sd->sd_state; + if (state != G_RAID_SUBDISK_S_NONE && + state != G_RAID_SUBDISK_S_FAILED && + state != G_RAID_SUBDISK_S_ACTIVE) { + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to ACTIVE.", + vol->v_name, sd->sd_pos, + g_raid_subdisk_state2str(sd->sd_state)); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + } + if (state != sd->sd_state && + !trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, sd, NULL); + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_start_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_stop_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + trs->trso_stopped = 1; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static void +g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, length, remain; + u_int no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && + vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL) { + g_raid_iodone(bp, EIO); + return; + } + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } + + offset = bp->bio_offset; + remain = bp->bio_length; + addr = bp->bio_data; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", bp->bio_offset)); + bioq_init(&queue); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + bp->bio_offset, bp->bio_length)); + } while (remain > 0); + 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 int +g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, + void *virtual, vm_offset_t physical, off_t boffset, size_t blength) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + char *addr; + off_t offset, length, remain; + int error, no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) + return (ENXIO); + + offset = boffset; + remain = blength; + addr = virtual; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", boffset)); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], + addr, 0, offset, length); + if (error != 0) + return (error); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + boffset, blength)); + } while (remain > 0); + return (0); +} + +static void +g_raid_tr_iodone_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd,struct bio *bp) +{ + struct bio *pbp; + + pbp = bp->bio_parent; + if (pbp->bio_error == 0) + pbp->bio_error = bp->bio_error; + g_destroy_bio(bp); + pbp->bio_inbed++; + if (pbp->bio_children == pbp->bio_inbed) { + pbp->bio_completed = pbp->bio_length; + g_raid_iodone(pbp, bp->bio_error); + } +} + +static int +g_raid_tr_free_concat(struct g_raid_tr_object *tr) +{ + + return (0); +} + +G_RAID_TR_DECLARE(g_raid_tr_concat); Modified: projects/graid/8/sys/modules/geom/geom_raid/Makefile ============================================================================== --- projects/graid/8/sys/modules/geom/geom_raid/Makefile Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:12:55 2011 (r218774) @@ -9,9 +9,9 @@ SRCS+= bus_if.h device_if.h SRCS+= g_raid_md_if.h g_raid_md_if.c SRCS+= g_raid_tr_if.h g_raid_tr_if.c -SRCS+= md_intel.c +SRCS+= md_intel.c md_jmicron.c -SRCS+= tr_raid0.c tr_raid1.c tr_raid1e.c +SRCS+= tr_concat.c tr_raid0.c tr_raid1.c tr_raid1e.c MFILES= kern/bus_if.m kern/device_if.m MFILES+= geom/raid/g_raid_md_if.m geom/raid/g_raid_tr_if.m