}
}
-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 =
if (in->is_base()) {
if (in->is_root())
- in->inode_auth = pair<int,int>(mds->whoami, CDIR_AUTH_UNKNOWN);
+ in->inode_auth = mds_authority_t(mds->whoami, CDIR_AUTH_UNKNOWN);
else
- in->inode_auth = pair<int,int>(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;
}
}
- 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);
// 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()) {
default:
dout(10) << "got unknown lock type " << set_lock.type
<< ", dropping request!" << dendl;
- reply_request(mdr, -EOPNOTSUPP);
++ respond_to_request(mdr, -EOPNOTSUPP);
return;
}
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 &&
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;
}