[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.79 and 1.79.8.3

version 1.79, 2001/12/06 04:27:42 version 1.79.8.3, 2002/08/29 05:23:22
Line 145  int kernfs_pathconf __P((void *));
Line 145  int kernfs_pathconf __P((void *));
 #define kernfs_bwrite   genfs_eopnotsupp  #define kernfs_bwrite   genfs_eopnotsupp
 #define kernfs_putpages genfs_putpages  #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 198  const struct vnodeopv_entry_desc kernfs_
Line 198  const struct vnodeopv_entry_desc kernfs_
 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 250  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 281  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 304  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 458  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 469  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 489  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 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 497  kernfs_getattr(v)
Line 507  kernfs_getattr(v)
                 vap->va_mode = kt->kt_mode;                  vap->va_mode = kt->kt_mode;
                 vap->va_nlink = 1;                  vap->va_nlink = 1;
                 vap->va_fileid = 1 + (kt - kern_targets);                  vap->va_fileid = 1 + (kt - kern_targets);
                 total = 0;                  buf = strbuf;
                 while (buf = strbuf,                  if (0 == (error = kernfs_xread(kt, 0, &buf,
                        nbytes = kernfs_xread(kt, total, &buf, sizeof(strbuf)))                                  sizeof(strbuf), &total)))
                         total += nbytes;                          vap->va_size = total;
                 vap->va_size = total;  
         }          }
   
 #ifdef KERNFS_DIAGNOSTIC  #ifdef KERNFS_DIAGNOSTIC
Line 538  kernfs_read(v)
Line 547  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 551  kernfs_read(v)
Line 561  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.79  
changed lines
  Added in v.1.79.8.3

CVSweb <webmaster@jp.NetBSD.org>