All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kobject: add the missing export for kobject_create()
@ 2021-08-31  6:50 Qu Wenruo
  2021-08-31  6:57 ` Greg KH
  2021-08-31  7:32 ` Nikolay Borisov
  0 siblings, 2 replies; 6+ messages in thread
From: Qu Wenruo @ 2021-08-31  6:50 UTC (permalink / raw)
  To: gregkh, rafael; +Cc: linux-btrfs

[BUG]
For any module utilizing kobject_create(), it will lead to link error:

  $ make M=fs/btrfs -j12
    CC [M]  fs/btrfs/sysfs.o
    LD [M]  fs/btrfs/btrfs.o
    MODPOST fs/btrfs/Module.symvers
  ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
  make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
  make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
  make: *** [Makefile:1766: modules] Error 2

[CAUSE]
It's pretty straight forward, kobject_create() doesn't have
EXPORT_SYMBOL_GPL().

[FIX]
Fix it by adding the missing EXPORT_SYMBOL_GPL().

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
A little surprised by the fact that no know even is calling
kobject_create() now.

Or should we just call kmalloc() manually then kobject_init_and_add()?
---
 lib/kobject.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/kobject.c b/lib/kobject.c
index ea53b30cf483..af308cf7dba2 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
 	kobject_init(kobj, &dynamic_kobj_ktype);
 	return kobj;
 }
