X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-zfs%2Fosd_xattr.c;h=2900fb6a63c505fe0fa0b64f93beb082cec4d3f8;hb=93fe562c5dd3829939e3bc0533918f66b19776a4;hp=c80297fb36132951cf9b4b013663798d9128dd6c;hpb=a067251099b6b225f2409f680d9e4423253d0730;p=fs%2Flustre-release.git diff --git a/lustre/osd-zfs/osd_xattr.c b/lustre/osd-zfs/osd_xattr.c index c80297f..2900fb6 100644 --- a/lustre/osd-zfs/osd_xattr.c +++ b/lustre/osd-zfs/osd_xattr.c @@ -42,9 +42,6 @@ * Author: Mike Pershin */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_OSD #include @@ -440,6 +437,20 @@ int __osd_sa_xattr_set(const struct lu_env *env, struct osd_object *obj, return rc; } + /* Ensure xattr doesn't exist in ZAP */ + if (obj->oo_xattr != ZFS_NO_OBJECT) { + udmu_objset_t *uos = &osd_obj2dev(obj)->od_objset; + uint64_t xa_data_obj; + rc = -zap_lookup(uos->os, obj->oo_xattr, + name, 8, 1, &xa_data_obj); + if (rc == 0) { + rc = __osd_object_free(uos, xa_data_obj, oh->ot_tx); + if (rc == 0) + zap_remove(uos->os, obj->oo_xattr, + name, oh->ot_tx); + } + } + rc = -nvlist_add_byte_array(obj->oo_sa_xattr, name, (uchar_t *)buf->lb_buf, buf->lb_len); if (rc)