Print this page
OS-5148 ftruncate at offset should emit proper events
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
        
*** 567,579 ****
                  }
                  if (error = ud_itrunc(ip, vap->va_size, 0, cr)) {
                          goto update_inode;
                  }
  
!                 if (vap->va_size == 0)
                          vnevent_truncate(vp, ct);
          }
          /*
           * Change file access or modified times.
           */
          if (mask & (AT_ATIME|AT_MTIME)) {
                  mutex_enter(&ip->i_tlock);
--- 567,582 ----
                  }
                  if (error = ud_itrunc(ip, vap->va_size, 0, cr)) {
                          goto update_inode;
                  }
  
!                 if (vap->va_size == 0) {
                          vnevent_truncate(vp, ct);
+                 } else {
+                         vnevent_resize(vp, ct);
                  }
+         }
          /*
           * Change file access or modified times.
           */
          if (mask & (AT_ATIME|AT_MTIME)) {
                  mutex_enter(&ip->i_tlock);
*** 1647,1659 ****
          if (cmd != F_FREESP) {
                  error =  EINVAL;
          } else if ((error = convoff(vp, bfp, 0, offset)) == 0) {
                  error = ud_freesp(vp, bfp, flag, cr);
  
!                 if (error == 0 && bfp->l_start == 0)
                          vnevent_truncate(vp, ct);
          }
  
          return (error);
  }
  
  /* ARGSUSED */
--- 1650,1667 ----
          if (cmd != F_FREESP) {
                  error =  EINVAL;
          } else if ((error = convoff(vp, bfp, 0, offset)) == 0) {
                  error = ud_freesp(vp, bfp, flag, cr);
  
!                 if (error == 0) {
!                         if (bfp->l_start == 0) {
                                  vnevent_truncate(vp, ct);
+                         } else {
+                                 vnevent_resize(vp, ct);
                          }
+                 }
+         }
  
          return (error);
  }
  
  /* ARGSUSED */