关于linux 内核函数 kset_get的疑问,望大神解答

kset_get函数定义如下:
static inline struct kset *kset_get(struct kset *k)
{
return k ? to_kset(kobject_get(&k->kobj)) : NULL;
}
static inline struct kset *to_kset(struct kobject *kobj)
{
return kobj ? container_of(kobj, struct kset, kobj) : NULL;
}
该函数是获取k结构体指针指向的结构体首地址。
有一点我不明白的是这个函数先获取k—>kobj的地址,然后传给 container_of宏定义,通过这个宏定义再获取k指向的结构体的首地址。这不是绕了一圈又绕回来了,内核这么做意义何在?

以上理解可能存在错误,望大神指教。

其中的kobject_get 函数会将kobj 的引用计数加一,并不是什么都没干

static inline struct kset *kset_get(struct kset *k)
{
    return k ? to_kset(kobject_get(&k->kobj)) : NULL;
}

struct kobject *kobject_get(struct kobject *kobj)
{
    if (kobj) {
        if (!kobj->state_initialized)
            WARN(1, KERN_WARNING "kobject: '%s' (%p): is not "
                   "initialized, yet kobject_get() is being "
                   "called.\n", kobject_name(kobj), kobj);
        kref_get(&kobj->kref);
    }
    return kobj;
}

static inline void kref_get(struct kref *kref)
{
    refcount_inc(&kref->refcount);
}