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

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

Diff for /src/sys/miscfs/kernfs/kernfs_vnops.c between version 1.63 and 1.64

version 1.63, 1999/03/24 05:51:26 version 1.64, 1999/07/08 01:26:27
Line 99  struct kern_target kern_targets[] = {
Line 99  struct kern_target kern_targets[] = {
 static int nkern_targets = sizeof(kern_targets) / sizeof(kern_targets[0]);  static int nkern_targets = sizeof(kern_targets) / sizeof(kern_targets[0]);
   
 int     kernfs_lookup   __P((void *));  int     kernfs_lookup   __P((void *));
 #define kernfs_create   genfs_eopnotsupp  #define kernfs_create   genfs_eopnotsupp_rele
 #define kernfs_mknod    genfs_eopnotsupp  #define kernfs_mknod    genfs_eopnotsupp_rele
 #define kernfs_open     genfs_nullop  #define kernfs_open     genfs_nullop
 #define kernfs_close    genfs_nullop  #define kernfs_close    genfs_nullop
 int     kernfs_access   __P((void *));  int     kernfs_access   __P((void *));
Line 114  int kernfs_write __P((void *));
Line 114  int kernfs_write __P((void *));
 #define kernfs_mmap     genfs_eopnotsupp  #define kernfs_mmap     genfs_eopnotsupp
 #define kernfs_fsync    genfs_nullop  #define kernfs_fsync    genfs_nullop
 #define kernfs_seek     genfs_nullop  #define kernfs_seek     genfs_nullop
 #define kernfs_remove   genfs_eopnotsupp  #define kernfs_remove   genfs_eopnotsupp_rele
 int     kernfs_link     __P((void *));  int     kernfs_link     __P((void *));
 #define kernfs_rename   genfs_eopnotsupp  #define kernfs_rename   genfs_eopnotsupp_rele
 #define kernfs_mkdir    genfs_eopnotsupp  #define kernfs_mkdir    genfs_eopnotsupp_rele
 #define kernfs_rmdir    genfs_eopnotsupp  #define kernfs_rmdir    genfs_eopnotsupp_rele
 int     kernfs_symlink  __P((void *));  int     kernfs_symlink  __P((void *));
 int     kernfs_readdir  __P((void *));  int     kernfs_readdir  __P((void *));
 #define kernfs_readlink genfs_eopnotsupp  #define kernfs_readlink genfs_eopnotsupp
 #define kernfs_abortop  genfs_abortop  #define kernfs_abortop  genfs_abortop
 int     kernfs_inactive __P((void *));  int     kernfs_inactive __P((void *));
 int     kernfs_reclaim  __P((void *));  int     kernfs_reclaim  __P((void *));
 #define kernfs_lock     genfs_nolock  #define kernfs_lock     genfs_lock
 #define kernfs_unlock   genfs_nounlock  #define kernfs_unlock   genfs_unlock
 #define kernfs_bmap     genfs_badop  #define kernfs_bmap     genfs_badop
 #define kernfs_strategy genfs_badop  #define kernfs_strategy genfs_badop
 int     kernfs_print    __P((void *));  int     kernfs_print    __P((void *));
 #define kernfs_islocked genfs_noislocked  #define kernfs_islocked genfs_islocked
 int     kernfs_pathconf __P((void *));  int     kernfs_pathconf __P((void *));
 #define kernfs_advlock  genfs_einval  #define kernfs_advlock  genfs_einval
 #define kernfs_blkatoff genfs_eopnotsupp  #define kernfs_blkatoff genfs_eopnotsupp
Line 326  kernfs_lookup(v)
Line 326  kernfs_lookup(v)
         const char *pname = cnp->cn_nameptr;          const char *pname = cnp->cn_nameptr;
         struct kern_target *kt;          struct kern_target *kt;
         struct vnode *fvp;          struct vnode *fvp;
         int error, i;          int error, i, wantpunlock;
   
 #ifdef KERNFS_DIAGNOSTIC  #ifdef KERNFS_DIAGNOSTIC
         printf("kernfs_lookup(%p)\n", ap);          printf("kernfs_lookup(%p)\n", ap);
Line 335  kernfs_lookup(v)
Line 335  kernfs_lookup(v)
 #endif  #endif
   
         *vpp = NULLVP;          *vpp = NULLVP;
           cnp->cn_flags &= ~PDIRUNLOCK;
   
         if (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)          if (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)
                 return (EROFS);                  return (EROFS);
   
         VOP_UNLOCK(dvp, 0);  
         if (cnp->cn_namelen == 1 && *pname == '.') {          if (cnp->cn_namelen == 1 && *pname == '.') {
                 *vpp = dvp;                  *vpp = dvp;
                 VREF(dvp);                  VREF(dvp);
                 vn_lock(dvp, LK_SHARED | LK_RETRY);  
                 return (0);                  return (0);
         }          }
   
           /*
            * This code only supports a flat directory, so we don't
            * need to worry about ..
            */
   
 #if 0  #if 0
         if (cnp->cn_namelen == 4 && memcmp(pname, "root", 4) == 0) {          if (cnp->cn_namelen == 4 && memcmp(pname, "root", 4) == 0) {
                 *vpp = rootdir;                  *vpp = rootdir;
Line 356  kernfs_lookup(v)
Line 360  kernfs_lookup(v)
         }          }
 #endif  #endif
   
           wantpunlock = (~cnp->cn_flags & (LOCKPARENT | ISLASTCN));
   
         for (kt = kern_targets, i = 0; i < nkern_targets; kt++, i++) {          for (kt = kern_targets, i = 0; i < nkern_targets; kt++, i++) {
                 if (cnp->cn_namelen == kt->kt_namlen &&                  if (cnp->cn_namelen == kt->kt_namlen &&
                     memcmp(kt->kt_name, pname, cnp->cn_namelen) == 0)                      memcmp(kt->kt_name, pname, cnp->cn_namelen) == 0)
Line 366  kernfs_lookup(v)
Line 372  kernfs_lookup(v)
         printf("kernfs_lookup: i = %d, failed", i);          printf("kernfs_lookup: i = %d, failed", i);
 #endif  #endif
   
         vn_lock(dvp, LK_SHARED | LK_RETRY);  
         return (cnp->cn_nameiop == LOOKUP ? ENOENT : EROFS);          return (cnp->cn_nameiop == LOOKUP ? ENOENT : EROFS);
   
 found:  found:
Line 374  found:
Line 379  found:
                 dev_t *dp = kt->kt_data;                  dev_t *dp = kt->kt_data;
         loop:          loop:
                 if (*dp == NODEV || !vfinddev(*dp, kt->kt_vtype, &fvp)) {                  if (*dp == NODEV || !vfinddev(*dp, kt->kt_vtype, &fvp)) {
                         vn_lock(dvp, LK_SHARED | LK_RETRY);  
                         return (ENOENT);                          return (ENOENT);
                 }                  }
                 *vpp = fvp;                  *vpp = fvp;
                 if (vget(fvp, LK_EXCLUSIVE))                  if (vget(fvp, LK_EXCLUSIVE))
                         goto loop;                          goto loop;
                   if (wantpunlock) {
                           VOP_UNLOCK(dvp, 0);
                           cnp->cn_flags |= PDIRUNLOCK;
                   }
                 return (0);                  return (0);
         }          }
   
Line 388  found:
Line 396  found:
 #endif  #endif
         error = getnewvnode(VT_KERNFS, dvp->v_mount, kernfs_vnodeop_p, &fvp);          error = getnewvnode(VT_KERNFS, dvp->v_mount, kernfs_vnodeop_p, &fvp);
         if (error) {          if (error) {
                 vn_lock(dvp, LK_SHARED | LK_RETRY);  
                 return (error);                  return (error);
         }          }
   
Line 396  found:
Line 403  found:
             M_WAITOK);              M_WAITOK);
         VTOKERN(fvp)->kf_kt = kt;          VTOKERN(fvp)->kf_kt = kt;
         fvp->v_type = kt->kt_vtype;          fvp->v_type = kt->kt_vtype;
         vn_lock(fvp, LK_SHARED | LK_RETRY);          vn_lock(fvp, LK_EXCLUSIVE | LK_RETRY);
         *vpp = fvp;          *vpp = fvp;
   
 #ifdef KERNFS_DIAGNOSTIC  #ifdef KERNFS_DIAGNOSTIC
         printf("kernfs_lookup: newvp = %p\n", fvp);          printf("kernfs_lookup: newvp = %p\n", fvp);
 #endif  #endif
           if (wantpunlock) {
                   VOP_UNLOCK(dvp, 0);
                   cnp->cn_flags |= PDIRUNLOCK;
           }
         return (0);          return (0);
 }  }
   

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.64

CVSweb <webmaster@jp.NetBSD.org>