Whamcloud - gitweb
LU-16796 lnet: Change struct lnet_delay_rule to use kref 57/53457/4
authorArshad Hussain <arshad.hussain@aeoncomputing.com>
Thu, 14 Dec 2023 06:28:30 +0000 (11:58 +0530)
committerOleg Drokin <green@whamcloud.com>
Mon, 16 Dec 2024 08:03:59 +0000 (08:03 +0000)
This patch changes struct lnet_delay_rule to use
kref instead of atomic_t

Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: Arshad Hussain <arshad.hussain@aeoncomputing.com>
Change-Id: I58bf5a27d779e20bc4734765980e83675ea53633
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53457
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Timothy Day <timday@amazon.com>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/lnet/net_fault.c

index 4736885..130b3a8 100644 (file)
@@ -525,7 +525,7 @@ struct lnet_delay_rule {
        /** lock to protect \a below members */
        spinlock_t                      dl_lock;
        /** refcount of delay rule */
-       atomic_t                        dl_refcount;
+       struct kref             dl_refcount;
        /**
         * the message sequence to delay, which means message is delayed when
         * dl_stat.fs_count == dl_delay_at
@@ -567,15 +567,16 @@ struct delay_daemon_data {
 static struct delay_daemon_data        delay_dd;
 
 static void
-delay_rule_decref(struct lnet_delay_rule *rule)
+delay_rule_free(struct kref *kref)
 {
-       if (atomic_dec_and_test(&rule->dl_refcount)) {
-               LASSERT(list_empty(&rule->dl_sched_link));
-               LASSERT(list_empty(&rule->dl_msg_list));
-               LASSERT(list_empty(&rule->dl_link));
+       struct lnet_delay_rule *rule = container_of(kref,
+                                                   struct lnet_delay_rule,
+                                                   dl_refcount);
 
-               CFS_FREE_PTR(rule);
-       }
+       LASSERT(list_empty(&rule->dl_sched_link));
+       LASSERT(list_empty(&rule->dl_msg_list));
+       LASSERT(list_empty(&rule->dl_link));
+       CFS_FREE_PTR(rule);
 }
 
 /**
@@ -805,7 +806,8 @@ lnet_delay_rule_check(void)
                spin_unlock_bh(&delay_dd.dd_lock);
 
                delayed_msg_check(rule, false, &msgs);
-               delay_rule_decref(rule); /* -1 for delay_dd.dd_sched_rules */
+               /* -1 for delay_dd.dd_sched_rules */
+               kref_put(&rule->dl_refcount, delay_rule_free);
        }
 
        if (!list_empty(&msgs))
@@ -841,7 +843,7 @@ delay_timer_cb(cfs_timer_cb_arg_t data)
 
        spin_lock_bh(&delay_dd.dd_lock);
        if (list_empty(&rule->dl_sched_link) && delay_dd.dd_running) {
-               atomic_inc(&rule->dl_refcount);
+               kref_get(&rule->dl_refcount);
                list_add_tail(&rule->dl_sched_link, &delay_dd.dd_sched_rules);
                wake_up(&delay_dd.dd_waitq);
        }
@@ -920,7 +922,7 @@ lnet_delay_rule_add(struct lnet_fault_large_attr *attr)
        rule->dl_msg_send = -1;
 
        lnet_net_lock(LNET_LOCK_EX);
-       atomic_set(&rule->dl_refcount, 1);
+       kref_init(&rule->dl_refcount);
        list_add(&rule->dl_link, &the_lnet.ln_delay_rules);
        lnet_net_unlock(LNET_LOCK_EX);
 
@@ -990,7 +992,8 @@ lnet_delay_rule_del(struct lnet_nid *src, struct lnet_nid *dst, bool shutdown)
 
                timer_delete_sync(&rule->dl_timer);
                delayed_msg_check(rule, true, &msg_list);
-               delay_rule_decref(rule); /* -1 for the_lnet.ln_delay_rules */
+               /* -1 for the_lnet.ln_delay_rules */
+               kref_put(&rule->dl_refcount, delay_rule_free);
                n++;
        }