Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jan 2008 20:38:05 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 133677 for review
Message-ID:  <200801192038.m0JKc5g3082294@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=133677

Change 133677 by jb@jb_freebsd1 on 2008/01/19 20:38:03

	IFC

Affected files ...

.. //depot/projects/dtrace/ports/UIDs#16 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_log1p.c#4 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_log1pf.c#4 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_rint.c#5 integrate
.. //depot/projects/dtrace/src/lib/msun/src/s_rintf.c#4 integrate
.. //depot/projects/dtrace/src/sys/fs/coda/cnode.h#2 integrate
.. //depot/projects/dtrace/src/sys/fs/coda/coda_namecache.h#2 integrate
.. //depot/projects/dtrace/src/sys/fs/coda/coda_psdev.c#2 integrate
.. //depot/projects/dtrace/src/sys/fs/coda/coda_vfsops.c#4 integrate
.. //depot/projects/dtrace/src/sys/fs/coda/coda_vnops.c#4 integrate
.. //depot/projects/dtrace/src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c#4 integrate
.. //depot/projects/dtrace/src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h#4 integrate
.. //depot/projects/dtrace/src/sys/kern/kern_shutdown.c#13 integrate
.. //depot/projects/dtrace/src/sys/kern/vfs_bio.c#18 integrate
.. //depot/projects/dtrace/src/sys/kern/vfs_subr.c#28 integrate
.. //depot/projects/dtrace/src/sys/nfs4client/nfs4_vnops.c#9 integrate
.. //depot/projects/dtrace/src/sys/nfsclient/nfs_subs.c#10 integrate
.. //depot/projects/dtrace/src/sys/nfsclient/nfs_vnops.c#13 integrate
.. //depot/projects/dtrace/src/sys/sys/buf.h#7 integrate
.. //depot/projects/dtrace/src/sys/sys/lockmgr.h#11 integrate
.. //depot/projects/dtrace/src/sys/sys/param.h#33 integrate
.. //depot/projects/dtrace/src/sys/ufs/ffs/ffs_vfsops.c#19 integrate
.. //depot/projects/dtrace/www/share/sgml/news.xml#35 integrate

Differences ...

==== //depot/projects/dtrace/ports/UIDs#16 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: ports/UIDs,v 1.53 2008/01/11 15:46:29 rafan Exp $
+$FreeBSD: ports/UIDs,v 1.54 2008/01/19 11:47:16 edwin Exp $
 # Please keep this file sorted by UID!
 smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
 bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin
@@ -70,7 +70,7 @@
 vchat:*:128:128:VChat Conferencing System:/nonexistent:/usr/sbin/nologin
 _bgpd:*:130:130:BGP Daemon:/var/empty:/usr/sbin/nologin
 _ospfd:*:131:131:OSPF Daemon:/var/empty:/usr/sbin/nologin
-_spamd:*:132:132::0:0:Spam Daemon:/var/empty:/usr/sbin/nologin
+_spamd:*:132:132:Spam Daemon:/var/empty:/usr/sbin/nologin
 dovecot:*:143:143:Dovecot User:/var/empty:/usr/sbin/nologin
 rbldns:*:153:153:rbldnsd pseudo-user:/nonexistent:/usr/sbin/nologin
 sfs:*:171:171:Self-Certifying File System:/nonexistent:/usr/sbin/nologin
@@ -98,10 +98,10 @@
 hacluster:*:275:275:Heartbeat cluster user:/nonexistent:/usr/sbin/nologin
 mrtg:*:279:279:MRTG daemon:/nonexistent:/usr/sbin/nologin
 prelude:*:281:281:Prelude user:/nonexistent:/usr/sbin/nologin
-_sphinx:*:312:312::0:0:Sphinxsearch Owner:/nonexistent:/usr/sbin/nologin
+_sphinx:*:312:312:Sphinxsearch Owner:/nonexistent:/usr/sbin/nologin
 dkfilter:*:325:325:DK Filter Owner:/nonexistent:/usr/sbin/nologin
-wildfire:*:340:340::0:0:Wildfire Daemon:/nonexistent:/usr/sbin/nologin
-stunnel:*:341:341::0:0:Stunnel Daemon:/nonexistent:/usr/sbin/nologin
+wildfire:*:340:340:Wildfire Daemon:/nonexistent:/usr/sbin/nologin
+stunnel:*:341:341:Stunnel Daemon:/nonexistent:/usr/sbin/nologin
 _iodined:*:353:353:Iodine Daemon:/nonexistent:/usr/sbin/nologin
 ldap:*:389:389:OpenLDAP Server:/nonexistent:/usr/sbin/nologin
 tiarra:*:398:398:Tiarra IRC Proxy:/nonexistent:/usr/sbin/nologin

==== //depot/projects/dtrace/src/lib/msun/src/s_log1p.c#4 (text+ko) ====

@@ -10,9 +10,8 @@
  * ====================================================
  */
 
-#ifndef lint
-static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_log1p.c,v 1.8 2005/12/04 12:28:33 bde Exp $";
-#endif
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/lib/msun/src/s_log1p.c,v 1.9 2008/01/19 18:13:21 bde Exp $");
 
 /* double log1p(double x)
  *
@@ -79,6 +78,8 @@
  *	 See HP-15C Advanced Functions Handbook, p.193.
  */
 
+#include <float.h>
+
 #include "math.h"
 #include "math_private.h"
 
