From: Arshad Hussain Date: Tue, 24 Oct 2023 08:42:50 +0000 (+0530) Subject: LU-16796 lfsck: Change lfsck_assistant_object to use kref X-Git-Tag: 2.15.59~12 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=37a50f74da0c8d352d7bbe83bd1f7aeb08988714;p=fs%2Flustre-release.git LU-16796 lfsck: Change lfsck_assistant_object to use kref This patch changes struct lfsck_assistant_object to use kref(refcount_t) instead of atomic_t Signed-off-by: Arshad Hussain Change-Id: I763a44d2c74f758da5a137c6673f8dfd2ef6dc0a Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52811 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Neil Brown Reviewed-by: Timothy Day Reviewed-by: Oleg Drokin --- diff --git a/lustre/lfsck/lfsck_engine.c b/lustre/lfsck/lfsck_engine.c index 969000a..05c4166 100644 --- a/lustre/lfsck/lfsck_engine.c +++ b/lustre/lfsck/lfsck_engine.c @@ -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; } diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h index 7330b0d..e428748 100644 --- a/lustre/lfsck/lfsck_internal.h +++ b/lustre/lfsck/lfsck_internal.h @@ -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* diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c index e786eb3..8497211 100644 --- a/lustre/lfsck/lfsck_layout.c +++ b/lustre/lfsck/lfsck_layout.c @@ -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; } diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c index bb29e33..4126509 100644 --- a/lustre/lfsck/lfsck_lib.c +++ b/lustre/lfsck/lfsck_lib.c @@ -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; diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index d6e9c40..6aef951 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -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)