svn commit: r241088 - in stable/9/sys: cddl/contrib/opensolaris/uts/common/dtrace dev/drm dev/drm2 dev/ksyms fs/devfs ofed/include/linux

Hans Petter Selasky hselasky at FreeBSD.org
Mon Oct 1 06:42:08 UTC 2012


Author: hselasky
Date: Mon Oct  1 06:42:07 2012
New Revision: 241088
URL: http://svn.freebsd.org/changeset/base/241088

Log:
  MFC r239303:
  Streamline use of cdevpriv and correct some corner cases.

Modified:
  stable/9/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
  stable/9/sys/dev/drm/drm_fops.c
  stable/9/sys/dev/drm2/drm_fops.c
  stable/9/sys/dev/ksyms/ksyms.c
  stable/9/sys/fs/devfs/devfs_vnops.c
  stable/9/sys/ofed/include/linux/linux_compat.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/dev/   (props changed)
  stable/9/sys/fs/   (props changed)

Modified: stable/9/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
==============================================================================
--- stable/9/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -15517,8 +15517,6 @@ dtrace_close(struct cdev *dev, int flags
 		kmem_free(state, 0);
 #if __FreeBSD_version < 800039
 		dev->si_drv1 = NULL;
-#else
-		devfs_clear_cdevpriv();
 #endif
 #endif
 	}

Modified: stable/9/sys/dev/drm/drm_fops.c
==============================================================================
--- stable/9/sys/dev/drm/drm_fops.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/dev/drm/drm_fops.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -57,12 +57,6 @@ int drm_open_helper(struct cdev *kdev, i
 		return ENOMEM;
 	}
 
-	retcode = devfs_set_cdevpriv(priv, drm_close);
-	if (retcode != 0) {
-		free(priv, DRM_MEM_FILES);
-		return retcode;
-	}
-
 	DRM_LOCK();
 	priv->dev		= dev;
 	priv->uid		= p->td_ucred->cr_svuid;
@@ -76,7 +70,6 @@ int drm_open_helper(struct cdev *kdev, i
 		/* shared code returns -errno */
 		retcode = -dev->driver->open(dev, priv);
 		if (retcode != 0) {
-			devfs_clear_cdevpriv();
 			free(priv, DRM_MEM_FILES);
 			DRM_UNLOCK();
 			return retcode;
@@ -89,7 +82,12 @@ int drm_open_helper(struct cdev *kdev, i
 	TAILQ_INSERT_TAIL(&dev->files, priv, link);
 	DRM_UNLOCK();
 	kdev->si_drv1 = dev;
-	return 0;
+
+	retcode = devfs_set_cdevpriv(priv, drm_close);
+	if (retcode != 0)
+		drm_close(priv);
+
+	return (retcode);
 }
 
 

Modified: stable/9/sys/dev/drm2/drm_fops.c
==============================================================================
--- stable/9/sys/dev/drm2/drm_fops.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/dev/drm2/drm_fops.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -57,12 +57,6 @@ int drm_open_helper(struct cdev *kdev, i
 		return ENOMEM;
 	}
 
-	retcode = devfs_set_cdevpriv(priv, drm_close);
-	if (retcode != 0) {
-		free(priv, DRM_MEM_FILES);
-		return retcode;
-	}
-
 	DRM_LOCK(dev);
 	priv->dev		= dev;
 	priv->uid		= p->td_ucred->cr_svuid;
@@ -83,7 +77,6 @@ int drm_open_helper(struct cdev *kdev, i
 		/* shared code returns -errno */
 		retcode = -dev->driver->open(dev, priv);
 		if (retcode != 0) {
-			devfs_clear_cdevpriv();
 			free(priv, DRM_MEM_FILES);
 			DRM_UNLOCK(dev);
 			return retcode;
@@ -96,7 +89,12 @@ int drm_open_helper(struct cdev *kdev, i
 	TAILQ_INSERT_TAIL(&dev->files, priv, link);
 	DRM_UNLOCK(dev);
 	kdev->si_drv1 = dev;
-	return 0;
+
+	retcode = devfs_set_cdevpriv(priv, drm_close);
+	if (retcode != 0)
+		drm_close(priv);
+
+	return (retcode);
 }
 
 static bool

Modified: stable/9/sys/dev/ksyms/ksyms.c
==============================================================================
--- stable/9/sys/dev/ksyms/ksyms.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/dev/ksyms/ksyms.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -579,8 +579,6 @@ ksyms_close(struct cdev *dev, int flags 
 	/* Unmap the buffer from the process address space. */
 	error = copyout_unmap(td, sc->sc_uaddr, sc->sc_usize);
 
-	devfs_clear_cdevpriv();
-
 	return (error);
 }
 

Modified: stable/9/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- stable/9/sys/fs/devfs/devfs_vnops.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/fs/devfs/devfs_vnops.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -1081,6 +1081,9 @@ devfs_open(struct vop_open_args *ap)
 		error = dsw->d_fdopen(dev, ap->a_mode, td, fp);
 	else
 		error = dsw->d_open(dev, ap->a_mode, S_IFCHR, td);
+	/* cleanup any cdevpriv upon error */
+	if (error != 0)
+		devfs_clear_cdevpriv();
 	td->td_fpop = fpop;
 
 	vn_lock(vp, vlocked | LK_RETRY);

Modified: stable/9/sys/ofed/include/linux/linux_compat.c
==============================================================================
--- stable/9/sys/ofed/include/linux/linux_compat.c	Mon Oct  1 06:01:20 2012	(r241087)
+++ stable/9/sys/ofed/include/linux/linux_compat.c	Mon Oct  1 06:42:07 2012	(r241088)
@@ -263,7 +263,6 @@ linux_dev_close(struct cdev *dev, int ff
 	if ((error = devfs_get_cdevpriv((void **)&filp)) != 0)
 		return (error);
 	filp->f_flags = file->f_flag;
-	devfs_clear_cdevpriv();
 
 	return (0);
 }


More information about the svn-src-stable-9 mailing list