[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.78 and 1.87

version 1.78, 2001/11/15 09:48:22 version 1.87, 2003/06/29 18:43:33
Line 103  const struct kern_target kern_targets[] 
Line 103  const 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_rele  #define kernfs_create   genfs_eopnotsupp
 #define kernfs_mknod    genfs_eopnotsupp_rele  #define kernfs_mknod    genfs_eopnotsupp
 #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 118  int kernfs_write __P((void *));
Line 118  int kernfs_write __P((void *));
 #define kernfs_revoke   genfs_revoke  #define kernfs_revoke   genfs_revoke
 #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_rele  #define kernfs_remove   genfs_eopnotsupp
 int     kernfs_link     __P((void *));  int     kernfs_link     __P((void *));
 #define kernfs_rename   genfs_eopnotsupp_rele  #define kernfs_rename   genfs_eopnotsupp
 #define kernfs_mkdir    genfs_eopnotsupp_rele  #define kernfs_mkdir    genfs_eopnotsupp
 #define kernfs_rmdir    genfs_eopnotsupp_rele  #define kernfs_rmdir    genfs_eopnotsupp
 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
Line 143  int kernfs_pathconf __P((void *));
Line 143  int kernfs_pathconf __P((void *));
 #define kernfs_truncate genfs_eopnotsupp  #define kernfs_truncate genfs_eopnotsupp
 #define kernfs_update   genfs_nullop  #define kernfs_update   genfs_nullop
 #define kernfs_bwrite   genfs_eopnotsupp  #define kernfs_bwrite   genfs_eopnotsupp
   #define kernfs_putpages genfs_putpages
   
 int     kernfs_xread __P((const struct kern_target *, int, char **, int));  static int      kernfs_xread __P((const struct kern_target *, int, char **, size_t, size_t *));
 int     kernfs_xwrite __P((const struct kern_target *, char *, int));  static int      kernfs_xwrite __P((const struct kern_target *, char *, size_t));
   
 int (**kernfs_vnodeop_p) __P((void *));  int (**kernfs_vnodeop_p) __P((void *));
 const struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {  const struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {
Line 191  const struct vnodeopv_entry_desc kernfs_
Line 192  const struct vnodeopv_entry_desc kernfs_
         { &vop_truncate_desc, kernfs_truncate },        /* truncate */          { &vop_truncate_desc, kernfs_truncate },        /* truncate */
         { &vop_update_desc, kernfs_update },            /* update */          { &vop_update_desc, kernfs_update },            /* update */
         { &vop_bwrite_desc, kernfs_bwrite },            /* bwrite */          { &vop_bwrite_desc, kernfs_bwrite },            /* bwrite */
           { &vop_putpages_desc, kernfs_putpages },        /* putpages */
         { NULL, NULL }          { NULL, NULL }
 };  };
 const struct vnodeopv_desc kernfs_vnodeop_opv_desc =  const struct vnodeopv_desc kernfs_vnodeop_opv_desc =
         { &kernfs_vnodeop_p, kernfs_vnodeop_entries };          { &kernfs_vnodeop_p, kernfs_vnodeop_entries };
   
 int  static int
 kernfs_xread(kt, off, bufp, len)  kernfs_xread(kt, off, bufp, len, wrlen)
         const struct kern_target *kt;          const struct kern_target *kt;
         int off;          int off;
         char **bufp;          char **bufp;
         int len;          size_t len;
           size_t *wrlen;
 {  {
   
         switch (kt->kt_tag) {          switch (kt->kt_tag) {
Line 248  kernfs_xread(kt, off, bufp, len)
Line 251  kernfs_xread(kt, off, bufp, len)
                  * message buffer header are corrupted, but that'll cause                   * message buffer header are corrupted, but that'll cause
                  * the system to die anyway.                   * the system to die anyway.
                  */                   */
                 if (off >= msgbufp->msg_bufs)                  if (off >= msgbufp->msg_bufs) {
                           *wrlen = 0;
                         return (0);                          return (0);
                   }
                 n = msgbufp->msg_bufx + off;                  n = msgbufp->msg_bufx + off;
                 if (n >= msgbufp->msg_bufs)                  if (n >= msgbufp->msg_bufs)
                         n -= msgbufp->msg_bufs;                          n -= msgbufp->msg_bufs;
                 len = min(msgbufp->msg_bufs - n, msgbufp->msg_bufs - off);                  len = min(msgbufp->msg_bufs - n, msgbufp->msg_bufs - off);
                 *bufp = msgbufp->msg_bufc + n;                  *bufp = msgbufp->msg_bufc + n;
                 return (len);                  *wrlen = len;
                   return (0);
         }          }
   
         case KTT_HOSTNAME: {          case KTT_HOSTNAME: {
Line 279  kernfs_xread(kt, off, bufp, len)
Line 285  kernfs_xread(kt, off, bufp, len)
                 break;                  break;
   
         default:          default:
                   *wrlen = 0;
                 return (0);                  return (0);
         }          }
   
         len = strlen(*bufp);          len = strlen(*bufp);
         if (len <= off)          if (len <= off)
                 return (0);                  *wrlen = 0;
         *bufp += off;          else {
         return (len - off);                  *bufp += off;
                   *wrlen = len - off;
           }
           return (0);
 }  }
   
 int  static int
 kernfs_xwrite(kt, buf, len)  kernfs_xwrite(kt, buf, len)
         const struct kern_target *kt;          const struct kern_target *kt;
         char *buf;          char *buf;
         int len;          size_t len;
 {  {
   
         switch (kt->kt_tag) {          switch (kt->kt_tag) {
Line 302  kernfs_xwrite(kt, buf, len)
Line 312  kernfs_xwrite(kt, buf, len)
                         --len;                          --len;
                 memcpy(hostname, buf, len);                  memcpy(hostname, buf, len);
                 hostname[len] = '\0';                  hostname[len] = '\0';
                 hostnamelen = len;                  hostnamelen = (size_t) len;
                 return (0);                  return (0);
   
         default:          default:
Line 456  kernfs_getattr(v)
Line 466  kernfs_getattr(v)
         } */ *ap = v;          } */ *ap = v;
         struct vnode *vp = ap->a_vp;          struct vnode *vp = ap->a_vp;
         struct vattr *vap = ap->a_vap;          struct vattr *vap = ap->a_vap;
         struct timeval tv;  
         int error = 0;          int error = 0;
         char strbuf[KSTRING], *buf;          char strbuf[KSTRING], *buf;
   
Line 467  kernfs_getattr(v)
Line 476  kernfs_getattr(v)
         vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];          vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0];
         vap->va_size = 0;          vap->va_size = 0;
         vap->va_blocksize = DEV_BSIZE;          vap->va_blocksize = DEV_BSIZE;
         microtime(&tv);          /*
         TIMEVAL_TO_TIMESPEC(&tv, &vap->va_atime);           * Make all times be current TOD.  Avoid microtime(9), it's slow.
         vap->va_mtime = vap->va_atime;           * We don't guard the read from time(9) with splclock(9) since we
         vap->va_ctime = vap->va_ctime;           * don't actually need to be THAT sure the access is atomic.
            */
           TIMEVAL_TO_TIMESPEC(&time, &vap->va_ctime);
           vap->va_atime = vap->va_mtime = vap->va_ctime;
         vap->va_gen = 0;          vap->va_gen = 0;
         vap->va_flags = 0;          vap->va_flags = 0;
         vap->va_rdev = 0;          vap->va_rdev = 0;
Line 487  kernfs_getattr(v)
Line 499  kernfs_getattr(v)
                 vap->va_size = DEV_BSIZE;                  vap->va_size = DEV_BSIZE;
         } else {          } else {
                 const struct kern_target *kt = VTOKERN(vp)->kf_kt;                  const struct kern_target *kt = VTOKERN(vp)->kf_kt;
                 int nbytes, total;                  size_t nread, total;
 #ifdef KERNFS_DIAGNOSTIC  #ifdef KERNFS_DIAGNOSTIC
                 printf("kernfs_getattr: stat target %s\n", kt->kt_name);                  printf("kernfs_getattr: stat target %s\n", kt->kt_name);
 #endif  #endif
Line 496  kernfs_getattr(v)
Line 508  kernfs_getattr(v)
                 vap->va_nlink = 1;                  vap->va_nlink = 1;
                 vap->va_fileid = 1 + (kt - kern_targets);                  vap->va_fileid = 1 + (kt - kern_targets);
                 total = 0;                  total = 0;
                 while (buf = strbuf,                  do {
                        nbytes = kernfs_xread(kt, total, &buf, sizeof(strbuf)))                          buf = strbuf;
                         total += nbytes;                          error = kernfs_xread(kt, total, &buf,
                                   sizeof(strbuf), &nread);
                           total += nread;
                   } while (error == 0 && nread != 0);
                 vap->va_size = total;                  vap->va_size = total;
         }          }
   
