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-3294 add support for inotify
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

@@ -24,11 +24,11 @@
  *      Copyright (c) 1983,1984,1985,1986,1987,1988,1989 AT&T.
  *      All rights reserved.
  */
 
 /*
- * Copyright (c) 2013, Joyent, Inc. All rights reserved.
+ * Copyright (c) 2014, Joyent, Inc. All rights reserved.
  * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #include <sys/param.h>
 #include <sys/types.h>

@@ -1172,12 +1172,17 @@
         if (error)
                 return (error);
 
         error = nfssetattr(vp, vap, flags, cr);
 
-        if (error == 0 && (mask & AT_SIZE) && vap->va_size == 0)
+        if (error == 0 && (mask & AT_SIZE)) {
+                if (vap->va_size == 0) {
                 vnevent_truncate(vp, ct);
+                } else {
+                        vnevent_resize(vp, ct);
+                }
+        }
 
         return (error);
 }
 
 static int

@@ -2686,15 +2691,13 @@
 
         if (error == 0) {
                 if (nvp)
                         vnevent_rename_dest(nvp, ndvp, nnm, ct);
 
-                if (odvp != ndvp)
-                        vnevent_rename_dest_dir(ndvp, ct);
-
                 ASSERT(ovp != NULL);
                 vnevent_rename_src(ovp, odvp, onm, ct);
+                vnevent_rename_dest_dir(ndvp, ovp, nnm, ct);
         }
 
         if (nvp) {
                 VN_RELE(nvp);
         }

@@ -4618,12 +4621,17 @@
                                 return (error);
                         va.va_mask = AT_SIZE;
                         va.va_size = bfp->l_start;
                         error = nfssetattr(vp, &va, 0, cr);
 
-                        if (error == 0 && bfp->l_start == 0)
+                        if (error == 0) {
+                                if (bfp->l_start == 0) {
                                 vnevent_truncate(vp, ct);
+                                } else {
+                                        vnevent_resize(vp, ct);
+                                }
+                        }
                 } else
                         error = EINVAL;
         }
 
         return (error);