* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
linkea_add_buf(ldata, lname, tfid);
}
+ if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_LINKEA_MORE2))
+ linkea_add_buf(ldata, lname, pfid);
+
return linkea_add_buf(ldata, lname, pfid);
}
LASSERT(oldpfid != NULL || newpfid != NULL);
- if (mdd_obj->mod_flags & DEAD_OBJ)
+ if (mdd_obj->mod_flags & DEAD_OBJ) {
+ /* Prevent linkea to be updated which is NOT necessary. */
+ ldata->ld_reclen = 0;
/* No more links, don't bother */
RETURN(0);
+ }
if (oldpfid != NULL) {
rc = __mdd_links_del(env, mdd_obj, ldata, oldlname, oldpfid);
GOTO(out, rc);
}
- if (ldata->ld_lee != NULL)
+ if (ldata->ld_reclen != 0)
rc = mdd_links_write(env, mdd_obj, ldata, handle);
EXIT;
out:
rc = rc2;
if (rc) {
int error = 1;
- if (rc == -EOVERFLOW || rc == -ENOENT)
+ if (rc == -EOVERFLOW || rc == -ENOENT || rc == -ENOSPC)
error = 0;
if (oldpfid == NULL)
CDEBUG(error ? D_ERROR : D_OTHER,
ea_len = ldata->ld_leh->leh_len;
linkea = ldata->ld_buf->lb_buf;
} else {
- ea_len = 4096;
+ ea_len = DEFAULT_LINKEA_SIZE;
linkea = NULL;
}
LASSERT(mdd_write_locked(env, obj) != 0);
- if (rc == 0 && (ma->ma_attr.la_nlink == 0 || is_dir)) {
+ if (ma->ma_attr.la_nlink == 0 || is_dir) {
obj->mod_flags |= DEAD_OBJ;
+
/* add new orphan and the object
* will be deleted during mdd_close() */
if (obj->mod_count) {
dotdot, handle);
}
- if (rc == 0 && (fid_is_norm(mdo2fid(child)) ||
- fid_is_dot_lustre(mdo2fid(child)) ||
- fid_is_root(mdo2fid(child))))
+ if (rc == 0)
mdd_declare_links_add(env, child, handle, ldata);
RETURN(rc);
mdo_ref_del(env, child, handle);
}
- if (rc == 0 && (fid_is_norm(mdo2fid(child)) ||
- fid_is_dot_lustre(mdo2fid(child)) ||
- fid_is_root(mdo2fid(child))))
+ if (rc == 0)
mdd_links_add(env, child, pfid, lname, handle, ldata, 1);
RETURN(rc);