From owner-freebsd-arch@FreeBSD.ORG Tue Sep 23 19:55:32 2008 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AE0E4106566B for ; Tue, 23 Sep 2008 19:55:32 +0000 (UTC) (envelope-from julian@elischer.org) Received: from outG.internet-mail-service.net (outg.internet-mail-service.net [216.240.47.230]) by mx1.freebsd.org (Postfix) with ESMTP id 960CA8FC27 for ; Tue, 23 Sep 2008 19:55:32 +0000 (UTC) (envelope-from julian@elischer.org) Received: from idiom.com (mx0.idiom.com [216.240.32.160]) by out.internet-mail-service.net (Postfix) with ESMTP id 47EA72484; Tue, 23 Sep 2008 12:55:32 -0700 (PDT) Received: from julian-mac.elischer.org (localhost [127.0.0.1]) by idiom.com (Postfix) with ESMTP id CDF192D600D; Tue, 23 Sep 2008 12:55:31 -0700 (PDT) Message-ID: <48D949B2.7020001@elischer.org> Date: Tue, 23 Sep 2008 12:55:30 -0700 From: Julian Elischer User-Agent: Thunderbird 2.0.0.16 (Macintosh/20080707) MIME-Version: 1.0 To: John Baldwin References: <200809231509.40279.jhb@freebsd.org> In-Reply-To: <200809231509.40279.jhb@freebsd.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: arch@freebsd.org, pjd@freebsd.org Subject: Re: Using a file-backed swap via md0 results in panic on reboot.. X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Sep 2008 19:55:32 -0000 John Baldwin wrote: > So if you attach an md device to a file and then use that md0 device for swap, > you will get a panic on shutdown if the swap file was in use. The reason is > that we remove swap devices _after_ unmounting the filesystems in boot(): > > if (nbusy) { > /* > * Failed to sync all blocks. Indicate this and don't > * unmount filesystems (thus forcing an fsck on reboot). > */ > printf("Giving up on %d buffers\n", nbusy); > DELAY(5000000); /* 5 seconds */ > } else { > if (!first_buf_printf) > printf("Final sync complete\n"); > /* > * Unmount filesystems > */ > if (panicstr == 0) > vfs_unmountall(); > } > swapoff_all(); > DELAY(100000); /* wait for console output to finish */ > > Is there any reason we can't move the swapoff_all()? Should we perhaps only > do it in "clean" case? Alternatively, should the swapoff_all() during > shutdown have a special flag so that it doesn't actually read in any data > from disk and just throws away the data instead? Sample panic: then what happens with a swap based filesystem? > > Waiting (max 60 seconds) for system process `vnlru' to stop...done > Waiting (max 60 seconds) for system process `syncer' to stop... > Syncing disks, vnodes remaining...2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 > 0 0 done > Waiting (max 60 seconds) for system process `bufdaemon' to stop...done > All buffers synced. > Swap device ad0s1b removed. > swap_pager: I/O error - pagein failed; blkno 2097177,size 4096, error 5 > panic: swap_pager_force_pagein: read from swap failed > cpuid = 0 > KDB: stack backtrace: > panic() at panic+0x2c5 > swapoff_one() at swapoff_one+0x5bb > swapoff_all() at swapoff_all+0xe4 > boot() at boot+0x871 > reboot() at reboot+0x45 > syscall() at syscall+0x642 > Xfast_syscall() at Xfast_syscall+0xa8 >