struct mlxsw_afa *afa;
        const struct mlxsw_sp_acl_ops *ops;
        struct rhashtable ruleset_ht;
+       struct list_head rules;
        unsigned long priv[0];
        /* priv has to be always the last item */
 };
 
 struct mlxsw_sp_acl_rule {
        struct rhash_head ht_node; /* Member of rule HT */
+       struct list_head list;
        unsigned long cookie; /* HT key */
        struct mlxsw_sp_acl_ruleset *ruleset;
        struct mlxsw_sp_acl_rule_info *rulei;
        if (err)
                goto err_rhashtable_insert;
 
+       list_add_tail(&rule->list, &mlxsw_sp->acl->rules);
        return 0;
 
 err_rhashtable_insert:
        struct mlxsw_sp_acl_ruleset *ruleset = rule->ruleset;
        const struct mlxsw_sp_acl_profile_ops *ops = ruleset->ht_key.ops;
 
+       list_del(&rule->list);
        rhashtable_remove_fast(&ruleset->rule_ht, &rule->ht_node,
                               mlxsw_sp_acl_rule_ht_params);
        ops->rule_del(mlxsw_sp, rule->priv);
        if (err)
                goto err_rhashtable_init;
 
+       INIT_LIST_HEAD(&acl->rules);
        err = acl_ops->init(mlxsw_sp, acl->priv);
        if (err)
                goto err_acl_ops_init;
        const struct mlxsw_sp_acl_ops *acl_ops = acl->ops;
 
        acl_ops->fini(mlxsw_sp, acl->priv);
+       WARN_ON(!list_empty(&acl->rules));
        rhashtable_destroy(&acl->ruleset_ht);
        mlxsw_afa_destroy(acl->afa);
        mlxsw_afk_destroy(acl->afk);