]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: choose mds based on dentry parent, if needed
authorSage Weil <sage@newdream.net>
Tue, 4 Aug 2009 00:28:03 +0000 (17:28 -0700)
committerSage Weil <sage@newdream.net>
Tue, 4 Aug 2009 22:33:36 +0000 (15:33 -0700)
src/kernel/mds_client.c

index 59ab1769590c54a02482dd8aec1071b0c16014de..10f8745f0928449b4d9f77bf7500d0eb89516609 100644 (file)
@@ -512,11 +512,19 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
                goto random;
 
        inode = 0;
-       if (req->r_inode)
+       if (req->r_inode) {
                inode = req->r_inode;
-       else if (req->r_dentry)
-               inode = req->r_dentry->d_inode;
-       dout("__choose_mds %p mode %d\n", inode, mode);
+       } else if (req->r_dentry) {
+               if (req->r_dentry->d_inode) {
+                       inode = req->r_dentry->d_inode;
+               } else {
+                       inode = req->r_dentry->d_parent->d_inode;
+                       hash = req->r_dentry->d_name.hash;
+                       is_hash = true;
+               }
+       }
+       dout("__choose_mds %p is_hash=%d (%d) mode %d\n", inode, (int)is_hash,
+            (int)hash, mode);
        if (!inode)
                goto random;
        ci = ceph_inode(inode);