X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flfsck%2Flfsck_bookmark.c;h=27f846ad4f77a4e48e544c153d575bfce997525a;hb=76f0977b7ea5d46836cb459deb7b9ad9e781d585;hp=1f87bec92ef4052fdeae785998e1a712b7640d9e;hpb=2f41b688058532248e69ff0194c27616f4dfb6d5;p=fs%2Flustre-release.git diff --git a/lustre/lfsck/lfsck_bookmark.c b/lustre/lfsck/lfsck_bookmark.c index 1f87bec..27f846a 100644 --- a/lustre/lfsck/lfsck_bookmark.c +++ b/lustre/lfsck/lfsck_bookmark.c @@ -28,9 +28,6 @@ * Author: Fan, Yong */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_LFSCK #include @@ -51,15 +48,21 @@ static void lfsck_bookmark_le_to_cpu(struct lfsck_bookmark *des, des->lb_version = le16_to_cpu(src->lb_version); des->lb_param = le16_to_cpu(src->lb_param); des->lb_speed_limit = le32_to_cpu(src->lb_speed_limit); + des->lb_async_windows = le16_to_cpu(src->lb_async_windows); + fid_le_to_cpu(&des->lb_lpf_fid, &src->lb_lpf_fid); + fid_le_to_cpu(&des->lb_last_fid, &src->lb_last_fid); } -static void lfsck_bookmark_cpu_to_le(struct lfsck_bookmark *des, - struct lfsck_bookmark *src) +void lfsck_bookmark_cpu_to_le(struct lfsck_bookmark *des, + struct lfsck_bookmark *src) { des->lb_magic = cpu_to_le32(src->lb_magic); des->lb_version = cpu_to_le16(src->lb_version); des->lb_param = cpu_to_le16(src->lb_param); des->lb_speed_limit = cpu_to_le32(src->lb_speed_limit); + des->lb_async_windows = cpu_to_le16(src->lb_async_windows); + fid_cpu_to_le(&des->lb_lpf_fid, &src->lb_lpf_fid); + fid_cpu_to_le(&des->lb_last_fid, &src->lb_last_fid); } static int lfsck_bookmark_load(const struct lu_env *env, @@ -77,9 +80,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) { - 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; } @@ -88,7 +91,7 @@ static int lfsck_bookmark_load(const struct lu_env *env, /* 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); } @@ -109,22 +112,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); - 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); } @@ -132,7 +135,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) - 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); @@ -151,6 +154,7 @@ static int lfsck_bookmark_init(const struct lu_env *env, memset(mb, 0, sizeof(*mb)); mb->lb_magic = LFSCK_BOOKMARK_MAGIC; mb->lb_version = LFSCK_VERSION_V2; + mb->lb_async_windows = LFSCK_ASYNC_WIN_DEFAULT; mutex_lock(&lfsck->li_mutex); rc = lfsck_bookmark_store(env, lfsck); mutex_unlock(&lfsck->li_mutex); @@ -160,14 +164,25 @@ static int lfsck_bookmark_init(const struct lu_env *env, 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));