[BACK]Return to ufs_lookup.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / ufs / ufs

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

Diff for /src/sys/ufs/ufs/ufs_lookup.c between version 1.47.2.1 and 1.47.2.2

version 1.47.2.1, 2003/07/02 15:27:27 version 1.47.2.2, 2004/08/03 10:57:00
Line 17 
Line 17 
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the   *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.   *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software   * 3. Neither the name of the University nor the names of its contributors
  *    must display the following acknowledgement:  
  *      This product includes software developed by the University of  
  *      California, Berkeley and its contributors.  
  * 4. Neither the name of the University nor the names of its contributors  
  *    may be used to endorse or promote products derived from this software   *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.   *    without specific prior written permission.
  *   *
Line 199  ufs_lookup(v)
Line 195  ufs_lookup(v)
          * profiling time and hence has been removed in the interest           * profiling time and hence has been removed in the interest
          * of simplicity.           * of simplicity.
          */           */
         bmask = VFSTOUFS(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1;          bmask = vdp->v_mount->mnt_stat.f_iosize - 1;
         if (nameiop != LOOKUP || dp->i_diroff == 0 ||          if (nameiop != LOOKUP || dp->i_diroff == 0 ||
             dp->i_diroff >= dp->i_size) {              dp->i_diroff >= dp->i_size) {
                 entryoffsetinblock = 0;                  entryoffsetinblock = 0;
Line 219  ufs_lookup(v)
Line 215  ufs_lookup(v)
   
 searchloop:  searchloop:
         while (dp->i_offset < endsearch) {          while (dp->i_offset < endsearch) {
                   if (curcpu()->ci_schedstate.spc_flags & SPCF_SHOULDYIELD)
                           preempt(1);
                 /*                  /*
                  * If necessary, get the next directory block.                   * If necessary, get the next directory block.
                  */                   */
Line 296  searchloop:
Line 294  searchloop:
                  */                   */
                 if (ep->d_ino) {                  if (ep->d_ino) {
 #if (BYTE_ORDER == LITTLE_ENDIAN)  #if (BYTE_ORDER == LITTLE_ENDIAN)
                                 if (vdp->v_mount->mnt_maxsymlinklen > 0 ||                          if (vdp->v_mount->mnt_maxsymlinklen > 0 ||
                                     needswap != 0)                              needswap != 0)
                                         namlen = ep->d_namlen;                                  namlen = ep->d_namlen;
                                 else                          else
                                         namlen = ep->d_type;                                  namlen = ep->d_type;
 #else  #else
                                 if (vdp->v_mount->mnt_maxsymlinklen <= 0                          if (vdp->v_mount->mnt_maxsymlinklen <= 0
                                     && needswap != 0)                              && needswap != 0)
                                         namlen = ep->d_type;                                  namlen = ep->d_type;
                                 else                          else
                                 namlen = ep->d_namlen;                                  namlen = ep->d_namlen;
 #endif  #endif
                         if (namlen == cnp->cn_namelen &&                          if (namlen == cnp->cn_namelen &&
Line 411  notfound:
Line 409  notfound:
                                 enduseful = slotoffset + slotsize;                                  enduseful = slotoffset + slotsize;
                 }                  }
                 dp->i_endoff = roundup(enduseful, dirblksiz);                  dp->i_endoff = roundup(enduseful, dirblksiz);
   #if 0 /* commented out by dbj. none of the on disk fields changed */
                 dp->i_flag |= IN_CHANGE | IN_UPDATE;                  dp->i_flag |= IN_CHANGE | IN_UPDATE;
   #endif
                 /*                  /*
                  * We return with the directory locked, so that                   * We return with the directory locked, so that
                  * the parameters we set up above will still be                   * the parameters we set up above will still be
Line 621  ufs_dirbad(ip, offset, how)
Line 621  ufs_dirbad(ip, offset, how)
         mp = ITOV(ip)->v_mount;          mp = ITOV(ip)->v_mount;
         printf("%s: bad dir ino %d at offset %d: %s\n",          printf("%s: bad dir ino %d at offset %d: %s\n",
             mp->mnt_stat.f_mntonname, ip->i_number, offset, how);              mp->mnt_stat.f_mntonname, ip->i_number, offset, how);
         if ((mp->mnt_stat.f_flags & MNT_RDONLY) == 0)          if ((mp->mnt_stat.f_flag & MNT_RDONLY) == 0)
                 panic("bad dir");                  panic("bad dir");
 }  }
   
Line 704  ufs_makedirentry(ip, cnp, newdirp)
Line 704  ufs_makedirentry(ip, cnp, newdirp)
 #endif  #endif
         newdirp->d_ino = ip->i_number;          newdirp->d_ino = ip->i_number;
         newdirp->d_namlen = cnp->cn_namelen;          newdirp->d_namlen = cnp->cn_namelen;
         memcpy(newdirp->d_name, cnp->cn_nameptr, (unsigned)cnp->cn_namelen + 1);          memcpy(newdirp->d_name, cnp->cn_nameptr, (size_t)cnp->cn_namelen);
           newdirp->d_name[cnp->cn_namelen] = '\0';
         if (ITOV(ip)->v_mount->mnt_maxsymlinklen > 0)          if (ITOV(ip)->v_mount->mnt_maxsymlinklen > 0)
                 newdirp->d_type = IFTODT(ip->i_mode);                  newdirp->d_type = IFTODT(ip->i_mode);
         else {          else {
Line 858  ufs_direnter(dvp, tvp, dirp, cnp, newdir
Line 859  ufs_direnter(dvp, tvp, dirp, cnp, newdir
         if (dp->i_offset + dp->i_count > dp->i_size) {          if (dp->i_offset + dp->i_count > dp->i_size) {
                 dp->i_size = dp->i_offset + dp->i_count;                  dp->i_size = dp->i_offset + dp->i_count;
                 DIP_ASSIGN(dp, size, dp->i_size);                  DIP_ASSIGN(dp, size, dp->i_size);
                   dp->i_flag |= IN_CHANGE | IN_UPDATE;
         }          }
         /*          /*
          * Get the block containing the space for the new directory entry.           * Get the block containing the space for the new directory entry.
Line 944  ufs_direnter(dvp, tvp, dirp, cnp, newdir
Line 946  ufs_direnter(dvp, tvp, dirp, cnp, newdir
          * lock on the newly entered node.           * lock on the newly entered node.
          */           */
         if (error == 0 && dp->i_endoff && dp->i_endoff < dp->i_size) {          if (error == 0 && dp->i_endoff && dp->i_endoff < dp->i_size) {
                 if (tvp != NULL)                  if (DOINGSOFTDEP(dvp) && (tvp != NULL))
                         VOP_UNLOCK(tvp, 0);                          VOP_UNLOCK(tvp, 0);
                 (void) VOP_TRUNCATE(dvp, (off_t)dp->i_endoff, IO_SYNC, cr, l);                  (void) VOP_TRUNCATE(dvp, (off_t)dp->i_endoff, IO_SYNC, cr, l);
                 if (tvp != NULL)                  if (DOINGSOFTDEP(dvp) && (tvp != NULL))
                         vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY);                          vn_lock(tvp, LK_EXCLUSIVE | LK_RETRY);
         }          }
         return (error);          return (error);
Line 1030  out:
Line 1032  out:
                 error = VOP_BWRITE(bp);                  error = VOP_BWRITE(bp);
         }          }
         dp->i_flag |= IN_CHANGE | IN_UPDATE;          dp->i_flag |= IN_CHANGE | IN_UPDATE;
           /*
            * If the last named reference to a snapshot goes away,
            * drop its snapshot reference so that it will be reclaimed
            * when last open reference goes away.
            */
           if (ip != 0 && (ip->i_flags & SF_SNAPSHOT) != 0 &&
               ip->i_ffs_effnlink == 0)
                   ffs_snapgone(ip);
         return (error);          return (error);
 }  }
   
Line 1039  out:
Line 1049  out:
  * set up by a call to namei.   * set up by a call to namei.
  */   */
 int  int
 ufs_dirrewrite(dp, oip, newinum, newtype, isrmdir)  ufs_dirrewrite(dp, oip, newinum, newtype, isrmdir, iflags)
         struct inode *dp, *oip;          struct inode *dp, *oip;
         ino_t newinum;          ino_t newinum;
         int newtype;          int newtype;
         int isrmdir;          int isrmdir;
           int iflags;
 {  {
         struct buf *bp;          struct buf *bp;
         struct direct *ep;          struct direct *ep;
Line 1067  ufs_dirrewrite(dp, oip, newinum, newtype
Line 1078  ufs_dirrewrite(dp, oip, newinum, newtype
                 oip->i_flag |= IN_CHANGE;                  oip->i_flag |= IN_CHANGE;
                 error = VOP_BWRITE(bp);                  error = VOP_BWRITE(bp);
         }          }
         dp->i_flag |= IN_CHANGE | IN_UPDATE;          dp->i_flag |= iflags;
           /*
            * If the last named reference to a snapshot goes away,
            * drop its snapshot reference so that it will be reclaimed
            * when last open reference goes away.
            */
           if ((oip->i_flags & SF_SNAPSHOT) != 0 && oip->i_ffs_effnlink == 0)
                   ffs_snapgone(oip);
         return (error);          return (error);
 }  }
   

Legend:
Removed from v.1.47.2.1  
changed lines
  Added in v.1.47.2.2

CVSweb <webmaster@jp.NetBSD.org>