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-3462 rename on NFSv4 filesystem induces panic
OS-3294 add support for inotify
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
@@ -32,11 +32,11 @@
* Copyright 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.
*/
#include <sys/param.h>
#include <sys/types.h>
#include <sys/systm.h>
@@ -3737,12 +3737,17 @@
* to setattr (e.g. basic without chmod) then we will
* need to add a check here before calling the server.
*/
error = nfs4setattr(vp, vap, flags, cr, NULL);
- if (error == 0 && (vap->va_mask & AT_SIZE) && vap->va_size == 0)
+ if (error == 0 && (vap->va_mask & AT_SIZE)) {
+ if (vap->va_size == 0) {
vnevent_truncate(vp, ct);
+ } else {
+ vnevent_resize(vp, ct);
+ }
+ }
return (error);
}
/*
@@ -8061,12 +8066,13 @@
/*
* Notify the rename vnevents to source vnode, and to the target
* vnode if it already existed.
*/
if (error == 0) {
- vnode_t *tvp;
+ vnode_t *tvp, *tovp;
rnode4_t *trp;
+
/*
* Notify the vnode. Each links is represented by
* a different vnode, in nfsv4.
*/
if (nvp) {
@@ -8075,27 +8081,24 @@
if (IS_SHADOW(nvp, trp))
tvp = RTOV4(trp);
vnevent_rename_dest(tvp, ndvp, nnm, ct);
}
- /*
- * if the source and destination directory are not the
- * same notify the destination directory.
- */
- if (VTOR4(odvp) != VTOR4(ndvp)) {
+ trp = VTOR4(ovp);
+ tovp = ovp;
+ if (IS_SHADOW(ovp, trp))
+ tovp = RTOV4(trp);
+
+ vnevent_rename_src(tovp, odvp, onm, ct);
+
trp = VTOR4(ndvp);
tvp = ndvp;
+
if (IS_SHADOW(ndvp, trp))
tvp = RTOV4(trp);
- vnevent_rename_dest_dir(tvp, ct);
- }
- trp = VTOR4(ovp);
- tvp = ovp;
- if (IS_SHADOW(ovp, trp))
- tvp = RTOV4(trp);
- vnevent_rename_src(tvp, odvp, onm, ct);
+ vnevent_rename_dest_dir(tvp, tovp, nnm, ct);
}
if (nvp) {
VN_RELE(nvp);
}
@@ -11000,12 +11003,17 @@
va.va_mask = AT_SIZE;
va.va_size = bfp->l_start;
error = nfs4setattr(vp, &va, 0, cr, NULL);
- 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);