at v2.6.27 845 lines 21 kB view raw
1/* 2 * kobject.c - library routines for handling generic kernel objects 3 * 4 * Copyright (c) 2002-2003 Patrick Mochel <mochel@osdl.org> 5 * Copyright (c) 2006-2007 Greg Kroah-Hartman <greg@kroah.com> 6 * Copyright (c) 2006-2007 Novell Inc. 7 * 8 * This file is released under the GPLv2. 9 * 10 * 11 * Please see the file Documentation/kobject.txt for critical information 12 * about using the kobject interface. 13 */ 14 15#include <linux/kobject.h> 16#include <linux/string.h> 17#include <linux/module.h> 18#include <linux/stat.h> 19#include <linux/slab.h> 20 21/* 22 * populate_dir - populate directory with attributes. 23 * @kobj: object we're working on. 24 * 25 * Most subsystems have a set of default attributes that are associated 26 * with an object that registers with them. This is a helper called during 27 * object registration that loops through the default attributes of the 28 * subsystem and creates attributes files for them in sysfs. 29 */ 30static int populate_dir(struct kobject *kobj) 31{ 32 struct kobj_type *t = get_ktype(kobj); 33 struct attribute *attr; 34 int error = 0; 35 int i; 36 37 if (t && t->default_attrs) { 38 for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) { 39 error = sysfs_create_file(kobj, attr); 40 if (error) 41 break; 42 } 43 } 44 return error; 45} 46 47static int create_dir(struct kobject *kobj) 48{ 49 int error = 0; 50 if (kobject_name(kobj)) { 51 error = sysfs_create_dir(kobj); 52 if (!error) { 53 error = populate_dir(kobj); 54 if (error) 55 sysfs_remove_dir(kobj); 56 } 57 } 58 return error; 59} 60 61static int get_kobj_path_length(struct kobject *kobj) 62{ 63 int length = 1; 64 struct kobject *parent = kobj; 65 66 /* walk up the ancestors until we hit the one pointing to the 67 * root. 68 * Add 1 to strlen for leading '/' of each level. 69 */ 70 do { 71 if (kobject_name(parent) == NULL) 72 return 0; 73 length += strlen(kobject_name(parent)) + 1; 74 parent = parent->parent; 75 } while (parent); 76 return length; 77} 78 79static void fill_kobj_path(struct kobject *kobj, char *path, int length) 80{ 81 struct kobject *parent; 82 83 --length; 84 for (parent = kobj; parent; parent = parent->parent) { 85 int cur = strlen(kobject_name(parent)); 86 /* back up enough to print this name with '/' */ 87 length -= cur; 88 strncpy(path + length, kobject_name(parent), cur); 89 *(path + --length) = '/'; 90 } 91 92 pr_debug("kobject: '%s' (%p): %s: path = '%s'\n", kobject_name(kobj), 93 kobj, __func__, path); 94} 95 96/** 97 * kobject_get_path - generate and return the path associated with a given kobj and kset pair. 98 * 99 * @kobj: kobject in question, with which to build the path 100 * @gfp_mask: the allocation type used to allocate the path 101 * 102 * The result must be freed by the caller with kfree(). 103 */ 104char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) 105{ 106 char *path; 107 int len; 108 109 len = get_kobj_path_length(kobj); 110 if (len == 0) 111 return NULL; 112 path = kzalloc(len, gfp_mask); 113 if (!path) 114 return NULL; 115 fill_kobj_path(kobj, path, len); 116 117 return path; 118} 119EXPORT_SYMBOL_GPL(kobject_get_path); 120 121/* add the kobject to its kset's list */ 122static void kobj_kset_join(struct kobject *kobj) 123{ 124 if (!kobj->kset) 125 return; 126 127 kset_get(kobj->kset); 128 spin_lock(&kobj->kset->list_lock); 129 list_add_tail(&kobj->entry, &kobj->kset->list); 130 spin_unlock(&kobj->kset->list_lock); 131} 132 133/* remove the kobject from its kset's list */ 134static void kobj_kset_leave(struct kobject *kobj) 135{ 136 if (!kobj->kset) 137 return; 138 139 spin_lock(&kobj->kset->list_lock); 140 list_del_init(&kobj->entry); 141 spin_unlock(&kobj->kset->list_lock); 142 kset_put(kobj->kset); 143} 144 145static void kobject_init_internal(struct kobject *kobj) 146{ 147 if (!kobj) 148 return; 149 kref_init(&kobj->kref); 150 INIT_LIST_HEAD(&kobj->entry); 151 kobj->state_in_sysfs = 0; 152 kobj->state_add_uevent_sent = 0; 153 kobj->state_remove_uevent_sent = 0; 154 kobj->state_initialized = 1; 155} 156 157 158static int kobject_add_internal(struct kobject *kobj) 159{ 160 int error = 0; 161 struct kobject *parent; 162 163 if (!kobj) 164 return -ENOENT; 165 166 if (!kobj->name || !kobj->name[0]) { 167 WARN(1, "kobject: (%p): attempted to be registered with empty " 168 "name!\n", kobj); 169 return -EINVAL; 170 } 171 172 parent = kobject_get(kobj->parent); 173 174 /* join kset if set, use it as parent if we do not already have one */ 175 if (kobj->kset) { 176 if (!parent) 177 parent = kobject_get(&kobj->kset->kobj); 178 kobj_kset_join(kobj); 179 kobj->parent = parent; 180 } 181 182 pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n", 183 kobject_name(kobj), kobj, __func__, 184 parent ? kobject_name(parent) : "<NULL>", 185 kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>"); 186 187 error = create_dir(kobj); 188 if (error) { 189 kobj_kset_leave(kobj); 190 kobject_put(parent); 191 kobj->parent = NULL; 192 193 /* be noisy on error issues */ 194 if (error == -EEXIST) 195 printk(KERN_ERR "%s failed for %s with " 196 "-EEXIST, don't try to register things with " 197 "the same name in the same directory.\n", 198 __func__, kobject_name(kobj)); 199 else 200 printk(KERN_ERR "%s failed for %s (%d)\n", 201 __func__, kobject_name(kobj), error); 202 dump_stack(); 203 } else 204 kobj->state_in_sysfs = 1; 205 206 return error; 207} 208 209/** 210 * kobject_set_name_vargs - Set the name of an kobject 211 * @kobj: struct kobject to set the name of 212 * @fmt: format string used to build the name 213 * @vargs: vargs to format the string. 214 */ 215static int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, 216 va_list vargs) 217{ 218 const char *old_name = kobj->name; 219 char *s; 220 221 kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); 222 if (!kobj->name) 223 return -ENOMEM; 224 225 /* ewww... some of these buggers have '/' in the name ... */ 226 while ((s = strchr(kobj->name, '/'))) 227 s[0] = '!'; 228 229 kfree(old_name); 230 return 0; 231} 232 233/** 234 * kobject_set_name - Set the name of a kobject 235 * @kobj: struct kobject to set the name of 236 * @fmt: format string used to build the name 237 * 238 * This sets the name of the kobject. If you have already added the 239 * kobject to the system, you must call kobject_rename() in order to 240 * change the name of the kobject. 241 */ 242int kobject_set_name(struct kobject *kobj, const char *fmt, ...) 243{ 244 va_list vargs; 245 int retval; 246 247 va_start(vargs, fmt); 248 retval = kobject_set_name_vargs(kobj, fmt, vargs); 249 va_end(vargs); 250 251 return retval; 252} 253EXPORT_SYMBOL(kobject_set_name); 254 255/** 256 * kobject_init - initialize a kobject structure 257 * @kobj: pointer to the kobject to initialize 258 * @ktype: pointer to the ktype for this kobject. 259 * 260 * This function will properly initialize a kobject such that it can then 261 * be passed to the kobject_add() call. 262 * 263 * After this function is called, the kobject MUST be cleaned up by a call 264 * to kobject_put(), not by a call to kfree directly to ensure that all of 265 * the memory is cleaned up properly. 266 */ 267void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 268{ 269 char *err_str; 270 271 if (!kobj) { 272 err_str = "invalid kobject pointer!"; 273 goto error; 274 } 275 if (!ktype) { 276 err_str = "must have a ktype to be initialized properly!\n"; 277 goto error; 278 } 279 if (kobj->state_initialized) { 280 /* do not error out as sometimes we can recover */ 281 printk(KERN_ERR "kobject (%p): tried to init an initialized " 282 "object, something is seriously wrong.\n", kobj); 283 dump_stack(); 284 } 285 286 kobject_init_internal(kobj); 287 kobj->ktype = ktype; 288 return; 289 290error: 291 printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str); 292 dump_stack(); 293} 294EXPORT_SYMBOL(kobject_init); 295 296static int kobject_add_varg(struct kobject *kobj, struct kobject *parent, 297 const char *fmt, va_list vargs) 298{ 299 int retval; 300 301 retval = kobject_set_name_vargs(kobj, fmt, vargs); 302 if (retval) { 303 printk(KERN_ERR "kobject: can not set name properly!\n"); 304 return retval; 305 } 306 kobj->parent = parent; 307 return kobject_add_internal(kobj); 308} 309 310/** 311 * kobject_add - the main kobject add function 312 * @kobj: the kobject to add 313 * @parent: pointer to the parent of the kobject. 314 * @fmt: format to name the kobject with. 315 * 316 * The kobject name is set and added to the kobject hierarchy in this 317 * function. 318 * 319 * If @parent is set, then the parent of the @kobj will be set to it. 320 * If @parent is NULL, then the parent of the @kobj will be set to the 321 * kobject associted with the kset assigned to this kobject. If no kset 322 * is assigned to the kobject, then the kobject will be located in the 323 * root of the sysfs tree. 324 * 325 * If this function returns an error, kobject_put() must be called to 326 * properly clean up the memory associated with the object. 327 * Under no instance should the kobject that is passed to this function 328 * be directly freed with a call to kfree(), that can leak memory. 329 * 330 * Note, no "add" uevent will be created with this call, the caller should set 331 * up all of the necessary sysfs files for the object and then call 332 * kobject_uevent() with the UEVENT_ADD parameter to ensure that 333 * userspace is properly notified of this kobject's creation. 334 */ 335int kobject_add(struct kobject *kobj, struct kobject *parent, 336 const char *fmt, ...) 337{ 338 va_list args; 339 int retval; 340 341 if (!kobj) 342 return -EINVAL; 343 344 if (!kobj->state_initialized) { 345 printk(KERN_ERR "kobject '%s' (%p): tried to add an " 346 "uninitialized object, something is seriously wrong.\n", 347 kobject_name(kobj), kobj); 348 dump_stack(); 349 return -EINVAL; 350 } 351 va_start(args, fmt); 352 retval = kobject_add_varg(kobj, parent, fmt, args); 353 va_end(args); 354 355 return retval; 356} 357EXPORT_SYMBOL(kobject_add); 358 359/** 360 * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy 361 * @kobj: pointer to the kobject to initialize 362 * @ktype: pointer to the ktype for this kobject. 363 * @parent: pointer to the parent of this kobject. 364 * @fmt: the name of the kobject. 365 * 366 * This function combines the call to kobject_init() and 367 * kobject_add(). The same type of error handling after a call to 368 * kobject_add() and kobject lifetime rules are the same here. 369 */ 370int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, 371 struct kobject *parent, const char *fmt, ...) 372{ 373 va_list args; 374 int retval; 375 376 kobject_init(kobj, ktype); 377 378 va_start(args, fmt); 379 retval = kobject_add_varg(kobj, parent, fmt, args); 380 va_end(args); 381 382 return retval; 383} 384EXPORT_SYMBOL_GPL(kobject_init_and_add); 385 386/** 387 * kobject_rename - change the name of an object 388 * @kobj: object in question. 389 * @new_name: object's new name 390 */ 391int kobject_rename(struct kobject *kobj, const char *new_name) 392{ 393 int error = 0; 394 const char *devpath = NULL; 395 char *devpath_string = NULL; 396 char *envp[2]; 397 398 kobj = kobject_get(kobj); 399 if (!kobj) 400 return -EINVAL; 401 if (!kobj->parent) 402 return -EINVAL; 403 404 /* see if this name is already in use */ 405 if (kobj->kset) { 406 struct kobject *temp_kobj; 407 temp_kobj = kset_find_obj(kobj->kset, new_name); 408 if (temp_kobj) { 409 printk(KERN_WARNING "kobject '%s' cannot be renamed " 410 "to '%s' as '%s' is already in existence.\n", 411 kobject_name(kobj), new_name, new_name); 412 kobject_put(temp_kobj); 413 return -EINVAL; 414 } 415 } 416 417 devpath = kobject_get_path(kobj, GFP_KERNEL); 418 if (!devpath) { 419 error = -ENOMEM; 420 goto out; 421 } 422 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 423 if (!devpath_string) { 424 error = -ENOMEM; 425 goto out; 426 } 427 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 428 envp[0] = devpath_string; 429 envp[1] = NULL; 430 431 error = sysfs_rename_dir(kobj, new_name); 432 433 /* This function is mostly/only used for network interface. 434 * Some hotplug package track interfaces by their name and 435 * therefore want to know when the name is changed by the user. */ 436 if (!error) 437 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 438 439out: 440 kfree(devpath_string); 441 kfree(devpath); 442 kobject_put(kobj); 443 444 return error; 445} 446EXPORT_SYMBOL_GPL(kobject_rename); 447 448/** 449 * kobject_move - move object to another parent 450 * @kobj: object in question. 451 * @new_parent: object's new parent (can be NULL) 452 */ 453int kobject_move(struct kobject *kobj, struct kobject *new_parent) 454{ 455 int error; 456 struct kobject *old_parent; 457 const char *devpath = NULL; 458 char *devpath_string = NULL; 459 char *envp[2]; 460 461 kobj = kobject_get(kobj); 462 if (!kobj) 463 return -EINVAL; 464 new_parent = kobject_get(new_parent); 465 if (!new_parent) { 466 if (kobj->kset) 467 new_parent = kobject_get(&kobj->kset->kobj); 468 } 469 /* old object path */ 470 devpath = kobject_get_path(kobj, GFP_KERNEL); 471 if (!devpath) { 472 error = -ENOMEM; 473 goto out; 474 } 475 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 476 if (!devpath_string) { 477 error = -ENOMEM; 478 goto out; 479 } 480 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 481 envp[0] = devpath_string; 482 envp[1] = NULL; 483 error = sysfs_move_dir(kobj, new_parent); 484 if (error) 485 goto out; 486 old_parent = kobj->parent; 487 kobj->parent = new_parent; 488 new_parent = NULL; 489 kobject_put(old_parent); 490 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 491out: 492 kobject_put(new_parent); 493 kobject_put(kobj); 494 kfree(devpath_string); 495 kfree(devpath); 496 return error; 497} 498 499/** 500 * kobject_del - unlink kobject from hierarchy. 501 * @kobj: object. 502 */ 503void kobject_del(struct kobject *kobj) 504{ 505 if (!kobj) 506 return; 507 508 sysfs_remove_dir(kobj); 509 kobj->state_in_sysfs = 0; 510 kobj_kset_leave(kobj); 511 kobject_put(kobj->parent); 512 kobj->parent = NULL; 513} 514 515/** 516 * kobject_get - increment refcount for object. 517 * @kobj: object. 518 */ 519struct kobject *kobject_get(struct kobject *kobj) 520{ 521 if (kobj) 522 kref_get(&kobj->kref); 523 return kobj; 524} 525 526/* 527 * kobject_cleanup - free kobject resources. 528 * @kobj: object to cleanup 529 */ 530static void kobject_cleanup(struct kobject *kobj) 531{ 532 struct kobj_type *t = get_ktype(kobj); 533 const char *name = kobj->name; 534 535 pr_debug("kobject: '%s' (%p): %s\n", 536 kobject_name(kobj), kobj, __func__); 537 538 if (t && !t->release) 539 pr_debug("kobject: '%s' (%p): does not have a release() " 540 "function, it is broken and must be fixed.\n", 541 kobject_name(kobj), kobj); 542 543 /* send "remove" if the caller did not do it but sent "add" */ 544 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 545 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 546 kobject_name(kobj), kobj); 547 kobject_uevent(kobj, KOBJ_REMOVE); 548 } 549 550 /* remove from sysfs if the caller did not do it */ 551 if (kobj->state_in_sysfs) { 552 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 553 kobject_name(kobj), kobj); 554 kobject_del(kobj); 555 } 556 557 if (t && t->release) { 558 pr_debug("kobject: '%s' (%p): calling ktype release\n", 559 kobject_name(kobj), kobj); 560 t->release(kobj); 561 } 562 563 /* free name if we allocated it */ 564 if (name) { 565 pr_debug("kobject: '%s': free name\n", name); 566 kfree(name); 567 } 568} 569 570static void kobject_release(struct kref *kref) 571{ 572 kobject_cleanup(container_of(kref, struct kobject, kref)); 573} 574 575/** 576 * kobject_put - decrement refcount for object. 577 * @kobj: object. 578 * 579 * Decrement the refcount, and if 0, call kobject_cleanup(). 580 */ 581void kobject_put(struct kobject *kobj) 582{ 583 if (kobj) { 584 if (!kobj->state_initialized) 585 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 586 "initialized, yet kobject_put() is being " 587 "called.\n", kobject_name(kobj), kobj); 588 kref_put(&kobj->kref, kobject_release); 589 } 590} 591 592static void dynamic_kobj_release(struct kobject *kobj) 593{ 594 pr_debug("kobject: (%p): %s\n", kobj, __func__); 595 kfree(kobj); 596} 597 598static struct kobj_type dynamic_kobj_ktype = { 599 .release = dynamic_kobj_release, 600 .sysfs_ops = &kobj_sysfs_ops, 601}; 602 603/** 604 * kobject_create - create a struct kobject dynamically 605 * 606 * This function creates a kobject structure dynamically and sets it up 607 * to be a "dynamic" kobject with a default release function set up. 608 * 609 * If the kobject was not able to be created, NULL will be returned. 610 * The kobject structure returned from here must be cleaned up with a 611 * call to kobject_put() and not kfree(), as kobject_init() has 612 * already been called on this structure. 613 */ 614struct kobject *kobject_create(void) 615{ 616 struct kobject *kobj; 617 618 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 619 if (!kobj) 620 return NULL; 621 622 kobject_init(kobj, &dynamic_kobj_ktype); 623 return kobj; 624} 625 626/** 627 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 628 * 629 * @name: the name for the kset 630 * @parent: the parent kobject of this kobject, if any. 631 * 632 * This function creates a kobject structure dynamically and registers it 633 * with sysfs. When you are finished with this structure, call 634 * kobject_put() and the structure will be dynamically freed when 635 * it is no longer being used. 636 * 637 * If the kobject was not able to be created, NULL will be returned. 638 */ 639struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 640{ 641 struct kobject *kobj; 642 int retval; 643 644 kobj = kobject_create(); 645 if (!kobj) 646 return NULL; 647 648 retval = kobject_add(kobj, parent, "%s", name); 649 if (retval) { 650 printk(KERN_WARNING "%s: kobject_add error: %d\n", 651 __func__, retval); 652 kobject_put(kobj); 653 kobj = NULL; 654 } 655 return kobj; 656} 657EXPORT_SYMBOL_GPL(kobject_create_and_add); 658 659/** 660 * kset_init - initialize a kset for use 661 * @k: kset 662 */ 663void kset_init(struct kset *k) 664{ 665 kobject_init_internal(&k->kobj); 666 INIT_LIST_HEAD(&k->list); 667 spin_lock_init(&k->list_lock); 668} 669 670/* default kobject attribute operations */ 671static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 672 char *buf) 673{ 674 struct kobj_attribute *kattr; 675 ssize_t ret = -EIO; 676 677 kattr = container_of(attr, struct kobj_attribute, attr); 678 if (kattr->show) 679 ret = kattr->show(kobj, kattr, buf); 680 return ret; 681} 682 683static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 684 const char *buf, size_t count) 685{ 686 struct kobj_attribute *kattr; 687 ssize_t ret = -EIO; 688 689 kattr = container_of(attr, struct kobj_attribute, attr); 690 if (kattr->store) 691 ret = kattr->store(kobj, kattr, buf, count); 692 return ret; 693} 694 695struct sysfs_ops kobj_sysfs_ops = { 696 .show = kobj_attr_show, 697 .store = kobj_attr_store, 698}; 699 700/** 701 * kset_register - initialize and add a kset. 702 * @k: kset. 703 */ 704int kset_register(struct kset *k) 705{ 706 int err; 707 708 if (!k) 709 return -EINVAL; 710 711 kset_init(k); 712 err = kobject_add_internal(&k->kobj); 713 if (err) 714 return err; 715 kobject_uevent(&k->kobj, KOBJ_ADD); 716 return 0; 717} 718 719/** 720 * kset_unregister - remove a kset. 721 * @k: kset. 722 */ 723void kset_unregister(struct kset *k) 724{ 725 if (!k) 726 return; 727 kobject_put(&k->kobj); 728} 729 730/** 731 * kset_find_obj - search for object in kset. 732 * @kset: kset we're looking in. 733 * @name: object's name. 734 * 735 * Lock kset via @kset->subsys, and iterate over @kset->list, 736 * looking for a matching kobject. If matching object is found 737 * take a reference and return the object. 738 */ 739struct kobject *kset_find_obj(struct kset *kset, const char *name) 740{ 741 struct kobject *k; 742 struct kobject *ret = NULL; 743 744 spin_lock(&kset->list_lock); 745 list_for_each_entry(k, &kset->list, entry) { 746 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 747 ret = kobject_get(k); 748 break; 749 } 750 } 751 spin_unlock(&kset->list_lock); 752 return ret; 753} 754 755static void kset_release(struct kobject *kobj) 756{ 757 struct kset *kset = container_of(kobj, struct kset, kobj); 758 pr_debug("kobject: '%s' (%p): %s\n", 759 kobject_name(kobj), kobj, __func__); 760 kfree(kset); 761} 762 763static struct kobj_type kset_ktype = { 764 .sysfs_ops = &kobj_sysfs_ops, 765 .release = kset_release, 766}; 767 768/** 769 * kset_create - create a struct kset dynamically 770 * 771 * @name: the name for the kset 772 * @uevent_ops: a struct kset_uevent_ops for the kset 773 * @parent_kobj: the parent kobject of this kset, if any. 774 * 775 * This function creates a kset structure dynamically. This structure can 776 * then be registered with the system and show up in sysfs with a call to 777 * kset_register(). When you are finished with this structure, if 778 * kset_register() has been called, call kset_unregister() and the 779 * structure will be dynamically freed when it is no longer being used. 780 * 781 * If the kset was not able to be created, NULL will be returned. 782 */ 783static struct kset *kset_create(const char *name, 784 struct kset_uevent_ops *uevent_ops, 785 struct kobject *parent_kobj) 786{ 787 struct kset *kset; 788 789 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 790 if (!kset) 791 return NULL; 792 kobject_set_name(&kset->kobj, name); 793 kset->uevent_ops = uevent_ops; 794 kset->kobj.parent = parent_kobj; 795 796 /* 797 * The kobject of this kset will have a type of kset_ktype and belong to 798 * no kset itself. That way we can properly free it when it is 799 * finished being used. 800 */ 801 kset->kobj.ktype = &kset_ktype; 802 kset->kobj.kset = NULL; 803 804 return kset; 805} 806 807/** 808 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 809 * 810 * @name: the name for the kset 811 * @uevent_ops: a struct kset_uevent_ops for the kset 812 * @parent_kobj: the parent kobject of this kset, if any. 813 * 814 * This function creates a kset structure dynamically and registers it 815 * with sysfs. When you are finished with this structure, call 816 * kset_unregister() and the structure will be dynamically freed when it 817 * is no longer being used. 818 * 819 * If the kset was not able to be created, NULL will be returned. 820 */ 821struct kset *kset_create_and_add(const char *name, 822 struct kset_uevent_ops *uevent_ops, 823 struct kobject *parent_kobj) 824{ 825 struct kset *kset; 826 int error; 827 828 kset = kset_create(name, uevent_ops, parent_kobj); 829 if (!kset) 830 return NULL; 831 error = kset_register(kset); 832 if (error) { 833 kfree(kset); 834 return NULL; 835 } 836 return kset; 837} 838EXPORT_SYMBOL_GPL(kset_create_and_add); 839 840EXPORT_SYMBOL(kobject_get); 841EXPORT_SYMBOL(kobject_put); 842EXPORT_SYMBOL(kobject_del); 843 844EXPORT_SYMBOL(kset_register); 845EXPORT_SYMBOL(kset_unregister);