From owner-freebsd-bugs@FreeBSD.ORG Fri Aug 18 03:00:31 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DA5D716A4E5 for ; Fri, 18 Aug 2006 03:00:31 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 25BC543D49 for ; Fri, 18 Aug 2006 03:00:31 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k7I30Um3088256 for ; Fri, 18 Aug 2006 03:00:30 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k7I30UOY088255; Fri, 18 Aug 2006 03:00:30 GMT (envelope-from gnats) Resent-Date: Fri, 18 Aug 2006 03:00:30 GMT Resent-Message-Id: <200608180300.k7I30UOY088255@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Yoichi NAKAYAMA Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D6B6F16A4DA for ; Fri, 18 Aug 2006 02:58:59 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7DE9043D53 for ; Fri, 18 Aug 2006 02:58:59 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k7I2wxnG048617 for ; Fri, 18 Aug 2006 02:58:59 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.13.1/8.13.1/Submit) id k7I2wxGb048616; Fri, 18 Aug 2006 02:58:59 GMT (envelope-from nobody) Message-Id: <200608180258.k7I2wxGb048616@www.freebsd.org> Date: Fri, 18 Aug 2006 02:58:59 GMT From: Yoichi NAKAYAMA To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Cc: Subject: kern/102211: [ata] detach raid member and reboot will cause panic (ICH7) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Aug 2006 03:00:31 -0000 >Number: 102211 >Category: kern >Synopsis: [ata] detach raid member and reboot will cause panic (ICH7) >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Aug 18 03:00:30 GMT 2006 >Closed-Date: >Last-Modified: >Originator: Yoichi NAKAYAMA >Release: 7-current >Organization: FreeBSD.org >Environment: FreeBSD suigei.local-net 7.0-CURRENT FreeBSD 7.0-CURRENT #11: Thu Aug 17 23:51:38 JST 2006 yoichi@suigei.local-net:/usr/obj/usr/src/sys/GENERIC_DEBUG i386 >Description: I have raid array with ICH7. Reboot system after detaching member disk will cause panic (as noted in kern/97624). The metadata on the left disk is: ********* ATA Intel MatrixRAID Metadata ********* intel_id version <1.1.00> checksum 0x5f8caa2c config_size 0x000001e0 config_id 0x44e526fa generation 0x0000007e total_disks 2 total_volumes 1 DISK# serial disk_sectors disk_id flags 0 490234752 0x00000000 0x0000013a 1 <:0> 490229760 0xffffffff 0x00000006 name Volume0 total_sectors 490229760 state 12 reserved 0 offset 0 disk_sectors 490229760 stripe_count 1914960 stripe_sectors 128 status 2 type RAID1 total_disks 2 magic[0] 0x02 magic[1] 0x01 magic[2] 0x01 disk 0 at disk_idx 0x00000000 disk 1 at disk_idx 0x01000001 ================================================= where higher bits of disk_idx for detached one causes access vaiolation. related part of dmesg: atapci2: port 0xe080-0xe087,0xe000-0xe003,0xdc00-0xdc07,0xd880-0xd883,0xd800-0xd80f mem 0xffa37800-0xffa37bff irq 19 at device 31.2 on pci0 ad10: 239372MB at ata5-master SATA150 ad14: 239372MB at ata7-master SATA150 ar0: disk0 READY (master) using ad10 at ata5-master ar0: disk1 READY (mirror) using ad14 at ata7-master attached change avoids panic, but detached disk forms separate volume as ar0: WARNING - mirror protection lost. RAID1 array in DEGRADED mode ar0: 239370MB status: DEGRADED ar0: disk0 READY (master) using ad10 at ata5-master ar0: disk1 DOWN no device found for this subdisk ar1: WARNING - mirror protection lost. RAID1 array in DEGRADED mode ar1: 239370MB status: DEGRADED ar1: disk0 DOWN no device found for this subdisk ar1: disk1 READY (mirror) using ad14 at ata7-master so we have to call "atacontrol delete ar1" before addspare and rebuild, while "Intel(R) Matrix Storage Manager option ROM v5.7.0.1005 ICH7MR" shows single volume as: RAID Volumes: ID Name Level Strip Size Status Bootable 0 Volume0 RAID1(Mirror) N/A 233.8GB Degraded Yes Physical Disks: Port Drive Model Serial # Size Type/Status(Vol ID) 0 Maxtor 7V250F0 V591P8FG 233.8GB Member Disk(0) 2 Maxtor 7V250F0 V591PNAG 233.8GB Offline Member On Windows XP, Intel Matrix Storage Console shows single RAID volume with one disk (port 0) and separate non-RAID disk (port 2). >How-To-Repeat: # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad10 ad14 status: READY # atacontrol detach ata7 # atacontrol status ar0 ar0: ATA RAID1 subdisks: ad10 DOWN status: DEGRADED # reboot >Fix: Masking disk_idx avoids panic *** /usr/src/sys/dev/ata/ata-raid.c.orig Sat Apr 15 19:27:41 2006 --- /usr/src/sys/dev/ata/ata-raid.c Thu Aug 10 07:37:28 2006 *************** *** 2122,2143 **** /* clear out any old info */ for (disk = 0; disk < raid->total_disks; disk++) { raid->disks[disk].dev = NULL; ! bcopy(meta->disk[map->disk_idx[disk]].serial, raid->disks[disk].serial, sizeof(raid->disks[disk].serial)); raid->disks[disk].sectors = ! meta->disk[map->disk_idx[disk]].sectors; raid->disks[disk].flags = 0; ! if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_ONLINE) raid->disks[disk].flags |= AR_DF_ONLINE; ! if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_ASSIGNED) raid->disks[disk].flags |= AR_DF_ASSIGNED; ! if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_SPARE) { raid->disks[disk].flags &= ~(AR_DF_ONLINE | AR_DF_ASSIGNED); raid->disks[disk].flags |= AR_DF_SPARE; } ! if (meta->disk[map->disk_idx[disk]].flags & INTEL_F_DOWN) raid->disks[disk].flags &= ~AR_DF_ONLINE; } } --- 2122,2144 ---- /* clear out any old info */ for (disk = 0; disk < raid->total_disks; disk++) { + u_int32_t disk_idx = map->disk_idx[disk] & 0xffff; raid->disks[disk].dev = NULL; ! bcopy(meta->disk[disk_idx].serial, raid->disks[disk].serial, sizeof(raid->disks[disk].serial)); raid->disks[disk].sectors = ! meta->disk[disk_idx].sectors; raid->disks[disk].flags = 0; ! if (meta->disk[disk_idx].flags & INTEL_F_ONLINE) raid->disks[disk].flags |= AR_DF_ONLINE; ! if (meta->disk[disk_idx].flags & INTEL_F_ASSIGNED) raid->disks[disk].flags |= AR_DF_ASSIGNED; ! if (meta->disk[disk_idx].flags & INTEL_F_SPARE) { raid->disks[disk].flags &= ~(AR_DF_ONLINE | AR_DF_ASSIGNED); raid->disks[disk].flags |= AR_DF_SPARE; } ! if (meta->disk[disk_idx].flags & INTEL_F_DOWN) raid->disks[disk].flags &= ~AR_DF_ONLINE; } } >Release-Note: >Audit-Trail: >Unformatted: