goto force_request;
}
+ if (uid < 0) {
+ uid = geteuid();
+ gid = getegid();
+ }
+
if (!mask) {
// caller just needs us to bump the ctime
in->ctime = ceph_clock_now(cct);
+ in->cap_dirtier_uid = uid;
+ in->cap_dirtier_gid = gid;
if (issued & CEPH_CAP_AUTH_EXCL)
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
else if (issued & CEPH_CAP_FILE_EXCL)
if (in->caps_issued_mask(CEPH_CAP_AUTH_EXCL)) {
if (mask & CEPH_SETATTR_MODE) {
in->ctime = ceph_clock_now(cct);
+ in->cap_dirtier_uid = uid;
+ in->cap_dirtier_gid = gid;
in->mode = (in->mode & ~07777) | (attr->st_mode & 07777);
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_MODE;
}
if (mask & CEPH_SETATTR_UID) {
in->ctime = ceph_clock_now(cct);
+ in->cap_dirtier_uid = uid;
+ in->cap_dirtier_gid = gid;
in->uid = attr->st_uid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_UID;
}
if (mask & CEPH_SETATTR_GID) {
in->ctime = ceph_clock_now(cct);
+ in->cap_dirtier_uid = uid;
+ in->cap_dirtier_gid = gid;
in->gid = attr->st_gid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_GID;
if (mask & CEPH_SETATTR_ATIME)
in->atime = utime_t(stat_get_atime_sec(attr), stat_get_atime_nsec(attr));
in->ctime = ceph_clock_now(cct);
+ in->cap_dirtier_uid = uid;
+ in->cap_dirtier_gid = gid;
in->time_warp_seq++;
mark_caps_dirty(in, CEPH_CAP_FILE_EXCL);
mask &= ~(CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME);