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