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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs_vnops.c
          +++ new/usr/src/uts/common/fs/nfs/nfs_vnops.c
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright (c) 1990, 2010, Oracle and/or its affiliates. All rights reserved.
  23   23   *
  24   24   *      Copyright (c) 1983,1984,1985,1986,1987,1988,1989 AT&T.
  25   25   *      All rights reserved.
  26   26   */
  27   27  
  28   28  /*
  29      - * Copyright (c) 2013, Joyent, Inc. All rights reserved.
       29 + * Copyright (c) 2014, Joyent, Inc. All rights reserved.
  30   30   * Copyright 2015 Nexenta Systems, Inc.  All rights reserved.
  31   31   */
  32   32  
  33   33  #include <sys/param.h>
  34   34  #include <sys/types.h>
  35   35  #include <sys/systm.h>
  36   36  #include <sys/cred.h>
  37   37  #include <sys/time.h>
  38   38  #include <sys/vnode.h>
  39   39  #include <sys/vfs.h>
↓ open down ↓ 1127 lines elided ↑ open up ↑
1167 1167                  return (error);
1168 1168  
1169 1169          error = secpolicy_vnode_setattr(cr, vp, vap, &va, flags, nfs_accessx,
1170 1170              vp);
1171 1171  
1172 1172          if (error)
1173 1173                  return (error);
1174 1174  
1175 1175          error = nfssetattr(vp, vap, flags, cr);
1176 1176  
1177      -        if (error == 0 && (mask & AT_SIZE) && vap->va_size == 0)
1178      -                vnevent_truncate(vp, ct);
     1177 +        if (error == 0 && (mask & AT_SIZE)) {
     1178 +                if (vap->va_size == 0) {
     1179 +                        vnevent_truncate(vp, ct);
     1180 +                } else {
     1181 +                        vnevent_resize(vp, ct);
     1182 +                }
     1183 +        }
1179 1184  
1180 1185          return (error);
1181 1186  }
1182 1187  
1183 1188  static int
1184 1189  nfssetattr(vnode_t *vp, struct vattr *vap, int flags, cred_t *cr)
1185 1190  {
1186 1191          int error;
1187 1192          uint_t mask;
1188 1193          struct nfssaargs args;
↓ open down ↓ 1492 lines elided ↑ open up ↑
2681 2686                           */
2682 2687                          if (error == ENOTEMPTY)
2683 2688                                  error = EEXIST;
2684 2689                  }
2685 2690          }
2686 2691  
2687 2692          if (error == 0) {
2688 2693                  if (nvp)
2689 2694                          vnevent_rename_dest(nvp, ndvp, nnm, ct);
2690 2695  
2691      -                if (odvp != ndvp)
2692      -                        vnevent_rename_dest_dir(ndvp, ct);
2693      -
2694 2696                  ASSERT(ovp != NULL);
2695 2697                  vnevent_rename_src(ovp, odvp, onm, ct);
     2698 +                vnevent_rename_dest_dir(ndvp, ovp, nnm, ct);
2696 2699          }
2697 2700  
2698 2701          if (nvp) {
2699 2702                  VN_RELE(nvp);
2700 2703          }
2701 2704          VN_RELE(ovp);
2702 2705  
2703 2706          nfs_rw_exit(&odrp->r_rwlock);
2704 2707          nfs_rw_exit(&ndrp->r_rwlock);
2705 2708  
↓ open down ↓ 1907 lines elided ↑ open up ↑
4613 4616                           * previous size.
4614 4617                           */
4615 4618                          va.va_mask = AT_SIZE;
4616 4619                          error = nfsgetattr(vp, &va, cr);
4617 4620                          if (error || va.va_size == bfp->l_start)
4618 4621                                  return (error);
4619 4622                          va.va_mask = AT_SIZE;
4620 4623                          va.va_size = bfp->l_start;
4621 4624                          error = nfssetattr(vp, &va, 0, cr);
4622 4625  
4623      -                        if (error == 0 && bfp->l_start == 0)
4624      -                                vnevent_truncate(vp, ct);
     4626 +                        if (error == 0) {
     4627 +                                if (bfp->l_start == 0) {
     4628 +                                        vnevent_truncate(vp, ct);
     4629 +                                } else {
     4630 +                                        vnevent_resize(vp, ct);
     4631 +                                }
     4632 +                        }
4625 4633                  } else
4626 4634                          error = EINVAL;
4627 4635          }
4628 4636  
4629 4637          return (error);
4630 4638  }
4631 4639  
4632 4640  /* ARGSUSED */
4633 4641  static int
4634 4642  nfs_realvp(vnode_t *vp, vnode_t **vpp, caller_context_t *ct)
↓ open down ↓ 462 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX