Whamcloud - gitweb
LU-1267 lfsck: framework (1) for MDT-OST consistency
[fs/lustre-release.git] / lustre / lfsck / lfsck_bookmark.c
index 1f87bec..8275bf1 100644 (file)
@@ -28,9 +28,6 @@
  * Author: Fan, Yong <fan.yong@intel.com>
  */
 
  * Author: Fan, Yong <fan.yong@intel.com>
  */
 
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
 #define DEBUG_SUBSYSTEM S_LFSCK
 
 #include <lu_object.h>
 #define DEBUG_SUBSYSTEM S_LFSCK
 
 #include <lu_object.h>
@@ -77,9 +74,9 @@ static int lfsck_bookmark_load(const struct lu_env *env,
 
                lfsck_bookmark_le_to_cpu(bm, &lfsck->li_bookmark_disk);
                if (bm->lb_magic != LFSCK_BOOKMARK_MAGIC) {
 
                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;
                }
                        /* Process it as new lfsck_bookmark. */
                        rc = -ENODATA;
                }
@@ -88,7 +85,7 @@ static int lfsck_bookmark_load(const struct lu_env *env,
                        /* return -ENODATA for empty lfsck_bookmark. */
                        rc = -ENODATA;
                else
                        /* 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);
        }
                               "expected = %d, rc = %d\n",
                               lfsck_lfsck2name(lfsck), len, rc);
        }
@@ -109,22 +106,22 @@ int lfsck_bookmark_store(const struct lu_env *env, struct lfsck_instance *lfsck)
        handle = dt_trans_create(env, lfsck->li_bottom);
        if (IS_ERR(handle)) {
                rc = PTR_ERR(handle);
        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) {
                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) {
                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);
        }
 
                GOTO(out, rc);
        }
 
@@ -132,7 +129,7 @@ int lfsck_bookmark_store(const struct lu_env *env, struct lfsck_instance *lfsck)
                             lfsck_buf_get(env, &lfsck->li_bookmark_disk, len),
                             &pos, handle);
        if (rc != 0)
                             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);
                       "rc = %d\n", lfsck_lfsck2name(lfsck), len, rc);
 
        GOTO(out, rc);
@@ -160,14 +157,25 @@ static int lfsck_bookmark_init(const struct lu_env *env,
 int lfsck_bookmark_setup(const struct lu_env *env,
                         struct lfsck_instance *lfsck)
 {
 int lfsck_bookmark_setup(const struct lu_env *env,
                         struct lfsck_instance *lfsck)
 {
+       struct dt_object *root;
        struct dt_object *obj;
        int               rc;
        ENTRY;
 
        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);
                                        lfsck_bookmark_name,
                                        S_IFREG | S_IRUGO | S_IWUSR);
+       lu_object_put(env, &root->do_lu);
        if (IS_ERR(obj))
                RETURN(PTR_ERR(obj));
 
        if (IS_ERR(obj))
                RETURN(PTR_ERR(obj));