svn commit: r205588 - stable/8/sys/fs/msdosfs

Konstantin Belousov kib at FreeBSD.org
Wed Mar 24 14:10:11 UTC 2010


Author: kib
Date: Wed Mar 24 14:10:08 2010
New Revision: 205588
URL: http://svn.freebsd.org/changeset/base/205588

Log:
  MFC r204466:
  Assert that the msdosfs vnode is (e)locked in several places.
  Change the check and return on impossible condition into KASSERT().

Modified:
  stable/8/sys/fs/msdosfs/msdosfs_denode.c
  stable/8/sys/fs/msdosfs/msdosfs_fat.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/net/   (props changed)

Modified: stable/8/sys/fs/msdosfs/msdosfs_denode.c
==============================================================================
--- stable/8/sys/fs/msdosfs/msdosfs_denode.c	Wed Mar 24 14:08:01 2010	(r205587)
+++ stable/8/sys/fs/msdosfs/msdosfs_denode.c	Wed Mar 24 14:10:08 2010	(r205588)
@@ -167,9 +167,8 @@ deget(pmp, dirclust, diroffset, depp)
 	ldep->de_dirclust = dirclust;
 	ldep->de_diroffset = diroffset;
 	ldep->de_inode = inode;
-	fc_purge(ldep, 0);	/* init the fat cache for this denode */
-
 	lockmgr(nvp->v_vnlock, LK_EXCLUSIVE, NULL);
+	fc_purge(ldep, 0);	/* init the fat cache for this denode */
 	error = insmntque(nvp, mntp);
 	if (error != 0) {
 		free(ldep, M_MSDOSFSNODE);

Modified: stable/8/sys/fs/msdosfs/msdosfs_fat.c
==============================================================================
--- stable/8/sys/fs/msdosfs/msdosfs_fat.c	Wed Mar 24 14:08:01 2010	(r205587)
+++ stable/8/sys/fs/msdosfs/msdosfs_fat.c	Wed Mar 24 14:10:08 2010	(r205588)
@@ -139,12 +139,9 @@ pcbmap(dep, findcn, bnp, cnp, sp)
 	struct msdosfsmount *pmp = dep->de_pmp;
 	u_long bsize;
 
-	/*
-	 * If they don't give us someplace to return a value then don't
-	 * bother doing anything.
-	 */
-	if (bnp == NULL && cnp == NULL && sp == NULL)
-		return (0);
+	KASSERT(bnp != NULL || cnp != NULL || sp != NULL,
+	    ("pcbmap: extra call"));
+	ASSERT_VOP_ELOCKED(DETOV(dep), "pcbmap");
 
 	cn = dep->de_StartCluster;
 	/*
@@ -270,6 +267,8 @@ fc_lookup(dep, findcn, frcnp, fsrcnp)
 	u_long cn;
 	struct fatcache *closest = 0;
 
+	ASSERT_VOP_LOCKED(DETOV(dep), "fc_lookup");
+
 	for (i = 0; i < FC_SIZE; i++) {
 		cn = dep->de_fc[i].fc_frcn;
 		if (cn != FCE_EMPTY && cn <= findcn) {
@@ -295,6 +294,8 @@ fc_purge(dep, frcn)
 	int i;
 	struct fatcache *fcp;
 
+	ASSERT_VOP_ELOCKED(DETOV(dep), "fc_purge");
+
 	fcp = dep->de_fc;
 	for (i = 0; i < FC_SIZE; i++, fcp++) {
 		if (fcp->fc_frcn >= frcn)


More information about the svn-src-stable mailing list