Line 536  kernfs_read(v)
Line 551  kernfs_read(v)
         struct uio *uio = ap->a_uio;          struct uio *uio = ap->a_uio;
         const struct kern_target *kt;          const struct kern_target *kt;
         char strbuf[KSTRING], *buf;          char strbuf[KSTRING], *buf;
         int off, len;          off_t off;
           size_t len;
         int error;          int error;
   
         if (vp->v_type == VDIR)          if (vp->v_type == VDIR)
Line 549  kernfs_read(v)
Line 565  kernfs_read(v)
 #endif  #endif
   
         off = uio->uio_offset;          off = uio->uio_offset;
 #if 0          buf = strbuf;
         while (buf = strbuf,          if ((error = kernfs_xread(kt, off, &buf, sizeof(strbuf), &len)) == 0)
 #else                  error = uiomove(buf, len, uio);
         if (buf = strbuf,          return (error);
 #endif  
             len = kernfs_xread(kt, off, &buf, sizeof(strbuf))) {  
                 if ((error = uiomove(buf, len, uio)) != 0)  
                         return (error);  
                 off += len;  
         }  
         return (0);  
 }  }
   
 int  int

Legend:
Removed from v.1.78  
changed lines
  Added in v.1.87

CVSweb <webmaster@jp.NetBSD.org>