if (unlikely(obj->opo_non_exist))
RETURN(-ENOENT);
- oxe = osp_oac_xattr_find(obj, name, false);
- if (oxe != NULL) {
- spin_lock(&obj->opo_lock);
- if (oxe->oxe_ready) {
- if (!oxe->oxe_exist)
- GOTO(unlock, rc = -ENODATA);
+ /* Only cache xattr for OST object */
+ if (!osp->opd_connect_mdt) {
+ oxe = osp_oac_xattr_find(obj, name, false);
+ if (oxe != NULL) {
+ spin_lock(&obj->opo_lock);
+ if (oxe->oxe_ready) {
+ if (!oxe->oxe_exist)
+ GOTO(unlock, rc = -ENODATA);
- if (buf->lb_buf == NULL)
- GOTO(unlock, rc = oxe->oxe_vallen);
+ if (buf->lb_buf == NULL)
+ GOTO(unlock, rc = oxe->oxe_vallen);
- if (buf->lb_len < oxe->oxe_vallen)
- GOTO(unlock, rc = -ERANGE);
+ if (buf->lb_len < oxe->oxe_vallen)
+ GOTO(unlock, rc = -ERANGE);
- memcpy(buf->lb_buf, oxe->oxe_value, oxe->oxe_vallen);
+ memcpy(buf->lb_buf, oxe->oxe_value,
+ oxe->oxe_vallen);
- GOTO(unlock, rc = oxe->oxe_vallen);
+ GOTO(unlock, rc = oxe->oxe_vallen);
unlock:
- spin_unlock(&obj->opo_lock);
- osp_oac_xattr_put(oxe);
+ spin_unlock(&obj->opo_lock);
+ osp_oac_xattr_put(oxe);
- return rc;
+ return rc;
+ }
+ spin_unlock(&obj->opo_lock);
}
- spin_unlock(&obj->opo_lock);
}
-
update = osp_update_request_create(dev);
if (IS_ERR(update))
GOTO(out, rc = PTR_ERR(update));
memcpy(buf->lb_buf, rbuf->lb_buf, rbuf->lb_len);
rc = rbuf->lb_len;
- if (obj->opo_ooa == NULL)
+ if (obj->opo_ooa == NULL || osp->opd_connect_mdt)
GOTO(out, rc);
if (oxe == NULL) {
struct thandle *th)
{
struct osp_object *o = dt2osp_obj(dt);
+ struct osp_device *osp = lu2osp_dev(dt->do_lu.lo_dev);
struct osp_update_request *update;
struct osp_xattr_entry *oxe;
int rc;
rc = osp_update_rpc_pack(env, xattr_set, update, OUT_XATTR_SET,
lu_object_fid(&dt->do_lu), buf, name, fl);
- if (rc != 0 || o->opo_ooa == NULL)
+ if (rc != 0 || o->opo_ooa == NULL || osp->opd_connect_mdt)
RETURN(rc);
oxe = osp_oac_xattr_find_or_add(o, name, buf->lb_len);