+EXPORT_SYMBOL_GPL(kobject_create);
 
 /**
  * kobject_create_and_add() - Create a struct kobject dynamically and
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] kobject: add the missing export for kobject_create()
  2021-08-31  6:50 [PATCH] kobject: add the missing export for kobject_create() Qu Wenruo
@ 2021-08-31  6:57 ` Greg KH
  2021-08-31  7:53   ` Qu Wenruo
  2021-08-31  7:32 ` Nikolay Borisov
  1 sibling, 1 reply; 6+ messages in thread
From: Greg KH @ 2021-08-31  6:57 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: rafael, linux-btrfs

On Tue, Aug 31, 2021 at 02:50:09PM +0800, Qu Wenruo wrote:
> [BUG]
> For any module utilizing kobject_create(), it will lead to link error:
> 
>   $ make M=fs/btrfs -j12
>     CC [M]  fs/btrfs/sysfs.o
>     LD [M]  fs/btrfs/btrfs.o
>     MODPOST fs/btrfs/Module.symvers
>   ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
>   make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
>   make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
>   make: *** [Makefile:1766: modules] Error 2
> 
> [CAUSE]
> It's pretty straight forward, kobject_create() doesn't have
> EXPORT_SYMBOL_GPL().
> 
> [FIX]
> Fix it by adding the missing EXPORT_SYMBOL_GPL().
> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> A little surprised by the fact that no know even is calling
> kobject_create() now.
> 
> Or should we just call kmalloc() manually then kobject_init_and_add()?
> ---
>  lib/kobject.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/kobject.c b/lib/kobject.c
> index ea53b30cf483..af308cf7dba2 100644
> --- a/lib/kobject.c
> +++ b/lib/kobject.c
> @@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
>  	kobject_init(kobj, &dynamic_kobj_ktype);
>  	return kobj;
>  }
> +EXPORT_SYMBOL_GPL(kobject_create);
>  
>  /**
>   * kobject_create_and_add() - Create a struct kobject dynamically and
> -- 
> 2.33.0
> 

What in-kernel module needs to call this function?  No driver should be
messing with calls to kobjects like this.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kobject: add the missing export for kobject_create()
  2021-08-31  6:50 [PATCH] kobject: add the missing export for kobject_create() Qu Wenruo
  2021-08-31  6:57 ` Greg KH
@ 2021-08-31  7:32 ` Nikolay Borisov
  1 sibling, 0 replies; 6+ messages in thread
From: Nikolay Borisov @ 2021-08-31  7:32 UTC (permalink / raw)
  To: Qu Wenruo, gregkh, rafael; +Cc: linux-btrfs



On 31.08.21 г. 9:50, Qu Wenruo wrote:
> [BUG]
> For any module utilizing kobject_create(), it will lead to link error:
> 
>   $ make M=fs/btrfs -j12
>     CC [M]  fs/btrfs/sysfs.o
>     LD [M]  fs/btrfs/btrfs.o
>     MODPOST fs/btrfs/Module.symvers
>   ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
>   make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
>   make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
>   make: *** [Makefile:1766: modules] Error 2
> 
> [CAUSE]
> It's pretty straight forward, kobject_create() doesn't have
> EXPORT_SYMBOL_GPL().
> 
> [FIX]
> Fix it by adding the missing EXPORT_SYMBOL_GPL().
> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> A little surprised by the fact that no know even is calling
> kobject_create() now.
> 
> Or should we just call kmalloc() manually then kobject_init_and_add()?

There is kobject_create_and_add which seems to be the preferred public API.

> ---
>  lib/kobject.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/kobject.c b/lib/kobject.c
> index ea53b30cf483..af308cf7dba2 100644
> --- a/lib/kobject.c
> +++ b/lib/kobject.c
> @@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
>  	kobject_init(kobj, &dynamic_kobj_ktype);
>  	return kobj;
>  }
> +EXPORT_SYMBOL_GPL(kobject_create);
>  
>  /**
>   * kobject_create_and_add() - Create a struct kobject dynamically and
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kobject: add the missing export for kobject_create()
  2021-08-31  6:57 ` Greg KH
@ 2021-08-31  7:53   ` Qu Wenruo
  2021-08-31 20:04     ` Greg KH
  0 siblings, 1 reply; 6+ messages in thread
From: Qu Wenruo @ 2021-08-31  7:53 UTC (permalink / raw)
  To: Greg KH; +Cc: rafael, linux-btrfs



On 2021/8/31 下午2:57, Greg KH wrote:
> On Tue, Aug 31, 2021 at 02:50:09PM +0800, Qu Wenruo wrote:
>> [BUG]
>> For any module utilizing kobject_create(), it will lead to link error:
>>
>>    $ make M=fs/btrfs -j12
>>      CC [M]  fs/btrfs/sysfs.o
>>      LD [M]  fs/btrfs/btrfs.o
>>      MODPOST fs/btrfs/Module.symvers
>>    ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
>>    make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
>>    make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
>>    make: *** [Makefile:1766: modules] Error 2
>>
>> [CAUSE]
>> It's pretty straight forward, kobject_create() doesn't have
>> EXPORT_SYMBOL_GPL().
>>
>> [FIX]
>> Fix it by adding the missing EXPORT_SYMBOL_GPL().
>>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>> A little surprised by the fact that no know even is calling
>> kobject_create() now.
>>
>> Or should we just call kmalloc() manually then kobject_init_and_add()?
>> ---
>>   lib/kobject.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/lib/kobject.c b/lib/kobject.c
>> index ea53b30cf483..af308cf7dba2 100644
>> --- a/lib/kobject.c
>> +++ b/lib/kobject.c
>> @@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
>>   	kobject_init(kobj, &dynamic_kobj_ktype);
>>   	return kobj;
>>   }
>> +EXPORT_SYMBOL_GPL(kobject_create);
>>   
>>   /**
>>    * kobject_create_and_add() - Create a struct kobject dynamically and
>> -- 
>> 2.33.0
>>
> 
> What in-kernel module needs to call this function?  No driver should be
> messing with calls to kobjects like this.

But kobject_create_and_add() can't specify ktype if we want extra 
attributes to the new kobject.

Or is the following way the preferred call style?

local_kobj = kmalloc();
ret = kobject_init_and_add();

Then I guess we should not export kobject_create() at all even in its 
header.

Thanks,
Qu

> 
> thanks,
> 
> greg k-h
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kobject: add the missing export for kobject_create()
  2021-08-31  7:53   ` Qu Wenruo
@ 2021-08-31 20:04     ` Greg KH
  2021-08-31 22:58       ` Qu Wenruo
  0 siblings, 1 reply; 6+ messages in thread
From: Greg KH @ 2021-08-31 20:04 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: rafael, linux-btrfs

On Tue, Aug 31, 2021 at 03:53:02PM +0800, Qu Wenruo wrote:
> 
> 
> On 2021/8/31 下午2:57, Greg KH wrote:
> > On Tue, Aug 31, 2021 at 02:50:09PM +0800, Qu Wenruo wrote:
> > > [BUG]
> > > For any module utilizing kobject_create(), it will lead to link error:
> > > 
> > >    $ make M=fs/btrfs -j12
> > >      CC [M]  fs/btrfs/sysfs.o
> > >      LD [M]  fs/btrfs/btrfs.o
> > >      MODPOST fs/btrfs/Module.symvers
> > >    ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
> > >    make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
> > >    make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
> > >    make: *** [Makefile:1766: modules] Error 2
> > > 
> > > [CAUSE]
> > > It's pretty straight forward, kobject_create() doesn't have
> > > EXPORT_SYMBOL_GPL().
> > > 
> > > [FIX]
> > > Fix it by adding the missing EXPORT_SYMBOL_GPL().
> > > 
> > > Signed-off-by: Qu Wenruo <wqu@suse.com>
> > > ---
> > > A little surprised by the fact that no know even is calling
> > > kobject_create() now.
> > > 
> > > Or should we just call kmalloc() manually then kobject_init_and_add()?
> > > ---
> > >   lib/kobject.c | 1 +
> > >   1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/lib/kobject.c b/lib/kobject.c
> > > index ea53b30cf483..af308cf7dba2 100644
> > > --- a/lib/kobject.c
> > > +++ b/lib/kobject.c
> > > @@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
> > >   	kobject_init(kobj, &dynamic_kobj_ktype);
> > >   	return kobj;
> > >   }
> > > +EXPORT_SYMBOL_GPL(kobject_create);
> > >   /**
> > >    * kobject_create_and_add() - Create a struct kobject dynamically and
> > > -- 
> > > 2.33.0
> > > 
> > 
> > What in-kernel module needs to call this function?  No driver should be
> > messing with calls to kobjects like this.
> 
> But kobject_create_and_add() can't specify ktype if we want extra attributes
> to the new kobject.

You didn't answer this question, what in-kernel driver needs this?  We
do not export things that are not needed to be exported.

> Or is the following way the preferred call style?
> 
> local_kobj = kmalloc();
> ret = kobject_init_and_add();

Depends on your need.

Why do you need to call this function from a module?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] kobject: add the missing export for kobject_create()
  2021-08-31 20:04     ` Greg KH
@ 2021-08-31 22:58       ` Qu Wenruo
  0 siblings, 0 replies; 6+ messages in thread
From: Qu Wenruo @ 2021-08-31 22:58 UTC (permalink / raw)
  To: Greg KH, Qu Wenruo; +Cc: rafael, linux-btrfs



On 2021/9/1 上午4:04, Greg KH wrote:
> On Tue, Aug 31, 2021 at 03:53:02PM +0800, Qu Wenruo wrote:
>>
>>
>> On 2021/8/31 下午2:57, Greg KH wrote:
>>> On Tue, Aug 31, 2021 at 02:50:09PM +0800, Qu Wenruo wrote:
>>>> [BUG]
>>>> For any module utilizing kobject_create(), it will lead to link error:
>>>>
>>>>     $ make M=fs/btrfs -j12
>>>>       CC [M]  fs/btrfs/sysfs.o
>>>>       LD [M]  fs/btrfs/btrfs.o
>>>>       MODPOST fs/btrfs/Module.symvers
>>>>     ERROR: modpost: "kobject_create" [fs/btrfs/btrfs.ko] undefined!
>>>>     make[1]: *** [scripts/Makefile.modpost:150: fs/btrfs/Module.symvers] Error 1
>>>>     make[1]: *** Deleting file 'fs/btrfs/Module.symvers'
>>>>     make: *** [Makefile:1766: modules] Error 2
>>>>
>>>> [CAUSE]
>>>> It's pretty straight forward, kobject_create() doesn't have
>>>> EXPORT_SYMBOL_GPL().
>>>>
>>>> [FIX]
>>>> Fix it by adding the missing EXPORT_SYMBOL_GPL().
>>>>
>>>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>>>> ---
>>>> A little surprised by the fact that no know even is calling
>>>> kobject_create() now.
>>>>
>>>> Or should we just call kmalloc() manually then kobject_init_and_add()?
>>>> ---
>>>>    lib/kobject.c | 1 +
>>>>    1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/lib/kobject.c b/lib/kobject.c
>>>> index ea53b30cf483..af308cf7dba2 100644
>>>> --- a/lib/kobject.c
>>>> +++ b/lib/kobject.c
>>>> @@ -788,6 +788,7 @@ struct kobject *kobject_create(void)
>>>>    	kobject_init(kobj, &dynamic_kobj_ktype);
>>>>    	return kobj;
>>>>    }
>>>> +EXPORT_SYMBOL_GPL(kobject_create);
>>>>    /**
>>>>     * kobject_create_and_add() - Create a struct kobject dynamically and
>>>> --
>>>> 2.33.0
>>>>
>>>
>>> What in-kernel module needs to call this function?  No driver should be
>>> messing with calls to kobjects like this.
>>
>> But kobject_create_and_add() can't specify ktype if we want extra attributes
>> to the new kobject.
>
> You didn't answer this question, what in-kernel driver needs this?  We
> do not export things that are not needed to be exported.

Then the function should not be declared in kobject.h either.

Originally I just want a dynamically allocated kobject with extra
attributes.

Thus I look into the callers of kobject_create_and_add(), and lsp points
to the header where just one line before kobject_create_and_add(), there
comes kobject_create().

But after more reading into kobject.c, kobject_create() creates kobject
with dynamic ktype, thus in theory we shouldn't change its type halfway.

>
>> Or is the following way the preferred call style?
>>
>> local_kobj = kmalloc();
>> ret = kobject_init_and_add();
>
> Depends on your need.
>
> Why do you need to call this function from a module?

As explained, a want a dynamically allocated kobject while has extra
attributes.

As kobject_create_and_add() can't have extra attributes, while
kobject_init_and_add() needs an existing kobject.

But now I understand why it's not that possible, as kobject_create()
will initialize its dynamic ktype, thus with its .release function fixed.

Currently I go the kmalloc() then kobject_init_and_add() way instead,
and the .release is just the same as the dynamic ktype to kfree() the
kobject.

Thus I send a new patch to unexport kobject_create() from kobject.h.

Thanks,
Qu

>
> thanks,
>
> greg k-h
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-31 22:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-31  6:50 [PATCH] kobject: add the missing export for kobject_create() Qu Wenruo
2021-08-31  6:57 ` Greg KH
2021-08-31  7:53   ` Qu Wenruo
2021-08-31 20:04     ` Greg KH
2021-08-31 22:58       ` Qu Wenruo
2021-08-31  7:32 ` Nikolay Borisov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.