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

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

Diff for /src/sys/fs/msdosfs/msdosfs_vnops.c between version 1.30.4.1 and 1.30.4.2

version 1.30.4.1, 2006/11/18 21:39:18 version 1.30.4.2, 2007/01/12 01:04:05
Line 390  msdosfs_setattr(v)
Line 390  msdosfs_setattr(v)
                         return (EROFS);                          return (EROFS);
                 if (kauth_cred_geteuid(cred) != pmp->pm_uid &&                  if (kauth_cred_geteuid(cred) != pmp->pm_uid &&
                     (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,                      (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,
                     &ap->a_l->l_acflag)) &&                      NULL)) &&
                     ((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||                      ((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
                     (error = VOP_ACCESS(ap->a_vp, VWRITE, cred, ap->a_l))))                      (error = VOP_ACCESS(ap->a_vp, VWRITE, cred, ap->a_l))))
                         return (error);                          return (error);
Line 413  msdosfs_setattr(v)
Line 413  msdosfs_setattr(v)
                         return (EROFS);                          return (EROFS);
                 if (kauth_cred_geteuid(cred) != pmp->pm_uid &&                  if (kauth_cred_geteuid(cred) != pmp->pm_uid &&
                     (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,                      (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,
                     &ap->a_l->l_acflag)))                      NULL)))
                         return (error);                          return (error);
                 /* We ignore the read and execute bits. */                  /* We ignore the read and execute bits. */
                 if (vap->va_mode & S_IWUSR)                  if (vap->va_mode & S_IWUSR)
Line 431  msdosfs_setattr(v)
Line 431  msdosfs_setattr(v)
                         return (EROFS);                          return (EROFS);
                 if (kauth_cred_geteuid(cred) != pmp->pm_uid &&                  if (kauth_cred_geteuid(cred) != pmp->pm_uid &&
                     (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,                      (error = kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER,
                     &ap->a_l->l_acflag)))                      NULL)))
                         return (error);                          return (error);
                 if (vap->va_flags & SF_ARCHIVED)                  if (vap->va_flags & SF_ARCHIVED)
                         dep->de_Attributes &= ~ATTR_ARCHIVE;                          dep->de_Attributes &= ~ATTR_ARCHIVE;
Line 516  msdosfs_read(v)
Line 516  msdosfs_read(v)
                 if (diff < n)                  if (diff < n)
                         n = (long) diff;                          n = (long) diff;
   
                 /* convert cluster # to block # */                  /* convert cluster # to sector # */
                 error = pcbmap(dep, lbn, &lbn, 0, &blsize);                  error = pcbmap(dep, lbn, &lbn, 0, &blsize);
                 if (error)                  if (error)
                         return (error);                          return (error);
Line 526  msdosfs_read(v)
Line 526  msdosfs_read(v)
                  * do i/o with the vnode for the filesystem instead of the                   * do i/o with the vnode for the filesystem instead of the
                  * vnode for the directory.                   * vnode for the directory.
                  */                   */
                 error = bread(pmp->pm_devvp, lbn, blsize, NOCRED, &bp);                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, lbn), blsize,
                       NOCRED, &bp);
                 n = MIN(n, pmp->pm_bpcluster - bp->b_resid);                  n = MIN(n, pmp->pm_bpcluster - bp->b_resid);
                 if (error) {                  if (error) {
                         brelse(bp);                          brelse(bp);
Line 651  msdosfs_write(v)
Line 652  msdosfs_write(v)
                 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);
                 if (error) {                  if (error)
                         break;                          break;
                 }  
   
                 /*                  /*
                  * flush what we just wrote if necessary.                   * flush what we just wrote if necessary.
Line 1022  abortit:
Line 1022  abortit:
                 panic("msdosfs_rename: lost from startdir");                  panic("msdosfs_rename: lost from startdir");
         if (!newparent)          if (!newparent)
                 VOP_UNLOCK(tdvp, 0);                  VOP_UNLOCK(tdvp, 0);
         (void) relookup(fdvp, &fvp, fcnp);          vn_lock(fdvp, LK_EXCLUSIVE | LK_RETRY);
           if ((error = relookup(fdvp, &fvp, fcnp))) {
                   vput(fdvp);
                   vrele(ap->a_fvp);
                   vrele(tdvp);
                   return (error);
           }
         if (fvp == NULL) {          if (fvp == NULL) {
                 /*                  /*
                  * From name has disappeared.                   * From name has disappeared.
                  */                   */
                 if (doingdirectory)                  if (doingdirectory)
                         panic("rename: lost dir entry");                          panic("rename: lost dir entry");
                   vput(fdvp);
                 vrele(ap->a_fvp);                  vrele(ap->a_fvp);
                 if (newparent)  
                         VOP_UNLOCK(tdvp, 0);  
                 vrele(tdvp);                  vrele(tdvp);
                 return 0;                  return 0;
         }          }
