[BACK]Return to cd9660_vnops.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / fs / cd9660

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

Diff for /src/sys/fs/cd9660/cd9660_vnops.c between version 1.13 and 1.13.2.1

version 1.13, 2005/06/23 17:00:30 version 1.13.2.1, 2006/06/21 15:09:23
Line 52  __KERNEL_RCSID(0, "$NetBSD$");
Line 52  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/vnode.h>  #include <sys/vnode.h>
 #include <sys/malloc.h>  #include <sys/malloc.h>
 #include <sys/dirent.h>  #include <sys/dirent.h>
   #include <sys/kauth.h>
   
 #include <miscfs/fifofs/fifo.h>  #include <miscfs/fifofs/fifo.h>
 #include <miscfs/genfs/genfs.h>  #include <miscfs/genfs/genfs.h>
Line 80  struct isoreaddir {
Line 81  struct isoreaddir {
         int ncookies;          int ncookies;
 };  };
   
 int     iso_uiodir __P((struct isoreaddir *, struct dirent *, off_t));  int     iso_uiodir(struct isoreaddir *, struct dirent *, off_t);
 int     iso_shipdir __P((struct isoreaddir *));  int     iso_shipdir(struct isoreaddir *);
   
 #if 0  #if 0
 /*  /*
Line 91  int iso_shipdir __P((struct isoreaddir *
Line 92  int iso_shipdir __P((struct isoreaddir *
 int  int
 cd9660_mknod(ndp, vap, cred, p)  cd9660_mknod(ndp, vap, cred, p)
         struct nameidata *ndp;          struct nameidata *ndp;
         struct ucred *cred;          kauth_cred_t cred;
         struct vattr *vap;          struct vattr *vap;
         struct proc *p;          struct proc *p;
 {  {
Line 152  cd9660_access(v)
Line 153  cd9660_access(v)
         struct vop_access_args /* {          struct vop_access_args /* {
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 int  a_mode;                  int  a_mode;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
                 struct proc *a_p;                  struct lwp *a_l;
         } */ *ap = v;          } */ *ap = v;
         struct vnode *vp = ap->a_vp;          struct vnode *vp = ap->a_vp;
         struct iso_node *ip = VTOI(vp);          struct iso_node *ip = VTOI(vp);
Line 185  cd9660_getattr(v)
Line 186  cd9660_getattr(v)
         struct vop_getattr_args /* {          struct vop_getattr_args /* {
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 struct vattr *a_vap;                  struct vattr *a_vap;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
                 struct proc *a_p;                  struct lwp *a_l;
         } */ *ap = v;          } */ *ap = v;
         struct vnode *vp = ap->a_vp;          struct vnode *vp = ap->a_vp;
         struct iso_node *ip = VTOI(vp);          struct iso_node *ip = VTOI(vp);
Line 218  cd9660_getattr(v)
Line 219  cd9660_getattr(v)
                 auio.uio_iovcnt = 1;                  auio.uio_iovcnt = 1;
                 auio.uio_offset = 0;                  auio.uio_offset = 0;
                 auio.uio_rw = UIO_READ;                  auio.uio_rw = UIO_READ;
                 auio.uio_segflg = UIO_SYSSPACE;  
                 auio.uio_procp = NULL;  
                 auio.uio_resid = MAXPATHLEN;                  auio.uio_resid = MAXPATHLEN;
                   UIO_SETUP_SYSSPACE(&auio);
                 rdlnk.a_uio = &auio;                  rdlnk.a_uio = &auio;
                 rdlnk.a_vp = ap->a_vp;                  rdlnk.a_vp = ap->a_vp;
                 rdlnk.a_cred = ap->a_cred;                  rdlnk.a_cred = ap->a_cred;
