[BACK]Return to spec_vnops.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / miscfs / specfs

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/miscfs/specfs/spec_vnops.c between version 1.119.6.1 and 1.119.6.2

version 1.119.6.1, 2009/01/19 13:20:07 version 1.119.6.2, 2009/03/03 18:33:36
Line 79  __KERNEL_RCSID(0, "$NetBSD$");
Line 79  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/tty.h>  #include <sys/tty.h>
 #include <sys/kauth.h>  #include <sys/kauth.h>
 #include <sys/fstrans.h>  #include <sys/fstrans.h>
   #include <sys/module.h>
   
 #include <miscfs/genfs/genfs.h>  #include <miscfs/genfs/genfs.h>
 #include <miscfs/specfs/specdev.h>  #include <miscfs/specfs/specdev.h>
Line 353  spec_open(void *v)
Line 354  spec_open(void *v)
         specnode_t *sn;          specnode_t *sn;
         specdev_t *sd;          specdev_t *sd;
   
           u_int gen;
           const char *name;
   
         l = curlwp;          l = curlwp;
         vp = ap->a_vp;          vp = ap->a_vp;
         dev = vp->v_rdev;          dev = vp->v_rdev;
         sn = vp->v_specnode;          sn = vp->v_specnode;
         sd = sn->sn_dev;          sd = sn->sn_dev;
           name = NULL;
           gen = 0;
   
         /*          /*
          * Don't allow open if fs is mounted -nodev.           * Don't allow open if fs is mounted -nodev.
          */           */
Line 398  spec_open(void *v)
Line 404  spec_open(void *v)
                 if (cdev_type(dev) == D_TTY)                  if (cdev_type(dev) == D_TTY)
                         vp->v_vflag |= VV_ISTTY;                          vp->v_vflag |= VV_ISTTY;
                 VOP_UNLOCK(vp, 0);                  VOP_UNLOCK(vp, 0);
                 error = cdev_open(dev, ap->a_mode, S_IFCHR, l);                  do {
                           gen = module_gen;
                           error = cdev_open(dev, ap->a_mode, S_IFCHR, l);
                           if (error != ENXIO)
                                   break;
   
                           /* Get device name from devsw_conv array */
                           if ((name = cdevsw_getname(major(dev))) == NULL)
                                   break;
   
                           /* Try to autoload device module */
                           mutex_enter(&module_lock);
                           (void) module_autoload(name, MODULE_CLASS_DRIVER);
                           mutex_exit(&module_lock);
                   } while (gen != module_gen);
   
                 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);                  vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
                 break;                  break;
   
Line 425  spec_open(void *v)
Line 446  spec_open(void *v)
                 sd->sd_opencnt = 1;                  sd->sd_opencnt = 1;
                 sd->sd_bdevvp = vp;                  sd->sd_bdevvp = vp;
                 mutex_exit(&device_lock);                  mutex_exit(&device_lock);
                   do {
                           gen = module_gen;
                           error = bdev_open(dev, ap->a_mode, S_IFBLK, l);
                           if (error != ENXIO)
                                   break;
   
                           /* Get device name from devsw_conv array */
                           if ((name = bdevsw_getname(major(dev))) == NULL)
                                   break;
   
                           VOP_UNLOCK(vp, 0);
   
                           /* Try to autoload device module */
                           mutex_enter(&module_lock);
                           (void) module_autoload(name, MODULE_CLASS_DRIVER);
                           mutex_exit(&module_lock);
   
                           vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
                   } while (gen != module_gen);
   
                 error = bdev_open(dev, ap->a_mode, S_IFBLK, l);  
                 break;                  break;
   
         case VNON:          case VNON:
Line 804  spec_strategy(void *v)
Line 843  spec_strategy(void *v)
   
         error = 0;          error = 0;
         bp->b_dev = vp->v_rdev;          bp->b_dev = vp->v_rdev;
         if (!(bp->b_flags & B_READ) &&  
             (LIST_FIRST(&bp->b_dep)) != NULL && bioopsp)  
                 bioopsp->io_start(bp);  
   
         if (!(bp->b_flags & B_READ))          if (!(bp->b_flags & B_READ))
                 error = fscow_run(bp, false);                  error = fscow_run(bp, false);

Legend:
Removed from v.1.119.6.1  
changed lines
  Added in v.1.119.6.2

CVSweb <webmaster@jp.NetBSD.org>