Whamcloud - gitweb
LU-16796 lfsck: Change lfsck_assistant_object to use kref 11/52811/2
authorArshad Hussain <arshad.hussain@aeoncomputing.com>
Tue, 24 Oct 2023 08:42:50 +0000 (14:12 +0530)
committerOleg Drokin <green@whamcloud.com>
Wed, 8 Nov 2023 22:05:59 +0000 (22:05 +0000)
This patch changes struct lfsck_assistant_object to use
kref(refcount_t) instead of atomic_t

Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I763a44d2c74f758da5a137c6673f8dfd2ef6dc0a
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52811
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/lfsck/lfsck_engine.c
lustre/lfsck/lfsck_internal.h
lustre/lfsck/lfsck_layout.c
lustre/lfsck/lfsck_lib.c
lustre/lfsck/lfsck_namespace.c

index 969000a..05c4166 100644 (file)
@@ -788,7 +788,7 @@ checkpoint:
 
 out:
        if (lso != NULL)
-               lfsck_assistant_object_put(env, lso);
+               kref_put(&lso->lso_ref, lfsck_assistant_object_put);
 
        return rc;
 }
index 7330b0d..e428748 100644 (file)
@@ -376,7 +376,7 @@ struct lfsck_assistant_object {
        struct lu_fid           lso_fid;
        __u64                   lso_oit_cookie;
        struct lu_attr          lso_attr;
-       atomic_t                lso_ref;
+       struct kref             lso_ref;
        unsigned int            lso_dead:1,
                                lso_is_dir:1;
 };
@@ -1533,17 +1533,18 @@ static inline void lfsck_lmv_header_cpu_to_le(struct lmv_mds_md_v1 *dst,
 static inline struct lfsck_assistant_object *
 lfsck_assistant_object_get(struct lfsck_assistant_object *lso)
 {
-       atomic_inc(&lso->lso_ref);
+       kref_get(&lso->lso_ref);
 
        return lso;
 }
 
 static inline void
-lfsck_assistant_object_put(const struct lu_env *env,
-                          struct lfsck_assistant_object *lso)
+lfsck_assistant_object_put(struct kref *kref)
 {
-       if (atomic_dec_and_test(&lso->lso_ref))
-               OBD_FREE_PTR(lso);
+       struct lfsck_assistant_object *lso;
+
+       lso = container_of(kref, struct lfsck_assistant_object, lso_ref);
+       OBD_FREE_PTR(lso);
 }
 
 static inline struct thandle*
index e786eb3..8497211 100644 (file)
@@ -212,7 +212,7 @@ static void lfsck_layout_assistant_req_fini(const struct lu_env *env,
                container_of(lar, struct lfsck_layout_req, llr_lar);
 
        lfsck_object_put(env, llr->llr_child);
-       lfsck_assistant_object_put(env, lar->lar_parent);
+       kref_put(&lar->lar_parent->lso_ref, lfsck_assistant_object_put);
        OBD_FREE_PTR(llr);
 }
 
@@ -5767,7 +5767,7 @@ next:
 
 out:
        if (lso != NULL)
-               lfsck_assistant_object_put(env, lso);
+               kref_put(&lso->lso_ref, lfsck_assistant_object_put);
 
        return rc;
 }
index bb29e33..4126509 100644 (file)
@@ -2004,7 +2004,7 @@ lfsck_assistant_object_init(const struct lu_env *env, const struct lu_fid *fid,
        if (attr != NULL)
                lso->lso_attr = *attr;
 
-       atomic_set(&lso->lso_ref, 1);
+       kref_init(&lso->lso_ref);
        lso->lso_oit_cookie = cookie;
        if (is_dir)
                lso->lso_is_dir = 1;
index d6e9c40..6aef951 100644 (file)
@@ -93,7 +93,7 @@ static void lfsck_namespace_assistant_req_fini(const struct lu_env *env,
        if (lnr->lnr_lmv != NULL)
                lfsck_lmv_put(env, lnr->lnr_lmv);
 
-       lfsck_assistant_object_put(env, lar->lar_parent);
+       kref_put(&lar->lar_parent->lso_ref, lfsck_assistant_object_put);
        OBD_FREE(lnr, lnr->lnr_size);
 }
 
@@ -6525,7 +6525,7 @@ next:
 
 out:
        if (lso != NULL && !IS_ERR(lso))
-               lfsck_assistant_object_put(env, lso);
+               kref_put(&lso->lso_ref, lfsck_assistant_object_put);
 
        lfsck_close_dir(env, lfsck, rc);
        if (rc <= 0)