]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: drop leases for setattr
authorSage Weil <sage@newdream.net>
Mon, 31 Mar 2008 17:27:12 +0000 (10:27 -0700)
committerSage Weil <sage@newdream.net>
Mon, 31 Mar 2008 17:27:12 +0000 (10:27 -0700)
src/TODO
src/kernel/inode.c

index e6745fd67d23609f148a1049261c37d8b69d91d4..5f29b371e3ed5c95c23ea12bb4e43e54daa6f55f 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -4,17 +4,6 @@ code cleanup
   - 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!
@@ -92,6 +81,9 @@ mds mustfix
 - 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
 
index b3f7fd0dda0eb4ee077b285ef9f8aa7b7bd03920..6ad935ca13236e260ebe8ce1468302b5656db645 100644 (file)
@@ -959,6 +959,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)
                        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);
@@ -973,6 +974,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)
                        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);
@@ -998,6 +1000,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)
                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);
@@ -1019,6 +1022,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)
                        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);