svn commit: r184599 - in head/sys: kern sys

Attilio Rao attilio at FreeBSD.org
Mon Nov 3 12:00:35 PST 2008


Author: attilio
Date: Mon Nov  3 20:00:35 2008
New Revision: 184599
URL: http://svn.freebsd.org/changeset/base/184599

Log:
  Remove the mnt_holdcnt and mnt_holdcntwaiters because they are useless.
  Really, the concept of holdcnt in the struct mount is rappresented by
  the mnt_ref (which prevents the type-stable structure from being
  "recycled) handled through vfs_ref() and vfs_rel().
  On this optic, switch the holdcnt acquisition into an emulated vfs_ref()
  (and subsequent release into vfs_rel()).
  
  Discussed with:	kib
  Tested by:	pho

Modified:
  head/sys/kern/vfs_mount.c
  head/sys/kern/vfs_subr.c
  head/sys/sys/mount.h

Modified: head/sys/kern/vfs_mount.c
==============================================================================
--- head/sys/kern/vfs_mount.c	Mon Nov  3 19:57:40 2008	(r184598)
+++ head/sys/kern/vfs_mount.c	Mon Nov  3 20:00:35 2008	(r184599)
@@ -509,16 +509,6 @@ vfs_mount_destroy(struct mount *mp)
 	MNT_ILOCK(mp);
 	while (mp->mnt_ref)
 		msleep(mp, MNT_MTX(mp), PVFS, "mntref", 0);
-	if (mp->mnt_holdcnt != 0) {
-		printf("Waiting for mount point to be unheld\n");
-		while (mp->mnt_holdcnt != 0) {
-			mp->mnt_holdcntwaiters++;
-			msleep(&mp->mnt_holdcnt, MNT_MTX(mp),
-			       PZERO, "mntdestroy", 0);
-			mp->mnt_holdcntwaiters--;
-		}
-		printf("mount point unheld\n");
-	}
 	if (mp->mnt_writeopcount > 0) {
 		printf("Waiting for mount point write ops\n");
 		while (mp->mnt_writeopcount > 0) {
@@ -2062,7 +2052,7 @@ __mnt_vnode_first(struct vnode **mvp, st
 		*mvp = NULL;
 		return (NULL);
 	}
-	mp->mnt_holdcnt++;
+	MNT_REF(mp);
 	MNT_IUNLOCK(mp);
 	*mvp = (struct vnode *) malloc(sizeof(struct vnode),
 				       M_VNODE_MARKER,
@@ -2080,9 +2070,7 @@ __mnt_vnode_first(struct vnode **mvp, st
 		free(*mvp, M_VNODE_MARKER);
 		MNT_ILOCK(mp);
 		*mvp = NULL;
-		mp->mnt_holdcnt--;
-		if (mp->mnt_holdcnt == 0 && mp->mnt_holdcntwaiters != 0)
-			wakeup(&mp->mnt_holdcnt);
+		MNT_REL(mp);
 		return (NULL);
 	}
 	(*mvp)->v_mount = mp;
@@ -2106,10 +2094,7 @@ __mnt_vnode_markerfree(struct vnode **mv
 	free(*mvp, M_VNODE_MARKER);
 	MNT_ILOCK(mp);
 	*mvp = NULL;
-
-	mp->mnt_holdcnt--;
-	if (mp->mnt_holdcnt == 0 && mp->mnt_holdcntwaiters != 0)
-		wakeup(&mp->mnt_holdcnt);
+	MNT_REL(mp);
 }
 
 

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Mon Nov  3 19:57:40 2008	(r184598)
+++ head/sys/kern/vfs_subr.c	Mon Nov  3 20:00:35 2008	(r184599)
@@ -2838,8 +2838,6 @@ DB_SHOW_COMMAND(mount, db_show_mount)
 	db_printf("    mnt_maxsymlinklen = %d\n", mp->mnt_maxsymlinklen);
 	db_printf("    mnt_iosize_max = %d\n", mp->mnt_iosize_max);
 	db_printf("    mnt_hashseed = %u\n", mp->mnt_hashseed);
-	db_printf("    mnt_holdcnt = %d\n", mp->mnt_holdcnt);
-	db_printf("    mnt_holdcntwaiters = %d\n", mp->mnt_holdcntwaiters);
 	db_printf("    mnt_secondary_writes = %d\n", mp->mnt_secondary_writes);
 	db_printf("    mnt_secondary_accwrites = %d\n",
 	    mp->mnt_secondary_accwrites);

Modified: head/sys/sys/mount.h
==============================================================================
--- head/sys/sys/mount.h	Mon Nov  3 19:57:40 2008	(r184598)
+++ head/sys/sys/mount.h	Mon Nov  3 20:00:35 2008	(r184599)
@@ -174,8 +174,6 @@ struct mount {
 	struct label	*mnt_label;		/* MAC label for the fs */
 	u_int		mnt_hashseed;		/* Random seed for vfs_hash */
 	int		mnt_lockref;		/* (i) Lock reference count */
-	int		mnt_holdcnt;		/* hold count */
-	int		mnt_holdcntwaiters;	/* waits on hold count */
 	int		mnt_secondary_writes;   /* (i) # of secondary writes */
 	int		mnt_secondary_accwrites;/* (i) secondary wr. starts */
 	struct thread	*mnt_susp_owner;	/* (i) thread owning suspension */


More information about the svn-src-head mailing list