@@ -330,6 +330,13 @@ static void ext4_sb_release(struct kobject *kobj)
330
330
complete (& sbi -> s_kobj_unregister );
331
331
}
332
332
333
+ static void ext4_kset_release (struct kobject * kobj )
334
+ {
335
+ struct kset * kset = container_of (kobj , struct kset , kobj );
336
+
337
+ kfree (kset );
338
+ }
339
+
333
340
static const struct sysfs_ops ext4_attr_ops = {
334
341
.show = ext4_attr_show ,
335
342
.store = ext4_attr_store ,
@@ -343,11 +350,10 @@ static struct kobj_type ext4_sb_ktype = {
343
350
344
351
static struct kobj_type ext4_ktype = {
345
352
.sysfs_ops = & ext4_attr_ops ,
353
+ .release = ext4_kset_release ,
346
354
};
347
355
348
- static struct kset ext4_kset = {
349
- .kobj = {.ktype = & ext4_ktype },
350
- };
356
+ static struct kset * ext4_kset ;
351
357
352
358
static struct kobj_type ext4_feat_ktype = {
353
359
.default_attrs = ext4_feat_attrs ,
@@ -392,7 +398,7 @@ int ext4_register_sysfs(struct super_block *sb)
392
398
const struct ext4_proc_files * p ;
393
399
int err ;
394
400
395
- sbi -> s_kobj .kset = & ext4_kset ;
401
+ sbi -> s_kobj .kset = ext4_kset ;
396
402
init_completion (& sbi -> s_kobj_unregister );
397
403
err = kobject_init_and_add (& sbi -> s_kobj , & ext4_sb_ktype , NULL ,
398
404
"%s" , sb -> s_id );
@@ -430,21 +436,24 @@ int __init ext4_init_sysfs(void)
430
436
{
431
437
int ret ;
432
438
433
- kobject_set_name (& ext4_kset .kobj , "ext4" );
434
- ext4_kset .kobj .parent = fs_kobj ;
435
- ret = kset_register (& ext4_kset );
436
- if (ret ) {
437
- kset_unregister (& ext4_kset );
438
- return ret ;
439
- }
439
+ ext4_kset = kzalloc (sizeof (* ext4_kset ), GFP_KERNEL );
440
+ if (!ext4_kset )
441
+ return - ENOMEM ;
442
+
443
+ kobject_set_name (& ext4_kset -> kobj , "ext4" );
444
+ ext4_kset -> kobj .parent = fs_kobj ;
445
+ ext4_kset -> kobj .ktype = & ext4_ktype ;
446
+ ret = kset_register (ext4_kset );
447
+ if (ret )
448
+ goto kset_err ;
440
449
441
450
ext4_feat = kzalloc (sizeof (* ext4_feat ), GFP_KERNEL );
442
451
if (!ext4_feat ) {
443
452
ret = - ENOMEM ;
444
453
goto kset_err ;
445
454
}
446
455
447
- ext4_feat -> kset = & ext4_kset ;
456
+ ext4_feat -> kset = ext4_kset ;
448
457
ret = kobject_init_and_add (ext4_feat , & ext4_feat_ktype ,
449
458
NULL , "features" );
450
459
if (ret )
@@ -456,14 +465,16 @@ int __init ext4_init_sysfs(void)
456
465
feat_err :
457
466
kobject_put (ext4_feat );
458
467
kset_err :
459
- kset_unregister (& ext4_kset );
468
+ kset_unregister (ext4_kset );
469
+ ext4_kset = NULL ;
460
470
return ret ;
461
471
}
462
472
463
473
void ext4_exit_sysfs (void )
464
474
{
465
475
kobject_put (ext4_feat );
466
- kset_unregister (& ext4_kset );
476
+ kset_unregister (ext4_kset );
477
+ ext4_kset = NULL ;
467
478
remove_proc_entry (proc_dirname , NULL );
468
479
ext4_proc_root = NULL ;
469
480
}
0 commit comments