1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* -*- mode: c; c-basic-offset: 8; -*- 3 * vim: noexpandtab sw=8 ts=8 sts=0: 4 * 5 * dir.c - Operations for configfs directories. 6 * 7 * Based on sysfs: 8 * sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel 9 * 10 * configfs Copyright (C) 2005 Oracle. All rights reserved. 11 */ 12 13 #undef DEBUG 14 15 #include <linux/fs.h> 16 #include <linux/fsnotify.h> 17 #include <linux/mount.h> 18 #include <linux/module.h> 19 #include <linux/slab.h> 20 #include <linux/err.h> 21 22 #include <linux/configfs.h> 23 #include "configfs_internal.h" 24 25 /* 26 * Protects mutations of configfs_dirent linkage together with proper i_mutex 27 * Also protects mutations of symlinks linkage to target configfs_dirent 28 * Mutators of configfs_dirent linkage must *both* have the proper inode locked 29 * and configfs_dirent_lock locked, in that order. 30 * This allows one to safely traverse configfs_dirent trees and symlinks without 31 * having to lock inodes. 32 * 33 * Protects setting of CONFIGFS_USET_DROPPING: checking the flag 34 * unlocked is not reliable unless in detach_groups() called from 35 * rmdir()/unregister() and from configfs_attach_group() 36 */ 37 DEFINE_SPINLOCK(configfs_dirent_lock); 38 39 static void configfs_d_iput(struct dentry * dentry, 40 struct inode * inode) 41 { 42 struct configfs_dirent *sd = dentry->d_fsdata; 43 44 if (sd) { 45 /* Coordinate with configfs_readdir */ 46 spin_lock(&configfs_dirent_lock); 47 /* 48 * Set sd->s_dentry to null only when this dentry is the one 49 * that is going to be killed. Otherwise configfs_d_iput may 50 * run just after configfs_attach_attr and set sd->s_dentry to 51 * NULL even it's still in use. 52 */ 53 if (sd->s_dentry == dentry) 54 sd->s_dentry = NULL; 55 56 spin_unlock(&configfs_dirent_lock); 57 configfs_put(sd); 58 } 59 iput(inode); 60 } 61 62 const struct dentry_operations configfs_dentry_ops = { 63 .d_iput = configfs_d_iput, 64 .d_delete = always_delete_dentry, 65 }; 66 67 #ifdef CONFIG_LOCKDEP 68 69 /* 70 * Helpers to make lockdep happy with our recursive locking of default groups' 71 * inodes (see configfs_attach_group() and configfs_detach_group()). 72 * We put default groups i_mutexes in separate classes according to their depth 73 * from the youngest non-default group ancestor. 74 * 75 * For a non-default group A having default groups A/B, A/C, and A/C/D, default 76 * groups A/B and A/C will have their inode's mutex in class 77 * default_group_class[0], and default group A/C/D will be in 78 * default_group_class[1]. 79 * 80 * The lock classes are declared and assigned in inode.c, according to the 81 * s_depth value. 82 * The s_depth value is initialized to -1, adjusted to >= 0 when attaching 83 * default groups, and reset to -1 when all default groups are attached. During 84 * attachment, if configfs_create() sees s_depth > 0, the lock class of the new 85 * inode's mutex is set to default_group_class[s_depth - 1]. 86 */ 87 88 static void configfs_init_dirent_depth(struct configfs_dirent *sd) 89 { 90 sd->s_depth = -1; 91 } 92 93 static void configfs_set_dir_dirent_depth(struct configfs_dirent *parent_sd, 94 struct configfs_dirent *sd) 95 { 96 int parent_depth = parent_sd->s_depth; 97 98 if (parent_depth >= 0) 99 sd->s_depth = parent_depth + 1; 100 } 101 102 static void 103 configfs_adjust_dir_dirent_depth_before_populate(struct configfs_dirent *sd) 104 { 105 /* 106 * item's i_mutex class is already setup, so s_depth is now only 107 * used to set new sub-directories s_depth, which is always done 108 * with item's i_mutex locked. 109 */ 110 /* 111 * sd->s_depth == -1 iff we are a non default group. 112 * else (we are a default group) sd->s_depth > 0 (see 113 * create_dir()). 114 */ 115 if (sd->s_depth == -1) 116 /* 117 * We are a non default group and we are going to create 118 * default groups. 119 */ 120 sd->s_depth = 0; 121 } 122 123 static void 124 configfs_adjust_dir_dirent_depth_after_populate(struct configfs_dirent *sd) 125 { 126 /* We will not create default groups anymore. */ 127 sd->s_depth = -1; 128 } 129 130 #else /* CONFIG_LOCKDEP */ 131 132 static void configfs_init_dirent_depth(struct configfs_dirent *sd) 133 { 134 } 135 136 static void configfs_set_dir_dirent_depth(struct configfs_dirent *parent_sd, 137 struct configfs_dirent *sd) 138 { 139 } 140 141 static void 142 configfs_adjust_dir_dirent_depth_before_populate(struct configfs_dirent *sd) 143 { 144 } 145 146 static void 147 configfs_adjust_dir_dirent_depth_after_populate(struct configfs_dirent *sd) 148 { 149 } 150 151 #endif /* CONFIG_LOCKDEP */ 152 153 static struct configfs_fragment *new_fragment(void) 154 { 155 struct configfs_fragment *p; 156 157 p = kmalloc(sizeof(struct configfs_fragment), GFP_KERNEL); 158 if (p) { 159 atomic_set(&p->frag_count, 1); 160 init_rwsem(&p->frag_sem); 161 p->frag_dead = false; 162 } 163 return p; 164 } 165 166 void put_fragment(struct configfs_fragment *frag) 167 { 168 if (frag && atomic_dec_and_test(&frag->frag_count)) 169 kfree(frag); 170 } 171 172 struct configfs_fragment *get_fragment(struct configfs_fragment *frag) 173 { 174 if (likely(frag)) 175 atomic_inc(&frag->frag_count); 176 return frag; 177 } 178 179 /* 180 * Allocates a new configfs_dirent and links it to the parent configfs_dirent 181 */ 182 static struct configfs_dirent *configfs_new_dirent(struct configfs_dirent *parent_sd, 183 void *element, int type, 184 struct configfs_fragment *frag) 185 { 186 struct configfs_dirent * sd; 187 188 sd = kmem_cache_zalloc(configfs_dir_cachep, GFP_KERNEL); 189 if (!sd) 190 return ERR_PTR(-ENOMEM); 191 192 atomic_set(&sd->s_count, 1); 193 INIT_LIST_HEAD(&sd->s_children); 194 sd->s_element = element; 195 sd->s_type = type; 196 configfs_init_dirent_depth(sd); 197 spin_lock(&configfs_dirent_lock); 198 if (parent_sd->s_type & CONFIGFS_USET_DROPPING) { 199 spin_unlock(&configfs_dirent_lock); 200 kmem_cache_free(configfs_dir_cachep, sd); 201 return ERR_PTR(-ENOENT); 202 } 203 sd->s_frag = get_fragment(frag); 204 list_add(&sd->s_sibling, &parent_sd->s_children); 205 spin_unlock(&configfs_dirent_lock); 206 207 return sd; 208 } 209 210 /* 211 * 212 * Return -EEXIST if there is already a configfs element with the same 213 * name for the same parent. 214 * 215 * called with parent inode's i_mutex held 216 */ 217 static int configfs_dirent_exists(struct configfs_dirent *parent_sd, 218 const unsigned char *new) 219 { 220 struct configfs_dirent * sd; 221 222 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { 223 if (sd->s_element) { 224 const unsigned char *existing = configfs_get_name(sd); 225 if (strcmp(existing, new)) 226 continue; 227 else 228 return -EEXIST; 229 } 230 } 231 232 return 0; 233 } 234 235 236 int configfs_make_dirent(struct configfs_dirent * parent_sd, 237 struct dentry * dentry, void * element, 238 umode_t mode, int type, struct configfs_fragment *frag) 239 { 240 struct configfs_dirent * sd; 241 242 sd = configfs_new_dirent(parent_sd, element, type, frag); 243 if (IS_ERR(sd)) 244 return PTR_ERR(sd); 245 246 sd->s_mode = mode; 247 sd->s_dentry = dentry; 248 if (dentry) 249 dentry->d_fsdata = configfs_get(sd); 250 251 return 0; 252 } 253 254 static void configfs_remove_dirent(struct dentry *dentry) 255 { 256 struct configfs_dirent *sd = dentry->d_fsdata; 257 258 if (!sd) 259 return; 260 spin_lock(&configfs_dirent_lock); 261 list_del_init(&sd->s_sibling); 262 spin_unlock(&configfs_dirent_lock); 263 configfs_put(sd); 264 } 265 266 /** 267 * configfs_create_dir - create a directory for an config_item. 268 * @item: config_itemwe're creating directory for. 269 * @dentry: config_item's dentry. 270 * @frag: config_item's fragment. 271 * 272 * Note: user-created entries won't be allowed under this new directory 273 * until it is validated by configfs_dir_set_ready() 274 */ 275 276 static int configfs_create_dir(struct config_item *item, struct dentry *dentry, 277 struct configfs_fragment *frag) 278 { 279 int error; 280 umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; 281 struct dentry *p = dentry->d_parent; 282 struct inode *inode; 283 284 BUG_ON(!item); 285 286 error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name); 287 if (unlikely(error)) 288 return error; 289 290 error = configfs_make_dirent(p->d_fsdata, dentry, item, mode, 291 CONFIGFS_DIR | CONFIGFS_USET_CREATING, 292 frag); 293 if (unlikely(error)) 294 return error; 295 296 configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata); 297 inode = configfs_create(dentry, mode); 298 if (IS_ERR(inode)) 299 goto out_remove; 300 301 inode->i_op = &configfs_dir_inode_operations; 302 inode->i_fop = &configfs_dir_operations; 303 /* directory inodes start off with i_nlink == 2 (for "." entry) */ 304 inc_nlink(inode); 305 d_instantiate(dentry, inode); 306 /* already hashed */ 307 dget(dentry); /* pin directory dentries in core */ 308 inc_nlink(d_inode(p)); 309 item->ci_dentry = dentry; 310 return 0; 311 312 out_remove: 313 configfs_remove_dirent(dentry); 314 return PTR_ERR(inode); 315 } 316 317 /* 318 * Allow userspace to create new entries under a new directory created with 319 * configfs_create_dir(), and under all of its chidlren directories recursively. 320 * @sd configfs_dirent of the new directory to validate 321 * 322 * Caller must hold configfs_dirent_lock. 323 */ 324 static void configfs_dir_set_ready(struct configfs_dirent *sd) 325 { 326 struct configfs_dirent *child_sd; 327 328 sd->s_type &= ~CONFIGFS_USET_CREATING; 329 list_for_each_entry(child_sd, &sd->s_children, s_sibling) 330 if (child_sd->s_type & CONFIGFS_USET_CREATING) 331 configfs_dir_set_ready(child_sd); 332 } 333 334 /* 335 * Check that a directory does not belong to a directory hierarchy being 336 * attached and not validated yet. 337 * @sd configfs_dirent of the directory to check 338 * 339 * @return non-zero iff the directory was validated 340 * 341 * Note: takes configfs_dirent_lock, so the result may change from false to true 342 * in two consecutive calls, but never from true to false. 343 */ 344 int configfs_dirent_is_ready(struct configfs_dirent *sd) 345 { 346 int ret; 347 348 spin_lock(&configfs_dirent_lock); 349 ret = !(sd->s_type & CONFIGFS_USET_CREATING); 350 spin_unlock(&configfs_dirent_lock); 351 352 return ret; 353 } 354 355 int configfs_create_link(struct configfs_dirent *target, struct dentry *parent, 356 struct dentry *dentry, char *body) 357 { 358 int err = 0; 359 umode_t mode = S_IFLNK | S_IRWXUGO; 360 struct configfs_dirent *p = parent->d_fsdata; 361 struct inode *inode; 362 363 err = configfs_make_dirent(p, dentry, target, mode, CONFIGFS_ITEM_LINK, 364 p->s_frag); 365 if (err) 366 return err; 367 368 inode = configfs_create(dentry, mode); 369 if (IS_ERR(inode)) 370 goto out_remove; 371 372 inode->i_link = body; 373 inode->i_op = &configfs_symlink_inode_operations; 374 d_instantiate(dentry, inode); 375 dget(dentry); /* pin link dentries in core */ 376 return 0; 377 378 out_remove: 379 configfs_remove_dirent(dentry); 380 return PTR_ERR(inode); 381 } 382 383 static void remove_dir(struct dentry * d) 384 { 385 struct dentry * parent = dget(d->d_parent); 386 387 configfs_remove_dirent(d); 388 389 if (d_really_is_positive(d)) 390 simple_rmdir(d_inode(parent),d); 391 392 pr_debug(" o %pd removing done (%d)\n", d, d_count(d)); 393 394 dput(parent); 395 } 396 397 /** 398 * configfs_remove_dir - remove an config_item's directory. 399 * @item: config_item we're removing. 400 * 401 * The only thing special about this is that we remove any files in 402 * the directory before we remove the directory, and we've inlined 403 * what used to be configfs_rmdir() below, instead of calling separately. 404 * 405 * Caller holds the mutex of the item's inode 406 */ 407 408 static void configfs_remove_dir(struct config_item * item) 409 { 410 struct dentry * dentry = dget(item->ci_dentry); 411 412 if (!dentry) 413 return; 414 415 remove_dir(dentry); 416 /** 417 * Drop reference from dget() on entrance. 418 */ 419 dput(dentry); 420 } 421 422 423 /* attaches attribute's configfs_dirent to the dentry corresponding to the 424 * attribute file 425 */ 426 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry) 427 { 428 struct configfs_attribute * attr = sd->s_element; 429 struct inode *inode; 430 431 spin_lock(&configfs_dirent_lock); 432 dentry->d_fsdata = configfs_get(sd); 433 sd->s_dentry = dentry; 434 spin_unlock(&configfs_dirent_lock); 435 436 inode = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG); 437 if (IS_ERR(inode)) { 438 configfs_put(sd); 439 return PTR_ERR(inode); 440 } 441 if (sd->s_type & CONFIGFS_ITEM_BIN_ATTR) { 442 inode->i_size = 0; 443 inode->i_fop = &configfs_bin_file_operations; 444 } else { 445 inode->i_size = PAGE_SIZE; 446 inode->i_fop = &configfs_file_operations; 447 } 448 d_add(dentry, inode); 449 return 0; 450 } 451 452 static struct dentry * configfs_lookup(struct inode *dir, 453 struct dentry *dentry, 454 unsigned int flags) 455 { 456 struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata; 457 struct configfs_dirent * sd; 458 int found = 0; 459 int err; 460 461 /* 462 * Fake invisibility if dir belongs to a group/default groups hierarchy 463 * being attached 464 * 465 * This forbids userspace to read/write attributes of items which may 466 * not complete their initialization, since the dentries of the 467 * attributes won't be instantiated. 468 */ 469 err = -ENOENT; 470 if (!configfs_dirent_is_ready(parent_sd)) 471 goto out; 472 473 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { 474 if (sd->s_type & CONFIGFS_NOT_PINNED) { 475 const unsigned char * name = configfs_get_name(sd); 476 477 if (strcmp(name, dentry->d_name.name)) 478 continue; 479 480 found = 1; 481 err = configfs_attach_attr(sd, dentry); 482 break; 483 } 484 } 485 486 if (!found) { 487 /* 488 * If it doesn't exist and it isn't a NOT_PINNED item, 489 * it must be negative. 490 */ 491 if (dentry->d_name.len > NAME_MAX) 492 return ERR_PTR(-ENAMETOOLONG); 493 d_add(dentry, NULL); 494 return NULL; 495 } 496 497 out: 498 return ERR_PTR(err); 499 } 500 501 /* 502 * Only subdirectories count here. Files (CONFIGFS_NOT_PINNED) are 503 * attributes and are removed by rmdir(). We recurse, setting 504 * CONFIGFS_USET_DROPPING on all children that are candidates for 505 * default detach. 506 * If there is an error, the caller will reset the flags via 507 * configfs_detach_rollback(). 508 */ 509 static int configfs_detach_prep(struct dentry *dentry, struct dentry **wait) 510 { 511 struct configfs_dirent *parent_sd = dentry->d_fsdata; 512 struct configfs_dirent *sd; 513 int ret; 514 515 /* Mark that we're trying to drop the group */ 516 parent_sd->s_type |= CONFIGFS_USET_DROPPING; 517 518 ret = -EBUSY; 519 if (parent_sd->s_links) 520 goto out; 521 522 ret = 0; 523 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { 524 if (!sd->s_element || 525 (sd->s_type & CONFIGFS_NOT_PINNED)) 526 continue; 527 if (sd->s_type & CONFIGFS_USET_DEFAULT) { 528 /* Abort if racing with mkdir() */ 529 if (sd->s_type & CONFIGFS_USET_IN_MKDIR) { 530 if (wait) 531 *wait= dget(sd->s_dentry); 532 return -EAGAIN; 533 } 534 535 /* 536 * Yup, recursive. If there's a problem, blame 537 * deep nesting of default_groups 538 */ 539 ret = configfs_detach_prep(sd->s_dentry, wait); 540 if (!ret) 541 continue; 542 } else 543 ret = -ENOTEMPTY; 544 545 break; 546 } 547 548 out: 549 return ret; 550 } 551 552 /* 553 * Walk the tree, resetting CONFIGFS_USET_DROPPING wherever it was 554 * set. 555 */ 556 static void configfs_detach_rollback(struct dentry *dentry) 557 { 558 struct configfs_dirent *parent_sd = dentry->d_fsdata; 559 struct configfs_dirent *sd; 560 561 parent_sd->s_type &= ~CONFIGFS_USET_DROPPING; 562 563 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) 564 if (sd->s_type & CONFIGFS_USET_DEFAULT) 565 configfs_detach_rollback(sd->s_dentry); 566 } 567 568 static void detach_attrs(struct config_item * item) 569 { 570 struct dentry * dentry = dget(item->ci_dentry); 571 struct configfs_dirent * parent_sd; 572 struct configfs_dirent * sd, * tmp; 573 574 if (!dentry) 575 return; 576 577 pr_debug("configfs %s: dropping attrs for dir\n", 578 dentry->d_name.name); 579 580 parent_sd = dentry->d_fsdata; 581 list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) { 582 if (!sd->s_element || !(sd->s_type & CONFIGFS_NOT_PINNED)) 583 continue; 584 spin_lock(&configfs_dirent_lock); 585 list_del_init(&sd->s_sibling); 586 spin_unlock(&configfs_dirent_lock); 587 configfs_drop_dentry(sd, dentry); 588 configfs_put(sd); 589 } 590 591 /** 592 * Drop reference from dget() on entrance. 593 */ 594 dput(dentry); 595 } 596 597 static int populate_attrs(struct config_item *item) 598 { 599 const struct config_item_type *t = item->ci_type; 600 struct configfs_attribute *attr; 601 struct configfs_bin_attribute *bin_attr; 602 int error = 0; 603 int i; 604 605 if (!t) 606 return -EINVAL; 607 if (t->ct_attrs) { 608 for (i = 0; (attr = t->ct_attrs[i]) != NULL; i++) { 609 if ((error = configfs_create_file(item, attr))) 610 break; 611 } 612 } 613 if (t->ct_bin_attrs) { 614 for (i = 0; (bin_attr = t->ct_bin_attrs[i]) != NULL; i++) { 615 error = configfs_create_bin_file(item, bin_attr); 616 if (error) 617 break; 618 } 619 } 620 621 if (error) 622 detach_attrs(item); 623 624 return error; 625 } 626 627 static int configfs_attach_group(struct config_item *parent_item, 628 struct config_item *item, 629 struct dentry *dentry, 630 struct configfs_fragment *frag); 631 static void configfs_detach_group(struct config_item *item); 632 633 static void detach_groups(struct config_group *group) 634 { 635 struct dentry * dentry = dget(group->cg_item.ci_dentry); 636 struct dentry *child; 637 struct configfs_dirent *parent_sd; 638 struct configfs_dirent *sd, *tmp; 639 640 if (!dentry) 641 return; 642 643 parent_sd = dentry->d_fsdata; 644 list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) { 645 if (!sd->s_element || 646 !(sd->s_type & CONFIGFS_USET_DEFAULT)) 647 continue; 648 649 child = sd->s_dentry; 650 651 inode_lock(d_inode(child)); 652 653 configfs_detach_group(sd->s_element); 654 d_inode(child)->i_flags |= S_DEAD; 655 dont_mount(child); 656 657 inode_unlock(d_inode(child)); 658 659 d_delete(child); 660 dput(child); 661 } 662 663 /** 664 * Drop reference from dget() on entrance. 665 */ 666 dput(dentry); 667 } 668 669 /* 670 * This fakes mkdir(2) on a default_groups[] entry. It 671 * creates a dentry, attachs it, and then does fixup 672 * on the sd->s_type. 673 * 674 * We could, perhaps, tweak our parent's ->mkdir for a minute and 675 * try using vfs_mkdir. Just a thought. 676 */ 677 static int create_default_group(struct config_group *parent_group, 678 struct config_group *group, 679 struct configfs_fragment *frag) 680 { 681 int ret; 682 struct configfs_dirent *sd; 683 /* We trust the caller holds a reference to parent */ 684 struct dentry *child, *parent = parent_group->cg_item.ci_dentry; 685 686 if (!group->cg_item.ci_name) 687 group->cg_item.ci_name = group->cg_item.ci_namebuf; 688 689 ret = -ENOMEM; 690 child = d_alloc_name(parent, group->cg_item.ci_name); 691 if (child) { 692 d_add(child, NULL); 693 694 ret = configfs_attach_group(&parent_group->cg_item, 695 &group->cg_item, child, frag); 696 if (!ret) { 697 sd = child->d_fsdata; 698 sd->s_type |= CONFIGFS_USET_DEFAULT; 699 } else { 700 BUG_ON(d_inode(child)); 701 d_drop(child); 702 dput(child); 703 } 704 } 705 706 return ret; 707 } 708 709 static int populate_groups(struct config_group *group, 710 struct configfs_fragment *frag) 711 { 712 struct config_group *new_group; 713 int ret = 0; 714 715 list_for_each_entry(new_group, &group->default_groups, group_entry) { 716 ret = create_default_group(group, new_group, frag); 717 if (ret) { 718 detach_groups(group); 719 break; 720 } 721 } 722 723 return ret; 724 } 725 726 void configfs_remove_default_groups(struct config_group *group) 727 { 728 struct config_group *g, *n; 729 730 list_for_each_entry_safe(g, n, &group->default_groups, group_entry) { 731 list_del(&g->group_entry); 732 config_item_put(&g->cg_item); 733 } 734 } 735 EXPORT_SYMBOL(configfs_remove_default_groups); 736 737 /* 738 * All of link_obj/unlink_obj/link_group/unlink_group require that 739 * subsys->su_mutex is held. 740 */ 741 742 static void unlink_obj(struct config_item *item) 743 { 744 struct config_group *group; 745 746 group = item->ci_group; 747 if (group) { 748 list_del_init(&item->ci_entry); 749 750 item->ci_group = NULL; 751 item->ci_parent = NULL; 752 753 /* Drop the reference for ci_entry */ 754 config_item_put(item); 755 756 /* Drop the reference for ci_parent */ 757 config_group_put(group); 758 } 759 } 760 761 static void link_obj(struct config_item *parent_item, struct config_item *item) 762 { 763 /* 764 * Parent seems redundant with group, but it makes certain 765 * traversals much nicer. 766 */ 767 item->ci_parent = parent_item; 768 769 /* 770 * We hold a reference on the parent for the child's ci_parent 771 * link. 772 */ 773 item->ci_group = config_group_get(to_config_group(parent_item)); 774 list_add_tail(&item->ci_entry, &item->ci_group->cg_children); 775 776 /* 777 * We hold a reference on the child for ci_entry on the parent's 778 * cg_children 779 */ 780 config_item_get(item); 781 } 782 783 static void unlink_group(struct config_group *group) 784 { 785 struct config_group *new_group; 786 787 list_for_each_entry(new_group, &group->default_groups, group_entry) 788 unlink_group(new_group); 789 790 group->cg_subsys = NULL; 791 unlink_obj(&group->cg_item); 792 } 793 794 static void link_group(struct config_group *parent_group, struct config_group *group) 795 { 796 struct config_group *new_group; 797 struct configfs_subsystem *subsys = NULL; /* gcc is a turd */ 798 799 link_obj(&parent_group->cg_item, &group->cg_item); 800 801 if (parent_group->cg_subsys) 802 subsys = parent_group->cg_subsys; 803 else if (configfs_is_root(&parent_group->cg_item)) 804 subsys = to_configfs_subsystem(group); 805 else 806 BUG(); 807 group->cg_subsys = subsys; 808 809 list_for_each_entry(new_group, &group->default_groups, group_entry) 810 link_group(group, new_group); 811 } 812 813 /* 814 * The goal is that configfs_attach_item() (and 815 * configfs_attach_group()) can be called from either the VFS or this 816 * module. That is, they assume that the items have been created, 817 * the dentry allocated, and the dcache is all ready to go. 818 * 819 * If they fail, they must clean up after themselves as if they 820 * had never been called. The caller (VFS or local function) will 821 * handle cleaning up the dcache bits. 822 * 823 * configfs_detach_group() and configfs_detach_item() behave similarly on 824 * the way out. They assume that the proper semaphores are held, they 825 * clean up the configfs items, and they expect their callers will 826 * handle the dcache bits. 827 */ 828 static int configfs_attach_item(struct config_item *parent_item, 829 struct config_item *item, 830 struct dentry *dentry, 831 struct configfs_fragment *frag) 832 { 833 int ret; 834 835 ret = configfs_create_dir(item, dentry, frag); 836 if (!ret) { 837 ret = populate_attrs(item); 838 if (ret) { 839 /* 840 * We are going to remove an inode and its dentry but 841 * the VFS may already have hit and used them. Thus, 842 * we must lock them as rmdir() would. 843 */ 844 inode_lock(d_inode(dentry)); 845 configfs_remove_dir(item); 846 d_inode(dentry)->i_flags |= S_DEAD; 847 dont_mount(dentry); 848 inode_unlock(d_inode(dentry)); 849 d_delete(dentry); 850 } 851 } 852 853 return ret; 854 } 855 856 /* Caller holds the mutex of the item's inode */ 857 static void configfs_detach_item(struct config_item *item) 858 { 859 detach_attrs(item); 860 configfs_remove_dir(item); 861 } 862 863 static int configfs_attach_group(struct config_item *parent_item, 864 struct config_item *item, 865 struct dentry *dentry, 866 struct configfs_fragment *frag) 867 { 868 int ret; 869 struct configfs_dirent *sd; 870 871 ret = configfs_attach_item(parent_item, item, dentry, frag); 872 if (!ret) { 873 sd = dentry->d_fsdata; 874 sd->s_type |= CONFIGFS_USET_DIR; 875 876 /* 877 * FYI, we're faking mkdir in populate_groups() 878 * We must lock the group's inode to avoid races with the VFS 879 * which can already hit the inode and try to add/remove entries 880 * under it. 881 * 882 * We must also lock the inode to remove it safely in case of 883 * error, as rmdir() would. 884 */ 885 inode_lock_nested(d_inode(dentry), I_MUTEX_CHILD); 886 configfs_adjust_dir_dirent_depth_before_populate(sd); 887 ret = populate_groups(to_config_group(item), frag); 888 if (ret) { 889 configfs_detach_item(item); 890 d_inode(dentry)->i_flags |= S_DEAD; 891 dont_mount(dentry); 892 } 893 configfs_adjust_dir_dirent_depth_after_populate(sd); 894 inode_unlock(d_inode(dentry)); 895 if (ret) 896 d_delete(dentry); 897 } 898 899 return ret; 900 } 901 902 /* Caller holds the mutex of the group's inode */ 903 static void configfs_detach_group(struct config_item *item) 904 { 905 detach_groups(to_config_group(item)); 906 configfs_detach_item(item); 907 } 908 909 /* 910 * After the item has been detached from the filesystem view, we are 911 * ready to tear it out of the hierarchy. Notify the client before 912 * we do that so they can perform any cleanup that requires 913 * navigating the hierarchy. A client does not need to provide this 914 * callback. The subsystem semaphore MUST be held by the caller, and 915 * references must be valid for both items. It also assumes the 916 * caller has validated ci_type. 917 */ 918 static void client_disconnect_notify(struct config_item *parent_item, 919 struct config_item *item) 920 { 921 const struct config_item_type *type; 922 923 type = parent_item->ci_type; 924 BUG_ON(!type); 925 926 if (type->ct_group_ops && type->ct_group_ops->disconnect_notify) 927 type->ct_group_ops->disconnect_notify(to_config_group(parent_item), 928 item); 929 } 930 931 /* 932 * Drop the initial reference from make_item()/make_group() 933 * This function assumes that reference is held on item 934 * and that item holds a valid reference to the parent. Also, it 935 * assumes the caller has validated ci_type. 936 */ 937 static void client_drop_item(struct config_item *parent_item, 938 struct config_item *item) 939 { 940 const struct config_item_type *type; 941 942 type = parent_item->ci_type; 943 BUG_ON(!type); 944 945 /* 946 * If ->drop_item() exists, it is responsible for the 947 * config_item_put(). 948 */ 949 if (type->ct_group_ops && type->ct_group_ops->drop_item) 950 type->ct_group_ops->drop_item(to_config_group(parent_item), 951 item); 952 else 953 config_item_put(item); 954 } 955 956 #ifdef DEBUG 957 static void configfs_dump_one(struct configfs_dirent *sd, int level) 958 { 959 pr_info("%*s\"%s\":\n", level, " ", configfs_get_name(sd)); 960 961 #define type_print(_type) if (sd->s_type & _type) pr_info("%*s %s\n", level, " ", #_type); 962 type_print(CONFIGFS_ROOT); 963 type_print(CONFIGFS_DIR); 964 type_print(CONFIGFS_ITEM_ATTR); 965 type_print(CONFIGFS_ITEM_LINK); 966 type_print(CONFIGFS_USET_DIR); 967 type_print(CONFIGFS_USET_DEFAULT); 968 type_print(CONFIGFS_USET_DROPPING); 969 #undef type_print 970 } 971 972 static int configfs_dump(struct configfs_dirent *sd, int level) 973 { 974 struct configfs_dirent *child_sd; 975 int ret = 0; 976 977 configfs_dump_one(sd, level); 978 979 if (!(sd->s_type & (CONFIGFS_DIR|CONFIGFS_ROOT))) 980 return 0; 981 982 list_for_each_entry(child_sd, &sd->s_children, s_sibling) { 983 ret = configfs_dump(child_sd, level + 2); 984 if (ret) 985 break; 986 } 987 988 return ret; 989 } 990 #endif 991 992 993 /* 994 * configfs_depend_item() and configfs_undepend_item() 995 * 996 * WARNING: Do not call these from a configfs callback! 997 * 998 * This describes these functions and their helpers. 999 * 1000 * Allow another kernel system to depend on a config_item. If this 1001 * happens, the item cannot go away until the dependent can live without 1002 * it. The idea is to give client modules as simple an interface as 1003 * possible. When a system asks them to depend on an item, they just 1004 * call configfs_depend_item(). If the item is live and the client 1005 * driver is in good shape, we'll happily do the work for them. 1006 * 1007 * Why is the locking complex? Because configfs uses the VFS to handle 1008 * all locking, but this function is called outside the normal 1009 * VFS->configfs path. So it must take VFS locks to prevent the 1010 * VFS->configfs stuff (configfs_mkdir(), configfs_rmdir(), etc). This is 1011 * why you can't call these functions underneath configfs callbacks. 1012 * 1013 * Note, btw, that this can be called at *any* time, even when a configfs 1014 * subsystem isn't registered, or when configfs is loading or unloading. 1015 * Just like configfs_register_subsystem(). So we take the same 1016 * precautions. We pin the filesystem. We lock configfs_dirent_lock. 1017 * If we can find the target item in the 1018 * configfs tree, it must be part of the subsystem tree as well, so we 1019 * do not need the subsystem semaphore. Holding configfs_dirent_lock helps 1020 * locking out mkdir() and rmdir(), who might be racing us. 1021 */ 1022 1023 /* 1024 * configfs_depend_prep() 1025 * 1026 * Only subdirectories count here. Files (CONFIGFS_NOT_PINNED) are 1027 * attributes. This is similar but not the same to configfs_detach_prep(). 1028 * Note that configfs_detach_prep() expects the parent to be locked when it 1029 * is called, but we lock the parent *inside* configfs_depend_prep(). We 1030 * do that so we can unlock it if we find nothing. 1031 * 1032 * Here we do a depth-first search of the dentry hierarchy looking for 1033 * our object. 1034 * We deliberately ignore items tagged as dropping since they are virtually 1035 * dead, as well as items in the middle of attachment since they virtually 1036 * do not exist yet. This completes the locking out of racing mkdir() and 1037 * rmdir(). 1038 * Note: subdirectories in the middle of attachment start with s_type = 1039 * CONFIGFS_DIR|CONFIGFS_USET_CREATING set by create_dir(). When 1040 * CONFIGFS_USET_CREATING is set, we ignore the item. The actual set of 1041 * s_type is in configfs_new_dirent(), which has configfs_dirent_lock. 1042 * 1043 * If the target is not found, -ENOENT is bubbled up. 1044 * 1045 * This adds a requirement that all config_items be unique! 1046 * 1047 * This is recursive. There isn't 1048 * much on the stack, though, so folks that need this function - be careful 1049 * about your stack! Patches will be accepted to make it iterative. 1050 */ 1051 static int configfs_depend_prep(struct dentry *origin, 1052 struct config_item *target) 1053 { 1054 struct configfs_dirent *child_sd, *sd; 1055 int ret = 0; 1056 1057 BUG_ON(!origin || !origin->d_fsdata); 1058 sd = origin->d_fsdata; 1059 1060 if (sd->s_element == target) /* Boo-yah */ 1061 goto out; 1062 1063 list_for_each_entry(child_sd, &sd->s_children, s_sibling) { 1064 if ((child_sd->s_type & CONFIGFS_DIR) && 1065 !(child_sd->s_type & CONFIGFS_USET_DROPPING) && 1066 !(child_sd->s_type & CONFIGFS_USET_CREATING)) { 1067 ret = configfs_depend_prep(child_sd->s_dentry, 1068 target); 1069 if (!ret) 1070 goto out; /* Child path boo-yah */ 1071 } 1072 } 1073 1074 /* We looped all our children and didn't find target */ 1075 ret = -ENOENT; 1076 1077 out: 1078 return ret; 1079 } 1080 1081 static int configfs_do_depend_item(struct dentry *subsys_dentry, 1082 struct config_item *target) 1083 { 1084 struct configfs_dirent *p; 1085 int ret; 1086 1087 spin_lock(&configfs_dirent_lock); 1088 /* Scan the tree, return 0 if found */ 1089 ret = configfs_depend_prep(subsys_dentry, target); 1090 if (ret) 1091 goto out_unlock_dirent_lock; 1092 1093 /* 1094 * We are sure that the item is not about to be removed by rmdir(), and 1095 * not in the middle of attachment by mkdir(). 1096 */ 1097 p = target->ci_dentry->d_fsdata; 1098 p->s_dependent_count += 1; 1099 1100 out_unlock_dirent_lock: 1101 spin_unlock(&configfs_dirent_lock); 1102 1103 return ret; 1104 } 1105 1106 static inline struct configfs_dirent * 1107 configfs_find_subsys_dentry(struct configfs_dirent *root_sd, 1108 struct config_item *subsys_item) 1109 { 1110 struct configfs_dirent *p; 1111 struct configfs_dirent *ret = NULL; 1112 1113 list_for_each_entry(p, &root_sd->s_children, s_sibling) { 1114 if (p->s_type & CONFIGFS_DIR && 1115 p->s_element == subsys_item) { 1116 ret = p; 1117 break; 1118 } 1119 } 1120 1121 return ret; 1122 } 1123 1124 1125 int configfs_depend_item(struct configfs_subsystem *subsys, 1126 struct config_item *target) 1127 { 1128 int ret; 1129 struct configfs_dirent *subsys_sd; 1130 struct config_item *s_item = &subsys->su_group.cg_item; 1131 struct dentry *root; 1132 1133 /* 1134 * Pin the configfs filesystem. This means we can safely access 1135 * the root of the configfs filesystem. 1136 */ 1137 root = configfs_pin_fs(); 1138 if (IS_ERR(root)) 1139 return PTR_ERR(root); 1140 1141 /* 1142 * Next, lock the root directory. We're going to check that the 1143 * subsystem is really registered, and so we need to lock out 1144 * configfs_[un]register_subsystem(). 1145 */ 1146 inode_lock(d_inode(root)); 1147 1148 subsys_sd = configfs_find_subsys_dentry(root->d_fsdata, s_item); 1149 if (!subsys_sd) { 1150 ret = -ENOENT; 1151 goto out_unlock_fs; 1152 } 1153 1154 /* Ok, now we can trust subsys/s_item */ 1155 ret = configfs_do_depend_item(subsys_sd->s_dentry, target); 1156 1157 out_unlock_fs: 1158 inode_unlock(d_inode(root)); 1159 1160 /* 1161 * If we succeeded, the fs is pinned via other methods. If not, 1162 * we're done with it anyway. So release_fs() is always right. 1163 */ 1164 configfs_release_fs(); 1165 1166 return ret; 1167 } 1168 EXPORT_SYMBOL(configfs_depend_item); 1169 1170 /* 1171 * Release the dependent linkage. This is much simpler than 1172 * configfs_depend_item() because we know that the client driver is 1173 * pinned, thus the subsystem is pinned, and therefore configfs is pinned. 1174 */ 1175 void configfs_undepend_item(struct config_item *target) 1176 { 1177 struct configfs_dirent *sd; 1178 1179 /* 1180 * Since we can trust everything is pinned, we just need 1181 * configfs_dirent_lock. 1182 */ 1183 spin_lock(&configfs_dirent_lock); 1184 1185 sd = target->ci_dentry->d_fsdata; 1186 BUG_ON(sd->s_dependent_count < 1); 1187 1188 sd->s_dependent_count -= 1; 1189 1190 /* 1191 * After this unlock, we cannot trust the item to stay alive! 1192 * DO NOT REFERENCE item after this unlock. 1193 */ 1194 spin_unlock(&configfs_dirent_lock); 1195 } 1196 EXPORT_SYMBOL(configfs_undepend_item); 1197 1198 /* 1199 * caller_subsys is a caller's subsystem not target's. This is used to 1200 * determine if we should lock root and check subsys or not. When we are 1201 * in the same subsystem as our target there is no need to do locking as 1202 * we know that subsys is valid and is not unregistered during this function 1203 * as we are called from callback of one of his children and VFS holds a lock 1204 * on some inode. Otherwise we have to lock our root to ensure that target's 1205 * subsystem it is not unregistered during this function. 1206 */ 1207 int configfs_depend_item_unlocked(struct configfs_subsystem *caller_subsys, 1208 struct config_item *target) 1209 { 1210 struct configfs_subsystem *target_subsys; 1211 struct config_group *root, *parent; 1212 struct configfs_dirent *subsys_sd; 1213 int ret = -ENOENT; 1214 1215 /* Disallow this function for configfs root */ 1216 if (configfs_is_root(target)) 1217 return -EINVAL; 1218 1219 parent = target->ci_group; 1220 /* 1221 * This may happen when someone is trying to depend root 1222 * directory of some subsystem 1223 */ 1224 if (configfs_is_root(&parent->cg_item)) { 1225 target_subsys = to_configfs_subsystem(to_config_group(target)); 1226 root = parent; 1227 } else { 1228 target_subsys = parent->cg_subsys; 1229 /* Find a cofnigfs root as we may need it for locking */ 1230 for (root = parent; !configfs_is_root(&root->cg_item); 1231 root = root->cg_item.ci_group) 1232 ; 1233 } 1234 1235 if (target_subsys != caller_subsys) { 1236 /* 1237 * We are in other configfs subsystem, so we have to do 1238 * additional locking to prevent other subsystem from being 1239 * unregistered 1240 */ 1241 inode_lock(d_inode(root->cg_item.ci_dentry)); 1242 1243 /* 1244 * As we are trying to depend item from other subsystem 1245 * we have to check if this subsystem is still registered 1246 */ 1247 subsys_sd = configfs_find_subsys_dentry( 1248 root->cg_item.ci_dentry->d_fsdata, 1249 &target_subsys->su_group.cg_item); 1250 if (!subsys_sd) 1251 goto out_root_unlock; 1252 } else { 1253 subsys_sd = target_subsys->su_group.cg_item.ci_dentry->d_fsdata; 1254 } 1255 1256 /* Now we can execute core of depend item */ 1257 ret = configfs_do_depend_item(subsys_sd->s_dentry, target); 1258 1259 if (target_subsys != caller_subsys) 1260 out_root_unlock: 1261 /* 1262 * We were called from subsystem other than our target so we 1263 * took some locks so now it's time to release them 1264 */ 1265 inode_unlock(d_inode(root->cg_item.ci_dentry)); 1266 1267 return ret; 1268 } 1269 EXPORT_SYMBOL(configfs_depend_item_unlocked); 1270 1271 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) 1272 { 1273 int ret = 0; 1274 int module_got = 0; 1275 struct config_group *group = NULL; 1276 struct config_item *item = NULL; 1277 struct config_item *parent_item; 1278 struct configfs_subsystem *subsys; 1279 struct configfs_dirent *sd; 1280 const struct config_item_type *type; 1281 struct module *subsys_owner = NULL, *new_item_owner = NULL; 1282 struct configfs_fragment *frag; 1283 char *name; 1284 1285 sd = dentry->d_parent->d_fsdata; 1286 1287 /* 1288 * Fake invisibility if dir belongs to a group/default groups hierarchy 1289 * being attached 1290 */ 1291 if (!configfs_dirent_is_ready(sd)) { 1292 ret = -ENOENT; 1293 goto out; 1294 } 1295 1296 if (!(sd->s_type & CONFIGFS_USET_DIR)) { 1297 ret = -EPERM; 1298 goto out; 1299 } 1300 1301 frag = new_fragment(); 1302 if (!frag) { 1303 ret = -ENOMEM; 1304 goto out; 1305 } 1306 1307 /* Get a working ref for the duration of this function */ 1308 parent_item = configfs_get_config_item(dentry->d_parent); 1309 type = parent_item->ci_type; 1310 subsys = to_config_group(parent_item)->cg_subsys; 1311 BUG_ON(!subsys); 1312 1313 if (!type || !type->ct_group_ops || 1314 (!type->ct_group_ops->make_group && 1315 !type->ct_group_ops->make_item)) { 1316 ret = -EPERM; /* Lack-of-mkdir returns -EPERM */ 1317 goto out_put; 1318 } 1319 1320 /* 1321 * The subsystem may belong to a different module than the item 1322 * being created. We don't want to safely pin the new item but 1323 * fail to pin the subsystem it sits under. 1324 */ 1325 if (!subsys->su_group.cg_item.ci_type) { 1326 ret = -EINVAL; 1327 goto out_put; 1328 } 1329 subsys_owner = subsys->su_group.cg_item.ci_type->ct_owner; 1330 if (!try_module_get(subsys_owner)) { 1331 ret = -EINVAL; 1332 goto out_put; 1333 } 1334 1335 name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL); 1336 if (!name) { 1337 ret = -ENOMEM; 1338 goto out_subsys_put; 1339 } 1340 1341 snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name); 1342 1343 mutex_lock(&subsys->su_mutex); 1344 if (type->ct_group_ops->make_group) { 1345 group = type->ct_group_ops->make_group(to_config_group(parent_item), name); 1346 if (!group) 1347 group = ERR_PTR(-ENOMEM); 1348 if (!IS_ERR(group)) { 1349 link_group(to_config_group(parent_item), group); 1350 item = &group->cg_item; 1351 } else 1352 ret = PTR_ERR(group); 1353 } else { 1354 item = type->ct_group_ops->make_item(to_config_group(parent_item), name); 1355 if (!item) 1356 item = ERR_PTR(-ENOMEM); 1357 if (!IS_ERR(item)) 1358 link_obj(parent_item, item); 1359 else 1360 ret = PTR_ERR(item); 1361 } 1362 mutex_unlock(&subsys->su_mutex); 1363 1364 kfree(name); 1365 if (ret) { 1366 /* 1367 * If ret != 0, then link_obj() was never called. 1368 * There are no extra references to clean up. 1369 */ 1370 goto out_subsys_put; 1371 } 1372 1373 /* 1374 * link_obj() has been called (via link_group() for groups). 1375 * From here on out, errors must clean that up. 1376 */ 1377 1378 type = item->ci_type; 1379 if (!type) { 1380 ret = -EINVAL; 1381 goto out_unlink; 1382 } 1383 1384 new_item_owner = type->ct_owner; 1385 if (!try_module_get(new_item_owner)) { 1386 ret = -EINVAL; 1387 goto out_unlink; 1388 } 1389 1390 /* 1391 * I hate doing it this way, but if there is 1392 * an error, module_put() probably should 1393 * happen after any cleanup. 1394 */ 1395 module_got = 1; 1396 1397 /* 1398 * Make racing rmdir() fail if it did not tag parent with 1399 * CONFIGFS_USET_DROPPING 1400 * Note: if CONFIGFS_USET_DROPPING is already set, attach_group() will 1401 * fail and let rmdir() terminate correctly 1402 */ 1403 spin_lock(&configfs_dirent_lock); 1404 /* This will make configfs_detach_prep() fail */ 1405 sd->s_type |= CONFIGFS_USET_IN_MKDIR; 1406 spin_unlock(&configfs_dirent_lock); 1407 1408 if (group) 1409 ret = configfs_attach_group(parent_item, item, dentry, frag); 1410 else 1411 ret = configfs_attach_item(parent_item, item, dentry, frag); 1412 1413 spin_lock(&configfs_dirent_lock); 1414 sd->s_type &= ~CONFIGFS_USET_IN_MKDIR; 1415 if (!ret) 1416 configfs_dir_set_ready(dentry->d_fsdata); 1417 spin_unlock(&configfs_dirent_lock); 1418 1419 out_unlink: 1420 if (ret) { 1421 /* Tear down everything we built up */ 1422 mutex_lock(&subsys->su_mutex); 1423 1424 client_disconnect_notify(parent_item, item); 1425 if (group) 1426 unlink_group(group); 1427 else 1428 unlink_obj(item); 1429 client_drop_item(parent_item, item); 1430 1431 mutex_unlock(&subsys->su_mutex); 1432 1433 if (module_got) 1434 module_put(new_item_owner); 1435 } 1436 1437 out_subsys_put: 1438 if (ret) 1439 module_put(subsys_owner); 1440 1441 out_put: 1442 /* 1443 * link_obj()/link_group() took a reference from child->parent, 1444 * so the parent is safely pinned. We can drop our working 1445 * reference. 1446 */ 1447 config_item_put(parent_item); 1448 put_fragment(frag); 1449 1450 out: 1451 return ret; 1452 } 1453 1454 static int configfs_rmdir(struct inode *dir, struct dentry *dentry) 1455 { 1456 struct config_item *parent_item; 1457 struct config_item *item; 1458 struct configfs_subsystem *subsys; 1459 struct configfs_dirent *sd; 1460 struct configfs_fragment *frag; 1461 struct module *subsys_owner = NULL, *dead_item_owner = NULL; 1462 int ret; 1463 1464 sd = dentry->d_fsdata; 1465 if (sd->s_type & CONFIGFS_USET_DEFAULT) 1466 return -EPERM; 1467 1468 /* Get a working ref until we have the child */ 1469 parent_item = configfs_get_config_item(dentry->d_parent); 1470 subsys = to_config_group(parent_item)->cg_subsys; 1471 BUG_ON(!subsys); 1472 1473 if (!parent_item->ci_type) { 1474 config_item_put(parent_item); 1475 return -EINVAL; 1476 } 1477 1478 /* configfs_mkdir() shouldn't have allowed this */ 1479 BUG_ON(!subsys->su_group.cg_item.ci_type); 1480 subsys_owner = subsys->su_group.cg_item.ci_type->ct_owner; 1481 1482 /* 1483 * Ensure that no racing symlink() will make detach_prep() fail while 1484 * the new link is temporarily attached 1485 */ 1486 do { 1487 struct dentry *wait; 1488 1489 mutex_lock(&configfs_symlink_mutex); 1490 spin_lock(&configfs_dirent_lock); 1491 /* 1492 * Here's where we check for dependents. We're protected by 1493 * configfs_dirent_lock. 1494 * If no dependent, atomically tag the item as dropping. 1495 */ 1496 ret = sd->s_dependent_count ? -EBUSY : 0; 1497 if (!ret) { 1498 ret = configfs_detach_prep(dentry, &wait); 1499 if (ret) 1500 configfs_detach_rollback(dentry); 1501 } 1502 spin_unlock(&configfs_dirent_lock); 1503 mutex_unlock(&configfs_symlink_mutex); 1504 1505 if (ret) { 1506 if (ret != -EAGAIN) { 1507 config_item_put(parent_item); 1508 return ret; 1509 } 1510 1511 /* Wait until the racing operation terminates */ 1512 inode_lock(d_inode(wait)); 1513 inode_unlock(d_inode(wait)); 1514 dput(wait); 1515 } 1516 } while (ret == -EAGAIN); 1517 1518 frag = sd->s_frag; 1519 if (down_write_killable(&frag->frag_sem)) { 1520 spin_lock(&configfs_dirent_lock); 1521 configfs_detach_rollback(dentry); 1522 spin_unlock(&configfs_dirent_lock); 1523 config_item_put(parent_item); 1524 return -EINTR; 1525 } 1526 frag->frag_dead = true; 1527 up_write(&frag->frag_sem); 1528 1529 /* Get a working ref for the duration of this function */ 1530 item = configfs_get_config_item(dentry); 1531 1532 /* Drop reference from above, item already holds one. */ 1533 config_item_put(parent_item); 1534 1535 if (item->ci_type) 1536 dead_item_owner = item->ci_type->ct_owner; 1537 1538 if (sd->s_type & CONFIGFS_USET_DIR) { 1539 configfs_detach_group(item); 1540 1541 mutex_lock(&subsys->su_mutex); 1542 client_disconnect_notify(parent_item, item); 1543 unlink_group(to_config_group(item)); 1544 } else { 1545 configfs_detach_item(item); 1546 1547 mutex_lock(&subsys->su_mutex); 1548 client_disconnect_notify(parent_item, item); 1549 unlink_obj(item); 1550 } 1551 1552 client_drop_item(parent_item, item); 1553 mutex_unlock(&subsys->su_mutex); 1554 1555 /* Drop our reference from above */ 1556 config_item_put(item); 1557 1558 module_put(dead_item_owner); 1559 module_put(subsys_owner); 1560 1561 return 0; 1562 } 1563 1564 const struct inode_operations configfs_dir_inode_operations = { 1565 .mkdir = configfs_mkdir, 1566 .rmdir = configfs_rmdir, 1567 .symlink = configfs_symlink, 1568 .unlink = configfs_unlink, 1569 .lookup = configfs_lookup, 1570 .setattr = configfs_setattr, 1571 }; 1572 1573 const struct inode_operations configfs_root_inode_operations = { 1574 .lookup = configfs_lookup, 1575 .setattr = configfs_setattr, 1576 }; 1577 1578 static int configfs_dir_open(struct inode *inode, struct file *file) 1579 { 1580 struct dentry * dentry = file->f_path.dentry; 1581 struct configfs_dirent * parent_sd = dentry->d_fsdata; 1582 int err; 1583 1584 inode_lock(d_inode(dentry)); 1585 /* 1586 * Fake invisibility if dir belongs to a group/default groups hierarchy 1587 * being attached 1588 */ 1589 err = -ENOENT; 1590 if (configfs_dirent_is_ready(parent_sd)) { 1591 file->private_data = configfs_new_dirent(parent_sd, NULL, 0, NULL); 1592 if (IS_ERR(file->private_data)) 1593 err = PTR_ERR(file->private_data); 1594 else 1595 err = 0; 1596 } 1597 inode_unlock(d_inode(dentry)); 1598 1599 return err; 1600 } 1601 1602 static int configfs_dir_close(struct inode *inode, struct file *file) 1603 { 1604 struct dentry * dentry = file->f_path.dentry; 1605 struct configfs_dirent * cursor = file->private_data; 1606 1607 inode_lock(d_inode(dentry)); 1608 spin_lock(&configfs_dirent_lock); 1609 list_del_init(&cursor->s_sibling); 1610 spin_unlock(&configfs_dirent_lock); 1611 inode_unlock(d_inode(dentry)); 1612 1613 release_configfs_dirent(cursor); 1614 1615 return 0; 1616 } 1617 1618 /* Relationship between s_mode and the DT_xxx types */ 1619 static inline unsigned char dt_type(struct configfs_dirent *sd) 1620 { 1621 return (sd->s_mode >> 12) & 15; 1622 } 1623 1624 static int configfs_readdir(struct file *file, struct dir_context *ctx) 1625 { 1626 struct dentry *dentry = file->f_path.dentry; 1627 struct super_block *sb = dentry->d_sb; 1628 struct configfs_dirent * parent_sd = dentry->d_fsdata; 1629 struct configfs_dirent *cursor = file->private_data; 1630 struct list_head *p, *q = &cursor->s_sibling; 1631 ino_t ino = 0; 1632 1633 if (!dir_emit_dots(file, ctx)) 1634 return 0; 1635 spin_lock(&configfs_dirent_lock); 1636 if (ctx->pos == 2) 1637 list_move(q, &parent_sd->s_children); 1638 for (p = q->next; p != &parent_sd->s_children; p = p->next) { 1639 struct configfs_dirent *next; 1640 const char *name; 1641 int len; 1642 struct inode *inode = NULL; 1643 1644 next = list_entry(p, struct configfs_dirent, s_sibling); 1645 if (!next->s_element) 1646 continue; 1647 1648 /* 1649 * We'll have a dentry and an inode for 1650 * PINNED items and for open attribute 1651 * files. We lock here to prevent a race 1652 * with configfs_d_iput() clearing 1653 * s_dentry before calling iput(). 1654 * 1655 * Why do we go to the trouble? If 1656 * someone has an attribute file open, 1657 * the inode number should match until 1658 * they close it. Beyond that, we don't 1659 * care. 1660 */ 1661 dentry = next->s_dentry; 1662 if (dentry) 1663 inode = d_inode(dentry); 1664 if (inode) 1665 ino = inode->i_ino; 1666 spin_unlock(&configfs_dirent_lock); 1667 if (!inode) 1668 ino = iunique(sb, 2); 1669 1670 name = configfs_get_name(next); 1671 len = strlen(name); 1672 1673 if (!dir_emit(ctx, name, len, ino, dt_type(next))) 1674 return 0; 1675 1676 spin_lock(&configfs_dirent_lock); 1677 list_move(q, p); 1678 p = q; 1679 ctx->pos++; 1680 } 1681 spin_unlock(&configfs_dirent_lock); 1682 return 0; 1683 } 1684 1685 static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence) 1686 { 1687 struct dentry * dentry = file->f_path.dentry; 1688 1689 switch (whence) { 1690 case 1: 1691 offset += file->f_pos; 1692 fallthrough; 1693 case 0: 1694 if (offset >= 0) 1695 break; 1696 fallthrough; 1697 default: 1698 return -EINVAL; 1699 } 1700 if (offset != file->f_pos) { 1701 file->f_pos = offset; 1702 if (file->f_pos >= 2) { 1703 struct configfs_dirent *sd = dentry->d_fsdata; 1704 struct configfs_dirent *cursor = file->private_data; 1705 struct list_head *p; 1706 loff_t n = file->f_pos - 2; 1707 1708 spin_lock(&configfs_dirent_lock); 1709 list_del(&cursor->s_sibling); 1710 p = sd->s_children.next; 1711 while (n && p != &sd->s_children) { 1712 struct configfs_dirent *next; 1713 next = list_entry(p, struct configfs_dirent, 1714 s_sibling); 1715 if (next->s_element) 1716 n--; 1717 p = p->next; 1718 } 1719 list_add_tail(&cursor->s_sibling, p); 1720 spin_unlock(&configfs_dirent_lock); 1721 } 1722 } 1723 return offset; 1724 } 1725 1726 const struct file_operations configfs_dir_operations = { 1727 .open = configfs_dir_open, 1728 .release = configfs_dir_close, 1729 .llseek = configfs_dir_lseek, 1730 .read = generic_read_dir, 1731 .iterate_shared = configfs_readdir, 1732 }; 1733 1734 /** 1735 * configfs_register_group - creates a parent-child relation between two groups 1736 * @parent_group: parent group 1737 * @group: child group 1738 * 1739 * link groups, creates dentry for the child and attaches it to the 1740 * parent dentry. 1741 * 1742 * Return: 0 on success, negative errno code on error 1743 */ 1744 int configfs_register_group(struct config_group *parent_group, 1745 struct config_group *group) 1746 { 1747 struct configfs_subsystem *subsys = parent_group->cg_subsys; 1748 struct dentry *parent; 1749 struct configfs_fragment *frag; 1750 int ret; 1751 1752 frag = new_fragment(); 1753 if (!frag) 1754 return -ENOMEM; 1755 1756 mutex_lock(&subsys->su_mutex); 1757 link_group(parent_group, group); 1758 mutex_unlock(&subsys->su_mutex); 1759 1760 parent = parent_group->cg_item.ci_dentry; 1761 1762 inode_lock_nested(d_inode(parent), I_MUTEX_PARENT); 1763 ret = create_default_group(parent_group, group, frag); 1764 if (ret) 1765 goto err_out; 1766 1767 spin_lock(&configfs_dirent_lock); 1768 configfs_dir_set_ready(group->cg_item.ci_dentry->d_fsdata); 1769 spin_unlock(&configfs_dirent_lock); 1770 inode_unlock(d_inode(parent)); 1771 put_fragment(frag); 1772 return 0; 1773 err_out: 1774 inode_unlock(d_inode(parent)); 1775 mutex_lock(&subsys->su_mutex); 1776 unlink_group(group); 1777 mutex_unlock(&subsys->su_mutex); 1778 put_fragment(frag); 1779 return ret; 1780 } 1781 EXPORT_SYMBOL(configfs_register_group); 1782 1783 /** 1784 * configfs_unregister_group() - unregisters a child group from its parent 1785 * @group: parent group to be unregistered 1786 * 1787 * Undoes configfs_register_group() 1788 */ 1789 void configfs_unregister_group(struct config_group *group) 1790 { 1791 struct configfs_subsystem *subsys = group->cg_subsys; 1792 struct dentry *dentry = group->cg_item.ci_dentry; 1793 struct dentry *parent = group->cg_item.ci_parent->ci_dentry; 1794 struct configfs_dirent *sd = dentry->d_fsdata; 1795 struct configfs_fragment *frag = sd->s_frag; 1796 1797 down_write(&frag->frag_sem); 1798 frag->frag_dead = true; 1799 up_write(&frag->frag_sem); 1800 1801 inode_lock_nested(d_inode(parent), I_MUTEX_PARENT); 1802 spin_lock(&configfs_dirent_lock); 1803 configfs_detach_prep(dentry, NULL); 1804 spin_unlock(&configfs_dirent_lock); 1805 1806 configfs_detach_group(&group->cg_item); 1807 d_inode(dentry)->i_flags |= S_DEAD; 1808 dont_mount(dentry); 1809 fsnotify_rmdir(d_inode(parent), dentry); 1810 d_delete(dentry); 1811 inode_unlock(d_inode(parent)); 1812 1813 dput(dentry); 1814 1815 mutex_lock(&subsys->su_mutex); 1816 unlink_group(group); 1817 mutex_unlock(&subsys->su_mutex); 1818 } 1819 EXPORT_SYMBOL(configfs_unregister_group); 1820 1821 /** 1822 * configfs_register_default_group() - allocates and registers a child group 1823 * @parent_group: parent group 1824 * @name: child group name 1825 * @item_type: child item type description 1826 * 1827 * boilerplate to allocate and register a child group with its parent. We need 1828 * kzalloc'ed memory because child's default_group is initially empty. 1829 * 1830 * Return: allocated config group or ERR_PTR() on error 1831 */ 1832 struct config_group * 1833 configfs_register_default_group(struct config_group *parent_group, 1834 const char *name, 1835 const struct config_item_type *item_type) 1836 { 1837 int ret; 1838 struct config_group *group; 1839 1840 group = kzalloc(sizeof(*group), GFP_KERNEL); 1841 if (!group) 1842 return ERR_PTR(-ENOMEM); 1843 config_group_init_type_name(group, name, item_type); 1844 1845 ret = configfs_register_group(parent_group, group); 1846 if (ret) { 1847 kfree(group); 1848 return ERR_PTR(ret); 1849 } 1850 return group; 1851 } 1852 EXPORT_SYMBOL(configfs_register_default_group); 1853 1854 /** 1855 * configfs_unregister_default_group() - unregisters and frees a child group 1856 * @group: the group to act on 1857 */ 1858 void configfs_unregister_default_group(struct config_group *group) 1859 { 1860 configfs_unregister_group(group); 1861 kfree(group); 1862 } 1863 EXPORT_SYMBOL(configfs_unregister_default_group); 1864 1865 int configfs_register_subsystem(struct configfs_subsystem *subsys) 1866 { 1867 int err; 1868 struct config_group *group = &subsys->su_group; 1869 struct dentry *dentry; 1870 struct dentry *root; 1871 struct configfs_dirent *sd; 1872 struct configfs_fragment *frag; 1873 1874 frag = new_fragment(); 1875 if (!frag) 1876 return -ENOMEM; 1877 1878 root = configfs_pin_fs(); 1879 if (IS_ERR(root)) { 1880 put_fragment(frag); 1881 return PTR_ERR(root); 1882 } 1883 1884 if (!group->cg_item.ci_name) 1885 group->cg_item.ci_name = group->cg_item.ci_namebuf; 1886 1887 sd = root->d_fsdata; 1888 link_group(to_config_group(sd->s_element), group); 1889 1890 inode_lock_nested(d_inode(root), I_MUTEX_PARENT); 1891 1892 err = -ENOMEM; 1893 dentry = d_alloc_name(root, group->cg_item.ci_name); 1894 if (dentry) { 1895 d_add(dentry, NULL); 1896 1897 err = configfs_attach_group(sd->s_element, &group->cg_item, 1898 dentry, frag); 1899 if (err) { 1900 BUG_ON(d_inode(dentry)); 1901 d_drop(dentry); 1902 dput(dentry); 1903 } else { 1904 spin_lock(&configfs_dirent_lock); 1905 configfs_dir_set_ready(dentry->d_fsdata); 1906 spin_unlock(&configfs_dirent_lock); 1907 } 1908 } 1909 1910 inode_unlock(d_inode(root)); 1911 1912 if (err) { 1913 unlink_group(group); 1914 configfs_release_fs(); 1915 } 1916 put_fragment(frag); 1917 1918 return err; 1919 } 1920 1921 void configfs_unregister_subsystem(struct configfs_subsystem *subsys) 1922 { 1923 struct config_group *group = &subsys->su_group; 1924 struct dentry *dentry = group->cg_item.ci_dentry; 1925 struct dentry *root = dentry->d_sb->s_root; 1926 struct configfs_dirent *sd = dentry->d_fsdata; 1927 struct configfs_fragment *frag = sd->s_frag; 1928 1929 if (dentry->d_parent != root) { 1930 pr_err("Tried to unregister non-subsystem!\n"); 1931 return; 1932 } 1933 1934 down_write(&frag->frag_sem); 1935 frag->frag_dead = true; 1936 up_write(&frag->frag_sem); 1937 1938 inode_lock_nested(d_inode(root), 1939 I_MUTEX_PARENT); 1940 inode_lock_nested(d_inode(dentry), I_MUTEX_CHILD); 1941 mutex_lock(&configfs_symlink_mutex); 1942 spin_lock(&configfs_dirent_lock); 1943 if (configfs_detach_prep(dentry, NULL)) { 1944 pr_err("Tried to unregister non-empty subsystem!\n"); 1945 } 1946 spin_unlock(&configfs_dirent_lock); 1947 mutex_unlock(&configfs_symlink_mutex); 1948 configfs_detach_group(&group->cg_item); 1949 d_inode(dentry)->i_flags |= S_DEAD; 1950 dont_mount(dentry); 1951 fsnotify_rmdir(d_inode(root), dentry); 1952 inode_unlock(d_inode(dentry)); 1953 1954 d_delete(dentry); 1955 1956 inode_unlock(d_inode(root)); 1957 1958 dput(dentry); 1959 1960 unlink_group(group); 1961 configfs_release_fs(); 1962 } 1963 1964 EXPORT_SYMBOL(configfs_register_subsystem); 1965 EXPORT_SYMBOL(configfs_unregister_subsystem); 1966