From: Greg Farnum Date: Fri, 7 Nov 2014 21:15:58 +0000 (-0800) Subject: Merge remote-tracking branch 'origin/master' into wip-inode-scrub X-Git-Tag: v0.89~50^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca2e72aeb9f46bb1040184e382569d281b2393dd;p=ceph.git Merge remote-tracking branch 'origin/master' into wip-inode-scrub Conflicts: src/common/Makefile.am src/mds/Server.cc Signed-off-by: Greg Farnum --- ca2e72aeb9f46bb1040184e382569d281b2393dd diff --cc src/common/Makefile.am index f14cc4f40f86,1f6077e59d72..bb305ea48933 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@@ -204,7 -206,7 +206,8 @@@ noinst_HEADERS += common/hobject.h \ common/linux_version.h \ common/module.h \ - common/Continuation.h ++ common/Continuation.h \ + common/Readahead.h noinst_LTLIBRARIES += libcommon.la diff --cc src/mds/MDCache.cc index 2d62f4ed7105,5166abb25155..ebd175504b3a --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@@ -326,11 -326,13 +326,12 @@@ void MDCache::init_layouts( } } -CInode *MDCache::create_system_inode(inodeno_t ino, int mode) +void MDCache::create_unlinked_system_inode(CInode *in, inodeno_t ino, + int mode) const { - dout(0) << "creating system inode with ino:" << ino << dendl; - CInode *in = new CInode(this); in->inode.ino = ino; in->inode.version = 1; + in->inode.xattr_version = 1; in->inode.mode = 0500 | mode; in->inode.size = 0; in->inode.ctime = @@@ -351,20 -353,13 +352,20 @@@ if (in->is_base()) { if (in->is_root()) - in->inode_auth = pair(mds->whoami, CDIR_AUTH_UNKNOWN); + in->inode_auth = mds_authority_t(mds->whoami, CDIR_AUTH_UNKNOWN); else - in->inode_auth = pair(in->ino() - MDS_INO_MDSDIR_OFFSET, CDIR_AUTH_UNKNOWN); + in->inode_auth = mds_authority_t(mds_rank_t(in->ino() - MDS_INO_MDSDIR_OFFSET), CDIR_AUTH_UNKNOWN); in->open_snaprealm(); // empty snaprealm + assert(!in->snaprealm->parent); // created its own in->snaprealm->srnode.seq = 1; } - +} + +CInode *MDCache::create_system_inode(inodeno_t ino, int mode) +{ + dout(0) << "creating system inode with ino:" << ino << dendl; + CInode *in = new CInode(this); + create_unlinked_system_inode(in, ino, mode); add_inode(in); return in; } @@@ -8444,10 -8680,10 +8447,10 @@@ void MDCache::request_finish(MDRequestR } - void MDCache::request_forward(MDRequestRef& mdr, int who, int port) + void MDCache::request_forward(MDRequestRef& mdr, mds_rank_t who, int port) { mdr->mark_event("forwarding request"); - if (mdr->client_request->get_source().is_client()) { + if (mdr->client_request && mdr->client_request->get_source().is_client()) { dout(7) << "request_forward " << *mdr << " to mds." << who << " req " << *mdr->client_request << dendl; mds->forward_message_mds(mdr->client_request, who); diff --cc src/mds/Server.cc index 9bb274ae93f8,a0db9e97cef9..43180dd5ffab --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@@ -2601,7 -2591,7 +2609,7 @@@ void Server::handle_client_open(MDReque // regular file? /*if (!cur->inode.is_file() && !cur->inode.is_dir()) { dout(7) << "not a file or dir " << *cur << dendl; -- reply_request(mdr, -ENXIO); // FIXME what error do we want? ++ respond_to_request(mdr, -ENXIO); // FIXME what error do we want? return; }*/ if ((req->head.args.open.flags & O_DIRECTORY) && !cur->inode.is_dir()) { @@@ -3208,6 -3203,7 +3223,7 @@@ void Server::handle_client_file_setlock default: dout(10) << "got unknown lock type " << set_lock.type << ", dropping request!" << dendl; - reply_request(mdr, -EOPNOTSUPP); ++ respond_to_request(mdr, -EOPNOTSUPP); return; } @@@ -3223,11 -3220,9 +3240,9 @@@ lock_state->remove_lock(set_lock, activated_locks); cur->take_waiting(CInode::WAIT_FLOCK, waiters); } - respond_to_request(mdr, 0); - /* For now we're ignoring the activated locks because their responses - * will be sent when the lock comes up again in rotation by the MDS. - * It's a cheap hack, but it's easy to code. */ mds->queue_waiters(waiters); + - reply_request(mdr, 0); ++ respond_to_request(mdr, 0); } else { dout(10) << " lock attempt on " << set_lock << dendl; if (mdr->more()->flock_was_waiting && @@@ -3724,10 -3720,9 +3739,9 @@@ void Server::handle_set_vxattr(MDReques name.find("ceph.dir.layout") == 0) { inode_t *pi; string rest; - int64_t old_pool = -1; if (name.find("ceph.dir.layout") == 0) { if (!cur->is_dir()) { - reply_request(mdr, -EINVAL); + respond_to_request(mdr, -EINVAL); return; }