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/export.h> 18 #include <linux/stat.h> 19 #include <linux/slab.h> 20 #include <linux/random.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 sysfs_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 char *s; 261 262 if (kobj->name && !fmt) 263 return 0; 264 265 s = kvasprintf(GFP_KERNEL, fmt, vargs); 266 if (!s) 267 return -ENOMEM; 268 269 /* ewww... some of these buggers have '/' in the name ... */ 270 strreplace(s, '/', '!'); 271 kfree(kobj->name); 272 kobj->name = s; 273 274 return 0; 275 } 276 277 /** 278 * kobject_set_name - Set the name of a kobject 279 * @kobj: struct kobject to set the name of 280 * @fmt: format string used to build the name 281 * 282 * This sets the name of the kobject. If you have already added the 283 * kobject to the system, you must call kobject_rename() in order to 284 * change the name of the kobject. 285 */ 286 int kobject_set_name(struct kobject *kobj, const char *fmt, ...) 287 { 288 va_list vargs; 289 int retval; 290 291 va_start(vargs, fmt); 292 retval = kobject_set_name_vargs(kobj, fmt, vargs); 293 va_end(vargs); 294 295 return retval; 296 } 297 EXPORT_SYMBOL(kobject_set_name); 298 299 /** 300 * kobject_init - initialize a kobject structure 301 * @kobj: pointer to the kobject to initialize 302 * @ktype: pointer to the ktype for this kobject. 303 * 304 * This function will properly initialize a kobject such that it can then 305 * be passed to the kobject_add() call. 306 * 307 * After this function is called, the kobject MUST be cleaned up by a call 308 * to kobject_put(), not by a call to kfree directly to ensure that all of 309 * the memory is cleaned up properly. 310 */ 311 void kobject_init(struct kobject *kobj, struct kobj_type *ktype) 312 { 313 char *err_str; 314 315 if (!kobj) { 316 err_str = "invalid kobject pointer!"; 317 goto error; 318 } 319 if (!ktype) { 320 err_str = "must have a ktype to be initialized properly!\n"; 321 goto error; 322 } 323 if (kobj->state_initialized) { 324 /* do not error out as sometimes we can recover */ 325 printk(KERN_ERR "kobject (%p): tried to init an initialized " 326 "object, something is seriously wrong.\n", kobj); 327 dump_stack(); 328 } 329 330 kobject_init_internal(kobj); 331 kobj->ktype = ktype; 332 return; 333 334 error: 335 printk(KERN_ERR "kobject (%p): %s\n", kobj, err_str); 336 dump_stack(); 337 } 338 EXPORT_SYMBOL(kobject_init); 339 340 static __printf(3, 0) int kobject_add_varg(struct kobject *kobj, 341 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 associated 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 EXPORT_SYMBOL_GPL(kobject_move); 550 551 /** 552 * kobject_del - unlink kobject from hierarchy. 553 * @kobj: object. 554 */ 555 void kobject_del(struct kobject *kobj) 556 { 557 struct kernfs_node *sd; 558 559 if (!kobj) 560 return; 561 562 sd = kobj->sd; 563 sysfs_remove_dir(kobj); 564 sysfs_put(sd); 565 566 kobj->state_in_sysfs = 0; 567 kobj_kset_leave(kobj); 568 kobject_put(kobj->parent); 569 kobj->parent = NULL; 570 } 571 572 /** 573 * kobject_get - increment refcount for object. 574 * @kobj: object. 575 */ 576 struct kobject *kobject_get(struct kobject *kobj) 577 { 578 if (kobj) { 579 if (!kobj->state_initialized) 580 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 581 "initialized, yet kobject_get() is being " 582 "called.\n", kobject_name(kobj), kobj); 583 kref_get(&kobj->kref); 584 } 585 return kobj; 586 } 587 588 static struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj) 589 { 590 if (!kref_get_unless_zero(&kobj->kref)) 591 kobj = NULL; 592 return kobj; 593 } 594 595 /* 596 * kobject_cleanup - free kobject resources. 597 * @kobj: object to cleanup 598 */ 599 static void kobject_cleanup(struct kobject *kobj) 600 { 601 struct kobj_type *t = get_ktype(kobj); 602 const char *name = kobj->name; 603 604 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 605 kobject_name(kobj), kobj, __func__, kobj->parent); 606 607 if (t && !t->release) 608 pr_debug("kobject: '%s' (%p): does not have a release() " 609 "function, it is broken and must be fixed.\n", 610 kobject_name(kobj), kobj); 611 612 /* send "remove" if the caller did not do it but sent "add" */ 613 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 614 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 615 kobject_name(kobj), kobj); 616 kobject_uevent(kobj, KOBJ_REMOVE); 617 } 618 619 /* remove from sysfs if the caller did not do it */ 620 if (kobj->state_in_sysfs) { 621 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 622 kobject_name(kobj), kobj); 623 kobject_del(kobj); 624 } 625 626 if (t && t->release) { 627 pr_debug("kobject: '%s' (%p): calling ktype release\n", 628 kobject_name(kobj), kobj); 629 t->release(kobj); 630 } 631 632 /* free name if we allocated it */ 633 if (name) { 634 pr_debug("kobject: '%s': free name\n", name); 635 kfree(name); 636 } 637 } 638 639 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 640 static void kobject_delayed_cleanup(struct work_struct *work) 641 { 642 kobject_cleanup(container_of(to_delayed_work(work), 643 struct kobject, release)); 644 } 645 #endif 646 647 static void kobject_release(struct kref *kref) 648 { 649 struct kobject *kobj = container_of(kref, struct kobject, kref); 650 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 651 unsigned long delay = HZ + HZ * (get_random_int() & 0x3); 652 pr_info("kobject: '%s' (%p): %s, parent %p (delayed %ld)\n", 653 kobject_name(kobj), kobj, __func__, kobj->parent, delay); 654 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup); 655 656 schedule_delayed_work(&kobj->release, delay); 657 #else 658 kobject_cleanup(kobj); 659 #endif 660 } 661 662 /** 663 * kobject_put - decrement refcount for object. 664 * @kobj: object. 665 * 666 * Decrement the refcount, and if 0, call kobject_cleanup(). 667 */ 668 void kobject_put(struct kobject *kobj) 669 { 670 if (kobj) { 671 if (!kobj->state_initialized) 672 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 673 "initialized, yet kobject_put() is being " 674 "called.\n", kobject_name(kobj), kobj); 675 kref_put(&kobj->kref, kobject_release); 676 } 677 } 678 679 static void dynamic_kobj_release(struct kobject *kobj) 680 { 681 pr_debug("kobject: (%p): %s\n", kobj, __func__); 682 kfree(kobj); 683 } 684 685 static struct kobj_type dynamic_kobj_ktype = { 686 .release = dynamic_kobj_release, 687 .sysfs_ops = &kobj_sysfs_ops, 688 }; 689 690 /** 691 * kobject_create - create a struct kobject dynamically 692 * 693 * This function creates a kobject structure dynamically and sets it up 694 * to be a "dynamic" kobject with a default release function set up. 695 * 696 * If the kobject was not able to be created, NULL will be returned. 697 * The kobject structure returned from here must be cleaned up with a 698 * call to kobject_put() and not kfree(), as kobject_init() has 699 * already been called on this structure. 700 */ 701 struct kobject *kobject_create(void) 702 { 703 struct kobject *kobj; 704 705 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 706 if (!kobj) 707 return NULL; 708 709 kobject_init(kobj, &dynamic_kobj_ktype); 710 return kobj; 711 } 712 713 /** 714 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 715 * 716 * @name: the name for the kobject 717 * @parent: the parent kobject of this kobject, if any. 718 * 719 * This function creates a kobject structure dynamically and registers it 720 * with sysfs. When you are finished with this structure, call 721 * kobject_put() and the structure will be dynamically freed when 722 * it is no longer being used. 723 * 724 * If the kobject was not able to be created, NULL will be returned. 725 */ 726 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 727 { 728 struct kobject *kobj; 729 int retval; 730 731 kobj = kobject_create(); 732 if (!kobj) 733 return NULL; 734 735 retval = kobject_add(kobj, parent, "%s", name); 736 if (retval) { 737 printk(KERN_WARNING "%s: kobject_add error: %d\n", 738 __func__, retval); 739 kobject_put(kobj); 740 kobj = NULL; 741 } 742 return kobj; 743 } 744 EXPORT_SYMBOL_GPL(kobject_create_and_add); 745 746 /** 747 * kset_init - initialize a kset for use 748 * @k: kset 749 */ 750 void kset_init(struct kset *k) 751 { 752 kobject_init_internal(&k->kobj); 753 INIT_LIST_HEAD(&k->list); 754 spin_lock_init(&k->list_lock); 755 } 756 757 /* default kobject attribute operations */ 758 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 759 char *buf) 760 { 761 struct kobj_attribute *kattr; 762 ssize_t ret = -EIO; 763 764 kattr = container_of(attr, struct kobj_attribute, attr); 765 if (kattr->show) 766 ret = kattr->show(kobj, kattr, buf); 767 return ret; 768 } 769 770 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 771 const char *buf, size_t count) 772 { 773 struct kobj_attribute *kattr; 774 ssize_t ret = -EIO; 775 776 kattr = container_of(attr, struct kobj_attribute, attr); 777 if (kattr->store) 778 ret = kattr->store(kobj, kattr, buf, count); 779 return ret; 780 } 781 782 const struct sysfs_ops kobj_sysfs_ops = { 783 .show = kobj_attr_show, 784 .store = kobj_attr_store, 785 }; 786 EXPORT_SYMBOL_GPL(kobj_sysfs_ops); 787 788 /** 789 * kset_register - initialize and add a kset. 790 * @k: kset. 791 */ 792 int kset_register(struct kset *k) 793 { 794 int err; 795 796 if (!k) 797 return -EINVAL; 798 799 kset_init(k); 800 err = kobject_add_internal(&k->kobj); 801 if (err) 802 return err; 803 kobject_uevent(&k->kobj, KOBJ_ADD); 804 return 0; 805 } 806 807 /** 808 * kset_unregister - remove a kset. 809 * @k: kset. 810 */ 811 void kset_unregister(struct kset *k) 812 { 813 if (!k) 814 return; 815 kobject_del(&k->kobj); 816 kobject_put(&k->kobj); 817 } 818 819 /** 820 * kset_find_obj - search for object in kset. 821 * @kset: kset we're looking in. 822 * @name: object's name. 823 * 824 * Lock kset via @kset->subsys, and iterate over @kset->list, 825 * looking for a matching kobject. If matching object is found 826 * take a reference and return the object. 827 */ 828 struct kobject *kset_find_obj(struct kset *kset, const char *name) 829 { 830 struct kobject *k; 831 struct kobject *ret = NULL; 832 833 spin_lock(&kset->list_lock); 834 835 list_for_each_entry(k, &kset->list, entry) { 836 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 837 ret = kobject_get_unless_zero(k); 838 break; 839 } 840 } 841 842 spin_unlock(&kset->list_lock); 843 return ret; 844 } 845 846 static void kset_release(struct kobject *kobj) 847 { 848 struct kset *kset = container_of(kobj, struct kset, kobj); 849 pr_debug("kobject: '%s' (%p): %s\n", 850 kobject_name(kobj), kobj, __func__); 851 kfree(kset); 852 } 853 854 static struct kobj_type kset_ktype = { 855 .sysfs_ops = &kobj_sysfs_ops, 856 .release = kset_release, 857 }; 858 859 /** 860 * kset_create - create a struct kset dynamically 861 * 862 * @name: the name for the kset 863 * @uevent_ops: a struct kset_uevent_ops for the kset 864 * @parent_kobj: the parent kobject of this kset, if any. 865 * 866 * This function creates a kset structure dynamically. This structure can 867 * then be registered with the system and show up in sysfs with a call to 868 * kset_register(). When you are finished with this structure, if 869 * kset_register() has been called, call kset_unregister() and the 870 * structure will be dynamically freed when it is no longer being used. 871 * 872 * If the kset was not able to be created, NULL will be returned. 873 */ 874 static struct kset *kset_create(const char *name, 875 const struct kset_uevent_ops *uevent_ops, 876 struct kobject *parent_kobj) 877 { 878 struct kset *kset; 879 int retval; 880 881 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 882 if (!kset) 883 return NULL; 884 retval = kobject_set_name(&kset->kobj, "%s", name); 885 if (retval) { 886 kfree(kset); 887 return NULL; 888 } 889 kset->uevent_ops = uevent_ops; 890 kset->kobj.parent = parent_kobj; 891 892 /* 893 * The kobject of this kset will have a type of kset_ktype and belong to 894 * no kset itself. That way we can properly free it when it is 895 * finished being used. 896 */ 897 kset->kobj.ktype = &kset_ktype; 898 kset->kobj.kset = NULL; 899 900 return kset; 901 } 902 903 /** 904 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 905 * 906 * @name: the name for the kset 907 * @uevent_ops: a struct kset_uevent_ops for the kset 908 * @parent_kobj: the parent kobject of this kset, if any. 909 * 910 * This function creates a kset structure dynamically and registers it 911 * with sysfs. When you are finished with this structure, call 912 * kset_unregister() and the structure will be dynamically freed when it 913 * is no longer being used. 914 * 915 * If the kset was not able to be created, NULL will be returned. 916 */ 917 struct kset *kset_create_and_add(const char *name, 918 const struct kset_uevent_ops *uevent_ops, 919 struct kobject *parent_kobj) 920 { 921 struct kset *kset; 922 int error; 923 924 kset = kset_create(name, uevent_ops, parent_kobj); 925 if (!kset) 926 return NULL; 927 error = kset_register(kset); 928 if (error) { 929 kfree(kset); 930 return NULL; 931 } 932 return kset; 933 } 934 EXPORT_SYMBOL_GPL(kset_create_and_add); 935 936 937 static DEFINE_SPINLOCK(kobj_ns_type_lock); 938 static const struct kobj_ns_type_operations *kobj_ns_ops_tbl[KOBJ_NS_TYPES]; 939 940 int kobj_ns_type_register(const struct kobj_ns_type_operations *ops) 941 { 942 enum kobj_ns_type type = ops->type; 943 int error; 944 945 spin_lock(&kobj_ns_type_lock); 946 947 error = -EINVAL; 948 if (type >= KOBJ_NS_TYPES) 949 goto out; 950 951 error = -EINVAL; 952 if (type <= KOBJ_NS_TYPE_NONE) 953 goto out; 954 955 error = -EBUSY; 956 if (kobj_ns_ops_tbl[type]) 957 goto out; 958 959 error = 0; 960 kobj_ns_ops_tbl[type] = ops; 961 962 out: 963 spin_unlock(&kobj_ns_type_lock); 964 return error; 965 } 966 967 int kobj_ns_type_registered(enum kobj_ns_type type) 968 { 969 int registered = 0; 970 971 spin_lock(&kobj_ns_type_lock); 972 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES)) 973 registered = kobj_ns_ops_tbl[type] != NULL; 974 spin_unlock(&kobj_ns_type_lock); 975 976 return registered; 977 } 978 979 const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent) 980 { 981 const struct kobj_ns_type_operations *ops = NULL; 982 983 if (parent && parent->ktype && parent->ktype->child_ns_type) 984 ops = parent->ktype->child_ns_type(parent); 985 986 return ops; 987 } 988 989 const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj) 990 { 991 return kobj_child_ns_ops(kobj->parent); 992 } 993 994 bool kobj_ns_current_may_mount(enum kobj_ns_type type) 995 { 996 bool may_mount = true; 997 998 spin_lock(&kobj_ns_type_lock); 999 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1000 kobj_ns_ops_tbl[type]) 1001 may_mount = kobj_ns_ops_tbl[type]->current_may_mount(); 1002 spin_unlock(&kobj_ns_type_lock); 1003 1004 return may_mount; 1005 } 1006 1007 void *kobj_ns_grab_current(enum kobj_ns_type type) 1008 { 1009 void *ns = NULL; 1010 1011 spin_lock(&kobj_ns_type_lock); 1012 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1013 kobj_ns_ops_tbl[type]) 1014 ns = kobj_ns_ops_tbl[type]->grab_current_ns(); 1015 spin_unlock(&kobj_ns_type_lock); 1016 1017 return ns; 1018 } 1019 1020 const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk) 1021 { 1022 const void *ns = NULL; 1023 1024 spin_lock(&kobj_ns_type_lock); 1025 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1026 kobj_ns_ops_tbl[type]) 1027 ns = kobj_ns_ops_tbl[type]->netlink_ns(sk); 1028 spin_unlock(&kobj_ns_type_lock); 1029 1030 return ns; 1031 } 1032 1033 const void *kobj_ns_initial(enum kobj_ns_type type) 1034 { 1035 const void *ns = NULL; 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 ns = kobj_ns_ops_tbl[type]->initial_ns(); 1041 spin_unlock(&kobj_ns_type_lock); 1042 1043 return ns; 1044 } 1045 1046 void kobj_ns_drop(enum kobj_ns_type type, void *ns) 1047 { 1048 spin_lock(&kobj_ns_type_lock); 1049 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1050 kobj_ns_ops_tbl[type] && kobj_ns_ops_tbl[type]->drop_ns) 1051 kobj_ns_ops_tbl[type]->drop_ns(ns); 1052 spin_unlock(&kobj_ns_type_lock); 1053 } 1054 1055 EXPORT_SYMBOL(kobject_get); 1056 EXPORT_SYMBOL(kobject_put); 1057 EXPORT_SYMBOL(kobject_del); 1058 1059 EXPORT_SYMBOL(kset_register); 1060 EXPORT_SYMBOL(kset_unregister); 1061