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 int kobject_add_varg(struct kobject *kobj, struct kobject *parent, 341 const char *fmt, va_list vargs) 342 { 343 int retval; 344 345 retval = kobject_set_name_vargs(kobj, fmt, vargs); 346 if (retval) { 347 printk(KERN_ERR "kobject: can not set name properly!\n"); 348 return retval; 349 } 350 kobj->parent = parent; 351 return kobject_add_internal(kobj); 352 } 353 354 /** 355 * kobject_add - the main kobject add function 356 * @kobj: the kobject to add 357 * @parent: pointer to the parent of the kobject. 358 * @fmt: format to name the kobject with. 359 * 360 * The kobject name is set and added to the kobject hierarchy in this 361 * function. 362 * 363 * If @parent is set, then the parent of the @kobj will be set to it. 364 * If @parent is NULL, then the parent of the @kobj will be set to the 365 * kobject associated with the kset assigned to this kobject. If no kset 366 * is assigned to the kobject, then the kobject will be located in the 367 * root of the sysfs tree. 368 * 369 * If this function returns an error, kobject_put() must be called to 370 * properly clean up the memory associated with the object. 371 * Under no instance should the kobject that is passed to this function 372 * be directly freed with a call to kfree(), that can leak memory. 373 * 374 * Note, no "add" uevent will be created with this call, the caller should set 375 * up all of the necessary sysfs files for the object and then call 376 * kobject_uevent() with the UEVENT_ADD parameter to ensure that 377 * userspace is properly notified of this kobject's creation. 378 */ 379 int kobject_add(struct kobject *kobj, struct kobject *parent, 380 const char *fmt, ...) 381 { 382 va_list args; 383 int retval; 384 385 if (!kobj) 386 return -EINVAL; 387 388 if (!kobj->state_initialized) { 389 printk(KERN_ERR "kobject '%s' (%p): tried to add an " 390 "uninitialized object, something is seriously wrong.\n", 391 kobject_name(kobj), kobj); 392 dump_stack(); 393 return -EINVAL; 394 } 395 va_start(args, fmt); 396 retval = kobject_add_varg(kobj, parent, fmt, args); 397 va_end(args); 398 399 return retval; 400 } 401 EXPORT_SYMBOL(kobject_add); 402 403 /** 404 * kobject_init_and_add - initialize a kobject structure and add it to the kobject hierarchy 405 * @kobj: pointer to the kobject to initialize 406 * @ktype: pointer to the ktype for this kobject. 407 * @parent: pointer to the parent of this kobject. 408 * @fmt: the name of the kobject. 409 * 410 * This function combines the call to kobject_init() and 411 * kobject_add(). The same type of error handling after a call to 412 * kobject_add() and kobject lifetime rules are the same here. 413 */ 414 int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, 415 struct kobject *parent, const char *fmt, ...) 416 { 417 va_list args; 418 int retval; 419 420 kobject_init(kobj, ktype); 421 422 va_start(args, fmt); 423 retval = kobject_add_varg(kobj, parent, fmt, args); 424 va_end(args); 425 426 return retval; 427 } 428 EXPORT_SYMBOL_GPL(kobject_init_and_add); 429 430 /** 431 * kobject_rename - change the name of an object 432 * @kobj: object in question. 433 * @new_name: object's new name 434 * 435 * It is the responsibility of the caller to provide mutual 436 * exclusion between two different calls of kobject_rename 437 * on the same kobject and to ensure that new_name is valid and 438 * won't conflict with other kobjects. 439 */ 440 int kobject_rename(struct kobject *kobj, const char *new_name) 441 { 442 int error = 0; 443 const char *devpath = NULL; 444 const char *dup_name = NULL, *name; 445 char *devpath_string = NULL; 446 char *envp[2]; 447 448 kobj = kobject_get(kobj); 449 if (!kobj) 450 return -EINVAL; 451 if (!kobj->parent) 452 return -EINVAL; 453 454 devpath = kobject_get_path(kobj, GFP_KERNEL); 455 if (!devpath) { 456 error = -ENOMEM; 457 goto out; 458 } 459 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 460 if (!devpath_string) { 461 error = -ENOMEM; 462 goto out; 463 } 464 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 465 envp[0] = devpath_string; 466 envp[1] = NULL; 467 468 name = dup_name = kstrdup(new_name, GFP_KERNEL); 469 if (!name) { 470 error = -ENOMEM; 471 goto out; 472 } 473 474 error = sysfs_rename_dir_ns(kobj, new_name, kobject_namespace(kobj)); 475 if (error) 476 goto out; 477 478 /* Install the new kobject name */ 479 dup_name = kobj->name; 480 kobj->name = name; 481 482 /* This function is mostly/only used for network interface. 483 * Some hotplug package track interfaces by their name and 484 * therefore want to know when the name is changed by the user. */ 485 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 486 487 out: 488 kfree(dup_name); 489 kfree(devpath_string); 490 kfree(devpath); 491 kobject_put(kobj); 492 493 return error; 494 } 495 EXPORT_SYMBOL_GPL(kobject_rename); 496 497 /** 498 * kobject_move - move object to another parent 499 * @kobj: object in question. 500 * @new_parent: object's new parent (can be NULL) 501 */ 502 int kobject_move(struct kobject *kobj, struct kobject *new_parent) 503 { 504 int error; 505 struct kobject *old_parent; 506 const char *devpath = NULL; 507 char *devpath_string = NULL; 508 char *envp[2]; 509 510 kobj = kobject_get(kobj); 511 if (!kobj) 512 return -EINVAL; 513 new_parent = kobject_get(new_parent); 514 if (!new_parent) { 515 if (kobj->kset) 516 new_parent = kobject_get(&kobj->kset->kobj); 517 } 518 519 /* old object path */ 520 devpath = kobject_get_path(kobj, GFP_KERNEL); 521 if (!devpath) { 522 error = -ENOMEM; 523 goto out; 524 } 525 devpath_string = kmalloc(strlen(devpath) + 15, GFP_KERNEL); 526 if (!devpath_string) { 527 error = -ENOMEM; 528 goto out; 529 } 530 sprintf(devpath_string, "DEVPATH_OLD=%s", devpath); 531 envp[0] = devpath_string; 532 envp[1] = NULL; 533 error = sysfs_move_dir_ns(kobj, new_parent, kobject_namespace(kobj)); 534 if (error) 535 goto out; 536 old_parent = kobj->parent; 537 kobj->parent = new_parent; 538 new_parent = NULL; 539 kobject_put(old_parent); 540 kobject_uevent_env(kobj, KOBJ_MOVE, envp); 541 out: 542 kobject_put(new_parent); 543 kobject_put(kobj); 544 kfree(devpath_string); 545 kfree(devpath); 546 return error; 547 } 548 549 /** 550 * kobject_del - unlink kobject from hierarchy. 551 * @kobj: object. 552 */ 553 void kobject_del(struct kobject *kobj) 554 { 555 struct kernfs_node *sd; 556 557 if (!kobj) 558 return; 559 560 sd = kobj->sd; 561 sysfs_remove_dir(kobj); 562 sysfs_put(sd); 563 564 kobj->state_in_sysfs = 0; 565 kobj_kset_leave(kobj); 566 kobject_put(kobj->parent); 567 kobj->parent = NULL; 568 } 569 570 /** 571 * kobject_get - increment refcount for object. 572 * @kobj: object. 573 */ 574 struct kobject *kobject_get(struct kobject *kobj) 575 { 576 if (kobj) { 577 if (!kobj->state_initialized) 578 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 579 "initialized, yet kobject_get() is being " 580 "called.\n", kobject_name(kobj), kobj); 581 kref_get(&kobj->kref); 582 } 583 return kobj; 584 } 585 586 static struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj) 587 { 588 if (!kref_get_unless_zero(&kobj->kref)) 589 kobj = NULL; 590 return kobj; 591 } 592 593 /* 594 * kobject_cleanup - free kobject resources. 595 * @kobj: object to cleanup 596 */ 597 static void kobject_cleanup(struct kobject *kobj) 598 { 599 struct kobj_type *t = get_ktype(kobj); 600 const char *name = kobj->name; 601 602 pr_debug("kobject: '%s' (%p): %s, parent %p\n", 603 kobject_name(kobj), kobj, __func__, kobj->parent); 604 605 if (t && !t->release) 606 pr_debug("kobject: '%s' (%p): does not have a release() " 607 "function, it is broken and must be fixed.\n", 608 kobject_name(kobj), kobj); 609 610 /* send "remove" if the caller did not do it but sent "add" */ 611 if (kobj->state_add_uevent_sent && !kobj->state_remove_uevent_sent) { 612 pr_debug("kobject: '%s' (%p): auto cleanup 'remove' event\n", 613 kobject_name(kobj), kobj); 614 kobject_uevent(kobj, KOBJ_REMOVE); 615 } 616 617 /* remove from sysfs if the caller did not do it */ 618 if (kobj->state_in_sysfs) { 619 pr_debug("kobject: '%s' (%p): auto cleanup kobject_del\n", 620 kobject_name(kobj), kobj); 621 kobject_del(kobj); 622 } 623 624 if (t && t->release) { 625 pr_debug("kobject: '%s' (%p): calling ktype release\n", 626 kobject_name(kobj), kobj); 627 t->release(kobj); 628 } 629 630 /* free name if we allocated it */ 631 if (name) { 632 pr_debug("kobject: '%s': free name\n", name); 633 kfree(name); 634 } 635 } 636 637 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 638 static void kobject_delayed_cleanup(struct work_struct *work) 639 { 640 kobject_cleanup(container_of(to_delayed_work(work), 641 struct kobject, release)); 642 } 643 #endif 644 645 static void kobject_release(struct kref *kref) 646 { 647 struct kobject *kobj = container_of(kref, struct kobject, kref); 648 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE 649 unsigned long delay = HZ + HZ * (get_random_int() & 0x3); 650 pr_info("kobject: '%s' (%p): %s, parent %p (delayed %ld)\n", 651 kobject_name(kobj), kobj, __func__, kobj->parent, delay); 652 INIT_DELAYED_WORK(&kobj->release, kobject_delayed_cleanup); 653 654 schedule_delayed_work(&kobj->release, delay); 655 #else 656 kobject_cleanup(kobj); 657 #endif 658 } 659 660 /** 661 * kobject_put - decrement refcount for object. 662 * @kobj: object. 663 * 664 * Decrement the refcount, and if 0, call kobject_cleanup(). 665 */ 666 void kobject_put(struct kobject *kobj) 667 { 668 if (kobj) { 669 if (!kobj->state_initialized) 670 WARN(1, KERN_WARNING "kobject: '%s' (%p): is not " 671 "initialized, yet kobject_put() is being " 672 "called.\n", kobject_name(kobj), kobj); 673 kref_put(&kobj->kref, kobject_release); 674 } 675 } 676 677 static void dynamic_kobj_release(struct kobject *kobj) 678 { 679 pr_debug("kobject: (%p): %s\n", kobj, __func__); 680 kfree(kobj); 681 } 682 683 static struct kobj_type dynamic_kobj_ktype = { 684 .release = dynamic_kobj_release, 685 .sysfs_ops = &kobj_sysfs_ops, 686 }; 687 688 /** 689 * kobject_create - create a struct kobject dynamically 690 * 691 * This function creates a kobject structure dynamically and sets it up 692 * to be a "dynamic" kobject with a default release function set up. 693 * 694 * If the kobject was not able to be created, NULL will be returned. 695 * The kobject structure returned from here must be cleaned up with a 696 * call to kobject_put() and not kfree(), as kobject_init() has 697 * already been called on this structure. 698 */ 699 struct kobject *kobject_create(void) 700 { 701 struct kobject *kobj; 702 703 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); 704 if (!kobj) 705 return NULL; 706 707 kobject_init(kobj, &dynamic_kobj_ktype); 708 return kobj; 709 } 710 711 /** 712 * kobject_create_and_add - create a struct kobject dynamically and register it with sysfs 713 * 714 * @name: the name for the kobject 715 * @parent: the parent kobject of this kobject, if any. 716 * 717 * This function creates a kobject structure dynamically and registers it 718 * with sysfs. When you are finished with this structure, call 719 * kobject_put() and the structure will be dynamically freed when 720 * it is no longer being used. 721 * 722 * If the kobject was not able to be created, NULL will be returned. 723 */ 724 struct kobject *kobject_create_and_add(const char *name, struct kobject *parent) 725 { 726 struct kobject *kobj; 727 int retval; 728 729 kobj = kobject_create(); 730 if (!kobj) 731 return NULL; 732 733 retval = kobject_add(kobj, parent, "%s", name); 734 if (retval) { 735 printk(KERN_WARNING "%s: kobject_add error: %d\n", 736 __func__, retval); 737 kobject_put(kobj); 738 kobj = NULL; 739 } 740 return kobj; 741 } 742 EXPORT_SYMBOL_GPL(kobject_create_and_add); 743 744 /** 745 * kset_init - initialize a kset for use 746 * @k: kset 747 */ 748 void kset_init(struct kset *k) 749 { 750 kobject_init_internal(&k->kobj); 751 INIT_LIST_HEAD(&k->list); 752 spin_lock_init(&k->list_lock); 753 } 754 755 /* default kobject attribute operations */ 756 static ssize_t kobj_attr_show(struct kobject *kobj, struct attribute *attr, 757 char *buf) 758 { 759 struct kobj_attribute *kattr; 760 ssize_t ret = -EIO; 761 762 kattr = container_of(attr, struct kobj_attribute, attr); 763 if (kattr->show) 764 ret = kattr->show(kobj, kattr, buf); 765 return ret; 766 } 767 768 static ssize_t kobj_attr_store(struct kobject *kobj, struct attribute *attr, 769 const char *buf, size_t count) 770 { 771 struct kobj_attribute *kattr; 772 ssize_t ret = -EIO; 773 774 kattr = container_of(attr, struct kobj_attribute, attr); 775 if (kattr->store) 776 ret = kattr->store(kobj, kattr, buf, count); 777 return ret; 778 } 779 780 const struct sysfs_ops kobj_sysfs_ops = { 781 .show = kobj_attr_show, 782 .store = kobj_attr_store, 783 }; 784 EXPORT_SYMBOL_GPL(kobj_sysfs_ops); 785 786 /** 787 * kset_register - initialize and add a kset. 788 * @k: kset. 789 */ 790 int kset_register(struct kset *k) 791 { 792 int err; 793 794 if (!k) 795 return -EINVAL; 796 797 kset_init(k); 798 err = kobject_add_internal(&k->kobj); 799 if (err) 800 return err; 801 kobject_uevent(&k->kobj, KOBJ_ADD); 802 return 0; 803 } 804 805 /** 806 * kset_unregister - remove a kset. 807 * @k: kset. 808 */ 809 void kset_unregister(struct kset *k) 810 { 811 if (!k) 812 return; 813 kobject_del(&k->kobj); 814 kobject_put(&k->kobj); 815 } 816 817 /** 818 * kset_find_obj - search for object in kset. 819 * @kset: kset we're looking in. 820 * @name: object's name. 821 * 822 * Lock kset via @kset->subsys, and iterate over @kset->list, 823 * looking for a matching kobject. If matching object is found 824 * take a reference and return the object. 825 */ 826 struct kobject *kset_find_obj(struct kset *kset, const char *name) 827 { 828 struct kobject *k; 829 struct kobject *ret = NULL; 830 831 spin_lock(&kset->list_lock); 832 833 list_for_each_entry(k, &kset->list, entry) { 834 if (kobject_name(k) && !strcmp(kobject_name(k), name)) { 835 ret = kobject_get_unless_zero(k); 836 break; 837 } 838 } 839 840 spin_unlock(&kset->list_lock); 841 return ret; 842 } 843 844 static void kset_release(struct kobject *kobj) 845 { 846 struct kset *kset = container_of(kobj, struct kset, kobj); 847 pr_debug("kobject: '%s' (%p): %s\n", 848 kobject_name(kobj), kobj, __func__); 849 kfree(kset); 850 } 851 852 static struct kobj_type kset_ktype = { 853 .sysfs_ops = &kobj_sysfs_ops, 854 .release = kset_release, 855 }; 856 857 /** 858 * kset_create - create a struct kset dynamically 859 * 860 * @name: the name for the kset 861 * @uevent_ops: a struct kset_uevent_ops for the kset 862 * @parent_kobj: the parent kobject of this kset, if any. 863 * 864 * This function creates a kset structure dynamically. This structure can 865 * then be registered with the system and show up in sysfs with a call to 866 * kset_register(). When you are finished with this structure, if 867 * kset_register() has been called, call kset_unregister() and the 868 * structure will be dynamically freed when it is no longer being used. 869 * 870 * If the kset was not able to be created, NULL will be returned. 871 */ 872 static struct kset *kset_create(const char *name, 873 const struct kset_uevent_ops *uevent_ops, 874 struct kobject *parent_kobj) 875 { 876 struct kset *kset; 877 int retval; 878 879 kset = kzalloc(sizeof(*kset), GFP_KERNEL); 880 if (!kset) 881 return NULL; 882 retval = kobject_set_name(&kset->kobj, "%s", name); 883 if (retval) { 884 kfree(kset); 885 return NULL; 886 } 887 kset->uevent_ops = uevent_ops; 888 kset->kobj.parent = parent_kobj; 889 890 /* 891 * The kobject of this kset will have a type of kset_ktype and belong to 892 * no kset itself. That way we can properly free it when it is 893 * finished being used. 894 */ 895 kset->kobj.ktype = &kset_ktype; 896 kset->kobj.kset = NULL; 897 898 return kset; 899 } 900 901 /** 902 * kset_create_and_add - create a struct kset dynamically and add it to sysfs 903 * 904 * @name: the name for the kset 905 * @uevent_ops: a struct kset_uevent_ops for the kset 906 * @parent_kobj: the parent kobject of this kset, if any. 907 * 908 * This function creates a kset structure dynamically and registers it 909 * with sysfs. When you are finished with this structure, call 910 * kset_unregister() and the structure will be dynamically freed when it 911 * is no longer being used. 912 * 913 * If the kset was not able to be created, NULL will be returned. 914 */ 915 struct kset *kset_create_and_add(const char *name, 916 const struct kset_uevent_ops *uevent_ops, 917 struct kobject *parent_kobj) 918 { 919 struct kset *kset; 920 int error; 921 922 kset = kset_create(name, uevent_ops, parent_kobj); 923 if (!kset) 924 return NULL; 925 error = kset_register(kset); 926 if (error) { 927 kfree(kset); 928 return NULL; 929 } 930 return kset; 931 } 932 EXPORT_SYMBOL_GPL(kset_create_and_add); 933 934 935 static DEFINE_SPINLOCK(kobj_ns_type_lock); 936 static const struct kobj_ns_type_operations *kobj_ns_ops_tbl[KOBJ_NS_TYPES]; 937 938 int kobj_ns_type_register(const struct kobj_ns_type_operations *ops) 939 { 940 enum kobj_ns_type type = ops->type; 941 int error; 942 943 spin_lock(&kobj_ns_type_lock); 944 945 error = -EINVAL; 946 if (type >= KOBJ_NS_TYPES) 947 goto out; 948 949 error = -EINVAL; 950 if (type <= KOBJ_NS_TYPE_NONE) 951 goto out; 952 953 error = -EBUSY; 954 if (kobj_ns_ops_tbl[type]) 955 goto out; 956 957 error = 0; 958 kobj_ns_ops_tbl[type] = ops; 959 960 out: 961 spin_unlock(&kobj_ns_type_lock); 962 return error; 963 } 964 965 int kobj_ns_type_registered(enum kobj_ns_type type) 966 { 967 int registered = 0; 968 969 spin_lock(&kobj_ns_type_lock); 970 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES)) 971 registered = kobj_ns_ops_tbl[type] != NULL; 972 spin_unlock(&kobj_ns_type_lock); 973 974 return registered; 975 } 976 977 const struct kobj_ns_type_operations *kobj_child_ns_ops(struct kobject *parent) 978 { 979 const struct kobj_ns_type_operations *ops = NULL; 980 981 if (parent && parent->ktype && parent->ktype->child_ns_type) 982 ops = parent->ktype->child_ns_type(parent); 983 984 return ops; 985 } 986 987 const struct kobj_ns_type_operations *kobj_ns_ops(struct kobject *kobj) 988 { 989 return kobj_child_ns_ops(kobj->parent); 990 } 991 992 bool kobj_ns_current_may_mount(enum kobj_ns_type type) 993 { 994 bool may_mount = true; 995 996 spin_lock(&kobj_ns_type_lock); 997 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 998 kobj_ns_ops_tbl[type]) 999 may_mount = kobj_ns_ops_tbl[type]->current_may_mount(); 1000 spin_unlock(&kobj_ns_type_lock); 1001 1002 return may_mount; 1003 } 1004 1005 void *kobj_ns_grab_current(enum kobj_ns_type type) 1006 { 1007 void *ns = NULL; 1008 1009 spin_lock(&kobj_ns_type_lock); 1010 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1011 kobj_ns_ops_tbl[type]) 1012 ns = kobj_ns_ops_tbl[type]->grab_current_ns(); 1013 spin_unlock(&kobj_ns_type_lock); 1014 1015 return ns; 1016 } 1017 1018 const void *kobj_ns_netlink(enum kobj_ns_type type, struct sock *sk) 1019 { 1020 const void *ns = NULL; 1021 1022 spin_lock(&kobj_ns_type_lock); 1023 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1024 kobj_ns_ops_tbl[type]) 1025 ns = kobj_ns_ops_tbl[type]->netlink_ns(sk); 1026 spin_unlock(&kobj_ns_type_lock); 1027 1028 return ns; 1029 } 1030 1031 const void *kobj_ns_initial(enum kobj_ns_type type) 1032 { 1033 const void *ns = NULL; 1034 1035 spin_lock(&kobj_ns_type_lock); 1036 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1037 kobj_ns_ops_tbl[type]) 1038 ns = kobj_ns_ops_tbl[type]->initial_ns(); 1039 spin_unlock(&kobj_ns_type_lock); 1040 1041 return ns; 1042 } 1043 1044 void kobj_ns_drop(enum kobj_ns_type type, void *ns) 1045 { 1046 spin_lock(&kobj_ns_type_lock); 1047 if ((type > KOBJ_NS_TYPE_NONE) && (type < KOBJ_NS_TYPES) && 1048 kobj_ns_ops_tbl[type] && kobj_ns_ops_tbl[type]->drop_ns) 1049 kobj_ns_ops_tbl[type]->drop_ns(ns); 1050 spin_unlock(&kobj_ns_type_lock); 1051 } 1052 1053 EXPORT_SYMBOL(kobject_get); 1054 EXPORT_SYMBOL(kobject_put); 1055 EXPORT_SYMBOL(kobject_del); 1056 1057 EXPORT_SYMBOL(kset_register); 1058 EXPORT_SYMBOL(kset_unregister); 1059