Merge tag 'selinux-pr-20190801' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / fs / configfs / dir.c
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);