svn commit: r218775 - in projects/graid/7: . contrib/bsnmp/snmpd
contrib/wpa_supplicant gnu/usr.bin/groff/tmac
sbin/geom/class/raid share/misc sys/conf sys/geom/raid
sys/modules/geom/geom_raid tool...
Alexander Motin
mav at FreeBSD.org
Thu Feb 17 16:21:27 UTC 2011
Author: mav
Date: Thu Feb 17 16:21:26 2011
New Revision: 218775
URL: http://svn.freebsd.org/changeset/base/218775
Log:
MFH r218702, r218705, r218706, r218721, r218722, r218727, r218728, r218732,
r218734, r218740.
Added:
projects/graid/7/sys/geom/raid/md_jmicron.c
- copied, changed from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c
projects/graid/7/sys/geom/raid/tr_concat.c
- copied unchanged from r218706, projects/graid/head/sys/geom/raid/tr_concat.c
Modified:
projects/graid/7/sbin/geom/class/raid/graid.8
projects/graid/7/sys/conf/files
projects/graid/7/sys/geom/raid/g_raid.c
projects/graid/7/sys/geom/raid/g_raid.h
projects/graid/7/sys/geom/raid/md_intel.c
projects/graid/7/sys/modules/geom/geom_raid/Makefile
Directory Properties:
projects/graid/7/ (props changed)
projects/graid/7/COPYRIGHT (props changed)
projects/graid/7/Makefile (props changed)
projects/graid/7/Makefile.inc1 (props changed)
projects/graid/7/ObsoleteFiles.inc (props changed)
projects/graid/7/UPDATING (props changed)
projects/graid/7/bin/ (props changed)
projects/graid/7/bin/chflags/ (props changed)
projects/graid/7/bin/chio/ (props changed)
projects/graid/7/bin/cp/ (props changed)
projects/graid/7/bin/csh/ (props changed)
projects/graid/7/bin/dd/ (props changed)
projects/graid/7/bin/df/ (props changed)
projects/graid/7/bin/echo/ (props changed)
projects/graid/7/bin/expr/ (props changed)
projects/graid/7/bin/kill/ (props changed)
projects/graid/7/bin/ln/ (props changed)
projects/graid/7/bin/ls/ (props changed)
projects/graid/7/bin/pax/ (props changed)
projects/graid/7/bin/ps/ (props changed)
projects/graid/7/bin/rm/ (props changed)
projects/graid/7/bin/sh/ (props changed)
projects/graid/7/bin/test/ (props changed)
projects/graid/7/cddl/contrib/opensolaris/ (props changed)
projects/graid/7/cddl/lib/libzpool/ (props changed)
projects/graid/7/contrib/bind9/ (props changed)
projects/graid/7/contrib/binutils/ (props changed)
projects/graid/7/contrib/bsnmp/ (props changed)
projects/graid/7/contrib/bsnmp/snmpd/bsnmpd.1 (props changed)
projects/graid/7/contrib/cpio/ (props changed)
projects/graid/7/contrib/csup/ (props changed)
projects/graid/7/contrib/expat/ (props changed)
projects/graid/7/contrib/gcc/ (props changed)
projects/graid/7/contrib/gdb/ (props changed)
projects/graid/7/contrib/gdtoa/ (props changed)
projects/graid/7/contrib/groff/ (props changed)
projects/graid/7/contrib/ipfilter/ (props changed)
projects/graid/7/contrib/less/ (props changed)
projects/graid/7/contrib/libpcap/ (props changed)
projects/graid/7/contrib/ncurses/ (props changed)
projects/graid/7/contrib/netcat/ (props changed)
projects/graid/7/contrib/ntp/ (props changed)
projects/graid/7/contrib/nvi/ (props changed)
projects/graid/7/contrib/pf/ (props changed)
projects/graid/7/contrib/sendmail/ (props changed)
projects/graid/7/contrib/smbfs/ (props changed)
projects/graid/7/contrib/tcp_wrappers/ (props changed)
projects/graid/7/contrib/tcsh/ (props changed)
projects/graid/7/contrib/telnet/ (props changed)
projects/graid/7/contrib/top/ (props changed)
projects/graid/7/contrib/traceroute/ (props changed)
projects/graid/7/contrib/wpa_supplicant/ (props changed)
projects/graid/7/contrib/wpa_supplicant/wpa_supplicant.conf (props changed)
projects/graid/7/crypto/openssh/ (props changed)
projects/graid/7/crypto/openssl/ (props changed)
projects/graid/7/etc/ (props changed)
projects/graid/7/games/factor/ (props changed)
projects/graid/7/games/fortune/ (props changed)
projects/graid/7/games/grdc/ (props changed)
projects/graid/7/gnu/ (props changed)
projects/graid/7/gnu/lib/libstdc++/ (props changed)
projects/graid/7/gnu/usr.bin/ (props changed)
projects/graid/7/gnu/usr.bin/cc/ (props changed)
projects/graid/7/gnu/usr.bin/cpio/ (props changed)
projects/graid/7/gnu/usr.bin/cvs/ (props changed)
projects/graid/7/gnu/usr.bin/gdb/ (props changed)
projects/graid/7/gnu/usr.bin/gdb/kgdb/ (props changed)
projects/graid/7/gnu/usr.bin/grep/ (props changed)
projects/graid/7/gnu/usr.bin/groff/ (props changed)
projects/graid/7/gnu/usr.bin/groff/tmac/mdoc.local (props changed)
projects/graid/7/gnu/usr.bin/man/ (props changed)
projects/graid/7/gnu/usr.bin/sort/ (props changed)
projects/graid/7/include/ (props changed)
projects/graid/7/kerberos5/ (props changed)
projects/graid/7/lib/ (props changed)
projects/graid/7/lib/bind/ (props changed)
projects/graid/7/lib/csu/ (props changed)
projects/graid/7/lib/libarchive/ (props changed)
projects/graid/7/lib/libbluetooth/ (props changed)
projects/graid/7/lib/libc/ (props changed)
projects/graid/7/lib/libc/stdtime/ (props changed)
projects/graid/7/lib/libc_r/ (props changed)
projects/graid/7/lib/libcam/ (props changed)
projects/graid/7/lib/libdisk/ (props changed)
projects/graid/7/lib/libdwarf/ (props changed)
projects/graid/7/lib/libelf/ (props changed)
projects/graid/7/lib/libexpat/ (props changed)
projects/graid/7/lib/libfetch/ (props changed)
projects/graid/7/lib/libftpio/ (props changed)
projects/graid/7/lib/libgeom/ (props changed)
projects/graid/7/lib/libgssapi/ (props changed)
projects/graid/7/lib/libkse/ (props changed)
projects/graid/7/lib/libkvm/ (props changed)
projects/graid/7/lib/libmagic/ (props changed)
projects/graid/7/lib/libmemstat/ (props changed)
projects/graid/7/lib/libpmc/ (props changed)
projects/graid/7/lib/libradius/ (props changed)
projects/graid/7/lib/libsm/ (props changed)
projects/graid/7/lib/libstand/ (props changed)
projects/graid/7/lib/libthr/ (props changed)
projects/graid/7/lib/libthread_db/ (props changed)
projects/graid/7/lib/libufs/ (props changed)
projects/graid/7/lib/libutil/ (props changed)
projects/graid/7/lib/msun/ (props changed)
projects/graid/7/libexec/ (props changed)
projects/graid/7/libexec/ftpd/ (props changed)
projects/graid/7/libexec/rpc.rquotad/ (props changed)
projects/graid/7/libexec/rpc.rstatd/ (props changed)
projects/graid/7/libexec/rtld-elf/ (props changed)
projects/graid/7/libexec/tftpd/ (props changed)
projects/graid/7/release/ (props changed)
projects/graid/7/release/doc/ (props changed)
projects/graid/7/release/doc/en_US.ISO8859-1/hardware/ (props changed)
projects/graid/7/release/picobsd/tinyware/login/ (props changed)
projects/graid/7/rescue/ (props changed)
projects/graid/7/sbin/ (props changed)
projects/graid/7/sbin/atacontrol/ (props changed)
projects/graid/7/sbin/bsdlabel/ (props changed)
projects/graid/7/sbin/clri/ (props changed)
projects/graid/7/sbin/ddb/ (props changed)
projects/graid/7/sbin/devd/ (props changed)
projects/graid/7/sbin/devfs/ (props changed)
projects/graid/7/sbin/dhclient/ (props changed)
projects/graid/7/sbin/dumpfs/ (props changed)
projects/graid/7/sbin/fdisk/ (props changed)
projects/graid/7/sbin/fdisk_pc98/ (props changed)
projects/graid/7/sbin/fsck/ (props changed)
projects/graid/7/sbin/fsck_ffs/ (props changed)
projects/graid/7/sbin/fsck_msdosfs/ (props changed)
projects/graid/7/sbin/geom/ (props changed)
projects/graid/7/sbin/geom/class/label/ (props changed)
projects/graid/7/sbin/geom/class/part/ (props changed)
projects/graid/7/sbin/geom/class/stripe/ (props changed)
projects/graid/7/sbin/geom/misc/ (props changed)
projects/graid/7/sbin/growfs/ (props changed)
projects/graid/7/sbin/ifconfig/ (props changed)
projects/graid/7/sbin/init/ (props changed)
projects/graid/7/sbin/ipf/ (props changed)
projects/graid/7/sbin/ipfw/ (props changed)
projects/graid/7/sbin/md5/ (props changed)
projects/graid/7/sbin/mdconfig/ (props changed)
projects/graid/7/sbin/mksnap_ffs/ (props changed)
projects/graid/7/sbin/mount/ (props changed)
projects/graid/7/sbin/mount_msdosfs/ (props changed)
projects/graid/7/sbin/natd/ (props changed)
projects/graid/7/sbin/newfs/ (props changed)
projects/graid/7/sbin/newfs_msdos/ (props changed)
projects/graid/7/sbin/ping6/ (props changed)
projects/graid/7/sbin/reboot/ (props changed)
projects/graid/7/sbin/restore/ (props changed)
projects/graid/7/sbin/route/ (props changed)
projects/graid/7/sbin/savecore/ (props changed)
projects/graid/7/sbin/sconfig/ (props changed)
projects/graid/7/sbin/shutdown/ (props changed)
projects/graid/7/sbin/sysctl/ (props changed)
projects/graid/7/sbin/tunefs/ (props changed)
projects/graid/7/secure/lib/libcrypto/ (props changed)
projects/graid/7/secure/lib/libssh/ (props changed)
projects/graid/7/secure/lib/libssl/ (props changed)
projects/graid/7/secure/libexec/sftp-server/ (props changed)
projects/graid/7/secure/usr.bin/bdes/ (props changed)
projects/graid/7/secure/usr.bin/openssl/ (props changed)
projects/graid/7/secure/usr.bin/ssh/ (props changed)
projects/graid/7/secure/usr.sbin/sshd/ (props changed)
projects/graid/7/share/ (props changed)
projects/graid/7/share/colldef/ (props changed)
projects/graid/7/share/dict/ (props changed)
projects/graid/7/share/doc/bind9/ (props changed)
projects/graid/7/share/doc/papers/jail/ (props changed)
projects/graid/7/share/doc/smm/01.setup/ (props changed)
projects/graid/7/share/examples/ (props changed)
projects/graid/7/share/man/ (props changed)
projects/graid/7/share/man/man1/ (props changed)
projects/graid/7/share/man/man3/ (props changed)
projects/graid/7/share/man/man4/ (props changed)
projects/graid/7/share/man/man5/ (props changed)
projects/graid/7/share/man/man7/ (props changed)
projects/graid/7/share/man/man8/ (props changed)
projects/graid/7/share/man/man9/ (props changed)
projects/graid/7/share/misc/ (props changed)
projects/graid/7/share/misc/iso639 (props changed)
projects/graid/7/share/misc/pci_vendors (props changed)
projects/graid/7/share/mk/ (props changed)
projects/graid/7/share/mklocale/ (props changed)
projects/graid/7/share/monetdef/ (props changed)
projects/graid/7/share/msgdef/ (props changed)
projects/graid/7/share/numericdef/ (props changed)
projects/graid/7/share/sendmail/ (props changed)
projects/graid/7/share/syscons/ (props changed)
projects/graid/7/share/syscons/keymaps/ (props changed)
projects/graid/7/share/termcap/ (props changed)
projects/graid/7/share/timedef/ (props changed)
projects/graid/7/share/zoneinfo/ (props changed)
projects/graid/7/sys/ (props changed)
projects/graid/7/sys/cddl/contrib/opensolaris/ (props changed)
projects/graid/7/sys/contrib/dev/acpica/ (props changed)
projects/graid/7/sys/contrib/pf/ (props changed)
projects/graid/7/tools/ (props changed)
projects/graid/7/tools/build/ (props changed)
projects/graid/7/tools/build/options/ (props changed)
projects/graid/7/tools/debugscripts/ (props changed)
projects/graid/7/tools/regression/acct/ (props changed)
projects/graid/7/tools/regression/atm/ (props changed)
projects/graid/7/tools/regression/bin/ (props changed)
projects/graid/7/tools/regression/bin/date/ (props changed)
projects/graid/7/tools/regression/bin/sh/ (props changed)
projects/graid/7/tools/regression/file/ (props changed)
projects/graid/7/tools/regression/file/flock/ (props changed)
projects/graid/7/tools/regression/lib/libc/ (props changed)
projects/graid/7/tools/regression/usr.bin/ (props changed)
projects/graid/7/tools/regression/usr.bin/jot/ (props changed)
projects/graid/7/tools/regression/usr.bin/tr/ (props changed)
projects/graid/7/tools/sched/ (props changed)
projects/graid/7/tools/test/ (props changed)
projects/graid/7/tools/tools/ (props changed)
projects/graid/7/tools/tools/aac/ (props changed)
projects/graid/7/tools/tools/crypto/ (props changed)
projects/graid/7/tools/tools/editing/ (props changed)
projects/graid/7/tools/tools/nanobsd/ (props changed)
projects/graid/7/tools/tools/nanobsd/FlashDevice.sub (props changed)
projects/graid/7/tools/tools/nanobsd/nanobsd.sh (props changed)
projects/graid/7/tools/tools/netrate/ (props changed)
projects/graid/7/tools/tools/umastat/ (props changed)
projects/graid/7/tools/tools/usb/ (props changed)
projects/graid/7/usr.bin/ (props changed)
projects/graid/7/usr.bin/basename/ (props changed)
projects/graid/7/usr.bin/bluetooth/rfcomm_sppd/ (props changed)
projects/graid/7/usr.bin/calendar/ (props changed)
projects/graid/7/usr.bin/catman/ (props changed)
projects/graid/7/usr.bin/cksum/ (props changed)
projects/graid/7/usr.bin/comm/ (props changed)
projects/graid/7/usr.bin/cpuset/ (props changed)
projects/graid/7/usr.bin/csup/ (props changed)
projects/graid/7/usr.bin/dirname/ (props changed)
projects/graid/7/usr.bin/du/ (props changed)
projects/graid/7/usr.bin/fetch/ (props changed)
projects/graid/7/usr.bin/file/ (props changed)
projects/graid/7/usr.bin/find/ (props changed)
projects/graid/7/usr.bin/finger/ (props changed)
projects/graid/7/usr.bin/fold/ (props changed)
projects/graid/7/usr.bin/fstat/ (props changed)
projects/graid/7/usr.bin/gcore/ (props changed)
projects/graid/7/usr.bin/gprof/ (props changed)
projects/graid/7/usr.bin/gzip/ (props changed)
projects/graid/7/usr.bin/hexdump/ (props changed)
projects/graid/7/usr.bin/id/ (props changed)
projects/graid/7/usr.bin/indent/ (props changed)
projects/graid/7/usr.bin/ipcrm/ (props changed)
projects/graid/7/usr.bin/ipcs/ (props changed)
projects/graid/7/usr.bin/jot/ (props changed)
projects/graid/7/usr.bin/kdump/ (props changed)
projects/graid/7/usr.bin/ktrace/ (props changed)
projects/graid/7/usr.bin/ldd/ (props changed)
projects/graid/7/usr.bin/less/ (props changed)
projects/graid/7/usr.bin/locate/ (props changed)
projects/graid/7/usr.bin/lockf/ (props changed)
projects/graid/7/usr.bin/logger/ (props changed)
projects/graid/7/usr.bin/make/ (props changed)
projects/graid/7/usr.bin/ncal/ (props changed)
projects/graid/7/usr.bin/netstat/ (props changed)
projects/graid/7/usr.bin/newgrp/ (props changed)
projects/graid/7/usr.bin/nsupdate/ (props changed)
projects/graid/7/usr.bin/pkill/ (props changed)
projects/graid/7/usr.bin/procstat/ (props changed)
projects/graid/7/usr.bin/quota/ (props changed)
projects/graid/7/usr.bin/rpcgen/ (props changed)
projects/graid/7/usr.bin/ruptime/ (props changed)
projects/graid/7/usr.bin/script/ (props changed)
projects/graid/7/usr.bin/sed/ (props changed)
projects/graid/7/usr.bin/shar/ (props changed)
projects/graid/7/usr.bin/sockstat/ (props changed)
projects/graid/7/usr.bin/stat/ (props changed)
projects/graid/7/usr.bin/su/ (props changed)
projects/graid/7/usr.bin/systat/ (props changed)
projects/graid/7/usr.bin/tail/ (props changed)
projects/graid/7/usr.bin/tar/ (props changed)
projects/graid/7/usr.bin/tftp/ (props changed)
projects/graid/7/usr.bin/tip/ (props changed)
projects/graid/7/usr.bin/top/ (props changed)
projects/graid/7/usr.bin/truncate/ (props changed)
projects/graid/7/usr.bin/truss/ (props changed)
projects/graid/7/usr.bin/uname/ (props changed)
projects/graid/7/usr.bin/unifdef/ (props changed)
projects/graid/7/usr.bin/units/ (props changed)
projects/graid/7/usr.bin/uudecode/ (props changed)
projects/graid/7/usr.bin/vmstat/ (props changed)
projects/graid/7/usr.bin/w/ (props changed)
projects/graid/7/usr.bin/wc/ (props changed)
projects/graid/7/usr.bin/whereis/ (props changed)
projects/graid/7/usr.bin/whois/ (props changed)
projects/graid/7/usr.bin/window/ (props changed)
projects/graid/7/usr.bin/xargs/ (props changed)
projects/graid/7/usr.bin/ypcat/ (props changed)
projects/graid/7/usr.bin/ypmatch/ (props changed)
projects/graid/7/usr.bin/ypwhich/ (props changed)
projects/graid/7/usr.sbin/ (props changed)
projects/graid/7/usr.sbin/Makefile (props changed)
projects/graid/7/usr.sbin/acpi/ (props changed)
projects/graid/7/usr.sbin/adduser/ (props changed)
projects/graid/7/usr.sbin/arp/ (props changed)
projects/graid/7/usr.sbin/bluetooth/ (props changed)
projects/graid/7/usr.sbin/bluetooth/btpand/ (props changed)
projects/graid/7/usr.sbin/bluetooth/hcsecd/ (props changed)
projects/graid/7/usr.sbin/bluetooth/hcseriald/ (props changed)
projects/graid/7/usr.sbin/bluetooth/rfcomm_pppd/ (props changed)
projects/graid/7/usr.sbin/bluetooth/sdpd/ (props changed)
projects/graid/7/usr.sbin/boot0cfg/ (props changed)
projects/graid/7/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed)
projects/graid/7/usr.sbin/bsnmpd/modules/snmp_pf/ (props changed)
projects/graid/7/usr.sbin/burncd/ (props changed)
projects/graid/7/usr.sbin/cdcontrol/ (props changed)
projects/graid/7/usr.sbin/chown/ (props changed)
projects/graid/7/usr.sbin/chroot/ (props changed)
projects/graid/7/usr.sbin/config/ (props changed)
projects/graid/7/usr.sbin/config/SMM.doc/ (props changed)
projects/graid/7/usr.sbin/cpucontrol/ (props changed)
projects/graid/7/usr.sbin/crashinfo/ (props changed)
projects/graid/7/usr.sbin/cron/ (props changed)
projects/graid/7/usr.sbin/cron/cron/ (props changed)
projects/graid/7/usr.sbin/crunch/ (props changed)
projects/graid/7/usr.sbin/cxgbtool/ (props changed)
projects/graid/7/usr.sbin/eeprom/ (props changed)
projects/graid/7/usr.sbin/extattr/ (props changed)
projects/graid/7/usr.sbin/faithd/ (props changed)
projects/graid/7/usr.sbin/fdcontrol/ (props changed)
projects/graid/7/usr.sbin/fdformat/ (props changed)
projects/graid/7/usr.sbin/fdread/ (props changed)
projects/graid/7/usr.sbin/fdwrite/ (props changed)
projects/graid/7/usr.sbin/fifolog/ (props changed)
projects/graid/7/usr.sbin/freebsd-update/ (props changed)
projects/graid/7/usr.sbin/fwcontrol/ (props changed)
projects/graid/7/usr.sbin/gstat/ (props changed)
projects/graid/7/usr.sbin/iostat/ (props changed)
projects/graid/7/usr.sbin/jail/ (props changed)
projects/graid/7/usr.sbin/jexec/ (props changed)
projects/graid/7/usr.sbin/jls/ (props changed)
projects/graid/7/usr.sbin/lpr/ (props changed)
projects/graid/7/usr.sbin/mailwrapper/ (props changed)
projects/graid/7/usr.sbin/makefs/ (props changed)
projects/graid/7/usr.sbin/makefs/ffs/ffs_bswap.c (props changed)
projects/graid/7/usr.sbin/makefs/ffs/ffs_subr.c (props changed)
projects/graid/7/usr.sbin/makefs/ffs/ufs_bswap.h (props changed)
projects/graid/7/usr.sbin/makefs/getid.c (props changed)
projects/graid/7/usr.sbin/mergemaster/ (props changed)
projects/graid/7/usr.sbin/mfiutil/ (props changed)
projects/graid/7/usr.sbin/mountd/ (props changed)
projects/graid/7/usr.sbin/mptutil/ (props changed)
projects/graid/7/usr.sbin/mtree/ (props changed)
projects/graid/7/usr.sbin/ndiscvt/ (props changed)
projects/graid/7/usr.sbin/ndp/ (props changed)
projects/graid/7/usr.sbin/newsyslog/ (props changed)
projects/graid/7/usr.sbin/nscd/ (props changed)
projects/graid/7/usr.sbin/ntp/ (props changed)
projects/graid/7/usr.sbin/pciconf/ (props changed)
projects/graid/7/usr.sbin/pkg_install/ (props changed)
projects/graid/7/usr.sbin/pmccontrol/ (props changed)
projects/graid/7/usr.sbin/pmcstat/ (props changed)
projects/graid/7/usr.sbin/portsnap/ (props changed)
projects/graid/7/usr.sbin/powerd/ (props changed)
projects/graid/7/usr.sbin/ppp/ (props changed)
projects/graid/7/usr.sbin/pstat/ (props changed)
projects/graid/7/usr.sbin/pw/ (props changed)
projects/graid/7/usr.sbin/pwd_mkdb/ (props changed)
projects/graid/7/usr.sbin/rpc.lockd/ (props changed)
projects/graid/7/usr.sbin/rpc.statd/ (props changed)
projects/graid/7/usr.sbin/rpc.yppasswdd/ (props changed)
projects/graid/7/usr.sbin/rtadvd/ (props changed)
projects/graid/7/usr.sbin/rtsold/ (props changed)
projects/graid/7/usr.sbin/sade/ (props changed)
projects/graid/7/usr.sbin/service/ (props changed)
projects/graid/7/usr.sbin/setfib/ (props changed)
projects/graid/7/usr.sbin/sysinstall/ (props changed)
projects/graid/7/usr.sbin/syslogd/ (props changed)
projects/graid/7/usr.sbin/traceroute/ (props changed)
projects/graid/7/usr.sbin/traceroute6/ (props changed)
projects/graid/7/usr.sbin/tzsetup/ (props changed)
projects/graid/7/usr.sbin/ugidfw/ (props changed)
projects/graid/7/usr.sbin/wpa/wpa_supplicant/ (props changed)
projects/graid/7/usr.sbin/ypserv/ (props changed)
projects/graid/7/usr.sbin/zic/ (props changed)
Modified: projects/graid/7/sbin/geom/class/raid/graid.8
==============================================================================
--- projects/graid/7/sbin/geom/class/raid/graid.8 Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sbin/geom/class/raid/graid.8 Thu Feb 17 16:21:26 2011 (r218775)
@@ -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/7/sys/conf/files
==============================================================================
--- projects/graid/7/sys/conf/files Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sys/conf/files Thu Feb 17 16:21:26 2011 (r218775)
@@ -1531,6 +1531,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/7/sys/geom/raid/g_raid.c
==============================================================================
--- projects/graid/7/sys/geom/raid/g_raid.c Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sys/geom/raid/g_raid.c Thu Feb 17 16:21:26 2011 (r218775)
@@ -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
@@ -1227,11 +1256,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;
@@ -1301,6 +1327,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;
}
@@ -1867,9 +1894,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) {
@@ -2227,7 +2252,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 &&
@@ -2260,7 +2285,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/7/sys/geom/raid/g_raid.h
==============================================================================
--- projects/graid/7/sys/geom/raid/g_raid.h Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sys/geom/raid/g_raid.h Thu Feb 17 16:21:26 2011 (r218775)
@@ -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/7/sys/geom/raid/md_intel.c
==============================================================================
--- projects/graid/7/sys/geom/raid/md_intel.c Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sys/geom/raid/md_intel.c Thu Feb 17 16:21:26 2011 (r218775)
@@ -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/7/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/7/sys/geom/raid/md_jmicron.c Thu Feb 17 16:21:26 2011 (r218775)
@@ -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/7/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/7/sys/geom/raid/tr_concat.c Thu Feb 17 16:21:26 2011 (r218775, copy of r218706, projects/graid/head/sys/geom/raid/tr_concat.c)
@@ -0,0 +1,341 @@
+/*-
+ * Copyright (c) 2010 Alexander Motin <mav at FreeBSD.org>
+ * 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/bio.h>
+#include <sys/endian.h>
+#include <sys/kernel.h>
+#include <sys/kobj.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mutex.h>
+#include <sys/systm.h>
+#include <geom/geom.h>
+#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/7/sys/modules/geom/geom_raid/Makefile
==============================================================================
--- projects/graid/7/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:12:55 2011 (r218774)
+++ projects/graid/7/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:21:26 2011 (r218775)
@@ -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
More information about the svn-src-projects
mailing list