if (rc == 0) {
LASSERT(obj->oo_db == NULL);
rc = __osd_obj2dbuf(env, osd->od_os, oid, &obj->oo_db);
+ /* EEXIST will be returned if object is being deleted in ZFS */
+ if (rc == -EEXIST) {
+ rc = 0;
+ GOTO(out, rc);
+ }
if (rc != 0) {
CERROR("%s: lookup "DFID"/"LPX64" failed: rc = %d\n",
osd->od_svname, PFID(lu_object_fid(l)), oid, rc);
LASSERT(osd_invariant(obj));
- down_read(&obj->oo_sem);
+ down_read_nested(&obj->oo_sem, role);
}
static void osd_object_write_lock(const struct lu_env *env,
LASSERT(osd_invariant(obj));
- down_write(&obj->oo_sem);
+ down_write_nested(&obj->oo_sem, role);
}
static void osd_object_read_unlock(const struct lu_env *env,
ENTRY;
+ if (!dt_object_exists(dt))
+ RETURN(-ENOENT);
+
LASSERT(osd_invariant(obj));
- LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_sa_hdl != NULL);
oh = container_of0(handle, struct osd_thandle, ot_super);
write_unlock(&obj->oo_attr_lock);
rc = osd_object_sa_update(obj, SA_ZPL_LINKS(osd), &nlink, 8, oh);
- return rc;
+ RETURN(rc);
}
static int osd_object_sync(const struct lu_env *env, struct dt_object *dt,