From owner-svn-src-stable-7@FreeBSD.ORG Mon Oct 19 08:52:58 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 45F5E1065670; Mon, 19 Oct 2009 08:52:58 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 34EF48FC17; Mon, 19 Oct 2009 08:52:57 +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 n9J8qv8L096517; Mon, 19 Oct 2009 08:52:57 GMT (envelope-from brueffer@svn.freebsd.org) Received: (from brueffer@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9J8qvM0096514; Mon, 19 Oct 2009 08:52:57 GMT (envelope-from brueffer@svn.freebsd.org) Message-Id: <200910190852.n9J8qvM0096514@svn.freebsd.org> From: Christian Brueffer Date: Mon, 19 Oct 2009 08:52:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198228 - stable/7/share/man/man4 X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Oct 2009 08:52:58 -0000 Author: brueffer Date: Mon Oct 19 08:52:57 2009 New Revision: 198228 URL: http://svn.freebsd.org/changeset/base/198228 Log: MFC: r198125 Use our standard section 4 SYNOPSIS. Modified: stable/7/share/man/man4/ (props changed) stable/7/share/man/man4/sbp_targ.4 stable/7/share/man/man4/targ.4 Modified: stable/7/share/man/man4/sbp_targ.4 ============================================================================== --- stable/7/share/man/man4/sbp_targ.4 Mon Oct 19 08:43:11 2009 (r198227) +++ stable/7/share/man/man4/sbp_targ.4 Mon Oct 19 08:52:57 2009 (r198228) @@ -38,16 +38,24 @@ .Nm sbp_targ .Nd Serial Bus Protocol 2 (SBP-2) Target Mode devices driver .Sh SYNOPSIS -.Cd "kldload firewire" -.Cd "kldload cam" -.Cd "kldload sbp_targ" -.Pp -or -.Pp +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent .Cd "device sbp_targ" .Cd "device firewire" .Cd "device scbus" .Cd "device targ" +.Ed +.Pp +Alternatively, to load the driver as a +module at boot time, place the following lines in +.Xr loader.conf 5 : +.Bd -literal -offset indent +firewire_load="YES" +cam_load="YES" +sbp_targ_load"YES" +.Ed .Sh DESCRIPTION The .Nm Modified: stable/7/share/man/man4/targ.4 ============================================================================== --- stable/7/share/man/man4/targ.4 Mon Oct 19 08:43:11 2009 (r198227) +++ stable/7/share/man/man4/targ.4 Mon Oct 19 08:52:57 2009 (r198228) @@ -31,7 +31,12 @@ .Nm targ .Nd SCSI target emulator driver .Sh SYNOPSIS -.Cd device targ +To compile this driver into the kernel, +place the following line in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device targ" +.Ed .Sh DESCRIPTION The .Nm From owner-svn-src-stable-7@FreeBSD.ORG Mon Oct 19 18:52:05 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 774BF106566B; Mon, 19 Oct 2009 18:52:05 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 661C98FC1B; Mon, 19 Oct 2009 18:52:05 +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 n9JIq5BQ009750; Mon, 19 Oct 2009 18:52:05 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9JIq58u009748; Mon, 19 Oct 2009 18:52:05 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <200910191852.n9JIq58u009748@svn.freebsd.org> From: John Baldwin Date: Mon, 19 Oct 2009 18:52:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198243 - in stable/7/sys: . boot/i386/zfsboot contrib/pf X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Oct 2009 18:52:05 -0000 Author: jhb Date: Mon Oct 19 18:52:05 2009 New Revision: 198243 URL: http://svn.freebsd.org/changeset/base/198243 Log: MFC 198079: Use zfs_read() instead of xfsread() to read /boot.config. xfsread() fails short read requests, so the result was that a /boot.config smaller than 512 bytes was ignored. boot2 uses fsread() instead of xfsread() to read /boot.config already, so this makes zfsboot more like boot2. Modified: stable/7/sys/ (props changed) stable/7/sys/boot/i386/zfsboot/zfsboot.c stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/boot/i386/zfsboot/zfsboot.c ============================================================================== --- stable/7/sys/boot/i386/zfsboot/zfsboot.c Mon Oct 19 18:46:22 2009 (r198242) +++ stable/7/sys/boot/i386/zfsboot/zfsboot.c Mon Oct 19 18:52:05 2009 (r198243) @@ -609,7 +609,7 @@ main(void) if (zfs_lookup(spa, PATH_CONFIG, &dn) == 0) { off = 0; - xfsread(&dn, &off, cmd, sizeof(cmd)); + zfs_read(spa, &dn, &off, cmd, sizeof(cmd)); } if (*cmd) { From owner-svn-src-stable-7@FreeBSD.ORG Mon Oct 19 19:11:00 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 75F931065672; Mon, 19 Oct 2009 19:11:00 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6363B8FC1D; Mon, 19 Oct 2009 19:11:00 +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 n9JJB0bv010154; Mon, 19 Oct 2009 19:11:00 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9JJB0tQ010150; Mon, 19 Oct 2009 19:11:00 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <200910191911.n9JJB0tQ010150@svn.freebsd.org> From: Andrew Gallatin Date: Mon, 19 Oct 2009 19:11:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198244 - in stable/7/sys: . contrib/pf kern sys X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Oct 2009 19:11:00 -0000 Author: gallatin Date: Mon Oct 19 19:11:00 2009 New Revision: 198244 URL: http://svn.freebsd.org/changeset/base/198244 Log: MFC of 178042 to allow safe firmware(9) loading from NIC watchdog handlers. Also MFCed are the related changes 178016, 183614 and 184842. 178042: Do firmare image loading in a context known to have a root directory 183614: Dynamically allocate the task struct in firmware mountroot 184842: Avoid scheduling firmware taskqueues when cold 178016: Add a mountroot event handler. Removal of SI_SUB_MOUNT_ROOT was not merged. This fixes a panic in at least mxge(4) if the NIC has a hardware fault when the firmware image is not resident. Reviewed by: jhb Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/kern/subr_firmware.c stable/7/sys/kern/vfs_mount.c stable/7/sys/sys/eventhandler.h Modified: stable/7/sys/kern/subr_firmware.c ============================================================================== --- stable/7/sys/kern/subr_firmware.c Mon Oct 19 18:52:05 2009 (r198243) +++ stable/7/sys/kern/subr_firmware.c Mon Oct 19 19:11:00 2009 (r198244) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2005, Sam Leffler + * Copyright (c) 2005-2008, Sam Leffler * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,6 +41,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + +#include +#include /* * Loadable firmware support. See sys/sys/firmware.h and firmware(9) @@ -89,7 +93,7 @@ struct priv_fw { /* * 'file' is private info managed by the autoload/unload code. * Set at the end of firmware_get(), cleared only in the - * firmware_task, so the latter can depend on its value even + * firmware_unload_task, so the latter can depend on its value even * while the lock is not held. */ linker_file_t file; /* module file, if autoloaded */ @@ -121,14 +125,16 @@ struct priv_fw { static struct priv_fw firmware_table[FIRMWARE_MAX]; /* - * module release are handled in a separate task as they might sleep. + * Firmware module operations are handled in a separate task as they + * might sleep and they require directory context to do i/o. */ -struct task firmware_task; +static struct taskqueue *firmware_tq; +static struct task firmware_unload_task; /* * This mutex protects accesses to the firmware table. */ -struct mtx firmware_mtx; +static struct mtx firmware_mtx; MTX_SYSINIT(firmware, &firmware_mtx, "firmware table", MTX_DEF); /* @@ -227,7 +233,7 @@ firmware_unregister(const char *imagenam } else if (fp->refcnt != 0) { /* cannot unregister */ err = EBUSY; } else { - linker_file_t x = fp->file; /* save value */ + linker_file_t x = fp->file; /* save value */ if (fp->parent != NULL) /* release parent reference */ fp->parent->refcnt--; @@ -244,6 +250,47 @@ firmware_unregister(const char *imagenam return err; } +static void +loadimage(void *arg, int npending) +{ + struct thread *td = curthread; + char *imagename = arg; + struct priv_fw *fp; + linker_file_t result; + int error; + + /* synchronize with the thread that dispatched us */ + mtx_lock(&firmware_mtx); + mtx_unlock(&firmware_mtx); + + if (td->td_proc->p_fd->fd_rdir == NULL) { + printf("%s: root not mounted yet, no way to load image\n", + imagename); + goto done; + } + error = linker_reference_module(imagename, NULL, &result); + if (error != 0) { + printf("%s: could not load firmware image, error %d\n", + imagename, error); + goto done; + } + + mtx_lock(&firmware_mtx); + fp = lookup(imagename, NULL); + if (fp == NULL || fp->file != NULL) { + mtx_unlock(&firmware_mtx); + if (fp == NULL) + printf("%s: firmware image loaded, " + "but did not register\n", imagename); + (void) linker_release_module(imagename, NULL, NULL); + goto done; + } + fp->file = result; /* record the module identity */ + mtx_unlock(&firmware_mtx); +done: + wakeup_one(imagename); /* we're done */ +} + /* * Lookup and potentially load the specified firmware image. * If the firmware is not found in the registry, try to load a kernel @@ -254,9 +301,9 @@ firmware_unregister(const char *imagenam const struct firmware * firmware_get(const char *imagename) { + struct task fwload_task; struct thread *td; struct priv_fw *fp; - linker_file_t result; mtx_lock(&firmware_mtx); fp = lookup(imagename, NULL); @@ -265,29 +312,34 @@ firmware_get(const char *imagename) /* * Image not present, try to load the module holding it. */ - mtx_unlock(&firmware_mtx); td = curthread; if (priv_check(td, PRIV_FIRMWARE_LOAD) != 0 || securelevel_gt(td->td_ucred, 0) != 0) { + mtx_unlock(&firmware_mtx); printf("%s: insufficient privileges to " "load firmware image %s\n", __func__, imagename); return NULL; } - (void) linker_reference_module(imagename, NULL, &result); + /* + * Defer load to a thread with known context. linker_reference_module + * may do filesystem i/o which requires root & current dirs, etc. + * Also we must not hold any mtx's over this call which is problematic. + */ + if (!cold) { + TASK_INIT(&fwload_task, 0, loadimage, __DECONST(void *, + imagename)); + taskqueue_enqueue(firmware_tq, &fwload_task); + msleep(__DECONST(void *, imagename), &firmware_mtx, 0, + "fwload", 0); + } /* - * After loading the module, see if the image is registered now. + * After attempting to load the module, see if the image is registered. */ - mtx_lock(&firmware_mtx); fp = lookup(imagename, NULL); if (fp == NULL) { mtx_unlock(&firmware_mtx); - printf("%s: failed to load firmware image %s\n", - __func__, imagename); - (void) linker_release_module(imagename, NULL, NULL); return NULL; } - fp->file = result; /* record the module identity */ - found: /* common exit point on success */ fp->refcnt++; mtx_unlock(&firmware_mtx); @@ -300,8 +352,8 @@ found: /* common exit point on succes * to release the resource, but the flag is only advisory. * * If this is the last reference to the firmware image, and this is an - * autoloaded module, wake up the firmware_task to figure out what to do - * with the associated module. + * autoloaded module, wake up the firmware_unload_task to figure out + * what to do with the associated module. */ void firmware_put(const struct firmware *p, int flags) @@ -314,12 +366,53 @@ firmware_put(const struct firmware *p, i if (flags & FIRMWARE_UNLOAD) fp->flags |= FW_UNLOAD; if (fp->file) - taskqueue_enqueue(taskqueue_thread, &firmware_task); + taskqueue_enqueue(firmware_tq, &firmware_unload_task); } mtx_unlock(&firmware_mtx); } /* + * Setup directory state for the firmware_tq thread so we can do i/o. + */ +static void +set_rootvnode(void *arg, int npending) +{ + struct thread *td = curthread; + struct proc *p = td->td_proc; + + FILEDESC_XLOCK(p->p_fd); + if (p->p_fd->fd_cdir == NULL) { + p->p_fd->fd_cdir = rootvnode; + VREF(rootvnode); + } + if (p->p_fd->fd_rdir == NULL) { + p->p_fd->fd_rdir = rootvnode; + VREF(rootvnode); + } + FILEDESC_XUNLOCK(p->p_fd); + + free(arg, M_TEMP); +} + +/* + * Event handler called on mounting of /; bounce a task + * into the task queue thread to setup it's directories. + */ +static void +firmware_mountroot(void *arg) +{ + struct task *setroot_task; + + setroot_task = malloc(sizeof(struct task), M_TEMP, M_NOWAIT); + if (setroot_task != NULL) { + TASK_INIT(setroot_task, 0, set_rootvnode, setroot_task); + taskqueue_enqueue(firmware_tq, setroot_task); + } else + printf("%s: no memory for task!\n", __func__); +} +EVENTHANDLER_DEFINE(mountroot, firmware_mountroot, NULL, 0); + +/* * The body of the task in charge of unloading autoloaded modules * that are not needed anymore. * Images can be cross-linked so we may need to make multiple passes, @@ -383,11 +476,23 @@ static int firmware_modevent(module_t mod, int type, void *unused) { struct priv_fw *fp; - int i, err = EINVAL; + int i, err; switch (type) { case MOD_LOAD: - TASK_INIT(&firmware_task, 0, unloadentry, NULL); + TASK_INIT(&firmware_unload_task, 0, unloadentry, NULL); + firmware_tq = taskqueue_create("taskqueue_firmware", M_WAITOK, + taskqueue_thread_enqueue, &firmware_tq); + /* NB: use our own loop routine that sets up context */ + (void) taskqueue_start_threads(&firmware_tq, 1, PWAIT, + "firmware taskq"); + if (rootvnode != NULL) { + /* + * Root is already mounted so we won't get an event; + * simulate one here. + */ + firmware_mountroot(NULL); + } return 0; case MOD_UNLOAD: @@ -398,8 +503,9 @@ firmware_modevent(module_t mod, int type fp->flags |= FW_UNLOAD;; } mtx_unlock(&firmware_mtx); - taskqueue_enqueue(taskqueue_thread, &firmware_task); - taskqueue_drain(taskqueue_thread, &firmware_task); + taskqueue_enqueue(firmware_tq, &firmware_unload_task); + taskqueue_drain(firmware_tq, &firmware_unload_task); + err = 0; for (i = 0; i < FIRMWARE_MAX; i++) { fp = &firmware_table[i]; if (fp->fw.name != NULL) { @@ -409,6 +515,8 @@ firmware_modevent(module_t mod, int type err = EINVAL; } } + if (err == 0) + taskqueue_free(firmware_tq); return err; } return EINVAL; Modified: stable/7/sys/kern/vfs_mount.c ============================================================================== --- stable/7/sys/kern/vfs_mount.c Mon Oct 19 18:52:05 2009 (r198243) +++ stable/7/sys/kern/vfs_mount.c Mon Oct 19 19:11:00 2009 (r198244) @@ -1485,6 +1485,8 @@ set_rootvnode(struct thread *td) VREF(rootvnode); FILEDESC_XUNLOCK(p->p_fd); + + EVENTHANDLER_INVOKE(mountroot); } /* Modified: stable/7/sys/sys/eventhandler.h ============================================================================== --- stable/7/sys/sys/eventhandler.h Mon Oct 19 18:52:05 2009 (r198243) +++ stable/7/sys/sys/eventhandler.h Mon Oct 19 19:11:00 2009 (r198244) @@ -171,6 +171,10 @@ EVENTHANDLER_DECLARE(vm_lowmem, vm_lowme typedef void (*vfs_lowvnodes_handler_t)(void *, int); EVENTHANDLER_DECLARE(vfs_lowvnodes, vfs_lowvnodes_handler_t); +/* Root mounted event */ +typedef void (*mountroot_handler_t)(void *); +EVENTHANDLER_DECLARE(mountroot, mountroot_handler_t); + /* VLAN state change events */ struct ifnet; typedef void (*vlan_config_fn)(void *, struct ifnet *, uint16_t); From owner-svn-src-stable-7@FreeBSD.ORG Mon Oct 19 19:45:58 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 417FE106566B; Mon, 19 Oct 2009 19:45:58 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 30EBA8FC20; Mon, 19 Oct 2009 19:45:58 +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 n9JJjwn9010907; Mon, 19 Oct 2009 19:45:58 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9JJjw0X010905; Mon, 19 Oct 2009 19:45:58 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <200910191945.n9JJjw0X010905@svn.freebsd.org> From: John Baldwin Date: Mon, 19 Oct 2009 19:45:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198247 - in stable/7/sys: . contrib/pf kern X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Oct 2009 19:45:58 -0000 Author: jhb Date: Mon Oct 19 19:45:57 2009 New Revision: 198247 URL: http://svn.freebsd.org/changeset/base/198247 Log: MFC 198126: Fix a sign bug in the handling of nice priorities when computing the interactive score for a thread. Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/kern/sched_ule.c Modified: stable/7/sys/kern/sched_ule.c ============================================================================== --- stable/7/sys/kern/sched_ule.c Mon Oct 19 19:40:05 2009 (r198246) +++ stable/7/sys/kern/sched_ule.c Mon Oct 19 19:45:57 2009 (r198247) @@ -1474,7 +1474,7 @@ sched_priority(struct thread *td) * score. Negative nice values make it easier for a thread to be * considered interactive. */ - score = imax(0, sched_interact_score(td) - td->td_proc->p_nice); + score = imax(0, sched_interact_score(td) + td->td_proc->p_nice); if (score < sched_interact) { pri = PRI_MIN_REALTIME; pri += ((PRI_MAX_REALTIME - PRI_MIN_REALTIME) / sched_interact) From owner-svn-src-stable-7@FreeBSD.ORG Tue Oct 20 13:47:05 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD101106566C; Tue, 20 Oct 2009 13:47:05 +0000 (UTC) (envelope-from ume@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CBA838FC24; Tue, 20 Oct 2009 13:47:05 +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 n9KDl53J068656; Tue, 20 Oct 2009 13:47:05 GMT (envelope-from ume@svn.freebsd.org) Received: (from ume@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9KDl5eN068654; Tue, 20 Oct 2009 13:47:05 GMT (envelope-from ume@svn.freebsd.org) Message-Id: <200910201347.n9KDl5eN068654@svn.freebsd.org> From: Hajimu UMEMOTO Date: Tue, 20 Oct 2009 13:47:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198285 - stable/7/bin/csh X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Oct 2009 13:47:06 -0000 Author: ume Date: Tue Oct 20 13:47:05 2009 New Revision: 198285 URL: http://svn.freebsd.org/changeset/base/198285 Log: MFC r198189: Check error of dlfunc(3). Modified: stable/7/bin/csh/ (props changed) stable/7/bin/csh/iconv_stub.c Modified: stable/7/bin/csh/iconv_stub.c ============================================================================== --- stable/7/bin/csh/iconv_stub.c Tue Oct 20 13:34:41 2009 (r198284) +++ stable/7/bin/csh/iconv_stub.c Tue Oct 20 13:47:05 2009 (r198285) @@ -61,9 +61,20 @@ dl_iconv_open(const char *tocode, const if (iconvlib == NULL) return (iconv_t)-1; iconv_open = (iconv_open_t *)dlfunc(iconvlib, ICONV_OPEN); + if (iconv_open == NULL) + goto dlfunc_err; dl_iconv = (dl_iconv_t *)dlfunc(iconvlib, ICONV_ENGINE); + if (dl_iconv == NULL) + goto dlfunc_err; dl_iconv_close = (dl_iconv_close_t *)dlfunc(iconvlib, ICONV_CLOSE); + if (dl_iconv_close == NULL) + goto dlfunc_err; } return iconv_open(tocode, fromcode); + +dlfunc_err: + dlclose(iconvlib); + iconvlib = NULL; + return (iconv_t)-1; } From owner-svn-src-stable-7@FreeBSD.ORG Wed Oct 21 16:12:10 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6A7EF106566C; Wed, 21 Oct 2009 16:12:10 +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 5838B8FC0C; Wed, 21 Oct 2009 16:12:10 +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 n9LGCAw4004115; Wed, 21 Oct 2009 16:12:10 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9LGC9Av004111; Wed, 21 Oct 2009 16:12:09 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <200910211612.n9LGC9Av004111@svn.freebsd.org> From: Alexander Motin Date: Wed, 21 Oct 2009 16:12:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198334 - in stable/7/sys: . contrib/pf dev/ata X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Oct 2009 16:12:10 -0000 Author: mav Date: Wed Oct 21 16:12:09 2009 New Revision: 198334 URL: http://svn.freebsd.org/changeset/base/198334 Log: MFC rev. 178375: Add HW level support for the Adaptec 1420SA controller. Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/dev/ata/ata-chipset.c stable/7/sys/dev/ata/ata-pci.c stable/7/sys/dev/ata/ata-pci.h Modified: stable/7/sys/dev/ata/ata-chipset.c ============================================================================== --- stable/7/sys/dev/ata/ata-chipset.c Wed Oct 21 15:57:16 2009 (r198333) +++ stable/7/sys/dev/ata/ata-chipset.c Wed Oct 21 16:12:09 2009 (r198334) @@ -1358,6 +1358,27 @@ ata_amd_chipinit(device_t dev) /* + * Adaptec chipset support functions + */ +int +ata_adaptec_ident(device_t dev) +{ + struct ata_pci_controller *ctlr = device_get_softc(dev); + static struct ata_chip_id ids[] = + {{ ATA_ADAPTEC_1420, 0, 4, MV60XX, ATA_SA300, "1420SA" }, + { 0, 0, 0, 0, 0, 0}}; + + if (!(ctlr->chip = ata_match_chip(dev, ids))) + return ENXIO; + + ata_set_desc(dev); + ctlr->chipinit = ata_marvell_edma_chipinit; + + return 0; +} + + +/* * ATI chipset support functions */ int Modified: stable/7/sys/dev/ata/ata-pci.c ============================================================================== --- stable/7/sys/dev/ata/ata-pci.c Wed Oct 21 15:57:16 2009 (r198333) +++ stable/7/sys/dev/ata/ata-pci.c Wed Oct 21 16:12:09 2009 (r198334) @@ -90,6 +90,10 @@ ata_pci_probe(device_t dev) if (!ata_amd_ident(dev)) return ATA_PROBE_OK; break; + case ATA_ADAPTEC_ID: + if (!ata_adaptec_ident(dev)) + return ATA_PROBE_OK; + break; case ATA_ATI_ID: if (!ata_ati_ident(dev)) return ATA_PROBE_OK; @@ -517,6 +521,7 @@ ata_pcivendor2str(device_t dev) case ATA_ACARD_ID: return "Acard"; case ATA_ACER_LABS_ID: return "AcerLabs"; case ATA_AMD_ID: return "AMD"; + case ATA_ADAPTEC_ID: return "Adaptec"; case ATA_ATI_ID: return "ATI"; case ATA_CYRIX_ID: return "Cyrix"; case ATA_CYPRESS_ID: return "Cypress"; Modified: stable/7/sys/dev/ata/ata-pci.h ============================================================================== --- stable/7/sys/dev/ata/ata-pci.h Wed Oct 21 15:57:16 2009 (r198333) +++ stable/7/sys/dev/ata/ata-pci.h Wed Oct 21 16:12:09 2009 (r198334) @@ -81,6 +81,14 @@ struct ata_connect_task { #define ATA_ATP865A 0x00081191 #define ATA_ATP865R 0x00091191 +#define ATA_ACER_LABS_ID 0x10b9 +#define ATA_ALI_1533 0x153310b9 +#define ATA_ALI_5229 0x522910b9 +#define ATA_ALI_5281 0x528110b9 +#define ATA_ALI_5287 0x528710b9 +#define ATA_ALI_5288 0x528810b9 +#define ATA_ALI_5289 0x528910b9 + #define ATA_AMD_ID 0x1022 #define ATA_AMD755 0x74011022 #define ATA_AMD756 0x74091022 @@ -89,13 +97,8 @@ struct ata_connect_task { #define ATA_AMD8111 0x74691022 #define ATA_AMD5536 0x209a1022 -#define ATA_ACER_LABS_ID 0x10b9 -#define ATA_ALI_1533 0x153310b9 -#define ATA_ALI_5229 0x522910b9 -#define ATA_ALI_5281 0x528110b9 -#define ATA_ALI_5287 0x528710b9 -#define ATA_ALI_5288 0x528810b9 -#define ATA_ALI_5289 0x528910b9 +#define ATA_ADAPTEC_ID 0x9005 +#define ATA_ADAPTEC_1420 0x02419005 #define ATA_ATI_ID 0x1002 #define ATA_ATI_IXP200 0x43491002 @@ -511,6 +514,7 @@ int ata_ahci_ident(device_t); int ata_acard_ident(device_t); int ata_ali_ident(device_t); int ata_amd_ident(device_t); +int ata_adaptec_ident(device_t); int ata_ati_ident(device_t); int ata_cyrix_ident(device_t); int ata_cypress_ident(device_t); From owner-svn-src-stable-7@FreeBSD.ORG Wed Oct 21 16:43:47 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E29C31065679 for ; Wed, 21 Oct 2009 16:43:47 +0000 (UTC) (envelope-from marck@rinet.ru) Received: from woozle.rinet.ru (woozle.rinet.ru [195.54.192.68]) by mx1.freebsd.org (Postfix) with ESMTP id 671418FC1B for ; Wed, 21 Oct 2009 16:43:46 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by woozle.rinet.ru (8.14.3/8.14.3) with ESMTP id n9LGNXuG038916; Wed, 21 Oct 2009 20:23:33 +0400 (MSD) (envelope-from marck@rinet.ru) Date: Wed, 21 Oct 2009 20:23:33 +0400 (MSD) From: Dmitry Morozovsky To: Alexander Motin In-Reply-To: <200910211612.n9LGC9Av004111@svn.freebsd.org> Message-ID: References: <200910211612.n9LGC9Av004111@svn.freebsd.org> User-Agent: Alpine 2.00 (BSF 1167 2008-08-23) X-NCC-RegID: ru.rinet X-OpenPGP-Key-ID: 6B691B03 MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.3 (woozle.rinet.ru [0.0.0.0]); Wed, 21 Oct 2009 20:23:33 +0400 (MSD) Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-7@freebsd.org Subject: Re: svn commit: r198334 - in stable/7/sys: . contrib/pf dev/ata X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Oct 2009 16:43:48 -0000 On Wed, 21 Oct 2009, Alexander Motin wrote: AM> Author: mav AM> Date: Wed Oct 21 16:12:09 2009 AM> New Revision: 198334 AM> URL: http://svn.freebsd.org/changeset/base/198334 AM> AM> Log: AM> MFC rev. 178375: AM> Add HW level support for the Adaptec 1420SA controller. Thank you! -- Sincerely, D.Marck [DM5020, MCK-RIPE, DM3-RIPN] [ FreeBSD committer: marck@FreeBSD.org ] ------------------------------------------------------------------------ *** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck@rinet.ru *** ------------------------------------------------------------------------ From owner-svn-src-stable-7@FreeBSD.ORG Thu Oct 22 08:36:08 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D9FC11065672; Thu, 22 Oct 2009 08:36:08 +0000 (UTC) (envelope-from brueffer@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C830F8FC14; Thu, 22 Oct 2009 08:36:08 +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 n9M8a8jF023546; Thu, 22 Oct 2009 08:36:08 GMT (envelope-from brueffer@svn.freebsd.org) Received: (from brueffer@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9M8a8jD023544; Thu, 22 Oct 2009 08:36:08 GMT (envelope-from brueffer@svn.freebsd.org) Message-Id: <200910220836.n9M8a8jD023544@svn.freebsd.org> From: Christian Brueffer Date: Thu, 22 Oct 2009 08:36:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198360 - stable/7/share/man/man4 X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Oct 2009 08:36:09 -0000 Author: brueffer Date: Thu Oct 22 08:36:08 2009 New Revision: 198360 URL: http://svn.freebsd.org/changeset/base/198360 Log: MFC: r198232 Powercrypt and NetSec seem to be defunct (webpages point to link farms and a google search yields no alternative). Remove the links but keep the entries around for reference. Modified: stable/7/share/man/man4/ (props changed) stable/7/share/man/man4/hifn.4 Modified: stable/7/share/man/man4/hifn.4 ============================================================================== --- stable/7/share/man/man4/hifn.4 Thu Oct 22 08:34:20 2009 (r198359) +++ stable/7/share/man/man4/hifn.4 Thu Oct 22 08:36:08 2009 (r198360) @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 1, 2006 +.Dd October 19, 2009 .Dt HIFN 4 .Os .Sh NAME @@ -85,17 +85,11 @@ Came as 128KB SRAM model, or 2MB DRAM mo .It Hifn 7751 Reference board with 512KB SRAM. .It PowerCrypt -See -.Pa http://www.powercrypt.com/ . Comes with 512KB SRAM. .It XL-Crypt -See -.Pa http://www.powercrypt.com/ . Only board based on 7811 (which is faster than 7751 and has a random number generator). .It NetSec 7751 -See -.Pa http://www.netsec.net/ . Supports the most IPsec sessions, with 1MB SRAM. .It Soekris Engineering vpn1201 and vpn1211 See From owner-svn-src-stable-7@FreeBSD.ORG Fri Oct 23 15:12:05 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 969CD1065676; Fri, 23 Oct 2009 15:12:05 +0000 (UTC) (envelope-from philip@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7A3798FC14; Fri, 23 Oct 2009 15:12:05 +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 n9NFC5aA064789; Fri, 23 Oct 2009 15:12:05 GMT (envelope-from philip@svn.freebsd.org) Received: (from philip@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9NFC5Ee064785; Fri, 23 Oct 2009 15:12:05 GMT (envelope-from philip@svn.freebsd.org) Message-Id: <200910231512.n9NFC5Ee064785@svn.freebsd.org> From: Philip Paeps Date: Fri, 23 Oct 2009 15:12:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198410 - stable/7/sbin/dhclient X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Oct 2009 15:12:05 -0000 Author: philip Date: Fri Oct 23 15:12:05 2009 New Revision: 198410 URL: http://svn.freebsd.org/changeset/base/198410 Log: MFC r198352 Make dhclient use bootpc (68) as the source port for unicast DHCPREQUEST packets instead of allowing the protocol stack to pick a random source port. This fixes the behaviour where dhclient would never transition from RENEWING to BOUND without going through REBINDING in networks which are paranoid about DHCP spoofing, such as most mainstream cable-broadband ISP networks. Obtained from: OpenBSD Reviewed by: brooks Modified: stable/7/sbin/dhclient/ (props changed) stable/7/sbin/dhclient/bpf.c stable/7/sbin/dhclient/dhcpd.h stable/7/sbin/dhclient/packet.c Modified: stable/7/sbin/dhclient/bpf.c ============================================================================== --- stable/7/sbin/dhclient/bpf.c Fri Oct 23 15:10:41 2009 (r198409) +++ stable/7/sbin/dhclient/bpf.c Fri Oct 23 15:12:05 2009 (r198410) @@ -90,11 +90,23 @@ if_register_bpf(struct interface_info *i void if_register_send(struct interface_info *info) { + int sock, on = 1; + /* * If we're using the bpf API for sending and receiving, we * don't need to register this interface twice. */ info->wfdesc = info->rfdesc; + + /* + * Use raw socket for unicast send. + */ + if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP)) == -1) + error("socket(SOCK_RAW): %m"); + if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &on, + sizeof(on)) == -1) + error("setsockopt(IP_HDRINCL): %m"); + info->ufdesc = sock; } /* @@ -244,35 +256,32 @@ send_packet(struct interface_info *inter { unsigned char buf[256]; struct iovec iov[2]; + struct msghdr msg; int result, bufp = 0; - int sock; - - if (to->sin_addr.s_addr != INADDR_BROADCAST) { - note("SENDING DIRECT"); - /* We know who the server is, send the packet via - normal socket interface */ - - if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) >= 0) { - result = sendto (sock, (char *)raw, len, 0, - (struct sockaddr *)to, sizeof *to); - close(sock); - if (result > 0) - return result; - } - } /* Assemble the headers... */ - assemble_hw_header(interface, buf, &bufp, hto); + if (to->sin_addr.s_addr == INADDR_BROADCAST) + assemble_hw_header(interface, buf, &bufp, hto); assemble_udp_ip_header(buf, &bufp, from.s_addr, to->sin_addr.s_addr, to->sin_port, (unsigned char *)raw, len); - /* Fire it off */ iov[0].iov_base = (char *)buf; iov[0].iov_len = bufp; iov[1].iov_base = (char *)raw; iov[1].iov_len = len; - result = writev(interface->wfdesc, iov, 2); + /* Fire it off */ + if (to->sin_addr.s_addr == INADDR_BROADCAST) + result = writev(interface->wfdesc, iov, 2); + else { + memset(&msg, 0, sizeof(msg)); + msg.msg_name = (struct sockaddr *)to; + msg.msg_namelen = sizeof(*to); + msg.msg_iov = iov; + msg.msg_iovlen = 2; + result = sendmsg(interface->ufdesc, &msg, 0); + } + if (result < 0) warning("send_packet: %m"); return (result); Modified: stable/7/sbin/dhclient/dhcpd.h ============================================================================== --- stable/7/sbin/dhclient/dhcpd.h Fri Oct 23 15:10:41 2009 (r198409) +++ stable/7/sbin/dhclient/dhcpd.h Fri Oct 23 15:12:05 2009 (r198410) @@ -37,6 +37,8 @@ * Enterprises. To learn more about the Internet Software Consortium, * see ``http://www.vix.com/isc''. To learn more about Vixie * Enterprises, see ``http://www.vix.com''. + * + * $FreeBSD$ */ #include @@ -194,6 +196,7 @@ struct interface_info { char name[IFNAMSIZ]; int rfdesc; int wfdesc; + int ufdesc; unsigned char *rbuf; size_t rbuf_max; size_t rbuf_offset; Modified: stable/7/sbin/dhclient/packet.c ============================================================================== --- stable/7/sbin/dhclient/packet.c Fri Oct 23 15:10:41 2009 (r198409) +++ stable/7/sbin/dhclient/packet.c Fri Oct 23 15:12:05 2009 (r198410) @@ -135,6 +135,17 @@ assemble_udp_ip_header(unsigned char *bu ip.ip_dst.s_addr = to; ip.ip_sum = wrapsum(checksum((unsigned char *)&ip, sizeof(ip), 0)); + + /* + * While the BPF -- used for broadcasts -- expects a "true" IP header + * with all the bytes in network byte order, the raw socket interface + * which is used for unicasts expects the ip_len field to be in host + * byte order. In both cases, the checksum has to be correct, so this + * is as good a place as any to turn the bytes around again. + */ + if (to != INADDR_BROADCAST) + ip.ip_len = ntohs(ip.ip_len); + memcpy(&buf[*bufix], &ip, sizeof(ip)); *bufix += sizeof(ip); From owner-svn-src-stable-7@FreeBSD.ORG Fri Oct 23 19:53:05 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 12C6B1065670; Fri, 23 Oct 2009 19:53:05 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 008F78FC18; Fri, 23 Oct 2009 19:53:05 +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 n9NJr4pA070676; Fri, 23 Oct 2009 19:53:04 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9NJr4gW070674; Fri, 23 Oct 2009 19:53:04 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <200910231953.n9NJr4gW070674@svn.freebsd.org> From: John Baldwin Date: Fri, 23 Oct 2009 19:53:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198425 - in stable/7/sys: . contrib/pf nfsclient X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Oct 2009 19:53:05 -0000 Author: jhb Date: Fri Oct 23 19:53:04 2009 New Revision: 198425 URL: http://svn.freebsd.org/changeset/base/198425 Log: MFC 198174: Close a race with caching of -ve name lookups in the NFS client. Specifically, clients only trust -ve cache entries while the directory remains unchanged and discard any -ve cache entries for a directory when they notice that the modification time of a directory entry changes. The race involves two concurrent lookups as follows: - Thread A does a lookup for file 'foo' which sends a lookup RPC to the server. The lookup fails and the server replies. - The 'foo' file is created (either by the same client or a different client) updating the modification time on the parent directory of 'foo'. - Thread B does a lookup for a different file 'bar' which updates the cached attributes of the parent directory of 'foo' to reflect the new modification time after 'foo' was created. - Thread A finally resumes execution to parse the reply from the NFS server. It adds a -ve cache entry and sets the cached value of the directory's modification time that is used for invalidating -ve cached lookups to the new modification time set by thread B. At this point, future lookups of 'foo' will honor the -ve cached entry until the cached entry is pushed out of the name cache's LRU or the modification time of the parent directory is changed again by some other change. The fix is to read the directory's modification time before sending the lookup RPC and use that cached modification time when setting the directory's cached modification time. Also, we do not add a -ve cache entry if another thread has added -ve cache entry that set the directory's cached modification time to a newer value than the value we read before sending the lookup RPC. Modified: stable/7/sys/ (props changed) stable/7/sys/contrib/pf/ (props changed) stable/7/sys/nfsclient/nfs_vnops.c Modified: stable/7/sys/nfsclient/nfs_vnops.c ============================================================================== --- stable/7/sys/nfsclient/nfs_vnops.c Fri Oct 23 19:52:29 2009 (r198424) +++ stable/7/sys/nfsclient/nfs_vnops.c Fri Oct 23 19:53:04 2009 (r198425) @@ -863,6 +863,7 @@ nfs_lookup(struct vop_lookup_args *ap) struct vnode *dvp = ap->a_dvp; struct vnode **vpp = ap->a_vpp; struct vattr vattr; + time_t dmtime; int flags = cnp->cn_flags; struct vnode *newvp; struct nfsmount *nmp; @@ -874,7 +875,7 @@ nfs_lookup(struct vop_lookup_args *ap) int error = 0, attrflag, fhsize; int v3 = NFS_ISV3(dvp); struct thread *td = cnp->cn_thread; - + *vpp = NULLVP; if ((flags & ISLASTCN) && (dvp->v_mount->mnt_flag & MNT_RDONLY) && (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) @@ -929,6 +930,19 @@ nfs_lookup(struct vop_lookup_args *ap) np->n_dmtime = 0; mtx_unlock(&np->n_mtx); } + + /* + * Cache the modification time of the parent directory in case + * the lookup fails and results in adding the first negative + * name cache entry for the directory. Since this is reading + * a single time_t, don't bother with locking. The + * modification time may be a bit stale, but it must be read + * before performing the lookup RPC to prevent a race where + * another lookup updates the timestamp on the directory after + * the lookup RPC has been performed on the server but before + * n_dmtime is set at the end of this function. + */ + dmtime = np->n_vattr.va_mtime.tv_sec; error = 0; newvp = NULLVP; nfsstats.lookupcache_misses++; @@ -1036,13 +1050,25 @@ nfsmout: * Maintain n_dmtime as the modification time * of the parent directory when the oldest -ve * name cache entry for this directory was - * added. + * added. If a -ve cache entry has already + * been added with a newer modification time + * by a concurrent lookup, then don't bother + * adding a cache entry. The modification + * time of the directory might have changed + * due to the file this lookup failed to find + * being created. In that case a subsequent + * lookup would incorrectly use the entry + * added here instead of doing an extra + * lookup. */ mtx_lock(&np->n_mtx); - if (np->n_dmtime == 0) - np->n_dmtime = np->n_vattr.va_mtime.tv_sec; - mtx_unlock(&np->n_mtx); - cache_enter(dvp, NULL, cnp); + if (np->n_dmtime <= dmtime) { + if (np->n_dmtime == 0) + np->n_dmtime = dmtime; + mtx_unlock(&np->n_mtx); + cache_enter(dvp, NULL, cnp); + } else + mtx_unlock(&np->n_mtx); } return (ENOENT); } From owner-svn-src-stable-7@FreeBSD.ORG Sat Oct 24 18:15:50 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0FC7A106568B; Sat, 24 Oct 2009 18:15:50 +0000 (UTC) (envelope-from Andre.Albsmeier@siemens.com) Received: from goliath.siemens.de (goliath.siemens.de [192.35.17.28]) by mx1.freebsd.org (Postfix) with ESMTP id 95B278FC15; Sat, 24 Oct 2009 18:15:49 +0000 (UTC) Received: from mail3.siemens.de (localhost [127.0.0.1]) by goliath.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n9OHlOou007524; Sat, 24 Oct 2009 19:47:24 +0200 Received: from curry.mchp.siemens.de (curry.mchp.siemens.de [139.25.40.130]) by mail3.siemens.de (8.12.11.20060308/8.12.11) with ESMTP id n9OHlOQS017594; Sat, 24 Oct 2009 19:47:24 +0200 Received: (from localhost) by curry.mchp.siemens.de (8.14.3/8.14.3) id n9OHlOnD051564; Date: Sat, 24 Oct 2009 19:47:24 +0200 From: Andre Albsmeier To: Andrew Gallatin Message-ID: <20091024174724.GA57864@curry.mchp.siemens.de> References: <200910191911.n9JJB0tQ010150@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200910191911.n9JJB0tQ010150@svn.freebsd.org> X-Echelon: X-Advice: Drop that crappy M$-Outlook, I'm tired of your viruses! User-Agent: Mutt/1.5.20 (2009-06-14) Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-7@freebsd.org Subject: Re: svn commit: r198244 - in stable/7/sys: . contrib/pf kern sys X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 Oct 2009 18:15:50 -0000 On Mon, 19-Oct-2009 at 19:11:00 +0000, Andrew Gallatin wrote: > Author: gallatin > Date: Mon Oct 19 19:11:00 2009 > New Revision: 198244 > URL: http://svn.freebsd.org/changeset/base/198244 > > Log: > MFC of 178042 to allow safe firmware(9) loading from NIC watchdog handlers. > Also MFCed are the related changes 178016, 183614 and 184842. > > ... > > Modified: stable/7/sys/kern/subr_firmware.c > ============================================================================== > --- stable/7/sys/kern/subr_firmware.c Mon Oct 19 18:52:05 2009 (r198243) > +++ stable/7/sys/kern/subr_firmware.c Mon Oct 19 19:11:00 2009 (r198244) > @@ -1,5 +1,5 @@ > /*- > - * Copyright (c) 2005, Sam Leffler > + * Copyright (c) 2005-2008, Sam Leffler > * All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > @@ -41,6 +41,10 @@ __FBSDID("$FreeBSD$"); > #include > #include > #include > +#include > + > +#include > +#include This broke "make world" on 7-STABLE when MODULES_WITH_WORLD is defined. The fix is: --- sys/modules/firmware/Makefile.ORI 2007-10-24 19:13:38.000000000 +0200 +++ sys/modules/firmware/Makefile 2009-10-24 19:38:10.000000000 +0200 @@ -3,6 +3,6 @@ .PATH: ${.CURDIR}/../../kern KMOD= firmware -SRCS= subr_firmware.c +SRCS= subr_firmware.c vnode_if.h .include -Andre From owner-svn-src-stable-7@FreeBSD.ORG Sat Oct 24 18:38:14 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 66B9D106566B; Sat, 24 Oct 2009 18:38:14 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 551EA8FC13; Sat, 24 Oct 2009 18:38:14 +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 n9OIcEoF004571; Sat, 24 Oct 2009 18:38:14 GMT (envelope-from gallatin@svn.freebsd.org) Received: (from gallatin@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n9OIcEKY004569; Sat, 24 Oct 2009 18:38:14 GMT (envelope-from gallatin@svn.freebsd.org) Message-Id: <200910241838.n9OIcEKY004569@svn.freebsd.org> From: Andrew Gallatin Date: Sat, 24 Oct 2009 18:38:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org X-SVN-Group: stable-7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r198446 - stable/7/sys/modules/firmware X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 Oct 2009 18:38:14 -0000 Author: gallatin Date: Sat Oct 24 18:38:13 2009 New Revision: 198446 URL: http://svn.freebsd.org/changeset/base/198446 Log: Fix firmware module build when it is not built with the kernel (eg, make world when MODULES_WITH_WORLD is defined) Submitted by: Andre Albsmeier at siemens dot com Pointy hat to: gallatin Modified: stable/7/sys/modules/firmware/Makefile Modified: stable/7/sys/modules/firmware/Makefile ============================================================================== --- stable/7/sys/modules/firmware/Makefile Sat Oct 24 18:33:01 2009 (r198445) +++ stable/7/sys/modules/firmware/Makefile Sat Oct 24 18:38:13 2009 (r198446) @@ -3,6 +3,6 @@ .PATH: ${.CURDIR}/../../kern KMOD= firmware -SRCS= subr_firmware.c +SRCS= subr_firmware.c vnode_if.h .include From owner-svn-src-stable-7@FreeBSD.ORG Sat Oct 24 18:40:36 2009 Return-Path: Delivered-To: svn-src-stable-7@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 04C541065676; Sat, 24 Oct 2009 18:40:36 +0000 (UTC) (envelope-from gallatin@cs.duke.edu) Received: from duke.cs.duke.edu (duke.cs.duke.edu [152.3.140.1]) by mx1.freebsd.org (Postfix) with ESMTP id AC5658FC13; Sat, 24 Oct 2009 18:40:35 +0000 (UTC) Received: from [172.31.193.10] (cpe-069-134-110-200.nc.res.rr.com [69.134.110.200]) (authenticated bits=0) by duke.cs.duke.edu (8.14.2/8.14.2) with ESMTP id n9OIeYRe008919 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 24 Oct 2009 14:40:34 -0400 (EDT) X-DKIM: Sendmail DKIM Filter v2.8.3 duke.cs.duke.edu n9OIeYRe008919 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=cs.duke.edu; s=mail; t=1256409634; bh=dijK5w/gD7gdZKss0sMq7+NHiWY5Bc0fDztGh4eJYhI=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type:Content-Transfer-Encoding; b=hdvKcCuFy7OvRxfMxdoKjBb7i8CsDhoXJJ4IOh/q2fDK/Xd6IAEGDvIITJZE2uQ1o sj6sh8JAOGJ+sGN9lDZv8Ln9bqV/nu6j/n1zqn6ANpqmzpbXCdWO/WlFOP7WoZ6aPf 45uVBZRrl4gtpdZXKlPv7s6ThMfUZ5K+1KaNLCc8= Message-ID: <4AE34A1C.3070509@cs.duke.edu> Date: Sat, 24 Oct 2009 14:40:28 -0400 From: Andrew Gallatin User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: Andre Albsmeier References: <200910191911.n9JJB0tQ010150@svn.freebsd.org> <20091024174724.GA57864@curry.mchp.siemens.de> In-Reply-To: <20091024174724.GA57864@curry.mchp.siemens.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-7@freebsd.org Subject: Re: svn commit: r198244 - in stable/7/sys: . contrib/pf kern sys X-BeenThere: svn-src-stable-7@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 7-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 24 Oct 2009 18:40:36 -0000 Andre Albsmeier wrote: > This broke "make world" on 7-STABLE when MODULES_WITH_WORLD > is defined. The fix is: And 6-stable was broken as well. I just committed your fix. Sorry for the breakage! Drew