1 /* 2 * kobject.c - library routines for handling generic kernel objects 3 * 4 * Copyright (c) 2002-2003 Patrick Mochel <[email protected]> 5 * Copyright (c) 2006-2007 Greg Kroah-Hartman <[email protected]> 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/kobj_completion.h> 17 #include <linux/string.h> 18 #include <linux/export.h> 19 #include <linux/stat.h> 20 #include <linux/slab.h> 21 22 /** 23 * kobject_namespace - return @kobj's namespace tag 24 * @kobj: kobject in question 25 * 26 * Returns namespace tag of @kobj if its parent has namespace ops enabled 27 * and thus @kobj should have a namespace tag associated with it. Returns 28 * %NULL otherwise. 29 */ 30 const void *kobject_namespace(struct kobject *kobj) 31 { 32 const struct kobj_ns_type_operations *ns_ops = kobj_ns_ops(kobj); 33 34 if (!ns_ops || ns_ops->type == KOBJ_NS_TYPE_NONE) 35 return NULL; 36 37 return kobj->ktype->namespace(kobj); 38 } 39 40 /* 41 * populate_dir - populate directory with attributes. 42 * @kobj: object we're working on. 43 * 44 * Most subsystems have a set of default attributes that are associated 45 * with an object that registers with them. This is a helper called during 46 * object registration that loops through the default attributes of the 47 * subsystem and creates attributes files for them in sysfs. 48 */ 49 static int populate_dir(struct kobject *kobj) 50 { 51 struct kobj_type *t = get_ktype(kobj); 52 struct attribute *attr; 53 int error = 0; 54 int i; 55 56 if (t && t->default_attrs) { 57 for (i = 0; (attr = t->default_attrs[i]) != NULL; i++) { 58 error = sysfs_create_file(kobj, attr); 59 if (error) 60 break; 61 } 62 } 63 return error; 64 } 65 66 static int create_dir(struct kobject *kobj) 67 { 68 const struct kobj_ns_type_operations *ops; 69 int error; 70 71 error = sysfs_create_dir_ns(kobj, kobject_namespace(kobj)); 72 if (error) 73 return error; 74 75 error = populate_dir(kobj); 76 if (error) { 77 sysfs_remove_dir(kobj); 78 return error; 79 } 80 81 /* 82 * @kobj->sd may be deleted by an ancestor going away. Hold an 83 * extra reference so that it stays until @kobj is gone. 84 */ 85 sysfs_get(kobj->sd); 86 87 /* 88 * If @kobj has ns_ops, its children need to be filtered based on 89 * their namespace tags. Enable namespace support on @kobj->sd. 90 */ 91 ops = kobj_child_ns_ops(kobj); 92 if (ops) { 93 BUG_ON(ops->type <= KOBJ_NS_TYPE_NONE); 94 BUG_ON(ops->type >= KOBJ_NS_TYPES); 95 BUG_ON(!kobj_ns_type_registered(ops->type)); 96 97 kernfs_enable_ns(kobj->sd); 98 } 99 100 return 0; 101 } 102 103 static int get_kobj_path_length(struct kobject *kobj) 104 { 105 int length = 1; 106 struct kobject *parent = kobj; 107 108 /* walk up the ancestors until we hit the one pointing to the 109 * root. 110 * Add 1 to strlen for leading '/' of each level. 111 */ 112 do { 113 if (kobject_name(parent) == NULL) 114 return 0; 115 length += strlen(kobject_name(parent)) + 1; 116 parent = parent->parent; 117 } while (parent); 118 return length; 119 } 120 121 static void fill_kobj_path(struct kobject *kobj, char *path, int length) 122 { 123 struct kobject *parent; 124 125 --length; 126 for (parent = kobj; parent; parent = parent->parent) { 127 int cur = strlen(kobject_name(parent)); 128 /* back up enough to print this name with '/' */ 129 length -= cur; 130 strncpy(path + length, kobject_name(parent), cur); 131 *(path + --length) = '/'; 132 } 133 134 pr_debug("kobject: '%s' (%p): %s: path = '%s'\n", kobject_name(kobj), 135 kobj, __func__, path); 136 } 137 138 /** 139 * kobject_get_path - generate and return the path associated with a given kobj and kset pair. 140 * 141 * @kobj: kobject in question, with which to build the path 142 * @gfp_mask: the allocation type used to allocate the path 143 * 144 * The result must be freed by the caller with kfree(). 145 */ 146 char *kobject_get_path(struct kobject *kobj, gfp_t gfp_mask) 147 { 148 char *path; 149 int len; 150 151 len = get_kobj_path_length(kobj); 152 if (len == 0) 153 return NULL; 154 path = kzalloc(len, gfp_mask); 155 if (!path) 156 return NULL; 157 fill_kobj_path(kobj, path, len); 158 159 return path; 160 } 161 EXPORT_SYMBOL_GPL(kobject_get_path); 162 163 /* add the kobject to its kset's list */ 164 static void kobj_kset_join(struct kobject *kobj) 165 { 166 if (!kobj->kset) 167 return; 168 169 kset_get(kobj->kset); 170 spin_lock(&kobj->kset->list_lock); 171 list_add_tail(&kobj->entry, &kobj->kset->list); 172 spin_unlock(&kobj->kset->list_lock); 173 } 174 175 /* remove the kobject from its kset's list */ 176 static void kobj_kset_leave(struct kobject *kobj) 177 { 178 if (!kobj->kset) 179 return; 180 181 spin_lock(&kobj->kset->list_lock); 182 list_del_init(&kobj->entry); 183 spin_unlock(&kobj->kset->list_lock); 184 kset_put(kobj->kset); 185 } 186 187 static void kobject_init_internal(struct kobject *kobj) 188 { 189 if (!kobj) 190 return; 191 kref_init(&kobj->kref); 192 INIT_LIST_HEAD(&kobj->entry); 193 kobj->state_in_sysfs = 0; 194 kobj->state_add_uevent_sent = 0; 195 kobj->state_remove_uevent_sent = 0; 196 kobj->state_initialized = 1; 197 } 198 199 200 static int kobject_add_internal(struct kobject *kobj) 201 { 202 int error = 0; 203 struct kobject *parent; 204 205 if (!kobj) 206 return -ENOENT; 207 208 if (!kobj->name || !kobj->name[0]) { 209 WARN(1, "kobject: (%p): attempted to be registered with empty " 210 "name!\n", kobj); 211 return -EINVAL; 212 } 213 214 parent = kobject_get(kobj->parent); 215 216 /* join kset if set, use it as parent if we do not already have one */ 217 if (kobj->kset) { 218 if (!parent) 219 parent = kobject_get(&kobj->kset->kobj); 220 kobj_kset_join(kobj); 221 kobj->parent = parent; 222 } 223 224 pr_debug("kobject: '%s' (%p): %s: parent: '%s', set: '%s'\n", 225 kobject_name(kobj), kobj, __func__, 226 parent ? kobject_name(parent) : "<NULL>", 227 kobj->kset ? kobject_name(&kobj->kset->kobj) : "<NULL>"); 228 229 error = create_dir(kobj); 230 if (error) { 231 kobj_kset_leave(kobj); 232 kobject_put(parent); 233 kobj->parent = NULL; 234 235 /* be noisy on error issues */ 236 if (error == -EEXIST) 237 WARN(1, "%s failed for %s with " 238 "-EEXIST, don't try to register things with " 239 "the same name in the same directory.\n", 240 __func__, kobject_name(kobj)); 241 else 242 WARN(1, "%s failed for %s (error: %d parent: %s)\n", 243 __func__, kobject_name(kobj), error, 244 parent ? kobject_name(parent) : "'none'"); 245 } else 246 kobj->state_in_sysfs = 1; 247 248 return error; 249 } 250 251 /** 252 * kobject_set_name_vargs - Set the name of an kobject 253 * @kobj: struct kobject to set the name of 254 * @fmt: format string used to build the name 255 * @vargs: vargs to format the string. 256 */ 257 int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, 258 va_list vargs) 259 { 260 const char *old_name = kobj->name; 261 char *s; 262 263 if (kobj->name && !fmt) 264 return 0; 265 266 kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs); 267 if (!kobj->name) 268 return -ENOMEM; 269 270 /* ewww... some of these buggers have '/' in the name ... */ 271 while ((s = strchr(kobj->name, '/'))) 272 s[0] = '!'; 273 274 kfree(old_name); 275 return 0; 276 } 277 278 /** 279 * kobject_set_name - Set the name of a kobject 280 * @kobj: struct kobject to set the name of 281 * @fmt: format string used to build the name 282 * 283 * This sets the name of the kobject. If you have already added the 284 * kobject to the system, you must call kobject_rename() in order to 285 * change the name of the kobject. 286 */ 287 int kobject_set_name(struct kobject *kobj, const char *fmt, ...) 288 { 289 va_list vargs; 290 int retval; 291 292 va_start(vargs, fmt); 293 retval = kobject_set_name_vargs(kobj, fmt, vargs); 294 va_end(vargs); 295 296 return retval; 297 } 298 EXPORT_SYMBOL(kobject_set_name); 299 300 /** 301 * kobject_init - initialize a kobject structure 302 * @kobj: pointer to the kobject to initialize 303 * @ktype: pointer to the ktype for this kobject. 304 * 305 * This function will properly initialize a kobject such that it can then 306 * be passed to the kobject_add() call. 307 * 308 * After this function is called, the kobject MUST be cleaned up by a call 309 * to kobject_put(), not by a call to kfree directly to ensure that all of 310 * the memory is cleaned up properly. 311 */ 312 void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 313 { 314 char *err_str; 315 316 if (!kobj) { 317 err_str = "invalid kobject pointer!"; 318 goto error; 319 } 320 if (!ktype) { 321 err_str = "must have a ktype to be initialized properly!\n"; 322 goto error; 323 } 324 if (kobj->state_initialized) { 325 /* do not error out as sometimes we can recover */ 326 printk(KERN_ERR "kobject (%p): tried to init an initialized " 327 "object, something is seriously wrong.\n", kobj); 328 dump_stack(); 329 } 330 331 kobject_init_internal(kobj); 332 kobj->ktype = ktype; 333 return; 334 335 error: 336 printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str); 337 dump_stack(); 338 } 339 EXPORT_SYMBOL(kobject_init); 340 341 static int kobject_add_varg(struct kobject *kobj, struct kobject *parent, 342 const char *fmt, va_list vargs) 343 { 344 int retval; 345 346 retval = kobject_set_name_vargs(kobj, fmt, vargs); 347 if (retval) { 348 printk(KERN_ERR "kobject: can not set name properly!\n"); 349 return retval; 350 } 351 kobj->parent = parent; 352 return kobject_add_internal(kobj); 353 } 354 355 /** 356 * kobject_add - the main kobject add function 357 * @kobj: the kobject to add 358 * @parent: pointer to the parent of the kobject. 359 * @fmt: format to name the kobject with. 360 * 361 * The kobject name is set and added to the kobject hierarchy in this 362 * function. 363 * 364 * If @parent is set, then the parent of the @kobj will be set to it. 365 * If @parent is NULL, then the parent of the @kobj will be set to the 366 * kobject associted with the kset assigned to this kobject. If no kset 367 * is assigned to the kobject, then the kobject will be located in the 368 * root of the sysfs tree. 369 * 370 * If this function returns an error, kobject_put() must be called to 371 * properly clean up the memory associated with the object. 372 * Under no instance should the kobject that is passed to this function 373 * be directly freed with a call to kfree(), that can leak memory. 374 * 375 * Note, no "add" uevent will be created with this call, the caller should set 376 * up all of the necessary sysfs files for the object and then call 377 * kobject_uevent() with the UEVENT_ADD parameter to ensure that 378 * userspace is properly notified of this kobject's creation. 379 */ 380 int kobject_add(struct kobject *kobj, struct kobject *parent, 381 const char *fmt, ...) 382 { 383 va_list args; 384 int retval; 385 386 if (!kobj) 387 return -EINVAL; 388 389 if (!kobj->state_initialized) { 390 printk(KERN_ERR "kobject '%s' (%p): tried to add an " 391 "uninitialized object, something is seriously wrong.\n", 392 kobject_name(kobj), kobj); 393 dump_stack(); 394 return -EINVAL; 395 } 396 va_start(args, fmt); 397 retval = kobject_add_varg(kobj, parent, fmt, args); 398 va_end(args); 399 400 return retval; 401 } 402 EXPORT_SYMBOL(kobject_add); 403 404 /** 405 * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy 406 * @kobj: pointer to the kobject to initialize 407 * @ktype: pointer to the ktype for this kobject. 408 * @parent: pointer to the parent of this kobject. 409 * @fmt: the name of the kobject. 410 * 411 * This function combines the call to kobject_init() and 412 * kobject_add(). The same type of error handling after a call to 413 * kobject_add() and kobject lifetime rules are the same here. 414 */ 415 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, 416 struct kobject *parent, const char *fmt, ...) 417 { 418 va_list args; 419 int retval; 420 421 kobject_init(kobj, ktype); 422 423 va_start(args, fmt); 424 retval = kobject_add_varg(kobj, parent, fmt, args); 425 va_end(args); 426 427 return retval; 428 } 429 EXPORT_SYMBOL_GPL(kobject_init_and_add); 430 431 /** 432 * kobject_rename - change the name of an object 433 * @kobj: object in question. 434 * @new_name: object's new name 435 * 436 * It is the responsibility of the caller to provide mutual 437 * exclusion between two different calls of kobject_rename 438 * on the same kobject and to ensure that new_name is valid and 439 * won't conflict with other kobjects. 440 */ 441 int kobject_rename(struct kobject *kobj, const char *new_name) 442 { 443 int error = 0; 444 const char *devpath = NULL; 445 const char *dup_name = NULL, *name; 446 char *devpath_string = NULL; 447 char *envp[2]; 448 449 kobj = kobject_get(kobj); 450 if (!kobj) 451 return -EINVAL; 452 if (!kobj->parent) 453 return -EINVAL; 454 455 devpath = kobject_get_path(kobj, GFP_KERNEL); 456 if (!devpath) { 457 error = -ENOMEM; 458 goto out; 459 } 460 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 461 if (!devpath_string) { 462 error = -ENOMEM; 463 goto out; 464 } 465 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 466 envp[0] = devpath_string; 467 envp[1] = NULL; 468 469 name = dup_name = kstrdup(new_name, GFP_KERNEL); 470 if (!name) { 471 error = -ENOMEM; 472 goto out; 473 } 474 475 error = sysfs_rename_dir_ns(kobj, new_name, kobject_namespace(kobj)); 476 if (error) 477 goto out; 478 479 /* Install the new kobject name */ 480 dup_name = kobj->name; 481 kobj->name = name; 482 483 /* This function is mostly/only used for network interface. 484 * Some hotplug package track interfaces by their name and 485 * therefore want to know when the name is changed by the user. */ 486 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 487 488 out: 489 kfree(dup_name); 490 kfree(devpath_string); 491 kfree(devpath); 492 kobject_put(kobj); 493 494 return error; 495 } 496 EXPORT_SYMBOL_GPL(kobject_rename); 497 498 /** 499 * kobject_move - move object to another parent 500 * @kobj: object in question. 501 * @new_parent: object's new parent (can be NULL) 502 */ 503 int kobject_move(struct kobject *kobj, struct kobject *new_parent) 504 { 505 int error; 506 struct kobject *old_parent; 507 const char *devpath = NULL; 508 char *devpath_string = NULL; 509 char *envp[2]; 510 511 kobj = kobject_get(kobj); 512 if (!kobj) 513 return -EINVAL; 514 new_parent = kobject_get(new_parent); 515 if (!new_parent) { 516 if (kobj->kset) 517 new_parent = kobject_get(&kobj->kset->kobj); 518 } 519 520 /* old object path */ 521 devpath = kobject_get_path(kobj, GFP_KERNEL); 522 if (!devpath) { 523 error = -ENOMEM; 524 goto out; 525 } 526 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 527 if (!devpath_string) { 528 error = -ENOMEM; 529 goto out; 530 } 531 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 532 envp[0] = devpath_string; 533 envp[1] = NULL; 534 error = sysfs_move_dir_ns(kobj, new_parent, kobject_namespace(kobj)); 535 if (error) 536 goto out; 537 old_parent = kobj->parent; 538 kobj->parent = new_parent; 539 new_parent = NULL; 540 kobject_put(old_parent); 541 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 542 out: 543 kobject_put(new_parent); 544 kobject_put(kobj); 545 kfree(devpath_string); 546 kfree(devpath); 547 return error; 548 } 549 550 /** 551 * kobject_del - unlink kobject from hierarchy. 552 * @kobj: object. 553 */ 554 void kobject_del(struct kobject *kobj) 555 { 556 struct sysfs_dirent *sd; 557 558 if (!kobj) 559 return; 560 561 sd = kobj->sd; 562 sysfs_remove_dir(kobj); 563 sysfs_put(sd); 564 565 kobj->state_in_sysfs = 0; 566 kobj_kset_leave(kobj); 567 kobject_put(kobj->parent); 568 kobj->parent = NULL; 569 } 570 571 /** 572 * kobject_get - increment refcount for object. 573 * @kobj: object. 574 */ 575 struct kobject *kobject_get(struct kobject *kobj) 576 { 577 if (kobj) 578 kref_get(&kobj->kref); 579 return kobj; 580 } 581 582 static struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj) 583 { 584 if (!kref_get_unless_zero(&kobj->kref)) 585 kobj = NULL; 586 return kobj; 587 } 588 589 /* 590 * kobject_cleanup - free kobject resources. 591 * @kobj: object to cleanup 592 */ 593 static void kobject_cleanup(struct kobject *kobj) 594 { 595 struct kobj_type *t = get_ktype(kobj); 596 const char *name = kobj->name; 597 598 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 599 kobject_name(kobj), kobj, __func__, kobj->parent); 600 601 if (t && !t->release) 602 pr_debug("kobject: '%s' (%p): does not have a release() " 603 "function, it is broken and must be fixed.\n", 604 kobject_name(kobj), kobj); 605 606 /* send "remove" if the caller did not do it but sent "add" */ 607 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 608 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 609 kobject_name(kobj), kobj); 610 kobject_uevent(kobj, KOBJ_REMOVE); 611 } 612 613 /* remove from sysfs if the caller did not do it */ 614 if (kobj->state_in_sysfs) { 615 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 616 kobject_name(kobj), kobj); 617 kobject_del(kobj); 618 } 619 620 if (t && t->release) { 621 pr_debug("kobject: '%s' (%p): calling ktype release\n", 622 kobject_name(kobj), kobj); 623 t->release(kobj); 624 } 625 626 /* free name if we allocated it */ 627 if (name) { 628 pr_debug("kobject: '%s': free name\n", name); 629 kfree(name); 630 } 631 } 632 633 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 634 static void kobject_delayed_cleanup(struct work_struct *work) 635 { 636 kobject_cleanup(container_of(to_delayed_work(work), 637 struct kobject, release)); 638 } 639 #endif 640 641 static void kobject_release(struct kref *kref) 642 { 643 struct kobject *kobj = container_of(kref, struct kobject, kref); 644 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 645 pr_info("kobject: '%s' (%p): %s, parent %p (delayed)\n", 646 kobject_name(kobj), kobj, __func__, kobj->parent); 647 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup); 648 schedule_delayed_work(&kobj->release, HZ); 649 #else 650 kobject_cleanup(kobj); 651 #endif 652 } 653 654 /** 655 * kobject_put - decrement refcount for object. 656 * @kobj: object. 657 * 658 * Decrement the refcount, and if 0, call kobject_cleanup(). 659 */ 660 void kobject_put(struct kobject *kobj) 661 { 662 if (kobj) { 663 if (!kobj->state_initialized) 664 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 665 "initialized, yet kobject_put() is being " 666 "called.\n", kobject_name(kobj), kobj); 667 kref_put(&kobj->kref, kobject_release); 668 } 669 } 670 671 static void dynamic_kobj_release(struct kobject *kobj) 672 { 673 pr_debug("kobject: (%p): %s\n", kobj, __func__); 674 kfree(kobj); 675 } 676 677 static struct kobj_type dynamic_kobj_ktype = { 678 .release = dynamic_kobj_release, 679 .sysfs_ops = &kobj_sysfs_ops, 680 }; 681 682 /** 683 * kobject_create - create a struct kobject dynamically 684 * 685 * This function creates a kobject structure dynamically and sets it up 686 * to be a "dynamic" kobject with a default release function set up. 687 * 688 * If the kobject was not able to be created, NULL will be returned. 689 * The kobject structure returned from here must be cleaned up with a 690 * call to kobject_put() and not kfree(), as kobject_init() has 691 * already been called on this structure. 692 */ 693 struct kobject *kobject_create(void) 694 { 695 struct kobject *kobj; 696 697 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 698 if (!kobj) 699 return NULL; 700 701 kobject_init(kobj, &dynamic_kobj_ktype); 702 return kobj; 703 } 704 705 /** 706 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 707 * 708 * @name: the name for the kobject 709 * @parent: the parent kobject of this kobject, if any. 710 * 711 * This function creates a kobject structure dynamically and registers it 712 * with sysfs. When you are finished with this structure, call 713 * kobject_put() and the structure will be dynamically freed when 714 * it is no longer being used. 715 * 716 * If the kobject was not able to be created, NULL will be returned. 717 */ 718 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 719 { 720 struct kobject *kobj; 721 int retval; 722 723 kobj = kobject_create(); 724 if (!kobj) 725 return NULL; 726 727 retval = kobject_add(kobj, parent, "%s", name); 728 if (retval) { 729 printk(KERN_WARNING "%s: kobject_add error: %d\n", 730 __func__, retval); 731 kobject_put(kobj); 732 kobj = NULL; 733 } 734 return kobj; 735 } 736 EXPORT_SYMBOL_GPL(kobject_create_and_add); 737 738 /** 739 * kset_init - initialize a kset for use 740 * @k: kset 741 */ 742 void kset_init(struct kset *k) 743 { 744 kobject_init_internal(&k->kobj); 745 INIT_LIST_HEAD(&k->list); 746 spin_lock_init(&k->list_lock); 747 } 748 749 /* default kobject attribute operations */ 750 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 751 char *buf) 752 { 753 struct kobj_attribute *kattr; 754 ssize_t ret = -EIO; 755 756 kattr = container_of(attr, struct kobj_attribute, attr); 757 if (kattr->show) 758 ret = kattr->show(kobj, kattr, buf); 759 return ret; 760 } 761 762 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 763 const char *buf, size_t count) 764 { 765 struct kobj_attribute *kattr; 766 ssize_t ret = -EIO; 767 768 kattr = container_of(attr, struct kobj_attribute, attr); 769 if (kattr->store) 770 ret = kattr->store(kobj, kattr, buf, count); 771 return ret; 772 } 773 774 const struct sysfs_ops kobj_sysfs_ops = { 775 .show = kobj_attr_show, 776 .store = kobj_attr_store, 777 }; 778 779 /** 780 * kobj_completion_init - initialize a kobj_completion object. 781 * @kc: kobj_completion 782 * @ktype: type of kobject to initialize 783 * 784 * kobj_completion structures can be embedded within structures with different 785 * lifetime rules. During the release of the enclosing object, we can 786 * wait on the release of the kobject so that we don't free it while it's 787 * still busy. 788 */ 789 void kobj_completion_init(struct kobj_completion *kc, struct kobj_type *ktype) 790 { 791 init_completion(&kc->kc_unregister); 792 kobject_init(&kc->kc_kobj, ktype); 793 } 794 EXPORT_SYMBOL_GPL(kobj_completion_init); 795 796 /** 797 * kobj_completion_release - release a kobj_completion object 798 * @kobj: kobject embedded in kobj_completion 799 * 800 * Used with kobject_release to notify waiters that the kobject has been 801 * released. 802 */ 803 void kobj_completion_release(struct kobject *kobj) 804 { 805 struct kobj_completion *kc = kobj_to_kobj_completion(kobj); 806 complete(&kc->kc_unregister); 807 } 808 EXPORT_SYMBOL_GPL(kobj_completion_release); 809 810 /** 811 * kobj_completion_del_and_wait - release the kobject and wait for it 812 * @kc: kobj_completion object to release 813 * 814 * Delete the kobject from sysfs and drop the reference count. Then wait 815 * until any other outstanding references are also dropped. This routine 816 * is only necessary once other references may have been taken on the 817 * kobject. Typically this happens when the kobject has been published 818 * to sysfs via kobject_add. 819 */ 820 void kobj_completion_del_and_wait(struct kobj_completion *kc) 821 { 822 kobject_del(&kc->kc_kobj); 823 kobject_put(&kc->kc_kobj); 824 wait_for_completion(&kc->kc_unregister); 825 } 826 EXPORT_SYMBOL_GPL(kobj_completion_del_and_wait); 827 828 /** 829 * kset_register - initialize and add a kset. 830 * @k: kset. 831 */ 832 int kset_register(struct kset *k) 833 { 834 int err; 835 836 if (!k) 837 return -EINVAL; 838 839 kset_init(k); 840 err = kobject_add_internal(&k->kobj); 841 if (err) 842 return err; 843 kobject_uevent(&k->kobj, KOBJ_ADD); 844 return 0; 845 } 846 847 /** 848 * kset_unregister - remove a kset. 849 * @k: kset. 850 */ 851 void kset_unregister(struct kset *k) 852 { 853 if (!k) 854 return; 855 kobject_put(&k->kobj); 856 } 857 858 /** 859 * kset_find_obj - search for object in kset. 860 * @kset: kset we're looking in. 861 * @name: object's name. 862 * 863 * Lock kset via @kset->subsys, and iterate over @kset->list, 864 * looking for a matching kobject. If matching object is found 865 * take a reference and return the object. 866 */ 867 struct kobject *kset_find_obj(struct kset *kset, const char *name) 868 { 869 struct kobject *k; 870 struct kobject *ret = NULL; 871 872 spin_lock(&kset->list_lock); 873 874 list_for_each_entry(k, &kset->list, entry) { 875 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 876 ret = kobject_get_unless_zero(k); 877 break; 878 } 879 } 880 881 spin_unlock(&kset->list_lock); 882 return ret; 883 } 884 885 static void kset_release(struct kobject *kobj) 886 { 887 struct kset *kset = container_of(kobj, struct kset, kobj); 888 pr_debug("kobject: '%s' (%p): %s\n", 889 kobject_name(kobj), kobj, __func__); 890 kfree(kset); 891 } 892 893 static struct kobj_type kset_ktype = { 894 .sysfs_ops = &kobj_sysfs_ops, 895 .release = kset_release, 896 }; 897 898 /** 899 * kset_create - create a struct kset dynamically 900 * 901 * @name: the name for the kset 902 * @uevent_ops: a struct kset_uevent_ops for the kset 903 * @parent_kobj: the parent kobject of this kset, if any. 904 * 905 * This function creates a kset structure dynamically. This structure can 906 * then be registered with the system and show up in sysfs with a call to 907 * kset_register(). When you are finished with this structure, if 908 * kset_register() has been called, call kset_unregister() and the 909 * structure will be dynamically freed when it is no longer being used. 910 * 911 * If the kset was not able to be created, NULL will be returned. 912 */ 913 static struct kset *kset_create(const char *name, 914 const struct kset_uevent_ops *uevent_ops, 915 struct kobject *parent_kobj) 916 { 917 struct kset *kset; 918 int retval; 919 920 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 921 if (!kset) 922 return NULL; 923 retval = kobject_set_name(&kset->kobj, "%s", name); 924 if (retval) { 925 kfree(kset); 926 return NULL; 927 } 928 kset->uevent_ops = uevent_ops; 929 kset->kobj.parent = parent_kobj; 930 931 /* 932 * The kobject of this kset will have a type of kset_ktype and belong to 933 * no kset itself. That way we can properly free it when it is 934 * finished being used. 935 */ 936 kset->kobj.ktype = &kset_ktype; 937 kset->kobj.kset = NULL; 938 939 return kset; 940 } 941 942 /** 943 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 944 * 945 * @name: the name for the kset 946 * @uevent_ops: a struct kset_uevent_ops for the kset 947 * @parent_kobj: the parent kobject of this kset, if any. 948 * 949 * This function creates a kset structure dynamically and registers it 950 * with sysfs. When you are finished with this structure, call 951 * kset_unregister() and the structure will be dynamically freed when it 952 * is no longer being used. 953 * 954 * If the kset was not able to be created, NULL will be returned. 955 */ 956 struct kset *kset_create_and_add(const char *name, 957 const struct kset_uevent_ops *uevent_ops, 958 struct kobject *parent_kobj) 959 { 960 struct kset *kset; 961 int error; 962 963 kset = kset_create(name, uevent_ops, parent_kobj); 964 if (!kset) 965 return NULL; 966 error = kset_register(kset); 967 if (error) { 968 kfree(kset); 969 return NULL; 970 } 971 return kset; 972 } 973 EXPORT_SYMBOL_GPL(kset_create_and_add); 974 975 976 static DEFINE_SPINLOCK(kobj_ns_type_lock); 977 static const struct kobj_ns_type_operations *kobj_ns_ops_tbl[KOBJ_NS_TYPES]; 978 979 int kobj_ns_type_register(const struct kobj_ns_type_operations *ops) 980 { 981 enum kobj_ns_type type = ops->type; 982 int error; 983 984 spin_lock(&kobj_ns_type_lock); 985 986 error = -EINVAL; 987 if (type >= KOBJ_NS_TYPES) 988 goto out; 989 990 error = -EINVAL; 991 if (type <= KOBJ_NS_TYPE_NONE) 992 goto out; 993 994 error = -EBUSY; 995 if (kobj_ns_ops_tbl[type]) 996 goto out; 997 998 error = 0; 999 kobj_ns_ops_tbl[type] = ops; 1000 1001 out: 1002 spin_unlock(&kobj_ns_type_lock); 1003 return error; 1004 } 1005 1006 int kobj_ns_type_registered(enum kobj_ns_type type) 1007 { 1008 int registered = 0; 1009 1010 spin_lock(&kobj_ns_type_lock); 1011 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES)) 1012 registered = kobj_ns_ops_tbl[type] != NULL; 1013 spin_unlock(&kobj_ns_type_lock); 1014 1015 return registered; 1016 } 1017 1018 const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent) 1019 { 1020 const struct kobj_ns_type_operations *ops = NULL; 1021 1022 if (parent && parent->ktype->child_ns_type) 1023 ops = parent->ktype->child_ns_type(parent); 1024 1025 return ops; 1026 } 1027 1028 const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj) 1029 { 1030 return kobj_child_ns_ops(kobj->parent); 1031 } 1032 1033 bool kobj_ns_current_may_mount(enum kobj_ns_type type) 1034 { 1035 bool may_mount = true; 1036 1037 spin_lock(&kobj_ns_type_lock); 1038 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1039 kobj_ns_ops_tbl[type]) 1040 may_mount = kobj_ns_ops_tbl[type]->current_may_mount(); 1041 spin_unlock(&kobj_ns_type_lock); 1042 1043 return may_mount; 1044 } 1045 1046 void *kobj_ns_grab_current(enum kobj_ns_type type) 1047 { 1048 void *ns = NULL; 1049 1050 spin_lock(&kobj_ns_type_lock); 1051 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1052 kobj_ns_ops_tbl[type]) 1053 ns = kobj_ns_ops_tbl[type]->grab_current_ns(); 1054 spin_unlock(&kobj_ns_type_lock); 1055 1056 return ns; 1057 } 1058 1059 const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk) 1060 { 1061 const void *ns = NULL; 1062 1063 spin_lock(&kobj_ns_type_lock); 1064 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1065 kobj_ns_ops_tbl[type]) 1066 ns = kobj_ns_ops_tbl[type]->netlink_ns(sk); 1067 spin_unlock(&kobj_ns_type_lock); 1068 1069 return ns; 1070 } 1071 1072 const void *kobj_ns_initial(enum kobj_ns_type type) 1073 { 1074 const void *ns = NULL; 1075 1076 spin_lock(&kobj_ns_type_lock); 1077 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1078 kobj_ns_ops_tbl[type]) 1079 ns = kobj_ns_ops_tbl[type]->initial_ns(); 1080 spin_unlock(&kobj_ns_type_lock); 1081 1082 return ns; 1083 } 1084 1085 void kobj_ns_drop(enum kobj_ns_type type, void *ns) 1086 { 1087 spin_lock(&kobj_ns_type_lock); 1088 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1089 kobj_ns_ops_tbl[type] && kobj_ns_ops_tbl[type]->drop_ns) 1090 kobj_ns_ops_tbl[type]->drop_ns(ns); 1091 spin_unlock(&kobj_ns_type_lock); 1092 } 1093 1094 EXPORT_SYMBOL(kobject_get); 1095 EXPORT_SYMBOL(kobject_put); 1096 EXPORT_SYMBOL(kobject_del); 1097 1098 EXPORT_SYMBOL(kset_register); 1099 EXPORT_SYMBOL(kset_unregister); 1100