* Author: Fan, Yong <fan.yong@intel.com>
*/
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
#define DEBUG_SUBSYSTEM S_LFSCK
#include <lu_object.h>
lfsck_bookmark_le_to_cpu(bm, &lfsck->li_bookmark_disk);
if (bm->lb_magic != LFSCK_BOOKMARK_MAGIC) {
- CWARN("%.16s: invalid lfsck_bookmark magic "
- "0x%x != 0x%x\n", lfsck_lfsck2name(lfsck),
- bm->lb_magic, LFSCK_BOOKMARK_MAGIC);
+ CWARN("%s: invalid lfsck_bookmark magic %#x != %#x\n",
+ lfsck_lfsck2name(lfsck), bm->lb_magic,
+ LFSCK_BOOKMARK_MAGIC);
/* Process it as new lfsck_bookmark. */
rc = -ENODATA;
}
/* return -ENODATA for empty lfsck_bookmark. */
rc = -ENODATA;
else
- CERROR("%.16s: fail to load lfsck_bookmark, "
+ CERROR("%s: fail to load lfsck_bookmark: "
"expected = %d, rc = %d\n",
lfsck_lfsck2name(lfsck), len, rc);
}
handle = dt_trans_create(env, lfsck->li_bottom);
if (IS_ERR(handle)) {
rc = PTR_ERR(handle);
- CERROR("%.16s: fail to create trans for storing "
- "lfsck_bookmark: %d\n,", lfsck_lfsck2name(lfsck), rc);
+ CERROR("%s: fail to create trans for storing lfsck_bookmark: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
RETURN(rc);
}
rc = dt_declare_record_write(env, obj, len, 0, handle);
if (rc != 0) {
- CERROR("%.16s: fail to declare trans for storing "
- "lfsck_bookmark: %d\n,", lfsck_lfsck2name(lfsck), rc);
+ CERROR("%s: fail to declare trans for storing lfsck_bookmark: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
GOTO(out, rc);
}
rc = dt_trans_start_local(env, lfsck->li_bottom, handle);
if (rc != 0) {
- CERROR("%.16s: fail to start trans for storing "
- "lfsck_bookmark: %d\n,", lfsck_lfsck2name(lfsck), rc);
+ CERROR("%s: fail to start trans for storing lfsck_bookmark: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
GOTO(out, rc);
}
lfsck_buf_get(env, &lfsck->li_bookmark_disk, len),
&pos, handle);
if (rc != 0)
- CERROR("%.16s: fail to store lfsck_bookmark, expected = %d, "
+ CERROR("%s: fail to store lfsck_bookmark: expected = %d, "
"rc = %d\n", lfsck_lfsck2name(lfsck), len, rc);
GOTO(out, rc);
int lfsck_bookmark_setup(const struct lu_env *env,
struct lfsck_instance *lfsck)
{
+ struct dt_object *root;
struct dt_object *obj;
int rc;
ENTRY;
- obj = local_file_find_or_create(env, lfsck->li_los,
- lfsck->li_local_root,
+ root = dt_locate(env, lfsck->li_bottom, &lfsck->li_local_root_fid);
+ if (IS_ERR(root))
+ RETURN(PTR_ERR(root));
+
+ if (unlikely(!dt_try_as_dir(env, root))) {
+ lu_object_put(env, &root->do_lu);
+
+ RETURN(-ENOTDIR);
+ }
+
+ obj = local_file_find_or_create(env, lfsck->li_los, root,
lfsck_bookmark_name,
S_IFREG | S_IRUGO | S_IWUSR);
+ lu_object_put(env, &root->do_lu);
if (IS_ERR(obj))
RETURN(PTR_ERR(obj));