[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.49.6.2 and 1.50

version 1.49.6.2, 2009/01/17 13:29:16 version 1.50, 2008/04/24 15:35:28
Line 344  msdosfs_setattr(v)
Line 344  msdosfs_setattr(v)
         kauth_cred_t cred = ap->a_cred;          kauth_cred_t cred = ap->a_cred;
   
 #ifdef MSDOSFS_DEBUG  #ifdef MSDOSFS_DEBUG
         printf("msdosfs_setattr(): vp %p, vap %p, cred %p\n",          printf("msdosfs_setattr(): vp %p, vap %p, cred %p, p %p\n",
             ap->a_vp, vap, cred);              ap->a_vp, vap, cred, ap->a_l);
 #endif  #endif
         /*          /*
          * Note we silently ignore uid or gid changes.           * Note we silently ignore uid or gid changes.
Line 358  msdosfs_setattr(v)
Line 358  msdosfs_setattr(v)
             (vap->va_gid != VNOVAL && vap->va_gid != pmp->pm_gid)) {              (vap->va_gid != VNOVAL && vap->va_gid != pmp->pm_gid)) {
 #ifdef MSDOSFS_DEBUG  #ifdef MSDOSFS_DEBUG
                 printf("msdosfs_setattr(): returning EINVAL\n");                  printf("msdosfs_setattr(): returning EINVAL\n");
                 printf("    va_type %d, va_nlink %x, va_fsid %"PRIx64", va_fileid %llx\n",                  printf("    va_type %d, va_nlink %x, va_fsid %lx, va_fileid %llx\n",
                     vap->va_type, vap->va_nlink, vap->va_fsid,                      vap->va_type, vap->va_nlink, vap->va_fsid,
                     (unsigned long long)vap->va_fileid);                      (unsigned long long)vap->va_fileid);
                 printf("    va_blocksize %lx, va_rdev %"PRIx64", va_bytes %"PRIx64", va_gen %lx\n",                  printf("    va_blocksize %lx, va_rdev %x, va_bytes %qx, va_gen %lx\n",
                     vap->va_blocksize, vap->va_rdev, (long long)vap->va_bytes, vap->va_gen);                      vap->va_blocksize, vap->va_rdev, (long long)vap->va_bytes, vap->va_gen);
 #endif  #endif
                 return (EINVAL);                  return (EINVAL);
Line 453  msdosfs_read(v)
Line 453  msdosfs_read(v)
                 int a_ioflag;                  int a_ioflag;
                 kauth_cred_t a_cred;                  kauth_cred_t a_cred;
         } */ *ap = v;          } */ *ap = v;
         int error = 0;          int error = 0, flags;
         int64_t diff;          int64_t diff;
         int blsize;          int blsize;
         long n;          long n;
         long on;          long on;
         daddr_t lbn;          daddr_t lbn;
           void *win;
         vsize_t bytelen;          vsize_t bytelen;
         struct buf *bp;          struct buf *bp;
         struct vnode *vp = ap->a_vp;          struct vnode *vp = ap->a_vp;
Line 486  msdosfs_read(v)
Line 487  msdosfs_read(v)
   
                         if (bytelen == 0)                          if (bytelen == 0)
                                 break;                                  break;
                         error = ubc_uiomove(&vp->v_uobj, uio, bytelen, advice,                          win = ubc_alloc(&vp->v_uobj, uio->uio_offset,
                             UBC_READ | UBC_PARTIALOK | UBC_UNMAP_FLAG(vp));                                          &bytelen, advice, UBC_READ);
                           error = uiomove(win, bytelen, uio);
                           flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0;
                           ubc_release(win, flags);
                         if (error)                          if (error)
                                 break;                                  break;
                 }                  }
Line 518  msdosfs_read(v)
Line 522  msdosfs_read(v)
                  * vnode for the directory.                   * vnode for the directory.
                  */                   */
                 error = bread(pmp->pm_devvp, de_bn2kb(pmp, lbn), blsize,                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, lbn), blsize,
                     NOCRED, 0, &bp);                      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, 0);                          brelse(bp, 0);
Line 547  msdosfs_write(v)
Line 551  msdosfs_write(v)
                 int a_ioflag;                  int a_ioflag;
                 kauth_cred_t a_cred;                  kauth_cred_t a_cred;
         } */ *ap = v;          } */ *ap = v;
         int resid, extended = 0;          int resid, flags, extended = 0;
         int error = 0;          int error = 0;
         int ioflag = ap->a_ioflag;          int ioflag = ap->a_ioflag;
         u_long osize;          u_long osize;
         u_long count;          u_long count;
           void *win;
         vsize_t bytelen;          vsize_t bytelen;
         off_t oldoff;          off_t oldoff;
         struct uio *uio = ap->a_uio;          struct uio *uio = ap->a_uio;
