* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2014, Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
{
int rc;
+ if (unlikely(!dt_object_exists(&obj->oo_dt) || obj->oo_destroyed))
+ return -ENOENT;
+
/* check SA_ZPL_DXATTR first then fallback to directory xattr */
rc = __osd_sa_xattr_get(env, obj, buf, name, sizep);
if (rc != -ENOENT)
LASSERT(obj->oo_db != NULL);
LASSERT(osd_invariant(obj));
- LASSERT(dt_object_exists(dt));
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
- down(&obj->oo_guard);
+ down_read(&obj->oo_guard);
rc = __osd_xattr_get(env, obj, buf, name, &size);
- up(&obj->oo_guard);
+ up_read(&obj->oo_guard);
if (rc == -ENOENT)
rc = -ENODATA;
int rc = 0;
int here;
+ if (unlikely(obj->oo_destroyed))
+ return;
+
here = dt_object_exists(&obj->oo_dt);
/* object may be not yet created */
LASSERT(handle != NULL);
oh = container_of0(handle, struct osd_thandle, ot_super);
- down(&obj->oo_guard);
+ down_read(&obj->oo_guard);
__osd_xattr_declare_set(env, obj, buf->lb_len, name, oh);
- up(&obj->oo_guard);
+ up_read(&obj->oo_guard);
RETURN(0);
}
LASSERT(handle != NULL);
LASSERT(osd_invariant(obj));
- LASSERT(dt_object_exists(dt));
- LASSERT(obj->oo_db);
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
oh = container_of0(handle, struct osd_thandle, ot_super);
- down(&obj->oo_guard);
+ down_write(&obj->oo_guard);
CDEBUG(D_INODE, "Setting xattr %s with size %d\n",
name, (int)buf->lb_len);
rc = osd_xattr_set_internal(env, obj, buf, name, fl, oh);
- up(&obj->oo_guard);
+ up_write(&obj->oo_guard);
RETURN(rc);
}
ENTRY;
LASSERT(handle != NULL);
- LASSERT(dt_object_exists(dt));
LASSERT(osd_invariant(obj));
oh = container_of0(handle, struct osd_thandle, ot_super);
LASSERT(oh->ot_tx != NULL);
LASSERT(obj->oo_db != NULL);
- down(&obj->oo_guard);
- __osd_xattr_declare_del(env, obj, name, oh);
- up(&obj->oo_guard);
+ down_read(&obj->oo_guard);
+ if (likely(dt_object_exists(&obj->oo_dt) && !obj->oo_destroyed))
+ __osd_xattr_declare_del(env, obj, name, oh);
+ up_read(&obj->oo_guard);
RETURN(0);
}
-int __osd_sa_xattr_del(const struct lu_env *env, struct osd_object *obj,
- const char *name, struct osd_thandle *oh)
+static int __osd_sa_xattr_del(const struct lu_env *env, struct osd_object *obj,
+ const char *name, struct osd_thandle *oh)
{
int rc;
return rc;
}
-int __osd_xattr_del(const struct lu_env *env, struct osd_object *obj,
- const char *name, struct osd_thandle *oh)
+static int __osd_xattr_del(const struct lu_env *env, struct osd_object *obj,
+ const char *name, struct osd_thandle *oh)
{
struct osd_device *osd = osd_obj2dev(obj);
uint64_t xa_data_obj;
int rc;
+ if (unlikely(!dt_object_exists(&obj->oo_dt) || obj->oo_destroyed))
+ return -ENOENT;
+
/* try remove xattr from SA at first */
rc = __osd_sa_xattr_del(env, obj, name, oh);
if (rc != -ENOENT)
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
- down(&obj->oo_guard);
+ down_write(&obj->oo_guard);
rc = __osd_xattr_del(env, obj, name, oh);
- up(&obj->oo_guard);
+ up_write(&obj->oo_guard);
RETURN(rc);
}
LASSERT(osd_invariant(obj));
LASSERT(dt_object_exists(dt));
- down(&obj->oo_guard);
+ down_read(&obj->oo_guard);
rc = osd_sa_xattr_list(env, obj, lb);
if (rc < 0)
out_fini:
osd_zap_cursor_fini(zc);
out:
- up(&obj->oo_guard);
+ up_read(&obj->oo_guard);
RETURN(rc);
}