2f436d4f1d6db5ab11eacf6c5f3a766f70b03780
[safe/jmp/linux-2.6] / fs / configfs / dir.c
1 /* -*- mode: c; c-basic-offset: 8; -*-
2  * vim: noexpandtab sw=8 ts=8 sts=0:
3  *
4  * dir.c - Operations for configfs directories.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public
17  * License along with this program; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 021110-1307, USA.
20  *
21  * Based on sysfs:
22  *      sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel
23  *
24  * configfs Copyright (C) 2005 Oracle.  All rights reserved.
25  */
26
27 #undef DEBUG
28
29 #include <linux/fs.h>
30 #include <linux/mount.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33
34 #include <linux/configfs.h>
35 #include "configfs_internal.h"
36
37 DECLARE_RWSEM(configfs_rename_sem);
38
39 static void configfs_d_iput(struct dentry * dentry,
40                             struct inode * inode)
41 {
42         struct configfs_dirent * sd = dentry->d_fsdata;
43
44         if (sd) {
45                 BUG_ON(sd->s_dentry != dentry);
46                 sd->s_dentry = NULL;
47                 configfs_put(sd);
48         }
49         iput(inode);
50 }
51
52 /*
53  * We _must_ delete our dentries on last dput, as the chain-to-parent
54  * behavior is required to clear the parents of default_groups.
55  */
56 static int configfs_d_delete(struct dentry *dentry)
57 {
58         return 1;
59 }
60
61 static struct dentry_operations configfs_dentry_ops = {
62         .d_iput         = configfs_d_iput,
63         /* simple_delete_dentry() isn't exported */
64         .d_delete       = configfs_d_delete,
65 };
66
67 /*
68  * Allocates a new configfs_dirent and links it to the parent configfs_dirent
69  */
70 static struct configfs_dirent *configfs_new_dirent(struct configfs_dirent * parent_sd,
71                                                 void * element)
72 {
73         struct configfs_dirent * sd;
74
75         sd = kmem_cache_zalloc(configfs_dir_cachep, GFP_KERNEL);
76         if (!sd)
77                 return NULL;
78
79         atomic_set(&sd->s_count, 1);
80         INIT_LIST_HEAD(&sd->s_links);
81         INIT_LIST_HEAD(&sd->s_children);
82         list_add(&sd->s_sibling, &parent_sd->s_children);
83         sd->s_element = element;
84
85         return sd;
86 }
87
88 /*
89  *
90  * Return -EEXIST if there is already a configfs element with the same
91  * name for the same parent.
92  *
93  * called with parent inode's i_mutex held
94  */
95 static int configfs_dirent_exists(struct configfs_dirent *parent_sd,
96                                   const unsigned char *new)
97 {
98         struct configfs_dirent * sd;
99
100         list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
101                 if (sd->s_element) {
102                         const unsigned char *existing = configfs_get_name(sd);
103                         if (strcmp(existing, new))
104                                 continue;
105                         else
106                                 return -EEXIST;
107                 }
108         }
109
110         return 0;
111 }
112
113
114 int configfs_make_dirent(struct configfs_dirent * parent_sd,
115                          struct dentry * dentry, void * element,
116                          umode_t mode, int type)
117 {
118         struct configfs_dirent * sd;
119
120         sd = configfs_new_dirent(parent_sd, element);
121         if (!sd)
122                 return -ENOMEM;
123
124         sd->s_mode = mode;
125         sd->s_type = type;
126         sd->s_dentry = dentry;
127         if (dentry) {
128                 dentry->d_fsdata = configfs_get(sd);
129                 dentry->d_op = &configfs_dentry_ops;
130         }
131
132         return 0;
133 }
134
135 static int init_dir(struct inode * inode)
136 {
137         inode->i_op = &configfs_dir_inode_operations;
138         inode->i_fop = &configfs_dir_operations;
139
140         /* directory inodes start off with i_nlink == 2 (for "." entry) */
141         inc_nlink(inode);
142         return 0;
143 }
144
145 static int init_file(struct inode * inode)
146 {
147         inode->i_size = PAGE_SIZE;
148         inode->i_fop = &configfs_file_operations;
149         return 0;
150 }
151
152 static int init_symlink(struct inode * inode)
153 {
154         inode->i_op = &configfs_symlink_inode_operations;
155         return 0;
156 }
157
158 static int create_dir(struct config_item * k, struct dentry * p,
159                       struct dentry * d)
160 {
161         int error;
162         umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO;
163
164         error = configfs_dirent_exists(p->d_fsdata, d->d_name.name);
165         if (!error)
166                 error = configfs_make_dirent(p->d_fsdata, d, k, mode,
167                                              CONFIGFS_DIR);
168         if (!error) {
169                 error = configfs_create(d, mode, init_dir);
170                 if (!error) {
171                         inc_nlink(p->d_inode);
172                         (d)->d_op = &configfs_dentry_ops;
173                 } else {
174                         struct configfs_dirent *sd = d->d_fsdata;
175                         if (sd) {
176                                 list_del_init(&sd->s_sibling);
177                                 configfs_put(sd);
178                         }
179                 }
180         }
181         return error;
182 }
183
184
185 /**
186  *      configfs_create_dir - create a directory for an config_item.
187  *      @item:          config_itemwe're creating directory for.
188  *      @dentry:        config_item's dentry.
189  */
190
191 static int configfs_create_dir(struct config_item * item, struct dentry *dentry)
192 {
193         struct dentry * parent;
194         int error = 0;
195
196         BUG_ON(!item);
197
198         if (item->ci_parent)
199                 parent = item->ci_parent->ci_dentry;
200         else if (configfs_mount && configfs_mount->mnt_sb)
201                 parent = configfs_mount->mnt_sb->s_root;
202         else
203                 return -EFAULT;
204
205         error = create_dir(item,parent,dentry);
206         if (!error)
207                 item->ci_dentry = dentry;
208         return error;
209 }
210
211 int configfs_create_link(struct configfs_symlink *sl,
212                          struct dentry *parent,
213                          struct dentry *dentry)
214 {
215         int err = 0;
216         umode_t mode = S_IFLNK | S_IRWXUGO;
217
218         err = configfs_make_dirent(parent->d_fsdata, dentry, sl, mode,
219                                    CONFIGFS_ITEM_LINK);
220         if (!err) {
221                 err = configfs_create(dentry, mode, init_symlink);
222                 if (!err)
223                         dentry->d_op = &configfs_dentry_ops;
224                 else {
225                         struct configfs_dirent *sd = dentry->d_fsdata;
226                         if (sd) {
227                                 list_del_init(&sd->s_sibling);
228                                 configfs_put(sd);
229                         }
230                 }
231         }
232         return err;
233 }
234
235 static void remove_dir(struct dentry * d)
236 {
237         struct dentry * parent = dget(d->d_parent);
238         struct configfs_dirent * sd;
239
240         sd = d->d_fsdata;
241         list_del_init(&sd->s_sibling);
242         configfs_put(sd);
243         if (d->d_inode)
244                 simple_rmdir(parent->d_inode,d);
245
246         pr_debug(" o %s removing done (%d)\n",d->d_name.name,
247                  atomic_read(&d->d_count));
248
249         dput(parent);
250 }
251
252 /**
253  * configfs_remove_dir - remove an config_item's directory.
254  * @item:       config_item we're removing.
255  *
256  * The only thing special about this is that we remove any files in
257  * the directory before we remove the directory, and we've inlined
258  * what used to be configfs_rmdir() below, instead of calling separately.
259  */
260
261 static void configfs_remove_dir(struct config_item * item)
262 {
263         struct dentry * dentry = dget(item->ci_dentry);
264
265         if (!dentry)
266                 return;
267
268         remove_dir(dentry);
269         /**
270          * Drop reference from dget() on entrance.
271          */
272         dput(dentry);
273 }
274
275
276 /* attaches attribute's configfs_dirent to the dentry corresponding to the
277  * attribute file
278  */
279 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry)
280 {
281         struct configfs_attribute * attr = sd->s_element;
282         int error;
283
284         dentry->d_fsdata = configfs_get(sd);
285         sd->s_dentry = dentry;
286         error = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG, init_file);
287         if (error) {
288                 configfs_put(sd);
289                 return error;
290         }
291
292         dentry->d_op = &configfs_dentry_ops;
293         d_rehash(dentry);
294
295         return 0;
296 }
297
298 static struct dentry * configfs_lookup(struct inode *dir,
299                                        struct dentry *dentry,
300                                        struct nameidata *nd)
301 {
302         struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata;
303         struct configfs_dirent * sd;
304         int found = 0;
305         int err = 0;
306
307         list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
308                 if (sd->s_type & CONFIGFS_NOT_PINNED) {
309                         const unsigned char * name = configfs_get_name(sd);
310
311                         if (strcmp(name, dentry->d_name.name))
312                                 continue;
313
314                         found = 1;
315                         err = configfs_attach_attr(sd, dentry);
316                         break;
317                 }
318         }
319
320         if (!found) {
321                 /*
322                  * If it doesn't exist and it isn't a NOT_PINNED item,
323                  * it must be negative.
324                  */
325                 return simple_lookup(dir, dentry, nd);
326         }
327
328         return ERR_PTR(err);
329 }
330
331 /*
332  * Only subdirectories count here.  Files (CONFIGFS_NOT_PINNED) are
333  * attributes and are removed by rmdir().  We recurse, taking i_mutex
334  * on all children that are candidates for default detach.  If the
335  * result is clean, then configfs_detach_group() will handle dropping
336  * i_mutex.  If there is an error, the caller will clean up the i_mutex
337  * holders via configfs_detach_rollback().
338  */
339 static int configfs_detach_prep(struct dentry *dentry)
340 {
341         struct configfs_dirent *parent_sd = dentry->d_fsdata;
342         struct configfs_dirent *sd;
343         int ret;
344
345         ret = -EBUSY;
346         if (!list_empty(&parent_sd->s_links))
347                 goto out;
348
349         ret = 0;
350         list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
351                 if (sd->s_type & CONFIGFS_NOT_PINNED)
352                         continue;
353                 if (sd->s_type & CONFIGFS_USET_DEFAULT) {
354                         mutex_lock(&sd->s_dentry->d_inode->i_mutex);
355                         /* Mark that we've taken i_mutex */
356                         sd->s_type |= CONFIGFS_USET_DROPPING;
357
358                         /*
359                          * Yup, recursive.  If there's a problem, blame
360                          * deep nesting of default_groups
361                          */
362                         ret = configfs_detach_prep(sd->s_dentry);
363                         if (!ret)
364                                 continue;
365                 } else
366                         ret = -ENOTEMPTY;
367
368                 break;
369         }
370
371 out:
372         return ret;
373 }
374
375 /*
376  * Walk the tree, dropping i_mutex wherever CONFIGFS_USET_DROPPING is
377  * set.
378  */
379 static void configfs_detach_rollback(struct dentry *dentry)
380 {
381         struct configfs_dirent *parent_sd = dentry->d_fsdata;
382         struct configfs_dirent *sd;
383
384         list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
385                 if (sd->s_type & CONFIGFS_USET_DEFAULT) {
386                         configfs_detach_rollback(sd->s_dentry);
387
388                         if (sd->s_type & CONFIGFS_USET_DROPPING) {
389                                 sd->s_type &= ~CONFIGFS_USET_DROPPING;
390                                 mutex_unlock(&sd->s_dentry->d_inode->i_mutex);
391                         }
392                 }
393         }
394 }
395
396 static void detach_attrs(struct config_item * item)
397 {
398         struct dentry * dentry = dget(item->ci_dentry);
399         struct configfs_dirent * parent_sd;
400         struct configfs_dirent * sd, * tmp;
401
402         if (!dentry)
403                 return;
404
405         pr_debug("configfs %s: dropping attrs for  dir\n",
406                  dentry->d_name.name);
407
408         parent_sd = dentry->d_fsdata;
409         list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) {
410                 if (!sd->s_element || !(sd->s_type & CONFIGFS_NOT_PINNED))
411                         continue;
412                 list_del_init(&sd->s_sibling);
413                 configfs_drop_dentry(sd, dentry);
414                 configfs_put(sd);
415         }
416
417         /**
418          * Drop reference from dget() on entrance.
419          */
420         dput(dentry);
421 }
422
423 static int populate_attrs(struct config_item *item)
424 {
425         struct config_item_type *t = item->ci_type;
426         struct configfs_attribute *attr;
427         int error = 0;
428         int i;
429
430         if (!t)
431                 return -EINVAL;
432         if (t->ct_attrs) {
433                 for (i = 0; (attr = t->ct_attrs[i]) != NULL; i++) {
434                         if ((error = configfs_create_file(item, attr)))
435                                 break;
436                 }
437         }
438
439         if (error)
440                 detach_attrs(item);
441
442         return error;
443 }
444
445 static int configfs_attach_group(struct config_item *parent_item,
446                                  struct config_item *item,
447                                  struct dentry *dentry);
448 static void configfs_detach_group(struct config_item *item);
449
450 static void detach_groups(struct config_group *group)
451 {
452         struct dentry * dentry = dget(group->cg_item.ci_dentry);
453         struct dentry *child;
454         struct configfs_dirent *parent_sd;
455         struct configfs_dirent *sd, *tmp;
456
457         if (!dentry)
458                 return;
459
460         parent_sd = dentry->d_fsdata;
461         list_for_each_entry_safe(sd, tmp, &parent_sd->s_children, s_sibling) {
462                 if (!sd->s_element ||
463                     !(sd->s_type & CONFIGFS_USET_DEFAULT))
464                         continue;
465
466                 child = sd->s_dentry;
467
468                 configfs_detach_group(sd->s_element);
469                 child->d_inode->i_flags |= S_DEAD;
470
471                 /*
472                  * From rmdir/unregister, a configfs_detach_prep() pass
473                  * has taken our i_mutex for us.  Drop it.
474                  * From mkdir/register cleanup, there is no sem held.
475                  */
476                 if (sd->s_type & CONFIGFS_USET_DROPPING)
477                         mutex_unlock(&child->d_inode->i_mutex);
478
479                 d_delete(child);
480                 dput(child);
481         }
482
483         /**
484          * Drop reference from dget() on entrance.
485          */
486         dput(dentry);
487 }
488
489 /*
490  * This fakes mkdir(2) on a default_groups[] entry.  It
491  * creates a dentry, attachs it, and then does fixup
492  * on the sd->s_type.
493  *
494  * We could, perhaps, tweak our parent's ->mkdir for a minute and
495  * try using vfs_mkdir.  Just a thought.
496  */
497 static int create_default_group(struct config_group *parent_group,
498                                 struct config_group *group)
499 {
500         int ret;
501         struct qstr name;
502         struct configfs_dirent *sd;
503         /* We trust the caller holds a reference to parent */
504         struct dentry *child, *parent = parent_group->cg_item.ci_dentry;
505
506         if (!group->cg_item.ci_name)
507                 group->cg_item.ci_name = group->cg_item.ci_namebuf;
508         name.name = group->cg_item.ci_name;
509         name.len = strlen(name.name);
510         name.hash = full_name_hash(name.name, name.len);
511
512         ret = -ENOMEM;
513         child = d_alloc(parent, &name);
514         if (child) {
515                 d_add(child, NULL);
516
517                 ret = configfs_attach_group(&parent_group->cg_item,
518                                             &group->cg_item, child);
519                 if (!ret) {
520                         sd = child->d_fsdata;
521                         sd->s_type |= CONFIGFS_USET_DEFAULT;
522                 } else {
523                         d_delete(child);
524                         dput(child);
525                 }
526         }
527
528         return ret;
529 }
530
531 static int populate_groups(struct config_group *group)
532 {
533         struct config_group *new_group;
534         struct dentry *dentry = group->cg_item.ci_dentry;
535         int ret = 0;
536         int i;
537
538         if (group->default_groups) {
539                 /*
540                  * FYI, we're faking mkdir here
541                  * I'm not sure we need this semaphore, as we're called
542                  * from our parent's mkdir.  That holds our parent's
543                  * i_mutex, so afaik lookup cannot continue through our
544                  * parent to find us, let alone mess with our tree.
545                  * That said, taking our i_mutex is closer to mkdir
546                  * emulation, and shouldn't hurt.
547                  */
548                 mutex_lock(&dentry->d_inode->i_mutex);
549
550                 for (i = 0; group->default_groups[i]; i++) {
551                         new_group = group->default_groups[i];
552
553                         ret = create_default_group(group, new_group);
554                         if (ret)
555                                 break;
556                 }
557
558                 mutex_unlock(&dentry->d_inode->i_mutex);
559         }
560
561         if (ret)
562                 detach_groups(group);
563
564         return ret;
565 }
566
567 /*
568  * All of link_obj/unlink_obj/link_group/unlink_group require that
569  * subsys->su_mutex is held.
570  */
571
572 static void unlink_obj(struct config_item *item)
573 {
574         struct config_group *group;
575
576         group = item->ci_group;
577         if (group) {
578                 list_del_init(&item->ci_entry);
579
580                 item->ci_group = NULL;
581                 item->ci_parent = NULL;
582
583                 /* Drop the reference for ci_entry */
584                 config_item_put(item);
585
586                 /* Drop the reference for ci_parent */
587                 config_group_put(group);
588         }
589 }
590
591 static void link_obj(struct config_item *parent_item, struct config_item *item)
592 {
593         /*
594          * Parent seems redundant with group, but it makes certain
595          * traversals much nicer.
596          */
597         item->ci_parent = parent_item;
598
599         /*
600          * We hold a reference on the parent for the child's ci_parent
601          * link.
602          */
603         item->ci_group = config_group_get(to_config_group(parent_item));
604         list_add_tail(&item->ci_entry, &item->ci_group->cg_children);
605
606         /*
607          * We hold a reference on the child for ci_entry on the parent's
608          * cg_children
609          */
610         config_item_get(item);
611 }
612
613 static void unlink_group(struct config_group *group)
614 {
615         int i;
616         struct config_group *new_group;
617
618         if (group->default_groups) {
619                 for (i = 0; group->default_groups[i]; i++) {
620                         new_group = group->default_groups[i];
621                         unlink_group(new_group);
622                 }
623         }
624
625         group->cg_subsys = NULL;
626         unlink_obj(&group->cg_item);
627 }
628
629 static void link_group(struct config_group *parent_group, struct config_group *group)
630 {
631         int i;
632         struct config_group *new_group;
633         struct configfs_subsystem *subsys = NULL; /* gcc is a turd */
634
635         link_obj(&parent_group->cg_item, &group->cg_item);
636
637         if (parent_group->cg_subsys)
638                 subsys = parent_group->cg_subsys;
639         else if (configfs_is_root(&parent_group->cg_item))
640                 subsys = to_configfs_subsystem(group);
641         else
642                 BUG();
643         group->cg_subsys = subsys;
644
645         if (group->default_groups) {
646                 for (i = 0; group->default_groups[i]; i++) {
647                         new_group = group->default_groups[i];
648                         link_group(group, new_group);
649                 }
650         }
651 }
652
653 /*
654  * The goal is that configfs_attach_item() (and
655  * configfs_attach_group()) can be called from either the VFS or this
656  * module.  That is, they assume that the items have been created,
657  * the dentry allocated, and the dcache is all ready to go.
658  *
659  * If they fail, they must clean up after themselves as if they
660  * had never been called.  The caller (VFS or local function) will
661  * handle cleaning up the dcache bits.
662  *
663  * configfs_detach_group() and configfs_detach_item() behave similarly on
664  * the way out.  They assume that the proper semaphores are held, they
665  * clean up the configfs items, and they expect their callers will
666  * handle the dcache bits.
667  */
668 static int configfs_attach_item(struct config_item *parent_item,
669                                 struct config_item *item,
670                                 struct dentry *dentry)
671 {
672         int ret;
673
674         ret = configfs_create_dir(item, dentry);
675         if (!ret) {
676                 ret = populate_attrs(item);
677                 if (ret) {
678                         configfs_remove_dir(item);
679                         d_delete(dentry);
680                 }
681         }
682
683         return ret;
684 }
685
686 static void configfs_detach_item(struct config_item *item)
687 {
688         detach_attrs(item);
689         configfs_remove_dir(item);
690 }
691
692 static int configfs_attach_group(struct config_item *parent_item,
693                                  struct config_item *item,
694                                  struct dentry *dentry)
695 {
696         int ret;
697         struct configfs_dirent *sd;
698
699         ret = configfs_attach_item(parent_item, item, dentry);
700         if (!ret) {
701                 sd = dentry->d_fsdata;
702                 sd->s_type |= CONFIGFS_USET_DIR;
703
704                 ret = populate_groups(to_config_group(item));
705                 if (ret) {
706                         configfs_detach_item(item);
707                         d_delete(dentry);
708                 }
709         }
710
711         return ret;
712 }
713
714 static void configfs_detach_group(struct config_item *item)
715 {
716         detach_groups(to_config_group(item));
717         configfs_detach_item(item);
718 }
719
720 /*
721  * After the item has been detached from the filesystem view, we are
722  * ready to tear it out of the hierarchy.  Notify the client before
723  * we do that so they can perform any cleanup that requires
724  * navigating the hierarchy.  A client does not need to provide this
725  * callback.  The subsystem semaphore MUST be held by the caller, and
726  * references must be valid for both items.  It also assumes the
727  * caller has validated ci_type.
728  */
729 static void client_disconnect_notify(struct config_item *parent_item,
730                                      struct config_item *item)
731 {
732         struct config_item_type *type;
733
734         type = parent_item->ci_type;
735         BUG_ON(!type);
736
737         if (type->ct_group_ops && type->ct_group_ops->disconnect_notify)
738                 type->ct_group_ops->disconnect_notify(to_config_group(parent_item),
739                                                       item);
740 }
741
742 /*
743  * Drop the initial reference from make_item()/make_group()
744  * This function assumes that reference is held on item
745  * and that item holds a valid reference to the parent.  Also, it
746  * assumes the caller has validated ci_type.
747  */
748 static void client_drop_item(struct config_item *parent_item,
749                              struct config_item *item)
750 {
751         struct config_item_type *type;
752
753         type = parent_item->ci_type;
754         BUG_ON(!type);
755
756         /*
757          * If ->drop_item() exists, it is responsible for the
758          * config_item_put().
759          */
760         if (type->ct_group_ops && type->ct_group_ops->drop_item)
761                 type->ct_group_ops->drop_item(to_config_group(parent_item),
762                                               item);
763         else
764                 config_item_put(item);
765 }
766
767 #ifdef DEBUG
768 static void configfs_dump_one(struct configfs_dirent *sd, int level)
769 {
770         printk(KERN_INFO "%*s\"%s\":\n", level, " ", configfs_get_name(sd));
771
772 #define type_print(_type) if (sd->s_type & _type) printk(KERN_INFO "%*s %s\n", level, " ", #_type);
773         type_print(CONFIGFS_ROOT);
774         type_print(CONFIGFS_DIR);
775         type_print(CONFIGFS_ITEM_ATTR);
776         type_print(CONFIGFS_ITEM_LINK);
777         type_print(CONFIGFS_USET_DIR);
778         type_print(CONFIGFS_USET_DEFAULT);
779         type_print(CONFIGFS_USET_DROPPING);
780 #undef type_print
781 }
782
783 static int configfs_dump(struct configfs_dirent *sd, int level)
784 {
785         struct configfs_dirent *child_sd;
786         int ret = 0;
787
788         configfs_dump_one(sd, level);
789
790         if (!(sd->s_type & (CONFIGFS_DIR|CONFIGFS_ROOT)))
791                 return 0;
792
793         list_for_each_entry(child_sd, &sd->s_children, s_sibling) {
794                 ret = configfs_dump(child_sd, level + 2);
795                 if (ret)
796                         break;
797         }
798
799         return ret;
800 }
801 #endif
802
803
804 /*
805  * configfs_depend_item() and configfs_undepend_item()
806  *
807  * WARNING: Do not call these from a configfs callback!
808  *
809  * This describes these functions and their helpers.
810  *
811  * Allow another kernel system to depend on a config_item.  If this
812  * happens, the item cannot go away until the dependant can live without
813  * it.  The idea is to give client modules as simple an interface as
814  * possible.  When a system asks them to depend on an item, they just
815  * call configfs_depend_item().  If the item is live and the client
816  * driver is in good shape, we'll happily do the work for them.
817  *
818  * Why is the locking complex?  Because configfs uses the VFS to handle
819  * all locking, but this function is called outside the normal
820  * VFS->configfs path.  So it must take VFS locks to prevent the
821  * VFS->configfs stuff (configfs_mkdir(), configfs_rmdir(), etc).  This is
822  * why you can't call these functions underneath configfs callbacks.
823  *
824  * Note, btw, that this can be called at *any* time, even when a configfs
825  * subsystem isn't registered, or when configfs is loading or unloading.
826  * Just like configfs_register_subsystem().  So we take the same
827  * precautions.  We pin the filesystem.  We lock each i_mutex _in_order_
828  * on our way down the tree.  If we can find the target item in the
829  * configfs tree, it must be part of the subsystem tree as well, so we
830  * do not need the subsystem semaphore.  Holding the i_mutex chain locks
831  * out mkdir() and rmdir(), who might be racing us.
832  */
833
834 /*
835  * configfs_depend_prep()
836  *
837  * Only subdirectories count here.  Files (CONFIGFS_NOT_PINNED) are
838  * attributes.  This is similar but not the same to configfs_detach_prep().
839  * Note that configfs_detach_prep() expects the parent to be locked when it
840  * is called, but we lock the parent *inside* configfs_depend_prep().  We
841  * do that so we can unlock it if we find nothing.
842  *
843  * Here we do a depth-first search of the dentry hierarchy looking for
844  * our object.  We take i_mutex on each step of the way down.  IT IS
845  * ESSENTIAL THAT i_mutex LOCKING IS ORDERED.  If we come back up a branch,
846  * we'll drop the i_mutex.
847  *
848  * If the target is not found, -ENOENT is bubbled up and we have released
849  * all locks.  If the target was found, the locks will be cleared by
850  * configfs_depend_rollback().
851  *
852  * This adds a requirement that all config_items be unique!
853  *
854  * This is recursive because the locking traversal is tricky.  There isn't
855  * much on the stack, though, so folks that need this function - be careful
856  * about your stack!  Patches will be accepted to make it iterative.
857  */
858 static int configfs_depend_prep(struct dentry *origin,
859                                 struct config_item *target)
860 {
861         struct configfs_dirent *child_sd, *sd = origin->d_fsdata;
862         int ret = 0;
863
864         BUG_ON(!origin || !sd);
865
866         /* Lock this guy on the way down */
867         mutex_lock(&sd->s_dentry->d_inode->i_mutex);
868         if (sd->s_element == target)  /* Boo-yah */
869                 goto out;
870
871         list_for_each_entry(child_sd, &sd->s_children, s_sibling) {
872                 if (child_sd->s_type & CONFIGFS_DIR) {
873                         ret = configfs_depend_prep(child_sd->s_dentry,
874                                                    target);
875                         if (!ret)
876                                 goto out;  /* Child path boo-yah */
877                 }
878         }
879
880         /* We looped all our children and didn't find target */
881         mutex_unlock(&sd->s_dentry->d_inode->i_mutex);
882         ret = -ENOENT;
883
884 out:
885         return ret;
886 }
887
888 /*
889  * This is ONLY called if configfs_depend_prep() did its job.  So we can
890  * trust the entire path from item back up to origin.
891  *
892  * We walk backwards from item, unlocking each i_mutex.  We finish by
893  * unlocking origin.
894  */
895 static void configfs_depend_rollback(struct dentry *origin,
896                                      struct config_item *item)
897 {
898         struct dentry *dentry = item->ci_dentry;
899
900         while (dentry != origin) {
901                 mutex_unlock(&dentry->d_inode->i_mutex);
902                 dentry = dentry->d_parent;
903         }
904
905         mutex_unlock(&origin->d_inode->i_mutex);
906 }
907
908 int configfs_depend_item(struct configfs_subsystem *subsys,
909                          struct config_item *target)
910 {
911         int ret;
912         struct configfs_dirent *p, *root_sd, *subsys_sd = NULL;
913         struct config_item *s_item = &subsys->su_group.cg_item;
914
915         /*
916          * Pin the configfs filesystem.  This means we can safely access
917          * the root of the configfs filesystem.
918          */
919         ret = configfs_pin_fs();
920         if (ret)
921                 return ret;
922
923         /*
924          * Next, lock the root directory.  We're going to check that the
925          * subsystem is really registered, and so we need to lock out
926          * configfs_[un]register_subsystem().
927          */
928         mutex_lock(&configfs_sb->s_root->d_inode->i_mutex);
929
930         root_sd = configfs_sb->s_root->d_fsdata;
931
932         list_for_each_entry(p, &root_sd->s_children, s_sibling) {
933                 if (p->s_type & CONFIGFS_DIR) {
934                         if (p->s_element == s_item) {
935                                 subsys_sd = p;
936                                 break;
937                         }
938                 }
939         }
940
941         if (!subsys_sd) {
942                 ret = -ENOENT;
943                 goto out_unlock_fs;
944         }
945
946         /* Ok, now we can trust subsys/s_item */
947
948         /* Scan the tree, locking i_mutex recursively, return 0 if found */
949         ret = configfs_depend_prep(subsys_sd->s_dentry, target);
950         if (ret)
951                 goto out_unlock_fs;
952
953         /* We hold all i_mutexes from the subsystem down to the target */
954         p = target->ci_dentry->d_fsdata;
955         p->s_dependent_count += 1;
956
957         configfs_depend_rollback(subsys_sd->s_dentry, target);
958
959 out_unlock_fs:
960         mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex);
961
962         /*
963          * If we succeeded, the fs is pinned via other methods.  If not,
964          * we're done with it anyway.  So release_fs() is always right.
965          */
966         configfs_release_fs();
967
968         return ret;
969 }
970 EXPORT_SYMBOL(configfs_depend_item);
971
972 /*
973  * Release the dependent linkage.  This is much simpler than
974  * configfs_depend_item() because we know that that the client driver is
975  * pinned, thus the subsystem is pinned, and therefore configfs is pinned.
976  */
977 void configfs_undepend_item(struct configfs_subsystem *subsys,
978                             struct config_item *target)
979 {
980         struct configfs_dirent *sd;
981
982         /*
983          * Since we can trust everything is pinned, we just need i_mutex
984          * on the item.
985          */
986         mutex_lock(&target->ci_dentry->d_inode->i_mutex);
987
988         sd = target->ci_dentry->d_fsdata;
989         BUG_ON(sd->s_dependent_count < 1);
990
991         sd->s_dependent_count -= 1;
992
993         /*
994          * After this unlock, we cannot trust the item to stay alive!
995          * DO NOT REFERENCE item after this unlock.
996          */
997         mutex_unlock(&target->ci_dentry->d_inode->i_mutex);
998 }
999 EXPORT_SYMBOL(configfs_undepend_item);
1000
1001 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
1002 {
1003         int ret, module_got = 0;
1004         struct config_group *group;
1005         struct config_item *item;
1006         struct config_item *parent_item;
1007         struct configfs_subsystem *subsys;
1008         struct configfs_dirent *sd;
1009         struct config_item_type *type;
1010         struct module *owner = NULL;
1011         char *name;
1012
1013         if (dentry->d_parent == configfs_sb->s_root) {
1014                 ret = -EPERM;
1015                 goto out;
1016         }
1017
1018         sd = dentry->d_parent->d_fsdata;
1019         if (!(sd->s_type & CONFIGFS_USET_DIR)) {
1020                 ret = -EPERM;
1021                 goto out;
1022         }
1023
1024         /* Get a working ref for the duration of this function */
1025         parent_item = configfs_get_config_item(dentry->d_parent);
1026         type = parent_item->ci_type;
1027         subsys = to_config_group(parent_item)->cg_subsys;
1028         BUG_ON(!subsys);
1029
1030         if (!type || !type->ct_group_ops ||
1031             (!type->ct_group_ops->make_group &&
1032              !type->ct_group_ops->make_item)) {
1033                 ret = -EPERM;  /* Lack-of-mkdir returns -EPERM */
1034                 goto out_put;
1035         }
1036
1037         name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL);
1038         if (!name) {
1039                 ret = -ENOMEM;
1040                 goto out_put;
1041         }
1042
1043         snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name);
1044
1045         mutex_lock(&subsys->su_mutex);
1046         group = NULL;
1047         item = NULL;
1048         if (type->ct_group_ops->make_group) {
1049                 group = type->ct_group_ops->make_group(to_config_group(parent_item), name);
1050                 if (group) {
1051                         link_group(to_config_group(parent_item), group);
1052                         item = &group->cg_item;
1053                 }
1054         } else {
1055                 item = type->ct_group_ops->make_item(to_config_group(parent_item), name);
1056                 if (item)
1057                         link_obj(parent_item, item);
1058         }
1059         mutex_unlock(&subsys->su_mutex);
1060
1061         kfree(name);
1062         if (!item) {
1063                 /*
1064                  * If item == NULL, then link_obj() was never called.
1065                  * There are no extra references to clean up.
1066                  */
1067                 ret = -ENOMEM;
1068                 goto out_put;
1069         }
1070
1071         /*
1072          * link_obj() has been called (via link_group() for groups).
1073          * From here on out, errors must clean that up.
1074          */
1075
1076         type = item->ci_type;
1077         if (!type) {
1078                 ret = -EINVAL;
1079                 goto out_unlink;
1080         }
1081
1082         owner = type->ct_owner;
1083         if (!try_module_get(owner)) {
1084                 ret = -EINVAL;
1085                 goto out_unlink;
1086         }
1087
1088         /*
1089          * I hate doing it this way, but if there is
1090          * an error,  module_put() probably should
1091          * happen after any cleanup.
1092          */
1093         module_got = 1;
1094
1095         if (group)
1096                 ret = configfs_attach_group(parent_item, item, dentry);
1097         else
1098                 ret = configfs_attach_item(parent_item, item, dentry);
1099
1100 out_unlink:
1101         if (ret) {
1102                 /* Tear down everything we built up */
1103                 mutex_lock(&subsys->su_mutex);
1104
1105                 client_disconnect_notify(parent_item, item);
1106                 if (group)
1107                         unlink_group(group);
1108                 else
1109                         unlink_obj(item);
1110                 client_drop_item(parent_item, item);
1111
1112                 mutex_unlock(&subsys->su_mutex);
1113
1114                 if (module_got)
1115                         module_put(owner);
1116         }
1117
1118 out_put:
1119         /*
1120          * link_obj()/link_group() took a reference from child->parent,
1121          * so the parent is safely pinned.  We can drop our working
1122          * reference.
1123          */
1124         config_item_put(parent_item);
1125
1126 out:
1127         return ret;
1128 }
1129
1130 static int configfs_rmdir(struct inode *dir, struct dentry *dentry)
1131 {
1132         struct config_item *parent_item;
1133         struct config_item *item;
1134         struct configfs_subsystem *subsys;
1135         struct configfs_dirent *sd;
1136         struct module *owner = NULL;
1137         int ret;
1138
1139         if (dentry->d_parent == configfs_sb->s_root)
1140                 return -EPERM;
1141
1142         sd = dentry->d_fsdata;
1143         if (sd->s_type & CONFIGFS_USET_DEFAULT)
1144                 return -EPERM;
1145
1146         /*
1147          * Here's where we check for dependents.  We're protected by
1148          * i_mutex.
1149          */
1150         if (sd->s_dependent_count)
1151                 return -EBUSY;
1152
1153         /* Get a working ref until we have the child */
1154         parent_item = configfs_get_config_item(dentry->d_parent);
1155         subsys = to_config_group(parent_item)->cg_subsys;
1156         BUG_ON(!subsys);
1157
1158         if (!parent_item->ci_type) {
1159                 config_item_put(parent_item);
1160                 return -EINVAL;
1161         }
1162
1163         ret = configfs_detach_prep(dentry);
1164         if (ret) {
1165                 configfs_detach_rollback(dentry);
1166                 config_item_put(parent_item);
1167                 return ret;
1168         }
1169
1170         /* Get a working ref for the duration of this function */
1171         item = configfs_get_config_item(dentry);
1172
1173         /* Drop reference from above, item already holds one. */
1174         config_item_put(parent_item);
1175
1176         if (item->ci_type)
1177                 owner = item->ci_type->ct_owner;
1178
1179         if (sd->s_type & CONFIGFS_USET_DIR) {
1180                 configfs_detach_group(item);
1181
1182                 mutex_lock(&subsys->su_mutex);
1183                 client_disconnect_notify(parent_item, item);
1184                 unlink_group(to_config_group(item));
1185         } else {
1186                 configfs_detach_item(item);
1187
1188                 mutex_lock(&subsys->su_mutex);
1189                 client_disconnect_notify(parent_item, item);
1190                 unlink_obj(item);
1191         }
1192
1193         client_drop_item(parent_item, item);
1194         mutex_unlock(&subsys->su_mutex);
1195
1196         /* Drop our reference from above */
1197         config_item_put(item);
1198
1199         module_put(owner);
1200
1201         return 0;
1202 }
1203
1204 const struct inode_operations configfs_dir_inode_operations = {
1205         .mkdir          = configfs_mkdir,
1206         .rmdir          = configfs_rmdir,
1207         .symlink        = configfs_symlink,
1208         .unlink         = configfs_unlink,
1209         .lookup         = configfs_lookup,
1210         .setattr        = configfs_setattr,
1211 };
1212
1213 #if 0
1214 int configfs_rename_dir(struct config_item * item, const char *new_name)
1215 {
1216         int error = 0;
1217         struct dentry * new_dentry, * parent;
1218
1219         if (!strcmp(config_item_name(item), new_name))
1220                 return -EINVAL;
1221
1222         if (!item->parent)
1223                 return -EINVAL;
1224
1225         down_write(&configfs_rename_sem);
1226         parent = item->parent->dentry;
1227
1228         mutex_lock(&parent->d_inode->i_mutex);
1229
1230         new_dentry = lookup_one_len(new_name, parent, strlen(new_name));
1231         if (!IS_ERR(new_dentry)) {
1232                 if (!new_dentry->d_inode) {
1233                         error = config_item_set_name(item, "%s", new_name);
1234                         if (!error) {
1235                                 d_add(new_dentry, NULL);
1236                                 d_move(item->dentry, new_dentry);
1237                         }
1238                         else
1239                                 d_delete(new_dentry);
1240                 } else
1241                         error = -EEXIST;
1242                 dput(new_dentry);
1243         }
1244         mutex_unlock(&parent->d_inode->i_mutex);
1245         up_write(&configfs_rename_sem);
1246
1247         return error;
1248 }
1249 #endif
1250
1251 static int configfs_dir_open(struct inode *inode, struct file *file)
1252 {
1253         struct dentry * dentry = file->f_path.dentry;
1254         struct configfs_dirent * parent_sd = dentry->d_fsdata;
1255
1256         mutex_lock(&dentry->d_inode->i_mutex);
1257         file->private_data = configfs_new_dirent(parent_sd, NULL);
1258         mutex_unlock(&dentry->d_inode->i_mutex);
1259
1260         return file->private_data ? 0 : -ENOMEM;
1261
1262 }
1263
1264 static int configfs_dir_close(struct inode *inode, struct file *file)
1265 {
1266         struct dentry * dentry = file->f_path.dentry;
1267         struct configfs_dirent * cursor = file->private_data;
1268
1269         mutex_lock(&dentry->d_inode->i_mutex);
1270         list_del_init(&cursor->s_sibling);
1271         mutex_unlock(&dentry->d_inode->i_mutex);
1272
1273         release_configfs_dirent(cursor);
1274
1275         return 0;
1276 }
1277
1278 /* Relationship between s_mode and the DT_xxx types */
1279 static inline unsigned char dt_type(struct configfs_dirent *sd)
1280 {
1281         return (sd->s_mode >> 12) & 15;
1282 }
1283
1284 static int configfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
1285 {
1286         struct dentry *dentry = filp->f_path.dentry;
1287         struct configfs_dirent * parent_sd = dentry->d_fsdata;
1288         struct configfs_dirent *cursor = filp->private_data;
1289         struct list_head *p, *q = &cursor->s_sibling;
1290         ino_t ino;
1291         int i = filp->f_pos;
1292
1293         switch (i) {
1294                 case 0:
1295                         ino = dentry->d_inode->i_ino;
1296                         if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0)
1297                                 break;
1298                         filp->f_pos++;
1299                         i++;
1300                         /* fallthrough */
1301                 case 1:
1302                         ino = parent_ino(dentry);
1303                         if (filldir(dirent, "..", 2, i, ino, DT_DIR) < 0)
1304                                 break;
1305                         filp->f_pos++;
1306                         i++;
1307                         /* fallthrough */
1308                 default:
1309                         if (filp->f_pos == 2) {
1310                                 list_move(q, &parent_sd->s_children);
1311                         }
1312                         for (p=q->next; p!= &parent_sd->s_children; p=p->next) {
1313                                 struct configfs_dirent *next;
1314                                 const char * name;
1315                                 int len;
1316
1317                                 next = list_entry(p, struct configfs_dirent,
1318                                                    s_sibling);
1319                                 if (!next->s_element)
1320                                         continue;
1321
1322                                 name = configfs_get_name(next);
1323                                 len = strlen(name);
1324                                 if (next->s_dentry)
1325                                         ino = next->s_dentry->d_inode->i_ino;
1326                                 else
1327                                         ino = iunique(configfs_sb, 2);
1328
1329                                 if (filldir(dirent, name, len, filp->f_pos, ino,
1330                                                  dt_type(next)) < 0)
1331                                         return 0;
1332
1333                                 list_move(q, p);
1334                                 p = q;
1335                                 filp->f_pos++;
1336                         }
1337         }
1338         return 0;
1339 }
1340
1341 static loff_t configfs_dir_lseek(struct file * file, loff_t offset, int origin)
1342 {
1343         struct dentry * dentry = file->f_path.dentry;
1344
1345         mutex_lock(&dentry->d_inode->i_mutex);
1346         switch (origin) {
1347                 case 1:
1348                         offset += file->f_pos;
1349                 case 0:
1350                         if (offset >= 0)
1351                                 break;
1352                 default:
1353                         mutex_unlock(&file->f_path.dentry->d_inode->i_mutex);
1354                         return -EINVAL;
1355         }
1356         if (offset != file->f_pos) {
1357                 file->f_pos = offset;
1358                 if (file->f_pos >= 2) {
1359                         struct configfs_dirent *sd = dentry->d_fsdata;
1360                         struct configfs_dirent *cursor = file->private_data;
1361                         struct list_head *p;
1362                         loff_t n = file->f_pos - 2;
1363
1364                         list_del(&cursor->s_sibling);
1365                         p = sd->s_children.next;
1366                         while (n && p != &sd->s_children) {
1367                                 struct configfs_dirent *next;
1368                                 next = list_entry(p, struct configfs_dirent,
1369                                                    s_sibling);
1370                                 if (next->s_element)
1371                                         n--;
1372                                 p = p->next;
1373                         }
1374                         list_add_tail(&cursor->s_sibling, p);
1375                 }
1376         }
1377         mutex_unlock(&dentry->d_inode->i_mutex);
1378         return offset;
1379 }
1380
1381 const struct file_operations configfs_dir_operations = {
1382         .open           = configfs_dir_open,
1383         .release        = configfs_dir_close,
1384         .llseek         = configfs_dir_lseek,
1385         .read           = generic_read_dir,
1386         .readdir        = configfs_readdir,
1387 };
1388
1389 int configfs_register_subsystem(struct configfs_subsystem *subsys)
1390 {
1391         int err;
1392         struct config_group *group = &subsys->su_group;
1393         struct qstr name;
1394         struct dentry *dentry;
1395         struct configfs_dirent *sd;
1396
1397         err = configfs_pin_fs();
1398         if (err)
1399                 return err;
1400
1401         if (!group->cg_item.ci_name)
1402                 group->cg_item.ci_name = group->cg_item.ci_namebuf;
1403
1404         sd = configfs_sb->s_root->d_fsdata;
1405         link_group(to_config_group(sd->s_element), group);
1406
1407         mutex_lock(&configfs_sb->s_root->d_inode->i_mutex);
1408
1409         name.name = group->cg_item.ci_name;
1410         name.len = strlen(name.name);
1411         name.hash = full_name_hash(name.name, name.len);
1412
1413         err = -ENOMEM;
1414         dentry = d_alloc(configfs_sb->s_root, &name);
1415         if (dentry) {
1416                 d_add(dentry, NULL);
1417
1418                 err = configfs_attach_group(sd->s_element, &group->cg_item,
1419                                             dentry);
1420                 if (err) {
1421                         d_delete(dentry);
1422                         dput(dentry);
1423                 }
1424         }
1425
1426         mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex);
1427
1428         if (err) {
1429                 unlink_group(group);
1430                 configfs_release_fs();
1431         }
1432
1433         return err;
1434 }
1435
1436 void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
1437 {
1438         struct config_group *group = &subsys->su_group;
1439         struct dentry *dentry = group->cg_item.ci_dentry;
1440
1441         if (dentry->d_parent != configfs_sb->s_root) {
1442                 printk(KERN_ERR "configfs: Tried to unregister non-subsystem!\n");
1443                 return;
1444         }
1445
1446         mutex_lock_nested(&configfs_sb->s_root->d_inode->i_mutex,
1447                           I_MUTEX_PARENT);
1448         mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD);
1449         if (configfs_detach_prep(dentry)) {
1450                 printk(KERN_ERR "configfs: Tried to unregister non-empty subsystem!\n");
1451         }
1452         configfs_detach_group(&group->cg_item);
1453         dentry->d_inode->i_flags |= S_DEAD;
1454         mutex_unlock(&dentry->d_inode->i_mutex);
1455
1456         d_delete(dentry);
1457
1458         mutex_unlock(&configfs_sb->s_root->d_inode->i_mutex);
1459
1460         dput(dentry);
1461
1462         unlink_group(group);
1463         configfs_release_fs();
1464 }
1465
1466 EXPORT_SYMBOL(configfs_register_subsystem);
1467 EXPORT_SYMBOL(configfs_unregister_subsystem);