Line 1120  abortit:
Line 1125  abortit:
                         panic("msdosfs_rename: updating .. in root directory?");                          panic("msdosfs_rename: updating .. in root directory?");
                 } else                  } else
                         bn = cntobn(pmp, cn);                          bn = cntobn(pmp, cn);
                 error = bread(pmp->pm_devvp, bn, pmp->pm_bpcluster,                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, bn),
                               NOCRED, &bp);                      pmp->pm_bpcluster, NOCRED, &bp);
                 if (error) {                  if (error) {
                         /* XXX should really panic here, fs is corrupt */                          /* XXX should really panic here, fs is corrupt */
                         brelse(bp);                          brelse(bp);
Line 1236  msdosfs_mkdir(v)
Line 1241  msdosfs_mkdir(v)
          */           */
         bn = cntobn(pmp, newcluster);          bn = cntobn(pmp, newcluster);
         /* always succeeds */          /* always succeeds */
         bp = getblk(pmp->pm_devvp, bn, pmp->pm_bpcluster, 0, 0);          bp = getblk(pmp->pm_devvp, de_bn2kb(pmp, bn), pmp->pm_bpcluster, 0, 0);
         memset(bp->b_data, 0, pmp->pm_bpcluster);          memset(bp->b_data, 0, pmp->pm_bpcluster);
         memcpy(bp->b_data, &dosdirtemplate, sizeof dosdirtemplate);          memcpy(bp->b_data, &dosdirtemplate, sizeof dosdirtemplate);
         denp = (struct direntry *)bp->b_data;          denp = (struct direntry *)bp->b_data;
Line 1479  msdosfs_readdir(v)
Line 1484  msdosfs_readdir(v)
         if (dep->de_StartCluster == MSDOSFSROOT          if (dep->de_StartCluster == MSDOSFSROOT
             || (FAT32(pmp) && dep->de_StartCluster == pmp->pm_rootdirblk)) {              || (FAT32(pmp) && dep->de_StartCluster == pmp->pm_rootdirblk)) {
 #if 0  #if 0
                 printf("msdosfs_readdir(): going after . or .. in root dir, offset %d\n",                  printf("msdosfs_readdir(): going after . or .. in root dir, "
                     offset);                      "offset %" PRIu64 "\n", offset);
 #endif  #endif
                 bias = 2 * sizeof(struct direntry);                  bias = 2 * sizeof(struct direntry);
                 if (offset < bias) {                  if (offset < bias) {
Line 1534  msdosfs_readdir(v)
Line 1539  msdosfs_readdir(v)
                 n = MIN(n, diff);                  n = MIN(n, diff);
                 if ((error = pcbmap(dep, lbn, &bn, &cn, &blsize)) != 0)                  if ((error = pcbmap(dep, lbn, &bn, &cn, &blsize)) != 0)
                         break;                          break;
                 error = bread(pmp->pm_devvp, bn, blsize, NOCRED, &bp);                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, bn), blsize,
                       NOCRED, &bp);
                 if (error) {                  if (error) {
                         brelse(bp);                          brelse(bp);
                         return (error);                          return (error);
Line 1696  msdosfs_bmap(v)
Line 1702  msdosfs_bmap(v)
                 int *a_runp;                  int *a_runp;
         } */ *ap = v;          } */ *ap = v;
         struct denode *dep = VTODE(ap->a_vp);          struct denode *dep = VTODE(ap->a_vp);
           int status;
   
         if (ap->a_vpp != NULL)          if (ap->a_vpp != NULL)
                 *ap->a_vpp = dep->de_devvp;                  *ap->a_vpp = dep->de_devvp;
Line 1707  msdosfs_bmap(v)
Line 1714  msdosfs_bmap(v)
                  */                   */
                 *ap->a_runp = 0;                  *ap->a_runp = 0;
         }          }
         return (pcbmap(dep, ap->a_bn, ap->a_bnp, 0, 0));          status = pcbmap(dep, ap->a_bn, ap->a_bnp, 0, 0);
           /*
            * We need to scale *ap->a_bnp by sector_size/DEV_BSIZE
            */
           *ap->a_bnp = de_bn2kb(dep->de_pmp, *ap->a_bnp);
           return status;
 }  }
   
 int  int
Line 1738  msdosfs_strategy(v)
Line 1750  msdosfs_strategy(v)
                         bp->b_blkno = -1;                          bp->b_blkno = -1;
                 if (bp->b_blkno == -1)                  if (bp->b_blkno == -1)
                         clrbuf(bp);                          clrbuf(bp);
                   else
                           bp->b_blkno = de_bn2kb(dep->de_pmp, bp->b_blkno);
         }          }
         if (bp->b_blkno == -1) {          if (bp->b_blkno == -1) {
                 biodone(bp);                  biodone(bp);

Legend:
Removed from v.1.30.4.1  
changed lines
  Added in v.1.30.4.2

CVSweb <webmaster@jp.NetBSD.org>