diff options
author | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2010-05-12 10:22:27 -0600 |
---|---|---|
committer | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2010-05-12 10:22:27 -0600 |
commit | db9986c78dc7730f3091d7780ef0ba0937183a24 (patch) | |
tree | 8d2b9a45d070524ab56ed5888d3e1a3a9ade714d /usr/src | |
parent | d34083bdb88c46438e20789b3e42044428239a21 (diff) | |
download | illumos-gate-db9986c78dc7730f3091d7780ef0ba0937183a24.tar.gz |
6950273 CIFS attributes aren't always updated when timestamps are updated
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_vnops.c | 22 | ||||
-rw-r--r-- | usr/src/uts/common/fs/zfs/zfs_znode.c | 4 |
2 files changed, 17 insertions, 9 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c index 94364987c2..40cc1787e6 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vnops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c @@ -2975,8 +2975,15 @@ top: mutex_enter(&zp->z_lock); - if (attrzp) + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, sizeof (zp->z_pflags)); + + if (attrzp) { mutex_enter(&attrzp->z_lock); + SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, + SA_ZPL_FLAGS(zfsvfs), NULL, &attrzp->z_pflags, + sizeof (attrzp->z_pflags)); + } if (mask & (AT_UID|AT_GID)) { @@ -2989,7 +2996,7 @@ top: SA_ADD_BULK_ATTR(xattr_bulk, xattr_count, SA_ZPL_UID(zfsvfs), NULL, &new_uid, sizeof (new_uid)); - attrzp->z_gid = zp->z_uid; + attrzp->z_uid = zp->z_uid; } } @@ -3048,9 +3055,8 @@ top: /* XXX - shouldn't this be done *before* the ATIME/MTIME checks? */ if (mask & AT_SIZE && !(mask & AT_MTIME)) { - if (!(mask & AT_MTIME)) - SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), - NULL, mtime, sizeof (mtime)); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), + NULL, mtime, sizeof (mtime)); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, sizeof (ctime)); zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime, @@ -3102,8 +3108,6 @@ top: if (XVA_ISSET_REQ(xvap, XAT_AV_SCANSTAMP)) ASSERT(vp->v_type == VREG); - SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, - &zp->z_pflags, sizeof (zp->z_pflags)); zfs_xvattr_set(zp, xvap, tx); } @@ -4037,13 +4041,15 @@ top: if (err == 0) { uint64_t mtime[2], ctime[2]; - sa_bulk_attr_t bulk[2]; + sa_bulk_attr_t bulk[3]; int count = 0; SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, &mtime, 16); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, &ctime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), NULL, + &zp->z_pflags, 8); zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime, B_TRUE); zfs_log_write(zfsvfs->z_log, tx, TX_WRITE, zp, off, len, 0); diff --git a/usr/src/uts/common/fs/zfs/zfs_znode.c b/usr/src/uts/common/fs/zfs/zfs_znode.c index 6d5a3f645f..24bd3ddcdd 100644 --- a/usr/src/uts/common/fs/zfs/zfs_znode.c +++ b/usr/src/uts/common/fs/zfs/zfs_znode.c @@ -1654,7 +1654,7 @@ zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log) zilog_t *zilog = zfsvfs->z_log; uint64_t mode; uint64_t mtime[2], ctime[2]; - sa_bulk_attr_t bulk[2]; + sa_bulk_attr_t bulk[3]; int count = 0; int error; @@ -1706,6 +1706,8 @@ log: SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_MTIME(zfsvfs), NULL, mtime, 16); SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_CTIME(zfsvfs), NULL, ctime, 16); + SA_ADD_BULK_ATTR(bulk, count, SA_ZPL_FLAGS(zfsvfs), + NULL, &zp->z_pflags, 8); zfs_tstamp_update_setup(zp, CONTENT_MODIFIED, mtime, ctime, B_TRUE); error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx); ASSERT(error == 0); |