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