Line 247  cd9660_read(v)
Line 247  cd9660_read(v)
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 struct uio *a_uio;                  struct uio *a_uio;
                 int a_ioflag;                  int a_ioflag;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
         } */ *ap = v;          } */ *ap = v;
         struct vnode *vp = ap->a_vp;          struct vnode *vp = ap->a_vp;
         struct uio *uio = ap->a_uio;          struct uio *uio = ap->a_uio;
Line 269  cd9660_read(v)
Line 269  cd9660_read(v)
         imp = ip->i_mnt;          imp = ip->i_mnt;
   
         if (vp->v_type == VREG) {          if (vp->v_type == VREG) {
                   const int advice = IO_ADV_DECODE(ap->a_ioflag);
                 error = 0;                  error = 0;
   
                 while (uio->uio_resid > 0) {                  while (uio->uio_resid > 0) {
                         void *win;                          void *win;
                         int flags;                          int flags;
Line 279  cd9660_read(v)
Line 281  cd9660_read(v)
                         if (bytelen == 0)                          if (bytelen == 0)
                                 break;                                  break;
                         win = ubc_alloc(&vp->v_uobj, uio->uio_offset,                          win = ubc_alloc(&vp->v_uobj, uio->uio_offset,
                                         &bytelen, UBC_READ);                                          &bytelen, advice, UBC_READ);
                         error = uiomove(win, bytelen, uio);                          error = uiomove(win, bytelen, uio);
                         flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0;                          flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0;
                         ubc_release(win, flags);                          ubc_release(win, flags);
Line 330  iso_uiodir(idp, dp, off)
Line 332  iso_uiodir(idp, dp, off)
         int error;          int error;
   
         dp->d_name[dp->d_namlen] = 0;          dp->d_name[dp->d_namlen] = 0;
         dp->d_reclen = DIRENT_SIZE(dp);          dp->d_reclen = _DIRENT_SIZE(dp);
   
         if (idp->uio->uio_resid < dp->d_reclen) {          if (idp->uio->uio_resid < dp->d_reclen) {
                 idp->eofflag = 0;                  idp->eofflag = 0;
Line 396  iso_shipdir(idp)
Line 398  iso_shipdir(idp)
                         }                          }
                 }                  }
         }          }
         idp->current.d_reclen = DIRENT_SIZE(&idp->current);          idp->current.d_reclen = _DIRENT_SIZE(&idp->current);
         if (assoc) {          if (assoc) {
                 idp->assocoff = idp->curroff;                  idp->assocoff = idp->curroff;
                 memcpy(&idp->assocent, &idp->current, idp->current.d_reclen);                  memcpy(&idp->assocent, &idp->current, idp->current.d_reclen);
Line 417  cd9660_readdir(v)
Line 419  cd9660_readdir(v)
         struct vop_readdir_args /* {          struct vop_readdir_args /* {
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 struct uio *a_uio;                  struct uio *a_uio;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
                 int *a_eofflag;                  int *a_eofflag;
                 off_t **a_cookies;                  off_t **a_cookies;
                 int *a_ncookies;                  int *a_ncookies;
Line 466  cd9660_readdir(v)
Line 468  cd9660_readdir(v)
         idp->curroff = uio->uio_offset;          idp->curroff = uio->uio_offset;
   
         if ((entryoffsetinblock = idp->curroff & bmask) &&          if ((entryoffsetinblock = idp->curroff & bmask) &&
             (error = VOP_BLKATOFF(vdp, (off_t)idp->curroff, NULL, &bp))) {              (error = cd9660_blkatoff(vdp, (off_t)idp->curroff, NULL, &bp))) {
                 FREE(idp, M_TEMP);                  FREE(idp, M_TEMP);
                 return (error);                  return (error);
         }          }
Line 481  cd9660_readdir(v)
Line 483  cd9660_readdir(v)
                 if ((idp->curroff & bmask) == 0) {                  if ((idp->curroff & bmask) == 0) {
                         if (bp != NULL)                          if (bp != NULL)
                                 brelse(bp);                                  brelse(bp);
                         error = VOP_BLKATOFF(vdp, (off_t)idp->curroff,                          error = cd9660_blkatoff(vdp, (off_t)idp->curroff,
                                              NULL, &bp);                                               NULL, &bp);
                         if (error)                          if (error)
                                 break;                                  break;
Line 490  cd9660_readdir(v)
Line 492  cd9660_readdir(v)
                 /*                  /*
                  * Get pointer to next entry.                   * Get pointer to next entry.
                  */                   */
                   KASSERT(bp != NULL);
                 ep = (struct iso_directory_record *)                  ep = (struct iso_directory_record *)
                         ((char *)bp->b_data + entryoffsetinblock);                          ((char *)bp->b_data + entryoffsetinblock);
   
Line 621  cd9660_readlink(v)
Line 624  cd9660_readlink(v)
         struct vop_readlink_args /* {          struct vop_readlink_args /* {
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 struct uio *a_uio;                  struct uio *a_uio;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
         } */ *ap = v;          } */ *ap = v;
         ISONODE *ip;          ISONODE *ip;
         ISODIR  *dirp;          ISODIR  *dirp;
Line 631  cd9660_readlink(v)
Line 634  cd9660_readlink(v)
         u_short symlen;          u_short symlen;
         int     error;          int     error;
         char    *symname;          char    *symname;
           boolean_t use_pnbuf;
   
         ip  = VTOI(ap->a_vp);          ip  = VTOI(ap->a_vp);
         imp = ip->i_mnt;          imp = ip->i_mnt;
Line 670  cd9660_readlink(v)
Line 674  cd9660_readlink(v)
          * Now get a buffer           * Now get a buffer
          * Abuse a namei buffer for now.           * Abuse a namei buffer for now.
          */           */
         if (uio->uio_segflg == UIO_SYSSPACE &&          use_pnbuf = !VMSPACE_IS_KERNEL_P(uio->uio_vmspace) ||
             uio->uio_iov->iov_len >= MAXPATHLEN)              uio->uio_iov->iov_len < MAXPATHLEN;
                 symname = uio->uio_iov->iov_base;          if (use_pnbuf) {
         else  
                 symname = PNBUF_GET();                  symname = PNBUF_GET();
           } else {
                   symname = uio->uio_iov->iov_base;
           }
   
         /*          /*
          * Ok, we just gathering a symbolic name in SL record.           * Ok, we just gathering a symbolic name in SL record.
          */           */
         if (cd9660_rrip_getsymname(dirp, symname, &symlen, imp) == 0) {          if (cd9660_rrip_getsymname(dirp, symname, &symlen, imp) == 0) {
                 if (uio->uio_segflg != UIO_SYSSPACE ||                  if (use_pnbuf) {
                     uio->uio_iov->iov_len < MAXPATHLEN)  
                         PNBUF_PUT(symname);                          PNBUF_PUT(symname);
                   }
                 brelse(bp);                  brelse(bp);
                 return (EINVAL);                  return (EINVAL);
         }          }
Line 694  cd9660_readlink(v)
Line 700  cd9660_readlink(v)
         /*          /*
          * return with the symbolic name to caller's.           * return with the symbolic name to caller's.
          */           */
         if (uio->uio_segflg != UIO_SYSSPACE ||          if (use_pnbuf) {
             uio->uio_iov->iov_len < MAXPATHLEN) {  
                 error = uiomove(symname, symlen, uio);                  error = uiomove(symname, symlen, uio);
                 PNBUF_PUT(symname);                  PNBUF_PUT(symname);
                 return (error);                  return (error);
Line 847  cd9660_setattr(v)
Line 852  cd9660_setattr(v)
                 struct vnodeop_desc *a_desc;                  struct vnodeop_desc *a_desc;
                 struct vnode *a_vp;                  struct vnode *a_vp;
                 struct vattr *a_vap;                  struct vattr *a_vap;
                 struct ucred *a_cred;                  kauth_cred_t a_cred;
                 struct proc *a_p;                  struct proc *a_p;
         } */ *ap = v;          } */ *ap = v;
         struct vattr *vap = ap->a_vap;          struct vattr *vap = ap->a_vap;
Line 875  cd9660_setattr(v)
Line 880  cd9660_setattr(v)
         if (vap->va_size != VNOVAL          if (vap->va_size != VNOVAL
             && vp->v_type != VCHR              && vp->v_type != VCHR
             && vp->v_type != VBLK              && vp->v_type != VBLK
             && vp->v_type != VFIFO              && vp->v_type != VFIFO)
             )  
                 return EOPNOTSUPP;                  return EOPNOTSUPP;
   
         return VOP_TRUNCATE(vp, vap->va_size, 0, ap->a_cred, ap->a_p);          return 0;
 }  }
   
 /*  /*
Line 895  cd9660_setattr(v)
Line 899  cd9660_setattr(v)
 #define cd9660_mkdir    genfs_eopnotsupp  #define cd9660_mkdir    genfs_eopnotsupp
 #define cd9660_rmdir    genfs_eopnotsupp  #define cd9660_rmdir    genfs_eopnotsupp
 #define cd9660_advlock  genfs_einval  #define cd9660_advlock  genfs_einval
 #define cd9660_valloc   genfs_eopnotsupp  
 #define cd9660_vfree    genfs_nullop  
 #define cd9660_truncate genfs_eopnotsupp  
 #define cd9660_update   genfs_nullop  
 #define cd9660_bwrite   genfs_eopnotsupp  #define cd9660_bwrite   genfs_eopnotsupp
 #define cd9660_revoke   genfs_revoke  #define cd9660_revoke   genfs_revoke
   
 /*  /*
  * Global vfs data structures for cd9660   * Global vfs data structures for cd9660
  */   */
 int (**cd9660_vnodeop_p) __P((void *));  int (**cd9660_vnodeop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {  const struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
         { &vop_default_desc, vn_default_error },          { &vop_default_desc, vn_default_error },
         { &vop_lookup_desc, cd9660_lookup },            /* lookup */          { &vop_lookup_desc, cd9660_lookup },            /* lookup */
Line 945  const struct vnodeopv_entry_desc cd9660_
Line 945  const struct vnodeopv_entry_desc cd9660_
         { &vop_islocked_desc, genfs_islocked },         /* islocked */          { &vop_islocked_desc, genfs_islocked },         /* islocked */
         { &vop_pathconf_desc, cd9660_pathconf },        /* pathconf */          { &vop_pathconf_desc, cd9660_pathconf },        /* pathconf */
         { &vop_advlock_desc, cd9660_advlock },          /* advlock */          { &vop_advlock_desc, cd9660_advlock },          /* advlock */
         { &vop_blkatoff_desc, cd9660_blkatoff },        /* blkatoff */  
         { &vop_valloc_desc, cd9660_valloc },            /* valloc */  
         { &vop_vfree_desc, cd9660_vfree },              /* vfree */  
         { &vop_truncate_desc, cd9660_truncate },        /* truncate */  
         { &vop_update_desc, cd9660_update },            /* update */  
         { &vop_bwrite_desc, vn_bwrite },                /* bwrite */          { &vop_bwrite_desc, vn_bwrite },                /* bwrite */
         { &vop_getpages_desc, genfs_getpages },         /* getpages */          { &vop_getpages_desc, genfs_getpages },         /* getpages */
         { &vop_putpages_desc, genfs_putpages },         /* putpages */          { &vop_putpages_desc, genfs_putpages },         /* putpages */
Line 961  const struct vnodeopv_desc cd9660_vnodeo
Line 956  const struct vnodeopv_desc cd9660_vnodeo
 /*  /*
  * Special device vnode ops   * Special device vnode ops
  */   */
 int (**cd9660_specop_p) __P((void *));  int (**cd9660_specop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_specop_entries[] = {  const struct vnodeopv_entry_desc cd9660_specop_entries[] = {
         { &vop_default_desc, vn_default_error },          { &vop_default_desc, vn_default_error },
         { &vop_lookup_desc, spec_lookup },              /* lookup */          { &vop_lookup_desc, spec_lookup },              /* lookup */
Line 1002  const struct vnodeopv_entry_desc cd9660_
Line 997  const struct vnodeopv_entry_desc cd9660_
         { &vop_islocked_desc, genfs_islocked },         /* islocked */          { &vop_islocked_desc, genfs_islocked },         /* islocked */
         { &vop_pathconf_desc, spec_pathconf },          /* pathconf */          { &vop_pathconf_desc, spec_pathconf },          /* pathconf */
         { &vop_advlock_desc, spec_advlock },            /* advlock */          { &vop_advlock_desc, spec_advlock },            /* advlock */
         { &vop_blkatoff_desc, spec_blkatoff },          /* blkatoff */  
         { &vop_valloc_desc, spec_valloc },              /* valloc */  
         { &vop_vfree_desc, spec_vfree },                /* vfree */  
         { &vop_truncate_desc, spec_truncate },          /* truncate */  
         { &vop_update_desc, cd9660_update },            /* update */  
         { &vop_bwrite_desc, vn_bwrite },                /* bwrite */          { &vop_bwrite_desc, vn_bwrite },                /* bwrite */
         { &vop_getpages_desc, spec_getpages },          /* getpages */          { &vop_getpages_desc, spec_getpages },          /* getpages */
         { &vop_putpages_desc, spec_putpages },          /* putpages */          { &vop_putpages_desc, spec_putpages },          /* putpages */
Line 1015  const struct vnodeopv_entry_desc cd9660_
Line 1005  const struct vnodeopv_entry_desc cd9660_
 const struct vnodeopv_desc cd9660_specop_opv_desc =  const struct vnodeopv_desc cd9660_specop_opv_desc =
         { &cd9660_specop_p, cd9660_specop_entries };          { &cd9660_specop_p, cd9660_specop_entries };
   
 int (**cd9660_fifoop_p) __P((void *));  int (**cd9660_fifoop_p)(void *);
 const struct vnodeopv_entry_desc cd9660_fifoop_entries[] = {  const struct vnodeopv_entry_desc cd9660_fifoop_entries[] = {
         { &vop_default_desc, vn_default_error },          { &vop_default_desc, vn_default_error },
         { &vop_lookup_desc, fifo_lookup },              /* lookup */          { &vop_lookup_desc, fifo_lookup },              /* lookup */
Line 1056  const struct vnodeopv_entry_desc cd9660_
Line 1046  const struct vnodeopv_entry_desc cd9660_
         { &vop_islocked_desc, genfs_islocked },         /* islocked */          { &vop_islocked_desc, genfs_islocked },         /* islocked */
         { &vop_pathconf_desc, fifo_pathconf },          /* pathconf */          { &vop_pathconf_desc, fifo_pathconf },          /* pathconf */
         { &vop_advlock_desc, fifo_advlock },            /* advlock */          { &vop_advlock_desc, fifo_advlock },            /* advlock */
         { &vop_blkatoff_desc, fifo_blkatoff },          /* blkatoff */  
         { &vop_valloc_desc, fifo_valloc },              /* valloc */  
         { &vop_vfree_desc, fifo_vfree },                /* vfree */  
         { &vop_truncate_desc, fifo_truncate },          /* truncate */  
         { &vop_update_desc, cd9660_update },            /* update */  
         { &vop_bwrite_desc, vn_bwrite },                /* bwrite */          { &vop_bwrite_desc, vn_bwrite },                /* bwrite */
         { &vop_putpages_desc, fifo_putpages },          /* putpages */          { &vop_putpages_desc, fifo_putpages },          /* putpages */
         { NULL, NULL }          { NULL, NULL }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.13.2.1

CVSweb <webmaster@jp.NetBSD.org>