From ce45c26bc5b4adcd3f0bafbb8ea1ad63d678c6ea Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 9 Jan 2009 12:20:20 -0800 Subject: [PATCH] kclient: set ino in request if we got an early reply 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 | 7 +------ src/kernel/mds_client.c | 5 +++++ src/mds/Server.cc | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index c201bab4a328f..05b2f20475838 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -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; diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index dd2e8ab1dccbe..e0d3851e05434 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -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, diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 4ffde1ffeefc4..50d62e4d6d5ec 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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. -- 2.39.5