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>
OS-5291 lxbrand inotify02 LTP regression
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
OS-3294 add support for inotify
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
        
*** 19,29 ****
   * CDDL HEADER END
   */
  
  /*
   * Copyright (c) 1984, 2010, Oracle and/or its affiliates. All rights reserved.
!  * Copyright 2015, Joyent, Inc.
   */
  
  /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T     */
  /*        All Rights Reserved   */
  
--- 19,29 ----
   * CDDL HEADER END
   */
  
  /*
   * Copyright (c) 1984, 2010, Oracle and/or its affiliates. All rights reserved.
!  * Copyright 2016, Joyent, Inc.
   */
  
  /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T     */
  /*        All Rights Reserved   */
  
*** 2191,2203 ****
                  if (error) {
                          rw_enter(&ip->i_contents, RW_WRITER);
                          goto update_inode;
                  }
  
!                 if (error == 0 && vap->va_size)
                          vnevent_truncate(vp, ct);
          }
  
          if (ulp) {
                  trans_size = (int)TOP_SETATTR_SIZE(ip);
                  TRANS_BEGIN_CSYNC(ufsvfsp, issync, TOP_SETATTR, trans_size);
                  ++dotrans;
--- 2191,2208 ----
                  if (error) {
                          rw_enter(&ip->i_contents, RW_WRITER);
                          goto update_inode;
                  }
  
!                 if (error == 0) {
!                         if (vap->va_size) {
                                  vnevent_truncate(vp, ct);
+                         } else {
+                                 vnevent_resize(vp, ct);
                          }
+                 }
+         }
  
          if (ulp) {
                  trans_size = (int)TOP_SETATTR_SIZE(ip);
                  TRANS_BEGIN_CSYNC(ufsvfsp, issync, TOP_SETATTR, trans_size);
                  ++dotrans;
*** 3724,3739 ****
              DR_RENAME, cr)) == ENOENT)
                  error = 0;
  
          if (error == 0) {
                  vnevent_rename_src(ITOV(sip), sdvp, snm, ct);
!                 /*
!                  * Notify the target directory of the rename event
!                  * if source and target directories are not the same.
!                  */
!                 if (sdvp != tdvp)
!                         vnevent_rename_dest_dir(tdvp, ct);
          }
  
  errout:
          if (slot.fbp)
                  fbrelse(slot.fbp, S_OTHER);
--- 3729,3739 ----
              DR_RENAME, cr)) == ENOENT)
                  error = 0;
  
          if (error == 0) {
                  vnevent_rename_src(ITOV(sip), sdvp, snm, ct);
!                 vnevent_rename_dest_dir(tdvp, ITOV(sip), tnm, ct);
          }
  
  errout:
          if (slot.fbp)
                  fbrelse(slot.fbp, S_OTHER);
*** 4476,4487 ****
                              ULOCKFS_SPACE_MASK);
                          if (error)
                                  return (error);
                          error = ufs_freesp(vp, bfp, flag, cr);
  
!                         if (error == 0 && bfp->l_start == 0)
                                  vnevent_truncate(vp, ct);
                  } else if (cmd == F_ALLOCSP) {
                          error = ufs_lockfs_begin(ufsvfsp, &ulp,
                              ULOCKFS_FALLOCATE_MASK);
                          if (error)
                                  return (error);
--- 4476,4492 ----
                              ULOCKFS_SPACE_MASK);
                          if (error)
                                  return (error);
                          error = ufs_freesp(vp, bfp, flag, cr);
  
!                         if (error == 0) {
!                                 if (bfp->l_start == 0) {
                                          vnevent_truncate(vp, ct);
+                                 } else {
+                                         vnevent_resize(vp, ct);
+                                 }
+                         }
                  } else if (cmd == F_ALLOCSP) {
                          error = ufs_lockfs_begin(ufsvfsp, &ulp,
                              ULOCKFS_FALLOCATE_MASK);
                          if (error)
                                  return (error);