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