]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: set ino in request if we got an early reply
authorSage Weil <sage@newdream.net>
Fri, 9 Jan 2009 20:20:20 +0000 (12:20 -0800)
committerSage Weil <sage@newdream.net>
Fri, 9 Jan 2009 22:16:17 +0000 (14:16 -0800)
Make 'ino' a generic field so we don't have to look at the request type
when sending the message.  It'll be ignored by the MDS when it's not
relevant anyway.

src/include/ceph_fs.h
src/kernel/mds_client.c
src/mds/Server.cc

index c201bab4a328fedf6e5cab7acb16f5e382600a44..05b2f204758381f19799babc8c271934781f4ae3 100644 (file)
@@ -742,6 +742,7 @@ struct ceph_mds_request_head {
        __le64 mds_wants_replica_in_dirino;
        __le32 op;
        __le32 caller_uid, caller_gid;
+       __le64 ino;    /* use this ino for openc, mkdir, mknod, etc. */
 
        union {
                struct {
@@ -770,19 +771,13 @@ struct ceph_mds_request_head {
                struct {
                        __le32 mode;
                        __le32 rdev;
-                       __le64 ino;
                } __attribute__ ((packed)) mknod;
-               struct {
-                       __le64 ino;
-               } __attribute__ ((packed)) symlink;
                struct {
                        __le32 mode;
-                       __le64 ino;
                } __attribute__ ((packed)) mkdir;
                struct {
                        __le32 flags;
                        __le32 mode;
-                       __le64 ino;
                } __attribute__ ((packed)) open;
                struct {
                        __le64 length;
index dd2e8ab1dccbe2c2d2db3f052c849d99eecda5d8..e0d3851e05434666c3697561ba2489ffe8de1dbc 100644 (file)
@@ -1183,6 +1183,11 @@ retry:
        rhead->oldest_client_tid = cpu_to_le64(__get_oldest_tid(mdsc));
        rhead->num_fwd = cpu_to_le32(req->r_num_fwd);
 
+       if (req->r_last_inode)
+               rhead->ino = cpu_to_le64(ceph_ino(req->r_last_inode));
+       else
+               rhead->ino = 0;
+
        /* send and wait */
        mutex_unlock(&mdsc->mutex);
        dout(10, "do_request %p %lld r_expected_cap=%p\n", req, req->r_tid,
index 4ffde1ffeefc49f23cf79c9d0c51f74adc244b0c..50d62e4d6d5ec5f976baffbe3fb2940b991a6989 100644 (file)
@@ -2320,7 +2320,7 @@ void Server::handle_client_mknod(MDRequest *mdr)
   snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
   mdr->now = g_clock.real_now();
 
-  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.mknod.ino));
+  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
   assert(newi);
 
   newi->projected_parent = dn;
@@ -2370,7 +2370,7 @@ void Server::handle_client_mkdir(MDRequest *mdr)
   snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
   mdr->now = g_clock.real_now();
 
-  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.mkdir.ino));  
+  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));  
   assert(newi);
 
   // it's a directory.
@@ -2423,7 +2423,7 @@ void Server::handle_client_symlink(MDRequest *mdr)
   mdr->now = g_clock.real_now();
   snapid_t follows = dn->dir->inode->find_snaprealm()->get_newest_seq();
 
-  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.symlink.ino));
+  CInode *newi = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
   assert(newi);
 
   // it's a symlink
@@ -5068,7 +5068,7 @@ void Server::handle_client_openc(MDRequest *mdr)
   SnapRealm *realm = diri->find_snaprealm();   // use directory's realm; inode isn't attached yet.
   snapid_t follows = realm->get_newest_seq();
 
-  CInode *in = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.args.open.ino));
+  CInode *in = prepare_new_inode(mdr, dn->dir, inodeno_t(req->head.ino));
   assert(in);
   
   // it's a file.