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