Line 626  msdosfs_write(v)
Line 631  msdosfs_write(v)
         if (uio->uio_offset + resid > osize) {          if (uio->uio_offset + resid > osize) {
                 count = de_clcount(pmp, uio->uio_offset + resid) -                  count = de_clcount(pmp, uio->uio_offset + resid) -
                         de_clcount(pmp, osize);                          de_clcount(pmp, osize);
                 if ((error = extendfile(dep, count, NULL, NULL, 0)))                  if ((error = extendfile(dep, count, NULL, NULL, 0)) &&
                       (error != ENOSPC || (ioflag & IO_UNIT)))
                         goto errexit;                          goto errexit;
   
                 dep->de_FileSize = uio->uio_offset + resid;                  dep->de_FileSize = uio->uio_offset + resid;
Line 639  msdosfs_write(v)
Line 645  msdosfs_write(v)
                 oldoff = uio->uio_offset;                  oldoff = uio->uio_offset;
                 bytelen = uio->uio_resid;                  bytelen = uio->uio_resid;
   
                 error = ubc_uiomove(&vp->v_uobj, uio, bytelen,                  win = ubc_alloc(&vp->v_uobj, oldoff, &bytelen, UVM_ADV_NORMAL,
                     IO_ADV_DECODE(ioflag), UBC_WRITE | UBC_UNMAP_FLAG(vp));                      UBC_WRITE);
                   error = uiomove(win, bytelen, uio);
                   flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0;
                   ubc_release(win, flags);
                 if (error)                  if (error)
                         break;                          break;
   
Line 1132  abortit:
Line 1141  abortit:
                 } else                  } else
                         bn = cntobn(pmp, cn);                          bn = cntobn(pmp, cn);
                 error = bread(pmp->pm_devvp, de_bn2kb(pmp, bn),                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, bn),
                     pmp->pm_bpcluster, NOCRED, B_MODIFY, &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, 0);                          brelse(bp, 0);
Line 1216  msdosfs_mkdir(v)
Line 1225  msdosfs_mkdir(v)
         int error;          int error;
         int bn;          int bn;
         u_long newcluster, pcl;          u_long newcluster, pcl;
         daddr_t lbn;  
         struct direntry *denp;          struct direntry *denp;
         struct msdosfsmount *pmp = pdep->de_pmp;          struct msdosfsmount *pmp = pdep->de_pmp;
         struct buf *bp;          struct buf *bp;
Line 1251  msdosfs_mkdir(v)
Line 1259  msdosfs_mkdir(v)
          * directory to be pointing at if there were a crash.           * directory to be pointing at if there were a crash.
          */           */
         bn = cntobn(pmp, newcluster);          bn = cntobn(pmp, newcluster);
         lbn = de_bn2kb(pmp, bn);  
         /* always succeeds */          /* always succeeds */
         bp = getblk(pmp->pm_devvp, lbn, 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 1549  msdosfs_readdir(v)
Line 1556  msdosfs_readdir(v)
                 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, de_bn2kb(pmp, bn), blsize,                  error = bread(pmp->pm_devvp, de_bn2kb(pmp, bn), blsize,
                     NOCRED, 0, &bp);                      NOCRED, &bp);
                 if (error) {                  if (error) {
                         brelse(bp, 0);                          brelse(bp, 0);
                         free(dirbuf, M_MSDOSFSTMP);                          free(dirbuf, M_MSDOSFSTMP);
Line 1809  msdosfs_print(v)
Line 1816  msdosfs_print(v)
         printf(          printf(
             "tag VT_MSDOSFS, startcluster %ld, dircluster %ld, diroffset %ld ",              "tag VT_MSDOSFS, startcluster %ld, dircluster %ld, diroffset %ld ",
             dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset);              dep->de_StartCluster, dep->de_dirclust, dep->de_diroffset);
         printf(" dev %llu, %llu ", (unsigned long long)major(dep->de_dev),          printf(" dev %d, %d ", major(dep->de_dev), minor(dep->de_dev));
             (unsigned long long)minor(dep->de_dev));  
         printf("\n");          printf("\n");
         return (0);          return (0);
 }  }

Legend:
Removed from v.1.49.6.2  
changed lines
  Added in v.1.50

CVSweb <webmaster@jp.NetBSD.org>