]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: fix fuse ino generation for getattr
authorSage Weil <sage@newdream.net>
Fri, 18 Jul 2008 19:36:42 +0000 (12:36 -0700)
committerSage Weil <sage@newdream.net>
Fri, 18 Jul 2008 19:36:42 +0000 (12:36 -0700)
src/client/Client.cc
src/client/fuse_ll.cc

index 2684f985f4844c23d44f4d6c27408ebc083a9fd7..67dacef7077f368d9b04febb185a1ee08e51928c 100644 (file)
@@ -2416,7 +2416,8 @@ int Client::_do_lstat(const filepath &path, int mask, Inode **in, int uid, int g
 
 int Client::fill_stat(Inode *in, struct stat *st, frag_info_t *dirstat) 
 {
-  dout(10) << "fill_stat on " << in->inode.ino << " mode 0" << oct << in->inode.mode << dec
+  dout(10) << "fill_stat on " << in->inode.ino << " snap/dev" << in->snapid 
+          << " mode 0" << oct << in->inode.mode << dec
           << " mtime " << in->inode.mtime << " ctime " << in->inode.ctime << dendl;
   memset(st, 0, sizeof(struct stat));
   st->st_ino = in->inode.ino;
index ec77555a6b1a5ccb0d70e0f368a081ef0b665de6..3f59431e535efe2a51fbc0622060460b401f4951 100644 (file)
@@ -48,7 +48,9 @@ static __u64 fino_snap(__u64 fino)
 }
 static vinodeno_t fino_vino(inodeno_t fino)
 {
-  return vinodeno_t(FINO_INO(fino), fino_snap(fino));
+  vinodeno_t vino(FINO_INO(fino), fino_snap(fino));
+  //cout << "fino_vino " << fino << " -> " << vino << std::endl;
+  return vino;
 }
 
 
@@ -62,7 +64,9 @@ static __u64 make_fake_ino(inodeno_t ino, snapid_t snapid)
     stag_snap_map[stag] = snapid;
   } else 
     stag = snap_stag_map[snapid];
-  return MAKE_FINO(ino, stag);
+  inodeno_t fino = MAKE_FINO(ino, stag);
+  //cout << "make_fake_ino " << ino << "." << snapid << " -> " << fino << std::endl;
+  return fino;
 }
 
 static void ceph_ll_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
@@ -95,9 +99,10 @@ static void ceph_ll_getattr(fuse_req_t req, fuse_ino_t ino,
   
   (void) fi;
 
-  if (client->ll_getattr(fino_vino(ino), &stbuf, ctx->uid, ctx->gid) == 0) 
+  if (client->ll_getattr(fino_vino(ino), &stbuf, ctx->uid, ctx->gid) == 0) {
+    stbuf.st_ino = make_fake_ino(stbuf.st_ino, stbuf.st_dev);
     fuse_reply_attr(req, &stbuf, 0);
-  else
+  else
     fuse_reply_err(req, ENOENT);
 }