} else {
allowed = get_caps_allowed_by_type(CAP_ANY);
}
+ if (inode.inline_version != CEPH_INLINE_NONE &&
+ !mdcache->mds->get_session(client)->connection->has_feature(CEPH_FEATURE_MDS_INLINE_DATA))
+ allowed &= ~(CEPH_CAP_FILE_RD | CEPH_CAP_FILE_WR);
return allowed;
}
// add in any xlocker-only caps (for locks this client is the xlocker for)
allowed |= xlocker_allowed & in->get_xlocker_mask(it->first);
+ if (in->inode.inline_version != CEPH_INLINE_NONE &&
+ !mds->get_session(it->first)->connection->has_feature(CEPH_FEATURE_MDS_INLINE_DATA))
+ allowed &= ~(CEPH_CAP_FILE_RD | CEPH_CAP_FILE_WR);
+
int pending = cap->pending();
int wanted = cap->wanted();
public:
int get_req_rate() { return req_rate; }
+ Session *get_session(client_t client) {
+ return sessionmap.get_session(entity_name_t::CLIENT(client.v));
+ }
private:
bool ms_dispatch(Message *m);
}
}
+ if (!mds->mdsmap->get_inline_data_enabled() ||
+ !mdr->session->connection->has_feature(CEPH_FEATURE_MDS_INLINE_DATA))
+ in->inode.inline_version = CEPH_INLINE_NONE;
+
mdcache->add_inode(in); // add
dout(10) << "prepare_new_inode " << *in << dendl;
return in;
reply_request(mdr, -EINVAL);
return;
}
+
+ if (cur->inode.inline_version != CEPH_INLINE_NONE &&
+ !mdr->session->connection->has_feature(CEPH_FEATURE_MDS_INLINE_DATA)) {
+ dout(7) << "old client cannot open inline data file " << *cur << dendl;
+ reply_request(mdr, -EPERM);
+ return;
+ }
// snapped data is read only
if (mdr->snapid != CEPH_NOSNAP &&