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 BUG_ON(sd->s_dentry != dentry); 60 sd->s_dentry = NULL; 61 configfs_put(sd); 62 } 63 iput(inode); 64 } 65 66 /* 67 * We _must_ delete our dentries on last dput, as the chain-to-parent 68 * behavior is required to clear the parents of default_groups. 69 */ 70 static int configfs_d_delete(struct dentry *dentry) 71 { 72 return 1; 73 } 74 75 static const struct dentry_operations configfs_dentry_ops = { 76 .d_iput = configfs_d_iput, 77 /* simple_delete_dentry() isn't exported */ 78 .d_delete = configfs_d_delete, 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 dentry->d_op = &configfs_dentry_ops; 238 } 239 240 return 0; 241 } 242 243 static int 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 return 0; 251 } 252 253 static int configfs_init_file(struct inode * inode) 254 { 255 inode->i_size = PAGE_SIZE; 256 inode->i_fop = &configfs_file_operations; 257 return 0; 258 } 259 260 static int init_symlink(struct inode * inode) 261 { 262 inode->i_op = &configfs_symlink_inode_operations; 263 return 0; 264 } 265 266 static int create_dir(struct config_item * k, struct dentry * p, 267 struct dentry * d) 268 { 269 int error; 270 umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; 271 272 error = configfs_dirent_exists(p->d_fsdata, d->d_name.name); 273 if (!error) 274 error = configfs_make_dirent(p->d_fsdata, d, k, mode, 275 CONFIGFS_DIR | CONFIGFS_USET_CREATING); 276 if (!error) { 277 configfs_set_dir_dirent_depth(p->d_fsdata, d->d_fsdata); 278 error = configfs_create(d, mode, init_dir); 279 if (!error) { 280 inc_nlink(p->d_inode); 281 (d)->d_op = &configfs_dentry_ops; 282 } else { 283 struct configfs_dirent *sd = d->d_fsdata; 284 if (sd) { 285 spin_lock(&configfs_dirent_lock); 286 list_del_init(&sd->s_sibling); 287 spin_unlock(&configfs_dirent_lock); 288 configfs_put(sd); 289 } 290 } 291 } 292 return error; 293 } 294 295 296 /** 297 * configfs_create_dir - create a directory for an config_item. 298 * @item: config_itemwe're creating directory for. 299 * @dentry: config_item's dentry. 300 * 301 * Note: user-created entries won't be allowed under this new directory 302 * until it is validated by configfs_dir_set_ready() 303 */ 304 305 static int configfs_create_dir(struct config_item * item, struct dentry *dentry) 306 { 307 struct dentry * parent; 308 int error = 0; 309 310 BUG_ON(!item); 311 312 if (item->ci_parent) 313 parent = item->ci_parent->ci_dentry; 314 else if (configfs_mount && configfs_mount->mnt_sb) 315 parent = configfs_mount->mnt_sb->s_root; 316 else 317 return -EFAULT; 318 319 error = create_dir(item,parent,dentry); 320 if (!error) 321 item->ci_dentry = dentry; 322 return error; 323 } 324 325 /* 326 * Allow userspace to create new entries under a new directory created with 327 * configfs_create_dir(), and under all of its chidlren directories recursively. 328 * @sd configfs_dirent of the new directory to validate 329 * 330 * Caller must hold configfs_dirent_lock. 331 */ 332 static void configfs_dir_set_ready(struct configfs_dirent *sd) 333 { 334 struct configfs_dirent *child_sd; 335 336 sd->s_type &= ~CONFIGFS_USET_CREATING; 337 list_for_each_entry(child_sd, &sd->s_children, s_sibling) 338 if (child_sd->s_type & CONFIGFS_USET_CREATING) 339 configfs_dir_set_ready(child_sd); 340 } 341 342 /* 343 * Check that a directory does not belong to a directory hierarchy being 344 * attached and not validated yet. 345 * @sd configfs_dirent of the directory to check 346 * 347 * @return non-zero iff the directory was validated 348 * 349 * Note: takes configfs_dirent_lock, so the result may change from false to true 350 * in two consecutive calls, but never from true to false. 351 */ 352 int configfs_dirent_is_ready(struct configfs_dirent *sd) 353 { 354 int ret; 355 356 spin_lock(&configfs_dirent_lock); 357 ret = !(sd->s_type & CONFIGFS_USET_CREATING); 358 spin_unlock(&configfs_dirent_lock); 359 360 return ret; 361 } 362 363 int configfs_create_link(struct configfs_symlink *sl, 364 struct dentry *parent, 365 struct dentry *dentry) 366 { 367 int err = 0; 368 umode_t mode = S_IFLNK | S_IRWXUGO; 369 370 err = configfs_make_dirent(parent->d_fsdata, dentry, sl, mode, 371 CONFIGFS_ITEM_LINK); 372 if (!err) { 373 err = configfs_create(dentry, mode, init_symlink); 374 if (!err) 375 dentry->d_op = &configfs_dentry_ops; 376 else { 377 struct configfs_dirent *sd = dentry->d_fsdata; 378 if (sd) { 379 spin_lock(&configfs_dirent_lock); 380 list_del_init(&sd->s_sibling); 381 spin_unlock(&configfs_dirent_lock); 382 configfs_put(sd); 383 } 384 } 385 } 386 return err; 387 } 388 389 static void remove_dir(struct dentry * d) 390 { 391 struct dentry * parent = dget(d->d_parent); 392 struct configfs_dirent * sd; 393 394 sd = d->d_fsdata; 395 spin_lock(&configfs_dirent_lock); 396 list_del_init(&sd->s_sibling); 397 spin_unlock(&configfs_dirent_lock); 398 configfs_put(sd); 399 if (d->d_inode) 400 simple_rmdir(parent->d_inode,d); 401 402 pr_debug(" o %s removing done (%d)\n",d->d_name.name, 403 atomic_read(&d->d_count)); 404 405 dput(parent); 406 } 407 408 /** 409 * configfs_remove_dir - remove an config_item's directory. 410 * @item: config_item we're removing. 411 * 412 * The only thing special about this is that we remove any files in 413 * the directory before we remove the directory, and we've inlined 414 * what used to be configfs_rmdir() below, instead of calling separately. 415 * 416 * Caller holds the mutex of the item's inode 417 */ 418 419 static void configfs_remove_dir(struct config_item * item) 420 { 421 struct dentry * dentry = dget(item->ci_dentry); 422 423 if (!dentry) 424 return; 425 426 remove_dir(dentry); 427 /** 428 * Drop reference from dget() on entrance. 429 */ 430 dput(dentry); 431 } 432 433 434 /* attaches attribute's configfs_dirent to the dentry corresponding to the 435 * attribute file 436 */ 437 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry) 438 { 439 struct configfs_attribute * attr = sd->s_element; 440 int error; 441 442 dentry->d_fsdata = configfs_get(sd); 443 sd->s_dentry = dentry; 444 error = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG, 445 configfs_init_file); 446 if (error) { 447 configfs_put(sd); 448 return error; 449 } 450 451 dentry->d_op = &configfs_dentry_ops; 452 d_rehash(dentry); 453 454 return 0; 455 } 456 457 static struct dentry * configfs_lookup(struct inode *dir, 458 struct dentry *dentry, 459 struct nameidata *nd) 460 { 461 struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata; 462 struct configfs_dirent * sd; 463 int found = 0; 464 int err; 465 466 /* 467 * Fake invisibility if dir belongs to a group/default groups hierarchy 468 * being attached 469 * 470 * This forbids userspace to read/write attributes of items which may 471 * not complete their initialization, since the dentries of the 472 * attributes won't be instantiated. 473 */ 474 err = -ENOENT; 475 if (!configfs_dirent_is_ready(parent_sd)) 476 goto out; 477 478 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { 479 if (sd->s_type & CONFIGFS_NOT_PINNED) { 480 const unsigned char * name = configfs_get_name(sd); 481 482 if (strcmp(name, dentry->d_name.name)) 483 continue; 484 485 found = 1; 486 err = configfs_attach_attr(sd, dentry); 487 break; 488 } 489 } 490 491 if (!found) { 492 /* 493 * If it doesn't exist and it isn't a NOT_PINNED item, 494 * it must be negative. 495 */ 496 return simple_lookup(dir, dentry, nd); 497 } 498 499 out: 500 return ERR_PTR(err); 501 } 502 503 /* 504 * Only subdirectories count here. Files (CONFIGFS_NOT_PINNED) are 505 * attributes and are removed by rmdir(). We recurse, setting 506 * CONFIGFS_USET_DROPPING on all children that are candidates for 507 * default detach. 508 * If there is an error, the caller will reset the flags via 509 * configfs_detach_rollback(). 510 */ 511 static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex) 512 { 513 struct configfs_dirent *parent_sd = dentry->d_fsdata; 514 struct configfs_dirent *sd; 515 int ret; 516 517 /* Mark that we're trying to drop the group */ 518 parent_sd->s_type |= CONFIGFS_USET_DROPPING; 519 520 ret = -EBUSY; 521 if (!list_empty(&parent_sd->s_links)) 522 goto out; 523 524 ret = 0; 525 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { 526 if (!sd->s_element || 527 (sd->s_type & CONFIGFS_NOT_PINNED)) 528 continue; 529 if (sd->s_type & CONFIGFS_USET_DEFAULT) { 530 /* Abort if racing with mkdir() */ 531 if (sd->s_type & CONFIGFS_USET_IN_MKDIR) { 532 if (wait_mutex) 533 *wait_mutex = &sd->s_dentry->d_inode->i_mutex; 534 return -EAGAIN; 535 } 536 537 /* 538 * Yup, recursive. If there's a problem, blame 539 * deep nesting of default_groups 540 */ 541 ret = configfs_detach_prep(sd->s_dentry, wait_mutex); 542 if (!ret) 543 continue; 544 } else 545 ret = -ENOTEMPTY; 546 547 break; 548 } 549 550 out: 551 return ret; 552 } 553 554 /* 555 * Walk the tree, resetting CONFIGFS_USET_DROPPING wherever it was 556 * set. 557 */ 558 static void configfs_detach_rollback(struct dentry *dentry) 559 { 560 struct configfs_dirent *parent_sd = dentry->d_fsdata; 561 struct configfs_dirent *sd; 562 563 parent_sd->s_type &= ~CONFIGFS_USET_DROPPING; 564 565 list_for_each_entry(sd, &parent_sd->s_children, s_sibling) 566 if (sd->s_type & CONFIGFS_USET_DEFAULT) 567 configfs_detach_rollback(sd->s_dentry); 568 } 569 570 static void detach_attrs(struct config_item * item) 571 { 572 struct dentry * dentry = dget(item->ci_dentry); 573 struct configfs_dirent * parent_sd; 574 struct configfs_dirent * sd, * tmp; 575 576 if (!dentry) 577 return; 578 579 pr_debug("configfs %s: dropping attrs for dir\n", 580 dentry->d_name.name); 581 582 parent_sd = dentry->d_fsdata; 583 list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) { 584 if (!sd->s_element || !(sd->s_type & CONFIGFS_NOT_PINNED)) 585 continue; 586 spin_lock(&configfs_dirent_lock); 587 list_del_init(&sd->s_sibling); 588 spin_unlock(&configfs_dirent_lock); 589 configfs_drop_dentry(sd, dentry); 590 configfs_put(sd); 591 } 592 593 /** 594 * Drop reference from dget() on entrance. 595 */ 596 dput(dentry); 597 } 598 599 static int populate_attrs(struct config_item *item) 600 { 601 struct config_item_type *t = item->ci_type; 602 struct configfs_attribute *attr; 603 int error = 0; 604 int i; 605 606 if (!t) 607 return -EINVAL; 608 if (t->ct_attrs) { 609 for (i = 0; (attr = t->ct_attrs[i]) != NULL; i++) { 610 if ((error = configfs_create_file(item, attr))) 611 break; 612 } 613 } 614 615 if (error) 616 detach_attrs(item); 617 618 return error; 619 } 620 621 static int configfs_attach_group(struct config_item *parent_item, 622 struct config_item *item, 623 struct dentry *dentry); 624 static void configfs_detach_group(struct config_item *item); 625 626 static void detach_groups(struct config_group *group) 627 { 628 struct dentry * dentry = dget(group->cg_item.ci_dentry); 629 struct dentry *child; 630 struct configfs_dirent *parent_sd; 631 struct configfs_dirent *sd, *tmp; 632 633 if (!dentry) 634 return; 635 636 parent_sd = dentry->d_fsdata; 637 list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) { 638 if (!sd->s_element || 639 !(sd->s_type & CONFIGFS_USET_DEFAULT)) 640 continue; 641 642 child = sd->s_dentry; 643 644 mutex_lock(&child->d_inode->i_mutex); 645 646 configfs_detach_group(sd->s_element); 647 child->d_inode->i_flags |= S_DEAD; 648 649 mutex_unlock(&child->d_inode->i_mutex); 650 651 d_delete(child); 652 dput(child); 653 } 654 655 /** 656 * Drop reference from dget() on entrance. 657 */ 658 dput(dentry); 659 } 660 661 /* 662 * This fakes mkdir(2) on a default_groups[] entry. It 663 * creates a dentry, attachs it, and then does fixup 664 * on the sd->s_type. 665 * 666 * We could, perhaps, tweak our parent's ->mkdir for a minute and 667 * try using vfs_mkdir. Just a thought. 668 */ 669 static int create_default_group(struct config_group *parent_group, 670 struct config_group *group) 671 { 672 int ret; 673 struct qstr name; 674 struct configfs_dirent *sd; 675 /* We trust the caller holds a reference to parent */ 676 struct dentry *child, *parent = parent_group->cg_item.ci_dentry; 677 678 if (!group->cg_item.ci_name) 679 group->cg_item.ci_name = group->cg_item.ci_namebuf; 680 name.name = group->cg_item.ci_name; 681 name.len = strlen(name.name); 682 name.hash = full_name_hash(name.name, name.len); 683 684 ret = -ENOMEM; 685 child = d_alloc(parent, &name); 686 if (child) { 687 d_add(child, NULL); 688 689 ret = configfs_attach_group(&parent_group->cg_item, 690 &group->cg_item, child); 691 if (!ret) { 692 sd = child->d_fsdata; 693 sd->s_type |= CONFIGFS_USET_DEFAULT; 694 } else { 695 d_delete(child); 696 dput(child); 697 } 698 } 699 700 return ret; 701 } 702 703 static int populate_groups(struct config_group *group) 704 { 705 struct config_group *new_group; 706 int ret = 0; 707 int i; 708 709 if (group->default_groups) { 710 for (i = 0; group->default_groups[i]; i++) { 711 new_group = group->default_groups[i]; 712 713 ret = create_default_group(group, new_group); 714 if (ret) { 715 detach_groups(group); 716 break; 717 } 718 } 719 } 720 721 return ret; 722 } 723 724 /* 725 * All of link_obj/unlink_obj/link_group/unlink_group require that 726 * subsys->su_mutex is held. 727 */ 728 729 static void unlink_obj(struct config_item *item) 730 { 731 struct config_group *group; 732 733 group = item->ci_group; 734 if (group) { 735 list_del_init(&item->ci_entry); 736 737 item->ci_group = NULL; 738 item->ci_parent = NULL; 739 740 /* Drop the reference for ci_entry */ 741 config_item_put(item); 742 743 /* Drop the reference for ci_parent */ 744 config_group_put(group); 745 } 746 } 747 748 static void link_obj(struct config_item *parent_item, struct config_item *item) 749 { 750 /* 751 * Parent seems redundant with group, but it makes certain 752 * traversals much nicer. 753 */ 754 item->ci_parent = parent_item; 755 756 /* 757 * We hold a reference on the parent for the child's ci_parent 758 * link. 759 */ 760 item->ci_group = config_group_get(to_config_group(parent_item)); 761 list_add_tail(&item->ci_entry, &item->ci_group->cg_children); 762 763 /* 764 * We hold a reference on the child for ci_entry on the parent's 765 * cg_children 766 */ 767 config_item_get(item); 768 } 769 770 static void unlink_group(struct config_group *group) 771 { 772 int i; 773 struct config_group *new_group; 774 775 if (group->default_groups) { 776 for (i = 0; group->default_groups[i]; i++) { 777 new_group = group->default_groups[i]; 778 unlink_group(new_group); 779 } 780 } 781 782 group->cg_subsys = NULL; 783 unlink_obj(&group->cg_item); 784 } 785 786 static void link_group(struct config_group *parent_group, struct config_group *group) 787 { 788 int i; 789 struct config_group *new_group; 790 struct configfs_subsystem *subsys = NULL; /* gcc is a turd */ 791 792 link_obj(&parent_group->cg_item, &group->cg_item); 793 794 if (parent_group->cg_subsys) 795 subsys = parent_group->cg_subsys; 796 else if (configfs_is_root(&parent_group->cg_item)) 797 subsys = to_configfs_subsystem(group); 798 else 799 BUG(); 800 group->cg_subsys = subsys; 801 802 if (group->default_groups) { 803 for (i = 0; group->default_groups[i]; i++) { 804 new_group = group->default_groups[i]; 805 link_group(group, new_group); 806 } 807 } 808 } 809 810 /* 811 * The goal is that configfs_attach_item() (and 812 * configfs_attach_group()) can be called from either the VFS or this 813 * module. That is, they assume that the items have been created, 814 * the dentry allocated, and the dcache is all ready to go. 815 * 816 * If they fail, they must clean up after themselves as if they 817 * had never been called. The caller (VFS or local function) will 818 * handle cleaning up the dcache bits. 819 * 820 * configfs_detach_group() and configfs_detach_item() behave similarly on 821 * the way out. They assume that the proper semaphores are held, they 822 * clean up the configfs items, and they expect their callers will 823 * handle the dcache bits. 824 */ 825 static int configfs_attach_item(struct config_item *parent_item, 826 struct config_item *item, 827 struct dentry *dentry) 828 { 829 int ret; 830 831 ret = configfs_create_dir(item, dentry); 832 if (!ret) { 833 ret = populate_attrs(item); 834 if (ret) { 835 /* 836 * We are going to remove an inode and its dentry but 837 * the VFS may already have hit and used them. Thus, 838 * we must lock them as rmdir() would. 839 */ 840 mutex_lock(&dentry->d_inode->i_mutex); 841 configfs_remove_dir(item); 842 dentry->d_inode->i_flags |= S_DEAD; 843 mutex_unlock(&dentry->d_inode->i_mutex); 844 d_delete(dentry); 845 } 846 } 847 848 return ret; 849 } 850 851 /* Caller holds the mutex of the item's inode */ 852 static void configfs_detach_item(struct config_item *item) 853 { 854 detach_attrs(item); 855 configfs_remove_dir(item); 856 } 857 858 static int configfs_attach_group(struct config_item *parent_item, 859 struct config_item *item, 860 struct dentry *dentry) 861 { 862 int ret; 863 struct configfs_dirent *sd; 864 865 ret = configfs_attach_item(parent_item, item, dentry); 866 if (!ret) { 867 sd = dentry->d_fsdata; 868 sd->s_type |= CONFIGFS_USET_DIR; 869 870 /* 871 * FYI, we're faking mkdir in populate_groups() 872 * We must lock the group's inode to avoid races with the VFS 873 * which can already hit the inode and try to add/remove entries 874 * under it. 875 * 876 * We must also lock the inode to remove it safely in case of 877 * error, as rmdir() would. 878 */ 879 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); 880 configfs_adjust_dir_dirent_depth_before_populate(sd); 881 ret = populate_groups(to_config_group(item)); 882 if (ret) { 883 configfs_detach_item(item); 884 dentry->d_inode->i_flags |= S_DEAD; 885 } 886 configfs_adjust_dir_dirent_depth_after_populate(sd); 887 mutex_unlock(&dentry->d_inode->i_mutex); 888 if (ret) 889 d_delete(dentry); 890 } 891 892 return ret; 893 } 894 895 /* Caller holds the mutex of the group's inode */ 896 static void configfs_detach_group(struct config_item *item) 897 { 898 detach_groups(to_config_group(item)); 899 configfs_detach_item(item); 900 } 901 902 /* 903 * After the item has been detached from the filesystem view, we are 904 * ready to tear it out of the hierarchy. Notify the client before 905 * we do that so they can perform any cleanup that requires 906 * navigating the hierarchy. A client does not need to provide this 907 * callback. The subsystem semaphore MUST be held by the caller, and 908 * references must be valid for both items. It also assumes the 909 * caller has validated ci_type. 910 */ 911 static void client_disconnect_notify(struct config_item *parent_item, 912 struct config_item *item) 913 { 914 struct config_item_type *type; 915 916 type = parent_item->ci_type; 917 BUG_ON(!type); 918 919 if (type->ct_group_ops && type->ct_group_ops->disconnect_notify) 920 type->ct_group_ops->disconnect_notify(to_config_group(parent_item), 921 item); 922 } 923 924 /* 925 * Drop the initial reference from make_item()/make_group() 926 * This function assumes that reference is held on item 927 * and that item holds a valid reference to the parent. Also, it 928 * assumes the caller has validated ci_type. 929 */ 930 static void client_drop_item(struct config_item *parent_item, 931 struct config_item *item) 932 { 933 struct config_item_type *type; 934 935 type = parent_item->ci_type; 936 BUG_ON(!type); 937 938 /* 939 * If ->drop_item() exists, it is responsible for the 940 * config_item_put(). 941 */ 942 if (type->ct_group_ops && type->ct_group_ops->drop_item) 943 type->ct_group_ops->drop_item(to_config_group(parent_item), 944 item); 945 else 946 config_item_put(item); 947 } 948 949 #ifdef DEBUG 950 static void configfs_dump_one(struct configfs_dirent *sd, int level) 951 { 952 printk(KERN_INFO "%*s\"%s\":\n", level, " ", configfs_get_name(sd)); 953 954 #define type_print(_type) if (sd->s_type & _type) printk(KERN_INFO "%*s %s\n", level, " ", #_type); 955 type_print(CONFIGFS_ROOT); 956 type_print(CONFIGFS_DIR); 957 type_print(CONFIGFS_ITEM_ATTR); 958 type_print(CONFIGFS_ITEM_LINK); 959 type_print(CONFIGFS_USET_DIR); 960 type_print(CONFIGFS_USET_DEFAULT); 961 type_print(CONFIGFS_USET_DROPPING); 962 #undef type_print 963 } 964 965 static int configfs_dump(struct configfs_dirent *sd, int level) 966 { 967 struct configfs_dirent *child_sd; 968 int ret = 0; 969 970 configfs_dump_one(sd, level); 971 972 if (!(sd->s_type & (CONFIGFS_DIR|CONFIGFS_ROOT))) 973 return 0; 974 975 list_for_each_entry(child_sd, &sd->s_children, s_sibling) { 976 ret = configfs_dump(child_sd, level + 2); 977 if (ret) 978 break; 979 } 980 981 return ret; 982 } 983 #endif 984 985 986 /* 987 * configfs_depend_item() and configfs_undepend_item() 988 * 989 * WARNING: Do not call these from a configfs callback! 990 * 991 * This describes these functions and their helpers. 992 * 993 * Allow another kernel system to depend on a config_item. If this 994 * happens, the item cannot go away until the dependant can live without 995 * it. The idea is to give client modules as simple an interface as 996 * possible. When a system asks them to depend on an item, they just 997 * call configfs_depend_item(). If the item is live and the client 998 * driver is in good shape, we'll happily do the work for them. 999 * 1000 * Why is the locking complex? Because configfs uses the VFS to handle 1001 * all locking, but this function is called outside the normal 1002 * VFS->configfs path. So it must take VFS locks to prevent the 1003 * VFS->configfs stuff (configfs_mkdir(), configfs_rmdir(), etc). This is 1004 * why you can't call these functions underneath configfs callbacks. 1005 * 1006 * Note, btw, that this can be called at *any* time, even when a configfs 1007 * subsystem isn't registered, or when configfs is loading or unloading. 1008 * Just like configfs_register_subsystem(). So we take the same 1009 * precautions. We pin the filesystem. We lock configfs_dirent_lock. 1010 * If we can find the target item in the 1011 * configfs tree, it must be part of the subsystem tree as well, so we 1012 * do not need the subsystem semaphore. Holding configfs_dirent_lock helps 1013 * locking out mkdir() and rmdir(), who might be racing us. 1014 */ 1015 1016 /* 1017 * configfs_depend_prep() 1018 * 1019 * Only subdirectories count here. Files (CONFIGFS_NOT_PINNED) are 1020 * attributes. This is similar but not the same to configfs_detach_prep(). 1021 * Note that configfs_detach_prep() expects the parent to be locked when it 1022 * is called, but we lock the parent *inside* configfs_depend_prep(). We 1023 * do that so we can unlock it if we find nothing. 1024 * 1025 * Here we do a depth-first search of the dentry hierarchy looking for 1026 * our object. 1027 * We deliberately ignore items tagged as dropping since they are virtually 1028 * dead, as well as items in the middle of attachment since they virtually 1029 * do not exist yet. This completes the locking out of racing mkdir() and 1030 * rmdir(). 1031 * Note: subdirectories in the middle of attachment start with s_type = 1032 * CONFIGFS_DIR|CONFIGFS_USET_CREATING set by create_dir(). When 1033 * CONFIGFS_USET_CREATING is set, we ignore the item. The actual set of 1034 * s_type is in configfs_new_dirent(), which has configfs_dirent_lock. 1035 * 1036 * If the target is not found, -ENOENT is bubbled up. 1037 * 1038 * This adds a requirement that all config_items be unique! 1039 * 1040 * This is recursive. There isn't 1041 * much on the stack, though, so folks that need this function - be careful 1042 * about your stack! Patches will be accepted to make it iterative. 1043 */ 1044 static int configfs_depend_prep(struct dentry *origin, 1045 struct config_item *target) 1046 { 1047 struct configfs_dirent *child_sd, *sd = origin->d_fsdata; 1048 int ret = 0; 1049 1050 BUG_ON(!origin || !sd); 1051 1052 if (sd->s_element == target) /* Boo-yah */ 1053 goto out; 1054 1055 list_for_each_entry(child_sd, &sd->s_children, s_sibling) { 1056 if ((child_sd->s_type & CONFIGFS_DIR) && 1057 !(child_sd->s_type & CONFIGFS_USET_DROPPING) && 1058 !(child_sd->s_type & CONFIGFS_USET_CREATING)) { 1059 ret = configfs_depend_prep(child_sd->s_dentry, 1060 target); 1061 if (!ret) 1062 goto out; /* Child path boo-yah */ 1063 } 1064 } 1065 1066 /* We looped all our children and didn't find target */ 1067 ret = -ENOENT; 1068 1069 out: 1070 return ret; 1071 } 1072 1073 int configfs_depend_item(struct configfs_subsystem *subsys, 1074 struct config_item *target) 1075 { 1076 int ret; 1077 struct configfs_dirent *p, *root_sd, *subsys_sd = NULL; 1078 struct config_item *s_item = &subsys->su_group.cg_item; 1079 1080 /* 1081 * Pin the configfs filesystem. This means we can safely access 1082 * the root of the configfs filesystem. 1083 */ 1084 ret = configfs_pin_fs(); 1085 if (ret) 1086 return ret; 1087 1088 /* 1089 * Next, lock the root directory. We're going to check that the 1090 * subsystem is really registered, and so we need to lock out 1091 * configfs_[un]register_subsystem(). 1092 */ 1093 mutex_lock(&configfs_sb->s_root->d_inode->i_mutex); 1094 1095 root_sd = configfs_sb->s_root->d_fsdata; 1096 1097 list_for_each_entry(p, &root_sd->s_children, s_sibling) { 1098 if (p->s_type & CONFIGFS_DIR) { 1099 if (p->s_element == s_item) { 1100 subsys_sd = p; 1101 break; 1102 } 1103 } 1104 } 1105 1106 if (!subsys_sd) { 1107 ret = -ENOENT; 1108 goto out_unlock_fs; 1109 } 1110 1111 /* Ok, now we can trust subsys/s_item */ 1112 1113 spin_lock(&configfs_dirent_lock); 1114 /* Scan the tree, return 0 if found */ 1115 ret = configfs_depend_prep(subsys_sd->s_dentry, target); 1116 if (ret) 1117 goto out_unlock_dirent_lock; 1118 1119 /* 1120 * We are sure that the item is not about to be removed by rmdir(), and 1121 * not in the middle of attachment by mkdir(). 1122 */ 1123 p = target->ci_dentry->d_fsdata; 1124 p->s_dependent_count += 1; 1125 1126 out_unlock_dirent_lock: 1127 spin_unlock(&configfs_dirent_lock); 1128 out_unlock_fs: 1129 mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex); 1130 1131 /* 1132 * If we succeeded, the fs is pinned via other methods. If not, 1133 * we're done with it anyway. So release_fs() is always right. 1134 */ 1135 configfs_release_fs(); 1136 1137 return ret; 1138 } 1139 EXPORT_SYMBOL(configfs_depend_item); 1140 1141 /* 1142 * Release the dependent linkage. This is much simpler than 1143 * configfs_depend_item() because we know that that the client driver is 1144 * pinned, thus the subsystem is pinned, and therefore configfs is pinned. 1145 */ 1146 void configfs_undepend_item(struct configfs_subsystem *subsys, 1147 struct config_item *target) 1148 { 1149 struct configfs_dirent *sd; 1150 1151 /* 1152 * Since we can trust everything is pinned, we just need 1153 * configfs_dirent_lock. 1154 */ 1155 spin_lock(&configfs_dirent_lock); 1156 1157 sd = target->ci_dentry->d_fsdata; 1158 BUG_ON(sd->s_dependent_count < 1); 1159 1160 sd->s_dependent_count -= 1; 1161 1162 /* 1163 * After this unlock, we cannot trust the item to stay alive! 1164 * DO NOT REFERENCE item after this unlock. 1165 */ 1166 spin_unlock(&configfs_dirent_lock); 1167 } 1168 EXPORT_SYMBOL(configfs_undepend_item); 1169 1170 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) 1171 { 1172 int ret = 0; 1173 int module_got = 0; 1174 struct config_group *group = NULL; 1175 struct config_item *item = NULL; 1176 struct config_item *parent_item; 1177 struct configfs_subsystem *subsys; 1178 struct configfs_dirent *sd; 1179 struct config_item_type *type; 1180 struct module *subsys_owner = NULL, *new_item_owner = NULL; 1181 char *name; 1182 1183 if (dentry->d_parent == configfs_sb->s_root) { 1184 ret = -EPERM; 1185 goto out; 1186 } 1187 1188 sd = dentry->d_parent->d_fsdata; 1189 1190 /* 1191 * Fake invisibility if dir belongs to a group/default groups hierarchy 1192 * being attached 1193 */ 1194 if (!configfs_dirent_is_ready(sd)) { 1195 ret = -ENOENT; 1196 goto out; 1197 } 1198 1199 if (!(sd->s_type & CONFIGFS_USET_DIR)) { 1200 ret = -EPERM; 1201 goto out; 1202 } 1203 1204 /* Get a working ref for the duration of this function */ 1205 parent_item = configfs_get_config_item(dentry->d_parent); 1206 type = parent_item->ci_type; 1207 subsys = to_config_group(parent_item)->cg_subsys; 1208 BUG_ON(!subsys); 1209 1210 if (!type || !type->ct_group_ops || 1211 (!type->ct_group_ops->make_group && 1212 !type->ct_group_ops->make_item)) { 1213 ret = -EPERM; /* Lack-of-mkdir returns -EPERM */ 1214 goto out_put; 1215 } 1216 1217 /* 1218 * The subsystem may belong to a different module than the item 1219 * being created. We don't want to safely pin the new item but 1220 * fail to pin the subsystem it sits under. 1221 */ 1222 if (!subsys->su_group.cg_item.ci_type) { 1223 ret = -EINVAL; 1224 goto out_put; 1225 } 1226 subsys_owner = subsys->su_group.cg_item.ci_type->ct_owner; 1227 if (!try_module_get(subsys_owner)) { 1228 ret = -EINVAL; 1229 goto out_put; 1230 } 1231 1232 name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL); 1233 if (!name) { 1234 ret = -ENOMEM; 1235 goto out_subsys_put; 1236 } 1237 1238 snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name); 1239 1240 mutex_lock(&subsys->su_mutex); 1241 if (type->ct_group_ops->make_group) { 1242 group = type->ct_group_ops->make_group(to_config_group(parent_item), name); 1243 if (!group) 1244 group = ERR_PTR(-ENOMEM); 1245 if (!IS_ERR(group)) { 1246 link_group(to_config_group(parent_item), group); 1247 item = &group->cg_item; 1248 } else 1249 ret = PTR_ERR(group); 1250 } else { 1251 item = type->ct_group_ops->make_item(to_config_group(parent_item), name); 1252 if (!item) 1253 item = ERR_PTR(-ENOMEM); 1254 if (!IS_ERR(item)) 1255 link_obj(parent_item, item); 1256 else 1257 ret = PTR_ERR(item); 1258 } 1259 mutex_unlock(&subsys->su_mutex); 1260 1261 kfree(name); 1262 if (ret) { 1263 /* 1264 * If ret != 0, then link_obj() was never called. 1265 * There are no extra references to clean up. 1266 */ 1267 goto out_subsys_put; 1268 } 1269 1270 /* 1271 * link_obj() has been called (via link_group() for groups). 1272 * From here on out, errors must clean that up. 1273 */ 1274 1275 type = item->ci_type; 1276 if (!type) { 1277 ret = -EINVAL; 1278 goto out_unlink; 1279 } 1280 1281 new_item_owner = type->ct_owner; 1282 if (!try_module_get(new_item_owner)) { 1283 ret = -EINVAL; 1284 goto out_unlink; 1285 } 1286 1287 /* 1288 * I hate doing it this way, but if there is 1289 * an error, module_put() probably should 1290 * happen after any cleanup. 1291 */ 1292 module_got = 1; 1293 1294 /* 1295 * Make racing rmdir() fail if it did not tag parent with 1296 * CONFIGFS_USET_DROPPING 1297 * Note: if CONFIGFS_USET_DROPPING is already set, attach_group() will 1298 * fail and let rmdir() terminate correctly 1299 */ 1300 spin_lock(&configfs_dirent_lock); 1301 /* This will make configfs_detach_prep() fail */ 1302 sd->s_type |= CONFIGFS_USET_IN_MKDIR; 1303 spin_unlock(&configfs_dirent_lock); 1304 1305 if (group) 1306 ret = configfs_attach_group(parent_item, item, dentry); 1307 else 1308 ret = configfs_attach_item(parent_item, item, dentry); 1309 1310 spin_lock(&configfs_dirent_lock); 1311 sd->s_type &= ~CONFIGFS_USET_IN_MKDIR; 1312 if (!ret) 1313 configfs_dir_set_ready(dentry->d_fsdata); 1314 spin_unlock(&configfs_dirent_lock); 1315 1316 out_unlink: 1317 if (ret) { 1318 /* Tear down everything we built up */ 1319 mutex_lock(&subsys->su_mutex); 1320 1321 client_disconnect_notify(parent_item, item); 1322 if (group) 1323 unlink_group(group); 1324 else 1325 unlink_obj(item); 1326 client_drop_item(parent_item, item); 1327 1328 mutex_unlock(&subsys->su_mutex); 1329 1330 if (module_got) 1331 module_put(new_item_owner); 1332 } 1333 1334 out_subsys_put: 1335 if (ret) 1336 module_put(subsys_owner); 1337 1338 out_put: 1339 /* 1340 * link_obj()/link_group() took a reference from child->parent, 1341 * so the parent is safely pinned. We can drop our working 1342 * reference. 1343 */ 1344 config_item_put(parent_item); 1345 1346 out: 1347 return ret; 1348 } 1349 1350 static int configfs_rmdir(struct inode *dir, struct dentry *dentry) 1351 { 1352 struct config_item *parent_item; 1353 struct config_item *item; 1354 struct configfs_subsystem *subsys; 1355 struct configfs_dirent *sd; 1356 struct module *subsys_owner = NULL, *dead_item_owner = NULL; 1357 int ret; 1358 1359 if (dentry->d_parent == configfs_sb->s_root) 1360 return -EPERM; 1361 1362 sd = dentry->d_fsdata; 1363 if (sd->s_type & CONFIGFS_USET_DEFAULT) 1364 return -EPERM; 1365 1366 /* Get a working ref until we have the child */ 1367 parent_item = configfs_get_config_item(dentry->d_parent); 1368 subsys = to_config_group(parent_item)->cg_subsys; 1369 BUG_ON(!subsys); 1370 1371 if (!parent_item->ci_type) { 1372 config_item_put(parent_item); 1373 return -EINVAL; 1374 } 1375 1376 /* configfs_mkdir() shouldn't have allowed this */ 1377 BUG_ON(!subsys->su_group.cg_item.ci_type); 1378 subsys_owner = subsys->su_group.cg_item.ci_type->ct_owner; 1379 1380 /* 1381 * Ensure that no racing symlink() will make detach_prep() fail while 1382 * the new link is temporarily attached 1383 */ 1384 do { 1385 struct mutex *wait_mutex; 1386 1387 mutex_lock(&configfs_symlink_mutex); 1388 spin_lock(&configfs_dirent_lock); 1389 /* 1390 * Here's where we check for dependents. We're protected by 1391 * configfs_dirent_lock. 1392 * If no dependent, atomically tag the item as dropping. 1393 */ 1394 ret = sd->s_dependent_count ? -EBUSY : 0; 1395 if (!ret) { 1396 ret = configfs_detach_prep(dentry, &wait_mutex); 1397 if (ret) 1398 configfs_detach_rollback(dentry); 1399 } 1400 spin_unlock(&configfs_dirent_lock); 1401 mutex_unlock(&configfs_symlink_mutex); 1402 1403 if (ret) { 1404 if (ret != -EAGAIN) { 1405 config_item_put(parent_item); 1406 return ret; 1407 } 1408 1409 /* Wait until the racing operation terminates */ 1410 mutex_lock(wait_mutex); 1411 mutex_unlock(wait_mutex); 1412 } 1413 } while (ret == -EAGAIN); 1414 1415 /* Get a working ref for the duration of this function */ 1416 item = configfs_get_config_item(dentry); 1417 1418 /* Drop reference from above, item already holds one. */ 1419 config_item_put(parent_item); 1420 1421 if (item->ci_type) 1422 dead_item_owner = item->ci_type->ct_owner; 1423 1424 if (sd->s_type & CONFIGFS_USET_DIR) { 1425 configfs_detach_group(item); 1426 1427 mutex_lock(&subsys->su_mutex); 1428 client_disconnect_notify(parent_item, item); 1429 unlink_group(to_config_group(item)); 1430 } else { 1431 configfs_detach_item(item); 1432 1433 mutex_lock(&subsys->su_mutex); 1434 client_disconnect_notify(parent_item, item); 1435 unlink_obj(item); 1436 } 1437 1438 client_drop_item(parent_item, item); 1439 mutex_unlock(&subsys->su_mutex); 1440 1441 /* Drop our reference from above */ 1442 config_item_put(item); 1443 1444 module_put(dead_item_owner); 1445 module_put(subsys_owner); 1446 1447 return 0; 1448 } 1449 1450 const struct inode_operations configfs_dir_inode_operations = { 1451 .mkdir = configfs_mkdir, 1452 .rmdir = configfs_rmdir, 1453 .symlink = configfs_symlink, 1454 .unlink = configfs_unlink, 1455 .lookup = configfs_lookup, 1456 .setattr = configfs_setattr, 1457 }; 1458 1459 #if 0 1460 int configfs_rename_dir(struct config_item * item, const char *new_name) 1461 { 1462 int error = 0; 1463 struct dentry * new_dentry, * parent; 1464 1465 if (!strcmp(config_item_name(item), new_name)) 1466 return -EINVAL; 1467 1468 if (!item->parent) 1469 return -EINVAL; 1470 1471 down_write(&configfs_rename_sem); 1472 parent = item->parent->dentry; 1473 1474 mutex_lock(&parent->d_inode->i_mutex); 1475 1476 new_dentry = lookup_one_len(new_name, parent, strlen(new_name)); 1477 if (!IS_ERR(new_dentry)) { 1478 if (!new_dentry->d_inode) { 1479 error = config_item_set_name(item, "%s", new_name); 1480 if (!error) { 1481 d_add(new_dentry, NULL); 1482 d_move(item->dentry, new_dentry); 1483 } 1484 else 1485 d_delete(new_dentry); 1486 } else 1487 error = -EEXIST; 1488 dput(new_dentry); 1489 } 1490 mutex_unlock(&parent->d_inode->i_mutex); 1491 up_write(&configfs_rename_sem); 1492 1493 return error; 1494 } 1495 #endif 1496 1497 static int configfs_dir_open(struct inode *inode, struct file *file) 1498 { 1499 struct dentry * dentry = file->f_path.dentry; 1500 struct configfs_dirent * parent_sd = dentry->d_fsdata; 1501 int err; 1502 1503 mutex_lock(&dentry->d_inode->i_mutex); 1504 /* 1505 * Fake invisibility if dir belongs to a group/default groups hierarchy 1506 * being attached 1507 */ 1508 err = -ENOENT; 1509 if (configfs_dirent_is_ready(parent_sd)) { 1510 file->private_data = configfs_new_dirent(parent_sd, NULL, 0); 1511 if (IS_ERR(file->private_data)) 1512 err = PTR_ERR(file->private_data); 1513 else 1514 err = 0; 1515 } 1516 mutex_unlock(&dentry->d_inode->i_mutex); 1517 1518 return err; 1519 } 1520 1521 static int configfs_dir_close(struct inode *inode, struct file *file) 1522 { 1523 struct dentry * dentry = file->f_path.dentry; 1524 struct configfs_dirent * cursor = file->private_data; 1525 1526 mutex_lock(&dentry->d_inode->i_mutex); 1527 spin_lock(&configfs_dirent_lock); 1528 list_del_init(&cursor->s_sibling); 1529 spin_unlock(&configfs_dirent_lock); 1530 mutex_unlock(&dentry->d_inode->i_mutex); 1531 1532 release_configfs_dirent(cursor); 1533 1534 return 0; 1535 } 1536 1537 /* Relationship between s_mode and the DT_xxx types */ 1538 static inline unsigned char dt_type(struct configfs_dirent *sd) 1539 { 1540 return (sd->s_mode >> 12) & 15; 1541 } 1542 1543 static int configfs_readdir(struct file * filp, void * dirent, filldir_t filldir) 1544 { 1545 struct dentry *dentry = filp->f_path.dentry; 1546 struct configfs_dirent * parent_sd = dentry->d_fsdata; 1547 struct configfs_dirent *cursor = filp->private_data; 1548 struct list_head *p, *q = &cursor->s_sibling; 1549 ino_t ino; 1550 int i = filp->f_pos; 1551 1552 switch (i) { 1553 case 0: 1554 ino = dentry->d_inode->i_ino; 1555 if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0) 1556 break; 1557 filp->f_pos++; 1558 i++; 1559 /* fallthrough */ 1560 case 1: 1561 ino = parent_ino(dentry); 1562 if (filldir(dirent, "..", 2, i, ino, DT_DIR) < 0) 1563 break; 1564 filp->f_pos++; 1565 i++; 1566 /* fallthrough */ 1567 default: 1568 if (filp->f_pos == 2) { 1569 spin_lock(&configfs_dirent_lock); 1570 list_move(q, &parent_sd->s_children); 1571 spin_unlock(&configfs_dirent_lock); 1572 } 1573 for (p=q->next; p!= &parent_sd->s_children; p=p->next) { 1574 struct configfs_dirent *next; 1575 const char * name; 1576 int len; 1577 1578 next = list_entry(p, struct configfs_dirent, 1579 s_sibling); 1580 if (!next->s_element) 1581 continue; 1582 1583 name = configfs_get_name(next); 1584 len = strlen(name); 1585 if (next->s_dentry) 1586 ino = next->s_dentry->d_inode->i_ino; 1587 else 1588 ino = iunique(configfs_sb, 2); 1589 1590 if (filldir(dirent, name, len, filp->f_pos, ino, 1591 dt_type(next)) < 0) 1592 return 0; 1593 1594 spin_lock(&configfs_dirent_lock); 1595 list_move(q, p); 1596 spin_unlock(&configfs_dirent_lock); 1597 p = q; 1598 filp->f_pos++; 1599 } 1600 } 1601 return 0; 1602 } 1603 1604 static loff_t configfs_dir_lseek(struct file * file, loff_t offset, int origin) 1605 { 1606 struct dentry * dentry = file->f_path.dentry; 1607 1608 mutex_lock(&dentry->d_inode->i_mutex); 1609 switch (origin) { 1610 case 1: 1611 offset += file->f_pos; 1612 case 0: 1613 if (offset >= 0) 1614 break; 1615 default: 1616 mutex_unlock(&file->f_path.dentry->d_inode->i_mutex); 1617 return -EINVAL; 1618 } 1619 if (offset != file->f_pos) { 1620 file->f_pos = offset; 1621 if (file->f_pos >= 2) { 1622 struct configfs_dirent *sd = dentry->d_fsdata; 1623 struct configfs_dirent *cursor = file->private_data; 1624 struct list_head *p; 1625 loff_t n = file->f_pos - 2; 1626 1627 spin_lock(&configfs_dirent_lock); 1628 list_del(&cursor->s_sibling); 1629 p = sd->s_children.next; 1630 while (n && p != &sd->s_children) { 1631 struct configfs_dirent *next; 1632 next = list_entry(p, struct configfs_dirent, 1633 s_sibling); 1634 if (next->s_element) 1635 n--; 1636 p = p->next; 1637 } 1638 list_add_tail(&cursor->s_sibling, p); 1639 spin_unlock(&configfs_dirent_lock); 1640 } 1641 } 1642 mutex_unlock(&dentry->d_inode->i_mutex); 1643 return offset; 1644 } 1645 1646 const struct file_operations configfs_dir_operations = { 1647 .open = configfs_dir_open, 1648 .release = configfs_dir_close, 1649 .llseek = configfs_dir_lseek, 1650 .read = generic_read_dir, 1651 .readdir = configfs_readdir, 1652 }; 1653 1654 int configfs_register_subsystem(struct configfs_subsystem *subsys) 1655 { 1656 int err; 1657 struct config_group *group = &subsys->su_group; 1658 struct qstr name; 1659 struct dentry *dentry; 1660 struct configfs_dirent *sd; 1661 1662 err = configfs_pin_fs(); 1663 if (err) 1664 return err; 1665 1666 if (!group->cg_item.ci_name) 1667 group->cg_item.ci_name = group->cg_item.ci_namebuf; 1668 1669 sd = configfs_sb->s_root->d_fsdata; 1670 link_group(to_config_group(sd->s_element), group); 1671 1672 mutex_lock_nested(&configfs_sb->s_root->d_inode->i_mutex, 1673 I_MUTEX_PARENT); 1674 1675 name.name = group->cg_item.ci_name; 1676 name.len = strlen(name.name); 1677 name.hash = full_name_hash(name.name, name.len); 1678 1679 err = -ENOMEM; 1680 dentry = d_alloc(configfs_sb->s_root, &name); 1681 if (dentry) { 1682 d_add(dentry, NULL); 1683 1684 err = configfs_attach_group(sd->s_element, &group->cg_item, 1685 dentry); 1686 if (err) { 1687 d_delete(dentry); 1688 dput(dentry); 1689 } else { 1690 spin_lock(&configfs_dirent_lock); 1691 configfs_dir_set_ready(dentry->d_fsdata); 1692 spin_unlock(&configfs_dirent_lock); 1693 } 1694 } 1695 1696 mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex); 1697 1698 if (err) { 1699 unlink_group(group); 1700 configfs_release_fs(); 1701 } 1702 1703 return err; 1704 } 1705 1706 void configfs_unregister_subsystem(struct configfs_subsystem *subsys) 1707 { 1708 struct config_group *group = &subsys->su_group; 1709 struct dentry *dentry = group->cg_item.ci_dentry; 1710 1711 if (dentry->d_parent != configfs_sb->s_root) { 1712 printk(KERN_ERR "configfs: Tried to unregister non-subsystem!\n"); 1713 return; 1714 } 1715 1716 mutex_lock_nested(&configfs_sb->s_root->d_inode->i_mutex, 1717 I_MUTEX_PARENT); 1718 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); 1719 mutex_lock(&configfs_symlink_mutex); 1720 spin_lock(&configfs_dirent_lock); 1721 if (configfs_detach_prep(dentry, NULL)) { 1722 printk(KERN_ERR "configfs: Tried to unregister non-empty subsystem!\n"); 1723 } 1724 spin_unlock(&configfs_dirent_lock); 1725 mutex_unlock(&configfs_symlink_mutex); 1726 configfs_detach_group(&group->cg_item); 1727 dentry->d_inode->i_flags |= S_DEAD; 1728 mutex_unlock(&dentry->d_inode->i_mutex); 1729 1730 d_delete(dentry); 1731 1732 mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex); 1733 1734 dput(dentry); 1735 1736 unlink_group(group); 1737 configfs_release_fs(); 1738 } 1739 1740 EXPORT_SYMBOL(configfs_register_subsystem); 1741 EXPORT_SYMBOL(configfs_unregister_subsystem); 1742