const UserPerm& perms,
InodeRef *ptarget, bool *pcreated,
mds_rank_t use_mds,
- bufferlist *pdirbl)
+ bufferlist *pdirbl,
+ size_t feature_needed)
{
int r = 0;
session = &mds_sessions.at(mds);
}
+ if (feature_needed != ULONG_MAX && !session->mds_features.test(feature_needed)) {
+ request->abort(-CEPHFS_EOPNOTSUPP);
+ break;
+ }
+
// send request.
send_request(request, session);
request->caller_cond = nullptr;
// did we get a reply?
- if (request->reply)
+ if (request->reply)
break;
}
req->set_string2(xattr_name);
bufferlist bl;
- int res = make_request(req, perms, nullptr, nullptr, rank, &bl);
+ int res = make_request(req, perms, nullptr, nullptr, rank, &bl,
+ CEPHFS_FEATURE_OP_GETVXATTR);
ldout(cct, 10) << __func__ << " result=" << res << dendl;
if (res < 0) {
+ if (res == -CEPHFS_EOPNOTSUPP) {
+ return -CEPHFS_ENODATA;
+ }
return res;
}
void dump_mds_sessions(Formatter *f, bool cap_dump=false);
int make_request(MetaRequest *req, const UserPerm& perms,
- InodeRef *ptarget = 0, bool *pcreated = 0,
- mds_rank_t use_mds=-1, bufferlist *pdirbl=0);
+ InodeRef *ptarget = 0, bool *pcreated = 0,
+ mds_rank_t use_mds=-1, bufferlist *pdirbl=0,
+ size_t feature_needed=ULONG_MAX);
void put_request(MetaRequest *request);
void unregister_request(MetaRequest *request);