Diff for /xfs-linux/xfs_vnodeops.c between versions 1.692 and 1.693

version 1.692, 2007/03/10 02:56:10 version 1.693, 2007/03/30 04:04:14
Line 133  xfs_getattr( Line 133  xfs_getattr(
         if (!(flags & ATTR_LAZY))          if (!(flags & ATTR_LAZY))
                 xfs_ilock(ip, XFS_ILOCK_SHARED);                  xfs_ilock(ip, XFS_ILOCK_SHARED);
   
         vap->va_size = ip->i_d.di_size;          vap->va_size = XFS_ISIZE(ip);
         if (vap->va_mask == XFS_AT_SIZE)          if (vap->va_mask == XFS_AT_SIZE)
                 goto all_done;                  goto all_done;
   
Line 496  xfs_setattr( Line 496  xfs_setattr(
         if (mask & XFS_AT_SIZE) {          if (mask & XFS_AT_SIZE) {
                 /* Short circuit the truncate case for zero length files */                  /* Short circuit the truncate case for zero length files */
                 if ((vap->va_size == 0) &&                  if ((vap->va_size == 0) &&
                    (ip->i_d.di_size == 0) && (ip->i_d.di_nextents == 0)) {                     (ip->i_size == 0) && (ip->i_d.di_nextents == 0)) {
                         xfs_iunlock(ip, XFS_ILOCK_EXCL);                          xfs_iunlock(ip, XFS_ILOCK_EXCL);
                         lock_flags &= ~XFS_ILOCK_EXCL;                          lock_flags &= ~XFS_ILOCK_EXCL;
                         if (mask & XFS_AT_CTIME)                          if (mask & XFS_AT_CTIME)
Line 614  xfs_setattr( Line 614  xfs_setattr(
          */           */
         if (mask & XFS_AT_SIZE) {          if (mask & XFS_AT_SIZE) {
                 code = 0;                  code = 0;
                 if ((vap->va_size > ip->i_d.di_size) &&                   if ((vap->va_size > ip->i_size) && 
                     (flags & ATTR_NOSIZETOK) == 0) {                      (flags & ATTR_NOSIZETOK) == 0) {
                         code = xfs_igrow_start(ip, vap->va_size, credp);                          code = xfs_igrow_start(ip, vap->va_size, credp);
                 }                  }
Line 654  xfs_setattr( Line 654  xfs_setattr(
          * Truncate file.  Must have write permission and not be a directory.           * Truncate file.  Must have write permission and not be a directory.
          */           */
         if (mask & XFS_AT_SIZE) {          if (mask & XFS_AT_SIZE) {
                 if (vap->va_size > ip->i_d.di_size) {                  if (vap->va_size > ip->i_size) {
                         xfs_igrow_finish(tp, ip, vap->va_size,                          xfs_igrow_finish(tp, ip, vap->va_size,
                             !(flags & ATTR_DMI));                              !(flags & ATTR_DMI));
                 } else if ((vap->va_size <= ip->i_d.di_size) ||                  } else if ((vap->va_size <= ip->i_size) ||
                            ((vap->va_size == 0) && ip->i_d.di_nextents)) {                             ((vap->va_size == 0) && ip->i_d.di_nextents)) {
                         /*                          /*
                          * signal a sync transaction unless                           * signal a sync transaction unless
Line 1221  xfs_inactive_free_eofblocks( Line 1221  xfs_inactive_free_eofblocks(
          * Figure out if there are any blocks beyond the end           * Figure out if there are any blocks beyond the end
          * of the file.  If not, then there is nothing to do.           * of the file.  If not, then there is nothing to do.
          */           */
         end_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)ip->i_d.di_size));          end_fsb = XFS_B_TO_FSB(mp, ((xfs_ufsize_t)ip->i_size));
         last_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_MAXIOFFSET(mp));          last_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_MAXIOFFSET(mp));
         map_len = last_fsb - end_fsb;          map_len = last_fsb - end_fsb;
         if (map_len <= 0)          if (map_len <= 0)
Line 1258  xfs_inactive_free_eofblocks( Line 1258  xfs_inactive_free_eofblocks(
                  */                   */
                 xfs_ilock(ip, XFS_IOLOCK_EXCL);                  xfs_ilock(ip, XFS_IOLOCK_EXCL);
                 error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE,                  error = xfs_itruncate_start(ip, XFS_ITRUNC_DEFINITE,
                                     ip->i_d.di_size);                                      ip->i_size);
                 if (error) {                  if (error) {
                         xfs_iunlock(ip, XFS_IOLOCK_EXCL);                          xfs_iunlock(ip, XFS_IOLOCK_EXCL);
                         return error;                          return error;
Line 1282  xfs_inactive_free_eofblocks( Line 1282  xfs_inactive_free_eofblocks(
                 xfs_trans_ihold(tp, ip);                  xfs_trans_ihold(tp, ip);
   
                 error = xfs_itruncate_finish(&tp, ip,                  error = xfs_itruncate_finish(&tp, ip,
                                              ip->i_d.di_size,                                               ip->i_size,
                                              XFS_DATA_FORK,                                               XFS_DATA_FORK,
                                              0);                                               0);
                 /*                  /*
Line 1568  xfs_release( Line 1568  xfs_release(
   
         if (ip->i_d.di_nlink != 0) {          if (ip->i_d.di_nlink != 0) {
                 if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) &&                  if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) &&
                      ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0 ||                       ((ip->i_size > 0) || (VN_CACHED(vp) > 0 ||
                        ip->i_delayed_blks > 0)) &&                         ip->i_delayed_blks > 0)) &&
                      (ip->i_df.if_flags & XFS_IFEXTENTS))  &&                       (ip->i_df.if_flags & XFS_IFEXTENTS))  &&
                     (!(ip->i_d.di_flags &                      (!(ip->i_d.di_flags &
Line 1629  xfs_inactive( Line 1629  xfs_inactive(
          * only one with a reference to the inode.           * only one with a reference to the inode.
          */           */
         truncate = ((ip->i_d.di_nlink == 0) &&          truncate = ((ip->i_d.di_nlink == 0) &&
             ((ip->i_d.di_size != 0) || (ip->i_d.di_nextents > 0) ||              ((ip->i_d.di_size != 0) || (ip->i_size != 0) ||
              (ip->i_delayed_blks > 0)) &&               (ip->i_d.di_nextents > 0) || (ip->i_delayed_blks > 0)) &&
             ((ip->i_d.di_mode & S_IFMT) == S_IFREG));              ((ip->i_d.di_mode & S_IFMT) == S_IFREG));
   
         mp = ip->i_mount;          mp = ip->i_mount;
Line 1648  xfs_inactive( Line 1648  xfs_inactive(
   
         if (ip->i_d.di_nlink != 0) {          if (ip->i_d.di_nlink != 0) {
                 if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) &&                  if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) &&
                      ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0 ||                       ((ip->i_size > 0) || (VN_CACHED(vp) > 0 ||
                        ip->i_delayed_blks > 0)) &&                         ip->i_delayed_blks > 0)) &&
                       (ip->i_df.if_flags & XFS_IFEXTENTS) &&                        (ip->i_df.if_flags & XFS_IFEXTENTS) &&
                      (!(ip->i_d.di_flags &                       (!(ip->i_d.di_flags &
Line 4055  xfs_alloc_file_space( Line 4055  xfs_alloc_file_space(
         allocatesize_fsb = XFS_B_TO_FSB(mp, count);          allocatesize_fsb = XFS_B_TO_FSB(mp, count);
   
         /*      Generate a DMAPI event if needed.       */          /*      Generate a DMAPI event if needed.       */
         if (alloc_type != 0 && offset < ip->i_d.di_size &&          if (alloc_type != 0 && offset < ip->i_size &&
                         (attr_flags&ATTR_DMI) == 0  &&                          (attr_flags&ATTR_DMI) == 0  &&
                         DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) {                          DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) {
                 xfs_off_t           end_dmi_offset;                  xfs_off_t           end_dmi_offset;
   
                 end_dmi_offset = offset+len;                  end_dmi_offset = offset+len;
                 if (end_dmi_offset > ip->i_d.di_size)                  if (end_dmi_offset > ip->i_size)
                         end_dmi_offset = ip->i_d.di_size;                          end_dmi_offset = ip->i_size;
                 error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, XFS_ITOV(ip),                  error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, XFS_ITOV(ip),
                         offset, end_dmi_offset - offset,                          offset, end_dmi_offset - offset,
                         0, NULL);                          0, NULL);
Line 4318  xfs_free_file_space( Line 4318  xfs_free_file_space(
         end_dmi_offset = offset + len;          end_dmi_offset = offset + len;
         endoffset_fsb = XFS_B_TO_FSBT(mp, end_dmi_offset);          endoffset_fsb = XFS_B_TO_FSBT(mp, end_dmi_offset);
   
         if (offset < ip->i_d.di_size &&          if (offset < ip->i_size &&
             (attr_flags & ATTR_DMI) == 0 &&              (attr_flags & ATTR_DMI) == 0 &&
             DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) {              DM_EVENT_ENABLED(XFS_MTOVFS(mp), ip, DM_EVENT_WRITE)) {
                 if (end_dmi_offset > ip->i_d.di_size)                  if (end_dmi_offset > ip->i_size)
                         end_dmi_offset = ip->i_d.di_size;                          end_dmi_offset = ip->i_size;
                 error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, vp,                  error = XFS_SEND_DATA(mp, DM_EVENT_WRITE, vp,
                                 offset, end_dmi_offset - offset,                                  offset, end_dmi_offset - offset,
                                 AT_DELAY_FLAG(attr_flags), NULL);                                  AT_DELAY_FLAG(attr_flags), NULL);
Line 4541  xfs_change_file_space( Line 4541  xfs_change_file_space(
                 bf->l_start += offset;                  bf->l_start += offset;
                 break;                  break;
         case 2: /*SEEK_END*/          case 2: /*SEEK_END*/
                 bf->l_start += ip->i_d.di_size;                  bf->l_start += ip->i_size;
                 break;                  break;
         default:          default:
                 return XFS_ERROR(EINVAL);                  return XFS_ERROR(EINVAL);
Line 4558  xfs_change_file_space( Line 4558  xfs_change_file_space(
         bf->l_whence = 0;          bf->l_whence = 0;
   
         startoffset = bf->l_start;          startoffset = bf->l_start;
         fsize = ip->i_d.di_size;          fsize = ip->i_size;
   
         /*          /*
          * XFS_IOC_RESVSP and XFS_IOC_UNRESVSP will reserve or unreserve           * XFS_IOC_RESVSP and XFS_IOC_UNRESVSP will reserve or unreserve

Removed from v.1.692  
changed lines
  Added in v.1.693


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>