@@ -124,7 +125,7 @@
 	if (hx >= 0x7ff00000) return x+x;
 	if(k!=0) {
 	    if(hx<0x43400000) {
-		u  = 1.0+x;
+		STRICT_ASSIGN(double,u,1.0+x);
 		GET_HIGH_WORD(hu,u);
 	        k  = (hu>>20)-1023;
 	        c  = (k>0)? 1.0-(u-x):x-(u-1.0);/* correction term */

==== //depot/projects/dtrace/src/lib/msun/src/s_log1pf.c#4 (text+ko) ====

@@ -13,9 +13,10 @@
  * ====================================================
  */
 
-#ifndef lint
-static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_log1pf.c,v 1.9 2005/12/04 12:30:44 bde Exp $";
-#endif
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/lib/msun/src/s_log1pf.c,v 1.10 2008/01/19 18:13:21 bde Exp $");
+
+#include <float.h>
 
 #include "math.h"
 #include "math_private.h"
@@ -62,7 +63,7 @@
 	if (hx >= 0x7f800000) return x+x;
 	if(k!=0) {
 	    if(hx<0x5a000000) {
-		*(volatile float *)&u = (float)1.0+x;
+		STRICT_ASSIGN(float,u,(float)1.0+x);
 		GET_FLOAT_WORD(hu,u);
 	        k  = (hu>>23)-127;
 		/* correction term */

==== //depot/projects/dtrace/src/lib/msun/src/s_rint.c#5 (text+ko) ====

@@ -11,7 +11,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_rint.c,v 1.14 2008/01/14 02:12:06 das Exp $";
+static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_rint.c,v 1.15 2008/01/19 16:37:57 bde Exp $";
 #endif
 
 /*
@@ -51,7 +51,7 @@
 		i0 &= 0xfffe0000;
 		i0 |= ((i1|-i1)>>12)&0x80000;
 		SET_HIGH_WORD(x,i0);
-	        w = TWO52[sx]+x;
+	        STRICT_ASSIGN(double,w,TWO52[sx]+x);
 	        t =  w-TWO52[sx];
 		GET_HIGH_WORD(i0,t);
 		SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
@@ -84,7 +84,7 @@
 	    if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
 	}
 	INSERT_WORDS(x,i0,i1);
-	*(volatile double *)&w = TWO52[sx]+x;	/* clip any extra precision */
+	STRICT_ASSIGN(double,w,TWO52[sx]+x);
 	return w-TWO52[sx];
 }
 

==== //depot/projects/dtrace/src/lib/msun/src/s_rintf.c#4 (text+ko) ====

@@ -14,10 +14,12 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_rintf.c,v 1.10 2005/12/03 09:00:29 bde Exp $";
+static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_rintf.c,v 1.11 2008/01/19 16:37:57 bde Exp $";
 #endif
 
-#include <sys/types.h>
+#include <float.h>
+#include <stdint.h>
+
 #include "math.h"
 #include "math_private.h"
 
@@ -31,20 +33,20 @@
 rintf(float x)
 {
 	int32_t i0,j0,sx;
-	volatile float w,t;	/* volatile works around gcc bug */
+	float w,t;
 	GET_FLOAT_WORD(i0,x);
 	sx = (i0>>31)&1;
 	j0 = ((i0>>23)&0xff)-0x7f;
 	if(j0<23) {
 	    if(j0<0) {
 		if((i0&0x7fffffff)==0) return x;
-	        w = TWO23[sx]+x;
+		STRICT_ASSIGN(float,w,TWO23[sx]+x);
 	        t =  w-TWO23[sx];
 		GET_FLOAT_WORD(i0,t);
 		SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31));
 	        return t;
 	    }
-	    w = TWO23[sx]+x;
+	    STRICT_ASSIGN(float,w,TWO23[sx]+x);
 	    return w-TWO23[sx];
 	}
 	if(j0==0x80) return x+x;	/* inf or NaN */

==== //depot/projects/dtrace/src/sys/fs/coda/cnode.h#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * Mellon the rights to redistribute these changes without encumbrance.
  * 
  * 	@(#) src/sys/coda/cnode.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/fs/coda/cnode.h,v 1.21 2007/07/12 21:04:57 rwatson Exp $
+ * $FreeBSD: src/sys/fs/coda/cnode.h,v 1.22 2008/01/19 14:32:44 rwatson Exp $
  * 
  */
 
@@ -74,15 +74,9 @@
 #define CODA_FREE(ptr, size)  free((ptr), M_CODA)
 
 /*
- * global cache state control
- */
-extern int coda_nc_use;
-
-/*
  * Used to select debugging statements throughout the cfs code.
  */
 extern int codadebug;
-extern int coda_nc_debug;
 extern int coda_printf_delay;
 extern int coda_vnop_print_entry;
 extern int coda_psdev_print_entry;

==== //depot/projects/dtrace/src/sys/fs/coda/coda_namecache.h#2 (text+ko) ====

@@ -27,7 +27,7 @@
  * Mellon the rights to redistribute these changes without encumbrance.
  * 
  * 	@(#) src/sys/coda/coda_namecache.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ 
- * $FreeBSD: src/sys/fs/coda/coda_namecache.h,v 1.11 2007/07/12 20:40:37 rwatson Exp $
+ * $FreeBSD: src/sys/fs/coda/coda_namecache.h,v 1.13 2008/01/19 19:21:07 rwatson Exp $
  * 
  */
 
@@ -63,13 +63,8 @@
  * 2nd try -- same, except dir fid.vnode instead of cp
  */
 
-#ifdef	oldhash
-#define CODA_NC_HASH(name, namelen, cp) \
-	((name[0] + name[namelen-1] + namelen + (int)(intptr_t)(cp)) & (coda_nc_hashsize-1))
-#else
 #define CODA_NC_HASH(name, namelen, cp) \
 	((name[0] + (name[namelen-1]<<4) + namelen + (((int)(intptr_t)cp)>>8)) & (coda_nc_hashsize-1))
-#endif
 
 #define CODA_NAMEMATCH(cp, name, namelen, dcp) \
 	((namelen == cp->namelen) && (dcp == cp->dcp) && \
@@ -136,21 +131,28 @@
 #define CODA_NC_DEBUG(N, STMT)     { if (coda_nc_debug & (1 <<N)) { STMT } }
 
 /* Prototypes of functions exported within cfs */
-extern void coda_nc_init(void);
-extern void coda_nc_enter(struct cnode *, const char *, int, struct ucred *, struct cnode *);
-extern struct cnode *coda_nc_lookup(struct cnode *, const char *, int, struct ucred *);
+void coda_nc_init(void);
+void coda_nc_enter(struct cnode *, const char *, int, struct ucred *, struct cnode *);
+struct cnode *coda_nc_lookup(struct cnode *, const char *, int, struct ucred *);
+
+void coda_nc_zapParentfid(CodaFid *, enum dc_status);
+void coda_nc_zapfid(CodaFid *, enum dc_status);
+void coda_nc_zapvnode(CodaFid *, struct ucred *, enum dc_status);
+void coda_nc_zapfile(struct cnode *, const char *, int);
+void coda_nc_purge_user(uid_t, enum dc_status);
+void coda_nc_flush(enum dc_status);
 
-extern void coda_nc_zapParentfid(CodaFid *, enum dc_status);
-extern void coda_nc_zapfid(CodaFid *, enum dc_status);
-extern void coda_nc_zapvnode(CodaFid *, struct ucred *, enum dc_status);
-extern void coda_nc_zapfile(struct cnode *, const char *, int);
-extern void coda_nc_purge_user(uid_t, enum dc_status);
-extern void coda_nc_flush(enum dc_status);
+void print_coda_nc(void);
+void coda_nc_gather_stats(void);
+int  coda_nc_resize(int, int, enum dc_status);
+void coda_nc_name(struct cnode *cp);
 
-extern void print_coda_nc(void);
-extern void coda_nc_gather_stats(void);
-extern int  coda_nc_resize(int, int, enum dc_status);
-extern void coda_nc_name(struct cnode *cp);
+/*
+ * Global variables tracking and controlling Coda namecache operation.
+ */
+extern int coda_nc_debug;		/* Set to enable debugging printfs */
+extern int coda_nc_initialized;		/* Set if cache has been initialized */
+extern int coda_nc_use;			/* Indicate use of CODA Name Cache */
 
 /*
  * Structure to contain statistics on the cache usage

==== //depot/projects/dtrace/src/sys/fs/coda/coda_psdev.c#2 (text+ko) ====

@@ -49,10 +49,7 @@
 /* These routines are the device entry points for Venus. */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/coda/coda_psdev.c,v 1.39 2007/07/12 21:04:57 rwatson Exp $");
-
-
-extern int coda_nc_initialized;    /* Set if cache has been initialized */
+__FBSDID("$FreeBSD: src/sys/fs/coda/coda_psdev.c,v 1.40 2008/01/19 14:32:44 rwatson Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/dtrace/src/sys/fs/coda/coda_vfsops.c#4 (text+ko) ====

@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/coda/coda_vfsops.c,v 1.69 2008/01/10 01:10:44 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/fs/coda/coda_vfsops.c,v 1.72 2008/01/19 16:39:14 rwatson Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -77,9 +77,6 @@
 #define MARK_INT_FAIL(op) (coda_vfsopstats[op].unsat_intrn++)
 #define MARK_INT_GEN(op) (coda_vfsopstats[op].gen_intrn++)
 
-extern int coda_nc_initialized;     /* Set if cache has been initialized */
-extern int vc_nb_open(struct cdev *, int, int, struct thread *);
-
 int
 coda_vfsopstats_init(void)
 {
@@ -227,10 +224,10 @@
 	printf("coda_unmount: ROOT: vp %p, cp %p\n", mi->mi_rootvp, VTOC(mi->mi_rootvp));
 #endif
 	vrele(mi->mi_rootvp);
+	mi->mi_rootvp = NULL;
 	vrele(coda_ctlvp);
+	coda_ctlvp = NULL;
 	active = coda_kill(vfsp, NOT_DOWNCALL);
-	ASSERT_VOP_LOCKED(mi->mi_rootvp, "coda_unmount");
-	mi->mi_rootvp->v_vflag &= ~VV_ROOT;
 	error = vflush(mi->mi_vfsp, 0, FORCECLOSE, td);
 #ifdef CODA_VERBOSE
 	printf("coda_unmount: active = %d, vflush active %d\n", active, error);
@@ -243,7 +240,6 @@
 
 	/* No more vfsp's to hold onto */
 	mi->mi_vfsp = NULL;
-	mi->mi_rootvp = NULL;
 
 	if (error)
 	    MARK_INT_FAIL(CODA_UMOUNT_STATS);
@@ -375,13 +371,11 @@
 	return(EINVAL);
     }
     
-    bzero(sbp, sizeof(struct statfs));
     /* XXX - what to do about f_flags, others? --bnoble */
     /* Below This is what AFS does
     	#define NB_SFS_SIZ 0x895440
      */
-    /* Note: Normal fs's have a bsize of 0x400 == 1024 */
-    sbp->f_type = vfsp->mnt_vfc->vfc_typenum;
+    sbp->f_flags = 0;
     sbp->f_bsize = 8192; /* XXX */
     sbp->f_iosize = 8192; /* XXX */
 #define NB_SFS_SIZ 0x8AB75D
@@ -390,9 +384,6 @@
     sbp->f_bavail = NB_SFS_SIZ;
     sbp->f_files = NB_SFS_SIZ;
     sbp->f_ffree = NB_SFS_SIZ;
-    bcopy((caddr_t)&(vfsp->mnt_stat.f_fsid), (caddr_t)&(sbp->f_fsid), sizeof (fsid_t));
-    snprintf(sbp->f_mntonname, sizeof(sbp->f_mntonname), "/coda");
-    snprintf(sbp->f_fstypename, sizeof(sbp->f_fstypename), "coda");
 /*  MARK_INT_SAT(CODA_STATFS_STATS); */
     return(0);
 }

==== //depot/projects/dtrace/src/sys/fs/coda/coda_vnops.c#4 (text+ko) ====

@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/fs/coda/coda_vnops.c,v 1.78 2008/01/13 14:44:02 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/fs/coda/coda_vnops.c,v 1.83 2008/01/19 17:12:44 rwatson Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -106,10 +106,9 @@
 /* Definition of the vnode operation vector */
 
 struct vop_vector coda_vnodeops = {
-    .vop_default = VOP_PANIC,
+    .vop_default = &default_vnodeops,
     .vop_lookup = coda_lookup,		/* lookup */
     .vop_create = coda_create,		/* create */
-    .vop_mknod = VOP_PANIC,	/* mknod */
     .vop_open = coda_open,		/* open */
     .vop_close = coda_close,		/* close */
     .vop_access = coda_access,		/* access */
@@ -132,11 +131,9 @@
     .vop_lock1 = coda_lock,		/* lock */
     .vop_unlock = coda_unlock,		/* unlock */
     .vop_bmap = coda_bmap,		/* bmap */
-    .vop_print = VOP_PANIC,	/* print */
+    .vop_print = VOP_NULL,		/* print */
     .vop_islocked = coda_islocked,	/* islocked */
     .vop_pathconf = coda_pathconf,	/* pathconf */
-    .vop_advlock = VOP_NULL,	/* advlock */
-    .vop_lease = VOP_NULL,		/* lease */
     .vop_poll = vop_stdpoll,
     .vop_getpages = vop_stdgetpages,	/* pager intf.*/
     .vop_putpages = vop_stdputpages,	/* pager intf.*/
@@ -221,9 +218,6 @@
 
     CODADEBUG( CODA_OPEN,myprintf(("open: vp %p result %d\n", vp, error));)
 
-    /* Keep a reference until the close comes in. */
-    vref(*vpp);                
-
     /* Save the vnode pointer for the cache file. */
     if (cp->c_ovp == NULL) {
 	cp->c_ovp = vp;
@@ -244,6 +238,8 @@
     if (error) {
     	printf("coda_open: VOP_OPEN on container failed %d\n", error);
 	return (error);
+    } else {
+	(*vpp)->v_object = vp->v_object;
     }
 /* grab (above) does this when it calls newvnode unless it's in the cache*/
 
@@ -291,8 +287,6 @@
          error = venus_close(vtomi(vp), &cp->c_fid, flag, cred, td->td_proc);
     else error = ENODEV;
 
-    vrele(vp);
-
     CODADEBUG(CODA_CLOSE, myprintf(("close: result %d\n",error)); )
     return(error);
 }
@@ -747,6 +741,8 @@
 
     CODADEBUG(CODA_INACTIVE, myprintf(("in inactive, %s, vfsp %p\n",
 				  coda_f2s(&cp->c_fid), vp->v_mount));)
+
+    vp->v_object = NULL;
  
     /* If an array has been allocated to hold the symlink, deallocate it */
     if ((coda_symlink_cache) && (VALID_SYMLINK(cp))) {
@@ -1292,7 +1288,11 @@
 
 	/* Invalidate the parent's attr cache, the modification time has changed */
 	VTOC(dvp)->c_flags &= ~C_VATTR;
-	
+
+	if ((error = VOP_LOCK(*vpp, LK_EXCLUSIVE))) {
+	    panic("coda_create: couldn't lock child");
+	}
+
 	CODADEBUG( CODA_MKDIR, myprintf(("mkdir: %s result %d\n",
 					 coda_f2s(&VFid), error)); )
 	} else {
@@ -1552,7 +1552,7 @@
     cache_purge(vp);
     coda_free(VTOC(vp));
     vp->v_data = NULL;
-    vnode_destroy_vobject(vp);
+    vp->v_object = NULL;
     return (0);
 }
 

==== //depot/projects/dtrace/src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c#4 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c,v 1.2 2006/06/09 06:04:05 rodrigc Exp $
+ * $FreeBSD: src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c,v 1.3 2008/01/19 17:36:22 attilio Exp $
  */
 
 #include "xfs.h"
@@ -86,7 +86,7 @@
 		bp->b_bufsize = size;
 		bp->b_bcount = size;
 
-		KASSERT(BUF_REFCNT(bp) == 1,
+		KASSERT(BUF_ISLOCKED(bp),
 			("xfs_buf_get_empty: bp %p not locked",bp));
 
 		xfs_buf_set_target(bp, target);
@@ -103,7 +103,7 @@
 
 	bp = geteblk(len);
 	if (bp != NULL) {
-		KASSERT(BUF_REFCNT(bp) == 1,
+		KASSERT(BUF_ISLOCKED(bp),
 			("xfs_buf_get_empty: bp %p not locked",bp));
 
 		xfs_buf_set_target(bp, target);
@@ -163,7 +163,7 @@
 		if ((bp->b_flags & B_ASYNC) == 0) {
 			error = bufwait(bp);
 #if 0
-			if (BUF_REFCNT(bp) > 1)
+			if (BUF_LOCKRECURSED(bp))
 				BUF_UNLOCK(bp);
 			else
 				brelse(bp);

==== //depot/projects/dtrace/src/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h#4 (text+ko) ====

@@ -160,7 +160,6 @@
 
 #define XFS_BUF_HOLD(x)		((void)0)
 #define XFS_BUF_UNHOLD(x)	((void)0)
-#define XFS_BUF_ISHOLD(x)	BUF_REFCNT(x)
 
 #define XFS_BUF_READ(x)		((x)->b_iocmd = BIO_READ)
 #define XFS_BUF_UNREAD(x)	((x)->b_iocmd = 0)
@@ -234,7 +233,7 @@
 #define	XFS_BUF_SET_VTYPE(bp, type)
 #define	XFS_BUF_SET_REF(bp, ref)
 
-#define	XFS_BUF_VALUSEMA(bp)	(BUF_REFCNT(bp)? 0 : 1)
+#define	XFS_BUF_VALUSEMA(bp)	(BUF_ISLOCKED(bp) ? 0 : 1)
 #define	XFS_BUF_CPSEMA(bp) \
 	(BUF_LOCK(bp, LK_EXCLUSIVE|LK_CANRECURSE | LK_SLEEPFAIL, NULL) == 0)
 

==== //depot/projects/dtrace/src/sys/kern/kern_shutdown.c#13 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_shutdown.c,v 1.187 2007/12/26 11:32:33 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_shutdown.c,v 1.188 2008/01/19 17:36:22 attilio Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kdb.h"
@@ -255,7 +255,7 @@
 isbufbusy(struct buf *bp)
 {
 	if (((bp->b_flags & (B_INVAL | B_PERSISTENT)) == 0 &&
-	    BUF_REFCNT(bp) > 0) ||
+	    BUF_ISLOCKED(bp)) ||
 	    ((bp->b_flags & (B_DELWRI | B_INVAL)) == B_DELWRI))
 		return (1);
 	return (0);

==== //depot/projects/dtrace/src/sys/kern/vfs_bio.c#18 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.534 2008/01/13 14:44:09 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.535 2008/01/19 17:36:22 attilio Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -658,7 +658,7 @@
 {
 
 	CTR3(KTR_BUF, "bremfree(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
-	KASSERT(BUF_REFCNT(bp), ("bremfree: buf must be locked."));
+	KASSERT(BUF_ISLOCKED(bp), ("bremfree: buf must be locked."));
 	KASSERT((bp->b_flags & B_REMFREE) == 0,
 	    ("bremfree: buffer %p already marked for delayed removal.", bp));
 	KASSERT(bp->b_qindex != QUEUE_NONE,
@@ -695,7 +695,7 @@
 {
 	CTR3(KTR_BUF, "bremfreel(%p) vp %p flags %X",
 	    bp, bp->b_vp, bp->b_flags);
-	KASSERT(BUF_REFCNT(bp), ("bremfreel: buffer %p not locked.", bp));
+	KASSERT(BUF_ISLOCKED(bp), ("bremfreel: buffer %p not locked.", bp));
 	KASSERT(bp->b_qindex != QUEUE_NONE,
 	    ("bremfreel: buffer %p not on a queue.", bp));
 	mtx_assert(&bqlock, MA_OWNED);
@@ -834,7 +834,7 @@
 
 	oldflags = bp->b_flags;
 
-	if (BUF_REFCNT(bp) == 0)
+	if (!BUF_ISLOCKED(bp))
 		panic("bufwrite: buffer is not busy???");
 
 	if (bp->b_pin_count > 0)
@@ -952,7 +952,7 @@
 
 	CTR3(KTR_BUF, "bdwrite(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
 	KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
-	KASSERT(BUF_REFCNT(bp) != 0, ("bdwrite: buffer is not busy"));
+	KASSERT(BUF_ISLOCKED(bp), ("bdwrite: buffer is not busy"));
 
 	if (bp->b_flags & B_INVAL) {
 		brelse(bp);
@@ -1047,7 +1047,7 @@
 
 	CTR3(KTR_BUF, "bdirty(%p) vp %p flags %X",
 	    bp, bp->b_vp, bp->b_flags);
-	KASSERT(BUF_REFCNT(bp) == 1, ("bdirty: bp %p not locked",bp));
+	KASSERT(BUF_ISLOCKED(bp), ("bdirty: bp %p not locked",bp));
 	KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
 	KASSERT(bp->b_flags & B_REMFREE || bp->b_qindex == QUEUE_NONE,
 	    ("bdirty: buffer %p still on queue %d", bp, bp->b_qindex));
@@ -1081,7 +1081,7 @@
 	KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
 	KASSERT(bp->b_flags & B_REMFREE || bp->b_qindex == QUEUE_NONE,
 	    ("bundirty: buffer %p still on queue %d", bp, bp->b_qindex));
-	KASSERT(BUF_REFCNT(bp) == 1, ("bundirty: bp %p not locked",bp));
+	KASSERT(BUF_ISLOCKED(bp), ("bundirty: bp %p not locked",bp));
 
 	if (bp->b_flags & B_DELWRI) {
 		bp->b_flags &= ~B_DELWRI;
@@ -1341,7 +1341,7 @@
 			brelvp(bp);
 	}
 			
-	if (BUF_REFCNT(bp) > 1) {
+	if (BUF_LOCKRECURSED(bp)) {
 		/* do not release to free list */
 		BUF_UNLOCK(bp);
 		return;
@@ -1446,7 +1446,7 @@
 	KASSERT(!(bp->b_flags & (B_CLUSTER|B_PAGING)),
 	    ("bqrelse: inappropriate B_PAGING or B_CLUSTER bp %p", bp));
 
-	if (BUF_REFCNT(bp) > 1) {
+	if (BUF_LOCKRECURSED(bp)) {
 		/* do not release to free list */
 		BUF_UNLOCK(bp);
 		return;
@@ -2660,7 +2660,7 @@
 		bp->b_flags &= ~B_DONE;
 	}
 	CTR4(KTR_BUF, "getblk(%p, %ld, %d) = %p", vp, (long)blkno, size, bp);
-	KASSERT(BUF_REFCNT(bp) == 1, ("getblk: bp %p not locked",bp));
+	KASSERT(BUF_ISLOCKED(bp), ("getblk: bp %p not locked",bp));
 	KASSERT(bp->b_bufobj == bo,
 	    ("bp %p wrong b_bufobj %p should be %p", bp, bp->b_bufobj, bo));
 	return (bp);
@@ -2681,7 +2681,7 @@
 		continue;
 	allocbuf(bp, size);
 	bp->b_flags |= B_INVAL;	/* b_dep cleared by getnewbuf() */
-	KASSERT(BUF_REFCNT(bp) == 1, ("geteblk: bp %p not locked",bp));
+	KASSERT(BUF_ISLOCKED(bp), ("geteblk: bp %p not locked",bp));
 	return (bp);
 }
 
@@ -2707,7 +2707,7 @@
 	int newbsize, mbsize;
 	int i;
 
-	if (BUF_REFCNT(bp) == 0)
+	if (!BUF_ISLOCKED(bp))
 		panic("allocbuf: buffer not busy");
 
 	if (bp->b_kvasize < size)
@@ -3150,8 +3150,7 @@
 	CTR3(KTR_BUF, "bufdone(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
 	dropobj = NULL;
 
-	KASSERT(BUF_REFCNT(bp) > 0, ("biodone: bp %p not busy %d", bp,
-	    BUF_REFCNT(bp)));
+	KASSERT(BUF_ISLOCKED(bp), ("biodone: bp %p not busy", bp));
 	KASSERT(!(bp->b_flags & B_DONE), ("biodone: bp %p already done", bp));
 
 	runningbufwakeup(bp);
@@ -3176,8 +3175,7 @@
 void
 bufdone_finish(struct buf *bp)
 {
-	KASSERT(BUF_REFCNT(bp) > 0, ("biodone: bp %p not busy %d", bp,
-	    BUF_REFCNT(bp)));
+	KASSERT(BUF_ISLOCKED(bp), ("biodone: bp %p not busy", bp));
 
 	if (!LIST_EMPTY(&bp->b_dep))
 		buf_complete(bp);
@@ -3943,7 +3941,7 @@
 
 	for (i = 0; i < nbuf; i++) {
 		bp = &buf[i];
-		if (lockcount(&bp->b_lock)) {
+		if (BUF_ISLOCKED(bp)) {
 			db_show_buffer((uintptr_t)bp, 1, 0, NULL);
 			db_printf("\n");
 		}

==== //depot/projects/dtrace/src/sys/kern/vfs_subr.c#28 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.715 2008/01/13 14:44:10 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_subr.c,v 1.716 2008/01/19 17:36:22 attilio Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mac.h"
@@ -3570,7 +3570,7 @@
 	if ((bp->b_flags & B_CLUSTER) != 0)
 		return;
 
-	if (BUF_REFCNT(bp) < 1) {
+	if (!BUF_ISLOCKED(bp)) {
 		if (vfs_badlock_print)
 			printf(
 			    "VOP_STRATEGY: bp is not locked but should be\n");

==== //depot/projects/dtrace/src/sys/nfs4client/nfs4_vnops.c#9 (text+ko) ====

@@ -59,7 +59,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfs4client/nfs4_vnops.c,v 1.39 2008/01/13 14:44:11 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/nfs4client/nfs4_vnops.c,v 1.40 2008/01/19 17:36:23 attilio Exp $");
 
 /*
  * vnode op calls for Sun NFS version 2 and 3
@@ -2446,8 +2446,9 @@
 	struct ucred *cr;
 	int error = 0;
 
-	KASSERT(!(bp->b_flags & B_DONE), ("nfs4_strategy: buffer %p unexpectedly marked B_DONE", bp));
-	KASSERT(BUF_REFCNT(bp) > 0, ("nfs4_strategy: buffer %p not locked", bp));
+	KASSERT(!(bp->b_flags & B_DONE),
+	    ("nfs4_strategy: buffer %p unexpectedly marked B_DONE", bp));
+	KASSERT(BUF_ISLOCKED(bp), ("nfs4_strategy: buffer %p not locked", bp));
 
 	if (bp->b_iocmd == BIO_READ)
 		cr = bp->b_rcred;
@@ -2525,7 +2526,7 @@
 		bveccount = 0;
 		VI_LOCK(vp);
 		TAILQ_FOREACH_SAFE(bp, &vp->v_bufobj.bo_dirty.bv_hd, b_bobufs, nbp) {
-			if (BUF_REFCNT(bp) == 0 &&
+			if (!BUF_ISLOCKED(bp) &&
 			    (bp->b_flags & (B_DELWRI | B_NEEDCOMMIT))
 				== (B_DELWRI | B_NEEDCOMMIT))
 				bveccount++;
@@ -2807,7 +2808,7 @@
 	off_t off;
 #endif
 
-	if (BUF_REFCNT(bp) == 0)
+	if (!BUF_ISLOCKED(bp))
 		panic("bwrite: buffer is not locked???");
 
 	if (bp->b_flags & B_INVAL) {

==== //depot/projects/dtrace/src/sys/nfsclient/nfs_subs.c#10 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_subs.c,v 1.149 2008/01/13 14:44:12 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_subs.c,v 1.150 2008/01/19 17:36:23 attilio Exp $");
 
 /*
  * These functions support the macros and help fiddle mbuf chains for
@@ -918,7 +918,7 @@
 		}
 		MNT_IUNLOCK(mp);
 		TAILQ_FOREACH_SAFE(bp, &vp->v_bufobj.bo_dirty.bv_hd, b_bobufs, nbp) {
-			if (BUF_REFCNT(bp) == 0 &&
+			if (!BUF_ISLOCKED(bp) &&
 			    (bp->b_flags & (B_DELWRI | B_NEEDCOMMIT))
 				== (B_DELWRI | B_NEEDCOMMIT))
 				bp->b_flags &= ~(B_NEEDCOMMIT | B_CLUSTEROK);

==== //depot/projects/dtrace/src/sys/nfsclient/nfs_vnops.c#13 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.279 2008/01/13 14:44:12 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/nfsclient/nfs_vnops.c,v 1.280 2008/01/19 17:36:23 attilio Exp $");
 
 /*
  * vnode op calls for Sun NFS version 2 and 3
@@ -2692,8 +2692,9 @@
 	struct buf *bp = ap->a_bp;
 	struct ucred *cr;
 
-	KASSERT(!(bp->b_flags & B_DONE), ("nfs_strategy: buffer %p unexpectedly marked B_DONE", bp));
-	KASSERT(BUF_REFCNT(bp) > 0, ("nfs_strategy: buffer %p not locked", bp));
+	KASSERT(!(bp->b_flags & B_DONE),
+	    ("nfs_strategy: buffer %p unexpectedly marked B_DONE", bp));
+	KASSERT(BUF_ISLOCKED(bp), ("nfs_strategy: buffer %p not locked", bp));
 
 	if (bp->b_iocmd == BIO_READ)
 		cr = bp->b_rcred;
@@ -2771,7 +2772,7 @@
 		bveccount = 0;
 		VI_LOCK(vp);
 		TAILQ_FOREACH_SAFE(bp, &vp->v_bufobj.bo_dirty.bv_hd, b_bobufs, nbp) {
-			if (BUF_REFCNT(bp) == 0 &&
+			if (!BUF_ISLOCKED(bp) &&
 			    (bp->b_flags & (B_DELWRI | B_NEEDCOMMIT))
 				== (B_DELWRI | B_NEEDCOMMIT))
 				bveccount++;
@@ -3087,7 +3088,7 @@
 	off_t off;
 #endif
 
-	if (BUF_REFCNT(bp) == 0)
+	if (!BUF_ISLOCKED(bp))
 		panic("bwrite: buffer is not locked???");
 
 	if (bp->b_flags & B_INVAL) {

==== //depot/projects/dtrace/src/sys/sys/buf.h#7 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)buf.h	8.9 (Berkeley) 3/30/95
- * $FreeBSD: src/sys/sys/buf.h,v 1.197 2008/01/08 23:48:31 attilio Exp $
+ * $FreeBSD: src/sys/sys/buf.h,v 1.198 2008/01/19 17:36:23 attilio Exp $
  */
 
 #ifndef _SYS_BUF_H_
@@ -320,11 +320,22 @@
 }
 
 /*
+ * Check if a buffer lock is recursed.
+ */
+#define	BUF_LOCKRECURSED(bp)						\
+	(lockmgr_recursed(&(bp)->b_lock))
+
+/*
+ * Check if a buffer lock is currently held.
+ */
+#define	BUF_ISLOCKED(bp)						\
+	(lockstatus(&(bp)->b_lock, curthread))
+/*
  * Free a buffer lock.
  */
 #define BUF_LOCKFREE(bp) 			\
 do {						\
-	if (BUF_REFCNT(bp) > 0)			\
+	if (BUF_ISLOCKED(bp))			\
 		panic("free locked buf");	\
 	lockdestroy(&(bp)->b_lock);		\
 } while (0)
@@ -344,29 +355,6 @@
 	lockmgr_disown(&bp->b_lock);
 }
 #endif
-/*
- * Find out the number of references to a lock.
- */
-static __inline int BUF_REFCNT(struct buf *);
-static __inline int
-BUF_REFCNT(struct buf *bp)
-{
-	int s, ret;
-
-	/*
-	 * When the system is panicing, the lock manager grants all lock
-	 * requests whether or not the lock is available. To avoid "unlocked
-	 * buffer" panics after a crash, we just claim that all buffers
-	 * are locked when cleaning up after a system panic.
-	 */
-	if (panicstr != NULL)
-		return (1);
-	s = splbio();
-	ret = lockcount(&(bp)->b_lock);
-	splx(s);
-	return ret;
-}
-
 
 /*
  * Find out the number of waiters on a lock.

==== //depot/projects/dtrace/src/sys/sys/lockmgr.h#11 (text+ko) ====

@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)lock.h	8.12 (Berkeley) 5/19/95
- * $FreeBSD: src/sys/sys/lockmgr.h,v 1.56 2008/01/08 23:48:31 attilio Exp $
+ * $FreeBSD: src/sys/sys/lockmgr.h,v 1.57 2008/01/19 17:36:23 attilio Exp $
  */
 
 #ifndef	_SYS_LOCKMGR_H_
@@ -204,6 +204,8 @@
 int	lockwaiters(struct lock *);
 
 #define lockmgr(lock, flags, mtx, td) _lockmgr((lock), (flags), (mtx), (td), __FILE__, __LINE__)
+#define	lockmgr_recursed(lkp)						\
+	((lkp)->lk_exclusivecount > 1)
 #ifdef DDB
 int	lockmgr_chain(struct thread *td, struct thread **ownerp);
 #endif

==== //depot/projects/dtrace/src/sys/sys/param.h#33 (text+ko) ====

@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)param.h	8.3 (Berkeley) 4/4/95
- * $FreeBSD: src/sys/sys/param.h,v 1.325 2008/01/13 14:48:51 attilio Exp $
+ * $FreeBSD: src/sys/sys/param.h,v 1.326 2008/01/19 17:39:25 attilio Exp $
  */
 
 #ifndef _SYS_PARAM_H_
@@ -57,7 +57,7 @@
  *		is created, otherwise 1.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 800011	/* Master, propagated to newvers */
+#define __FreeBSD_version 800012	/* Master, propagated to newvers */
 
 #ifndef LOCORE
 #include <sys/types.h>

==== //depot/projects/dtrace/src/sys/ufs/ffs/ffs_vfsops.c#19 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.333 2008/01/13 14:44:14 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.334 2008/01/19 17:36:23 attilio Exp $");
 
 #include "opt_mac.h"
 #include "opt_quota.h"
@@ -1718,7 +1718,7 @@
 
 	oldflags = bp->b_flags;
 
-	if (BUF_REFCNT(bp) == 0)
+	if (!BUF_ISLOCKED(bp))
 		panic("bufwrite: buffer is not busy???");
 	s = splbio();
 	/*

==== //depot/projects/dtrace/www/share/sgml/news.xml#35 (text+ko) ====

@@ -20,7 +20,7 @@
 <news>
   <cvs:keywords xmlns:cvs="http://www.FreeBSD.org/XML/CVS" version="1.0">
     <cvs:keyword name="freebsd">
-      $FreeBSD: www/share/sgml/news.xml,v 1.137 2008/01/18 18:56:02 bmah Exp $
+      $FreeBSD: www/share/sgml/news.xml,v 1.138 2008/01/19 20:20:00 jkois Exp $
     </cvs:keyword>
   </cvs:keywords>
 
@@ -36,14 +36,14 @@
 	<event>
           <title>FreeBSD 6.3-RELEASE Available</title>
 
-          <p><a href="&base;/releases/6.3R/announce.html">FreeBSD
+          <p><a href="&enbase;/releases/6.3R/announce.html">FreeBSD
 	    6.3-RELEASE</a> is now available.  Please be sure to check
 	    the <a
-	    href="&base;/releases/6.3R/errata.html">release errata</a>
+	    href="&enbase;/releases/6.3R/errata.html">release errata</a>
 	    before installation for any late-breaking news and/or
 	    issues with 6.3.  More information about FreeBSD releases
 	    can be found on the  <a
-	    href="&base;/releases/index.html">Release Information</a>
+	    href="&enbase;/releases/index.html">Release Information</a>
 	    page.</p>
         </event>
       </day>
@@ -183,7 +183,7 @@
 	    the 7.0-BETA4 ISO images for Tier-1 architectures are now <a
 	      href="http://lists.freebsd.org/pipermail/freebsd-stable/2007-December/038873.html">;
 	      available</a> for download on most <a
-	      href="&base;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
+	      href="&enbase;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
 	      &os; mirror sites</a>.  We ask our users to report any
 	    outstanding bugs, as this will presumably be the last BETA
 	    release before the first RC release.</p>
@@ -217,7 +217,7 @@
 	    the 7.0-BETA3 ISO images for Tier-1 architectures are now <a
 	      href="http://lists.freebsd.org/pipermail/freebsd-stable/2007-November/038388.html">;
 	      available</a> for download on most <a
-	      href="&base;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
+	      href="&enbase;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
 	      &os; mirror sites</a>.  We ask our users to report any
 	    outstanding bugs.</p>
 	</event>
@@ -232,7 +232,7 @@
 	    the 7.0-BETA2 ISO images for Tier-1 architectures are now <a
 	      href="http://lists.freebsd.org/pipermail/freebsd-stable/2007-November/037966.html">;
 	      available</a> for download on most <a
-	      href="&base;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
+	      href="&enbase;/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">
 	      &os; mirror sites</a>.  We ask our users to report any
 	    outstanding bugs, as this will presumably be the last BETA

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801192038.m0JKc5g3082294>