]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: drop LINK_RDCACHE cap on rename source inode
authorSage Weil <sage@newdream.net>
Sat, 4 Apr 2009 04:05:14 +0000 (21:05 -0700)
committerSage Weil <sage@newdream.net>
Sat, 4 Apr 2009 04:05:14 +0000 (21:05 -0700)
This is only needed because the mds locks the srci linklock.  It has to
lock _some_ field on the source inode in order to make and propagate the
ctime change; the linklock is generally the least contended.  So humor
the mds...

src/kernel/dir.c

index 2710ee0371cccbbbdb681d2dff9870b91e83488e..8942165aab51447e916330c47f2bcb5408cba9cf 100644 (file)
@@ -652,6 +652,8 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
        if (!ceph_caps_issued_mask(ceph_inode(new_dir), CEPH_CAP_FILE_EXCL))
                ceph_release_caps(new_dir, CEPH_CAP_FILE_RDCACHE);
        ceph_mdsc_lease_release(mdsc, new_dir, new_dentry, CEPH_LOCK_DN);
+       /* release LINK_RDCACHE on source inode (mds will lock it) */
+       ceph_release_caps(old_dentry->d_inode, CEPH_CAP_LINK_RDCACHE);
        if (new_dentry->d_inode)
                drop_caps_for_unlink(new_dentry->d_inode);
        err = ceph_mdsc_do_request(mdsc, old_dir, req);