Date: Wed, 23 Oct 2013 18:35:07 +0000 (UTC) From: Will Andrews <will@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r257003 - in projects/vps/sys: kern vps Message-ID: <201310231835.r9NIZ7YN093963@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: will Date: Wed Oct 23 18:35:06 2013 New Revision: 257003 URL: http://svnweb.freebsd.org/changeset/base/257003 Log: Sync with svn.7he.at/vps/trunk r198. r198 | klaus | 2013-07-30 03:17:00 -0600 (Tue, 30 Jul 2013) | 4 lines Added check in deadlkres() for dead vps instances; and added locking in vps_deref() where the destroy task is initialized. Submitted by: Klaus P. Ohrhallinger <k@7he.at> Modified: projects/vps/sys/kern/kern_clock.c projects/vps/sys/vps/vps_core.c Modified: projects/vps/sys/kern/kern_clock.c ============================================================================== --- projects/vps/sys/kern/kern_clock.c Wed Oct 23 18:34:06 2013 (r257002) +++ projects/vps/sys/kern/kern_clock.c Wed Oct 23 18:35:06 2013 (r257003) @@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$"); #include <vps/vps.h> #include <vps/vps2.h> +#define _VPS_USER_H__ONLY_FLAGS +#include <vps/vps_user.h> #ifdef GPROF #include <sys/gmon.h> @@ -214,6 +216,8 @@ deadlkres(void) save_vps = curthread->td_vps; sx_slock(&vps_all_lock); LIST_FOREACH_SAFE(vps, &vps_head, vps_all, vps_tmp) { + if (vps->vps_status == VPS_ST_DEAD) + continue; vps_ref(vps, (struct ucred *)&deadlkres); sx_sunlock(&vps_all_lock); curthread->td_vps = vps; Modified: projects/vps/sys/vps/vps_core.c ============================================================================== --- projects/vps/sys/vps/vps_core.c Wed Oct 23 18:34:06 2013 (r257002) +++ projects/vps/sys/vps/vps_core.c Wed Oct 23 18:35:06 2013 (r257003) @@ -848,6 +848,7 @@ vps_deref(struct vps *vps, struct ucred #endif if (last) { + sx_xlock(&vps->vps_lock); KASSERT(vps->vps_status == VPS_ST_DEAD, ("%s: vps=%p; released last reference but " "vps_status = %d\n", __func__, vps, vps->vps_status)); @@ -875,6 +876,7 @@ vps_deref(struct vps *vps, struct ucred vps_destroy_task, vps); taskqueue_enqueue_timeout(taskqueue_thread, &vps->vps_task, 1 * hz /* ticks */); + sx_xunlock(&vps->vps_lock); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310231835.r9NIZ7YN093963>