- probably kill base case in encoder.h, replace with int types, with appropriate swabbing?
- addr=?
-client leases
-- lease length heuristics
- - mds lock last_change stamp?
-- client: preemptively release lease on dentry we are unlinking, renaming from/to, etc.
- - ICONTENT on file open
- - DN on unlink, rename
- - IAUTH on setattr
- - ICONTENT on utimes
- - or inode fields we are chmodding, etc.
-- lease renewals (to avoid blocking client ops?)
-
userspace client
- validate dn leases
- clean up ll_ interface, now that we have leases!
- rerun destro trace against latest, with various journal lengths
mds
+- lease length heuristics
+ - mds lock last_change stamp?
+
- fix file_data_version
- on recovery, validate file sizes when max_size > size
reqh->args.chown.gid = cpu_to_le32(attr->ia_gid);
else
reqh->args.chown.gid = cpu_to_le32(-1);
+ ceph_mdsc_lease_release(mdsc, inode, 0, CEPH_LOCK_IAUTH);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "chown result %d\n", err);
return PTR_ERR(req);
reqh = req->r_request->front.iov_base;
reqh->args.chmod.mode = cpu_to_le32(attr->ia_mode);
+ ceph_mdsc_lease_release(mdsc, inode, 0, CEPH_LOCK_IAUTH);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "chmod result %d\n", err);
reqh = req->r_request->front.iov_base;
ceph_encode_timespec(&reqh->args.utime.mtime, &attr->ia_mtime);
ceph_encode_timespec(&reqh->args.utime.atime, &attr->ia_atime);
+ ceph_mdsc_lease_release(mdsc, inode, 0, CEPH_LOCK_ICONTENT);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "utime result %d\n", err);
return PTR_ERR(req);
reqh = req->r_request->front.iov_base;
reqh->args.truncate.length = cpu_to_le64(attr->ia_size);
+ ceph_mdsc_lease_release(mdsc, inode, 0, CEPH_LOCK_ICONTENT);
err = ceph_mdsc_do_request(mdsc, req);
ceph_mdsc_put_request(req);
dout(10, "truncate result %d\n", err);