Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/pgoyette-localcount]: src/sys Adapt machine-independant code to the new ...



details:   https://anonhg.NetBSD.org/src/rev/24c0bdc5f89f
branches:  pgoyette-localcount
changeset: 852825:24c0bdc5f89f
user:      pgoyette <pgoyette%NetBSD.org@localhost>
date:      Wed Jul 20 23:47:55 2016 +0000

description:
Adapt machine-independant code to the new {b,c}devsw reference-counting
(using localcount(9)).  All callers of {b,c}devsw_lookup() now call
{b,c}devsw_lookup_acquire() which retains a reference on the 'struct
{b,c}devsw'.  This reference must be released by the caller once it is
finished with the structure's content (or other data that would disappear
if the 'struct {b,c}devsw' were to disappear).

diffstat:

 sys/coda/coda_vfsops.c                      |  13 +++++++---
 sys/compat/common/tty_60.c                  |  26 ++++++++++++--------
 sys/compat/linux/arch/amd64/linux_machdep.c |  36 ++++++++++++++++------------
 sys/compat/linux/arch/i386/linux_machdep.c  |  23 +++++++++++-------
 sys/compat/linux/common/linux_ioctl.c       |  15 ++++++++----
 sys/dev/clockctl.c                          |  18 ++++++++-----
 sys/dev/dkwedge/dk.c                        |   7 +++--
 sys/dev/ir/irframe_tty.c                    |   8 ++++--
 sys/dev/raidframe/rf_netbsdkintf.c          |   8 +++---
 sys/fs/adosfs/advfsops.c                    |   9 ++++--
 sys/fs/cd9660/cd9660_vfsops.c               |  14 +++++++----
 sys/fs/filecorefs/filecore_vfsops.c         |  15 ++++++++----
 sys/fs/hfs/hfs_vfsops.c                     |  13 ++++++++--
 sys/fs/msdosfs/msdosfs_vfsops.c             |  19 ++++++++++----
 sys/fs/nilfs/nilfs_vfsops.c                 |  12 +++++++--
 sys/fs/ntfs/ntfs_vfsops.c                   |  11 ++++++--
 sys/fs/sysvbfs/sysvbfs_vfsops.c             |  18 ++++++++++----
 sys/fs/udf/udf_vfsops.c                     |  15 ++++++++---
 sys/fs/v7fs/v7fs_vfsops.c                   |  22 +++++++++++++----
 sys/kern/tty.c                              |   7 +++--
 sys/kern/tty_pty.c                          |  36 +++++++++++++++++-----------
 sys/kern/vfs_mount.c                        |  28 ++++++++++++----------
 sys/miscfs/specfs/spec_vnops.c              |  19 ++++++++------
 sys/net/ppp_tty.c                           |   8 ++++--
 sys/ufs/chfs/chfs_vfsops.c                  |  19 ++++++++++++---
 sys/ufs/ext2fs/ext2fs_vfsops.c              |  18 ++++++++-----
 sys/ufs/ffs/ffs_vfsops.c                    |  17 ++++++++-----
 sys/ufs/lfs/lfs_vfsops.c                    |  18 ++++++++-----
 sys/uvm/uvm_device.c                        |  19 +++++++++++----
 sys/uvm/uvm_swap.c                          |  14 +++++++----
 30 files changed, 325 insertions(+), 180 deletions(-)

diffs (truncated from 1862 to 300 lines):

diff -r d669e1b9616c -r 24c0bdc5f89f sys/coda/coda_vfsops.c
--- a/sys/coda/coda_vfsops.c    Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/coda/coda_vfsops.c    Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $ */
+/*     $NetBSD: coda_vfsops.c,v 1.84.2.1 2016/07/20 23:47:55 pgoyette Exp $    */
 
 /*
  *
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.84.2.1 2016/07/20 23:47:55 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -212,7 +212,7 @@
     }
     dev = dvp->v_rdev;
     vrele(dvp);
-    cdev = cdevsw_lookup(dev);
+    cdev = cdevsw_lookup_acquire(dev);
     if (cdev == NULL) {
        MARK_INT_FAIL(CODA_MOUNT_STATS);
        return(ENXIO);
@@ -224,11 +224,13 @@
     if (cdev != &vcoda_cdevsw)
     {
        MARK_INT_FAIL(CODA_MOUNT_STATS);
+       cdevsw_release(cdev);
        return(ENXIO);
     }
 
     if (minor(dev) >= NVCODA) {
        MARK_INT_FAIL(CODA_MOUNT_STATS);
+       cdevsw_release(cdev);
        return(ENXIO);
     }
 
@@ -239,6 +241,7 @@
 
     if (!VC_OPEN(&mi->mi_vcomm)) {
        MARK_INT_FAIL(CODA_MOUNT_STATS);
+       cdevsw_release(cdev);
        return(ENODEV);
     }
 
@@ -280,8 +283,10 @@
     else
        MARK_INT_SAT(CODA_MOUNT_STATS);
 
-    return set_statvfs_info("/coda", UIO_SYSSPACE, "CODA", UIO_SYSSPACE,
+    error = set_statvfs_info("/coda", UIO_SYSSPACE, "CODA", UIO_SYSSPACE,
        vfsp->mnt_op->vfs_name, vfsp, l);
+    cdevsw_release(cdev);
+    return error;
 }
 
 int
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/common/tty_60.c
--- a/sys/compat/common/tty_60.c        Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/common/tty_60.c        Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tty_60.c,v 1.4 2015/10/22 15:18:25 christos Exp $      */
+/*     $NetBSD: tty_60.c,v 1.4.2.1 2016/07/20 23:47:55 pgoyette Exp $  */
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4 2015/10/22 15:18:25 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4.2.1 2016/07/20 23:47:55 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -67,24 +67,28 @@
 compat_60_ptmget_ioctl(dev_t dev, u_long cmd, void *data, int flag,
        struct lwp *l)
 {
-       int ret;
+       int ret = 0;
        u_long newcmd;
        struct ptmget pg;
-       const struct cdevsw *cd = cdevsw_lookup(dev);
+       const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
 
-       if (cd == NULL || cd->d_ioctl == NULL)
+       if (cd == NULL)
                return ENXIO;
+       if (cd->d_ioctl == NULL) {
+               cdevsw_release(cd);
+               return ENXIO;
+       }
 
        switch (cmd) {
        case COMPAT_60_TIOCPTMGET:  newcmd = TIOCPTMGET; break;
        case COMPAT_60_TIOCPTSNAME: newcmd = TIOCPTSNAME; break;
-       default: return ENOTTY;
+       default: ret = ENOTTY;
        }
-
-       ret = (cd->d_ioctl)(dev, newcmd, &pg, flag, l);
-       if (ret != 0)
-               return ret;
-       ret = ptmget_to_ptmget60(&pg, data);
+       if (ret == 0)
+               ret = (cd->d_ioctl)(dev, newcmd, &pg, flag, l);
+       if (ret == 0)
+               ret = ptmget_to_ptmget60(&pg, data);
+       cdevsw_release(cd);
        return ret;
 }
 
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/arch/amd64/linux_machdep.c
--- a/sys/compat/linux/arch/amd64/linux_machdep.c       Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/arch/amd64/linux_machdep.c       Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_machdep.c,v 1.48 2014/02/19 20:50:56 dsl Exp $ */
+/*     $NetBSD: linux_machdep.c,v 1.48.10.1 2016/07/20 23:47:55 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48 2014/02/19 20:50:56 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48.10.1 2016/07/20 23:47:55 pgoyette Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -268,26 +268,30 @@
 dev_t
 linux_fakedev(dev_t dev, int raw)
 {
+       dev_t ret;
+       extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
+       const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
 
-       extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
-       const struct cdevsw *cd = cdevsw_lookup(dev);
-
-       if (raw) {
+       if (raw) {
 #if (NWSDISPLAY > 0)
-              extern const struct cdevsw wsdisplay_cdevsw;
-              if (cd == &wsdisplay_cdevsw)
-                      return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+               extern const struct cdevsw wsdisplay_cdevsw;
+               if (cd == &wsdisplay_cdevsw) {
+                       cdevsw_release(cd);
+                       return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+               }
 #endif
-       }
+       }
 
-       if (cd == &ptc_cdevsw)
-              return makedev(LINUX_PTC_MAJOR, minor(dev));
-       if (cd == &pts_cdevsw)
-              return makedev(LINUX_PTS_MAJOR, minor(dev));
-
-       return ((minor(dev) & 0xff) | ((major(dev) & 0xfff) << 8)
+       if (cd == &ptc_cdevsw)
+               ret = makedev(LINUX_PTC_MAJOR, minor(dev));
+       else if (cd == &pts_cdevsw)
+               ret = makedev(LINUX_PTS_MAJOR, minor(dev));
+       else ret = ((minor(dev) & 0xff) | ((major(dev) & 0xfff) << 8)
            | (((unsigned long long int) (minor(dev) & ~0xff)) << 12)
            | (((unsigned long long int) (major(dev) & ~0xfff)) << 32));
+
+       cdevsw_release(cd);
+       return ret;
 }
 
 int
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/arch/i386/linux_machdep.c
--- a/sys/compat/linux/arch/i386/linux_machdep.c        Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/arch/i386/linux_machdep.c        Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_machdep.c,v 1.162 2016/07/13 15:59:54 maxv Exp $ */
+/*     $NetBSD: linux_machdep.c,v 1.162.2.1 2016/07/20 23:47:55 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 1995, 2000, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.162 2016/07/13 15:59:54 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.162.2.1 2016/07/20 23:47:55 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vm86.h"
@@ -653,23 +653,28 @@
 dev_t
 linux_fakedev(dev_t dev, int raw)
 {
+       dev_t ret;
        extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
-       const struct cdevsw *cd = cdevsw_lookup(dev);
+       const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
 
        if (raw) {
 #if (NWSDISPLAY > 0)
                extern const struct cdevsw wsdisplay_cdevsw;
-               if (cd == &wsdisplay_cdevsw)
+               if (cd == &wsdisplay_cdevsw) {
+                       cdevsw_release(cd);
                        return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+               }
 #endif
        }
 
        if (cd == &ptc_cdevsw)
-               return makedev(LINUX_PTC_MAJOR, minor(dev));
-       if (cd == &pts_cdevsw)
-               return makedev(LINUX_PTS_MAJOR, minor(dev));
-
-       return dev;
+               ret = makedev(LINUX_PTC_MAJOR, minor(dev));
+       else if (cd == &pts_cdevsw)
+               ret makedev(LINUX_PTS_MAJOR, minor(dev));
+       else
+               ret = dev;
+       cdevsw_release(cd);
+       return ret;
 }
 
 #if (NWSDISPLAY > 0)
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/common/linux_ioctl.c
--- a/sys/compat/linux/common/linux_ioctl.c     Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/common/linux_ioctl.c     Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $        */
+/*     $NetBSD: linux_ioctl.c,v 1.58.10.1 2016/07/20 23:47:55 pgoyette Exp $   */
 
 /*-
  * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.58.10.1 2016/07/20 23:47:55 pgoyette Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "sequencer.h"
@@ -158,6 +158,7 @@
                struct vnode *vp;
                struct vattr va;
                extern const struct cdevsw sequencer_cdevsw;
+               const struct cdevsw *cdev = NULL;
 
                if ((fp = fd_getfile(SCARG(uap, fd))) == NULL)
                        return EBADF;
@@ -168,17 +169,21 @@
                        error = VOP_GETATTR(vp, &va, l->l_cred);
                        VOP_UNLOCK(vp);
                        if (error == 0 &&
-                           cdevsw_lookup(va.va_rdev) == &sequencer_cdevsw)
+                           (cdev = cdevsw_lookup_acquire(va.va_rdev)) ==
+                                       &sequencer_cdevsw)
                                is_sequencer = true;
                }
                if (is_sequencer) {
-                       error = oss_ioctl_sequencer(l, (const void *)LINUX_TO_OSS(uap),
-                                                  retval);
+                       error = oss_ioctl_sequencer(l,
+                                       (const void *)LINUX_TO_OSS(uap),
+                                       retval);
                }
                else {
                        error = linux_ioctl_termios(l, uap, retval);
                }
                fd_putfile(SCARG(uap, fd));
+               if (cdev != NULL)
+                       cdevsw_release(cdev);
 #else
                error = linux_ioctl_termios(l, uap, retval);
 #endif
diff -r d669e1b9616c -r 24c0bdc5f89f sys/dev/clockctl.c
--- a/sys/dev/clockctl.c        Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/dev/clockctl.c        Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: clockctl.c,v 1.34 2016/01/06 18:06:38 christos Exp $ */
+/*      $NetBSD: clockctl.c,v 1.34.2.1 2016/07/20 23:47:56 pgoyette Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.34 2016/01/06 18:06:38 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.34.2.1 2016/07/20 23:47:56 pgoyette Exp $");



Home | Main Index | Thread Index | Old Index