From owner-svn-src-user@FreeBSD.ORG Sat Oct 31 22:50:29 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7454A106566C; Sat, 31 Oct 2009 22:50:29 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 652E88FC14; Sat, 31 Oct 2009 22:50:29 +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 n9VMoTpl005616; Sat, 31 Oct 2009 22:50:29 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9VMoTFJ005614; Sat, 31 Oct 2009 22:50:29 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200910312250.n9VMoTFJ005614@svn.freebsd.org> From: Kip Macy Date: Sat, 31 Oct 2009 22:50:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198734 - user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 31 Oct 2009 22:50:29 -0000 Author: kmacy Date: Sat Oct 31 22:50:29 2009 New Revision: 198734 URL: http://svn.freebsd.org/changeset/base/198734 Log: force unmount ZFS volumes earlier in shutdown to release bufs back to the system Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Modified: user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sat Oct 31 22:27:31 2009 (r198733) +++ user/kmacy/releng_8_fcs_buf/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Sat Oct 31 22:50:29 2009 (r198734) @@ -3657,6 +3657,7 @@ arc_tempreserve_space(uint64_t reserve, static kmutex_t arc_lowmem_lock; #ifdef _KERNEL static eventhandler_tag arc_event_lowmem = NULL; +static eventhandler_tag arc_event_shutdown = NULL; static void arc_lowmem(void *arg __unused, int howto __unused) @@ -3670,6 +3671,30 @@ arc_lowmem(void *arg __unused, int howto tsleep(&needfree, 0, "zfs:lowmem", hz / 5); mutex_exit(&arc_lowmem_lock); } +void +arc_shutdown(void *arg __unused, int howto __unused) +{ + struct mount *mp, *tmpmp; + int error; + + arc_flush(NULL); + TAILQ_FOREACH_SAFE(mp, &mountlist, mnt_list, tmpmp) { + if (strcmp(mp->mnt_vfc->vfc_name, "zfs") == 0) { + error = dounmount(mp, MNT_FORCE, curthread); + if (error) { + TAILQ_REMOVE(&mountlist, mp, mnt_list); + printf("unmount of %s failed (", + mp->mnt_stat.f_mntonname); + if (error == EBUSY) + printf("BUSY)\n"); + else + printf("%d)\n", error); + } + } + + } +} + #endif void @@ -3793,8 +3818,10 @@ arc_init(void) TS_RUN, minclsyspri); #ifdef _KERNEL - arc_event_lowmem = EVENTHANDLER_REGISTER(vm_lowmem, arc_lowmem, NULL, - EVENTHANDLER_PRI_FIRST); + arc_event_lowmem = EVENTHANDLER_REGISTER(vm_lowmem, arc_lowmem, + NULL, EVENTHANDLER_PRI_FIRST); + arc_event_shutdown = EVENTHANDLER_REGISTER(shutdown_pre_sync, + arc_event_shutdown, NULL, EVENTHANDLER_PRI_FIRST); #endif arc_dead = FALSE; @@ -3885,6 +3912,8 @@ arc_fini(void) #ifdef _KERNEL if (arc_event_lowmem != NULL) EVENTHANDLER_DEREGISTER(vm_lowmem, arc_event_lowmem); + if (arc_event_shutdown != NULL) + EVENTHANDLER_DEREGISTER(shutdown_pre_sync, arc_event_shutdown); #endif }