Lines Matching refs:dentry
39 static void configfs_d_iput(struct dentry * dentry, in configfs_d_iput() argument
42 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_d_iput()
53 if (sd->s_dentry == dentry) in configfs_d_iput()
237 struct dentry * dentry, void * element, in configfs_make_dirent() argument
247 sd->s_dentry = dentry; in configfs_make_dirent()
248 if (dentry) in configfs_make_dirent()
249 dentry->d_fsdata = configfs_get(sd); in configfs_make_dirent()
254 static void configfs_remove_dirent(struct dentry *dentry) in configfs_remove_dirent() argument
256 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_remove_dirent()
275 static int configfs_create_dir(struct config_item *item, struct dentry *dentry, in configfs_create_dir() argument
280 struct dentry *p = dentry->d_parent; in configfs_create_dir()
285 error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name); in configfs_create_dir()
289 error = configfs_make_dirent(p->d_fsdata, dentry, item, mode, in configfs_create_dir()
295 configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata); in configfs_create_dir()
296 inode = configfs_create(dentry, mode); in configfs_create_dir()
304 d_instantiate(dentry, inode); in configfs_create_dir()
306 dget(dentry); /* pin directory dentries in core */ in configfs_create_dir()
308 item->ci_dentry = dentry; in configfs_create_dir()
312 configfs_remove_dirent(dentry); in configfs_create_dir()
354 int configfs_create_link(struct configfs_dirent *target, struct dentry *parent, in configfs_create_link()
355 struct dentry *dentry, char *body) in configfs_create_link() argument
362 err = configfs_make_dirent(p, dentry, target, mode, CONFIGFS_ITEM_LINK, in configfs_create_link()
367 inode = configfs_create(dentry, mode); in configfs_create_link()
373 d_instantiate(dentry, inode); in configfs_create_link()
374 dget(dentry); /* pin link dentries in core */ in configfs_create_link()
378 configfs_remove_dirent(dentry); in configfs_create_link()
382 static void remove_dir(struct dentry * d) in remove_dir()
384 struct dentry * parent = dget(d->d_parent); in remove_dir()
409 struct dentry * dentry = dget(item->ci_dentry); in configfs_remove_dir() local
411 if (!dentry) in configfs_remove_dir()
414 remove_dir(dentry); in configfs_remove_dir()
418 dput(dentry); in configfs_remove_dir()
425 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry) in configfs_attach_attr() argument
431 dentry->d_fsdata = configfs_get(sd); in configfs_attach_attr()
432 sd->s_dentry = dentry; in configfs_attach_attr()
435 inode = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG); in configfs_attach_attr()
447 d_add(dentry, inode); in configfs_attach_attr()
451 static struct dentry * configfs_lookup(struct inode *dir, in configfs_lookup()
452 struct dentry *dentry, in configfs_lookup() argument
455 struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata; in configfs_lookup()
476 if (strcmp(name, dentry->d_name.name)) in configfs_lookup()
480 err = configfs_attach_attr(sd, dentry); in configfs_lookup()
490 if (dentry->d_name.len > NAME_MAX) in configfs_lookup()
492 d_add(dentry, NULL); in configfs_lookup()
508 static int configfs_detach_prep(struct dentry *dentry, struct dentry **wait) in configfs_detach_prep() argument
510 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_prep()
555 static void configfs_detach_rollback(struct dentry *dentry) in configfs_detach_rollback() argument
557 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_rollback()
569 struct dentry * dentry = dget(item->ci_dentry); in detach_attrs() local
573 if (!dentry) in detach_attrs()
577 dentry->d_name.name); in detach_attrs()
579 parent_sd = dentry->d_fsdata; in detach_attrs()
586 configfs_drop_dentry(sd, dentry); in detach_attrs()
593 dput(dentry); in detach_attrs()
628 struct dentry *dentry,
634 struct dentry * dentry = dget(group->cg_item.ci_dentry); in detach_groups() local
635 struct dentry *child; in detach_groups()
639 if (!dentry) in detach_groups()
642 parent_sd = dentry->d_fsdata; in detach_groups()
665 dput(dentry); in detach_groups()
683 struct dentry *child, *parent = parent_group->cg_item.ci_dentry; in create_default_group()
829 struct dentry *dentry, in configfs_attach_item() argument
834 ret = configfs_create_dir(item, dentry, frag); in configfs_attach_item()
843 inode_lock(d_inode(dentry)); in configfs_attach_item()
845 d_inode(dentry)->i_flags |= S_DEAD; in configfs_attach_item()
846 dont_mount(dentry); in configfs_attach_item()
847 inode_unlock(d_inode(dentry)); in configfs_attach_item()
848 d_delete(dentry); in configfs_attach_item()
864 struct dentry *dentry, in configfs_attach_group() argument
870 ret = configfs_attach_item(parent_item, item, dentry, frag); in configfs_attach_group()
872 sd = dentry->d_fsdata; in configfs_attach_group()
884 inode_lock_nested(d_inode(dentry), I_MUTEX_CHILD); in configfs_attach_group()
889 d_inode(dentry)->i_flags |= S_DEAD; in configfs_attach_group()
890 dont_mount(dentry); in configfs_attach_group()
893 inode_unlock(d_inode(dentry)); in configfs_attach_group()
895 d_delete(dentry); in configfs_attach_group()
1050 static int configfs_depend_prep(struct dentry *origin, in configfs_depend_prep()
1080 static int configfs_do_depend_item(struct dentry *subsys_dentry, in configfs_do_depend_item()
1130 struct dentry *root; in configfs_depend_item()
1270 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in configfs_mkdir() argument
1284 sd = dentry->d_parent->d_fsdata; in configfs_mkdir()
1307 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_mkdir()
1334 name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL); in configfs_mkdir()
1340 snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name); in configfs_mkdir()
1408 ret = configfs_attach_group(parent_item, item, dentry, frag); in configfs_mkdir()
1410 ret = configfs_attach_item(parent_item, item, dentry, frag); in configfs_mkdir()
1415 configfs_dir_set_ready(dentry->d_fsdata); in configfs_mkdir()
1453 static int configfs_rmdir(struct inode *dir, struct dentry *dentry) in configfs_rmdir() argument
1463 sd = dentry->d_fsdata; in configfs_rmdir()
1468 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_rmdir()
1486 struct dentry *wait; in configfs_rmdir()
1497 ret = configfs_detach_prep(dentry, &wait); in configfs_rmdir()
1499 configfs_detach_rollback(dentry); in configfs_rmdir()
1520 configfs_detach_rollback(dentry); in configfs_rmdir()
1528 item = configfs_get_config_item(dentry); in configfs_rmdir()
1578 struct dentry * dentry = file->f_path.dentry; in configfs_dir_open() local
1579 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_dir_open()
1582 inode_lock(d_inode(dentry)); in configfs_dir_open()
1595 inode_unlock(d_inode(dentry)); in configfs_dir_open()
1602 struct dentry * dentry = file->f_path.dentry; in configfs_dir_close() local
1605 inode_lock(d_inode(dentry)); in configfs_dir_close()
1609 inode_unlock(d_inode(dentry)); in configfs_dir_close()
1624 struct dentry *dentry = file->f_path.dentry; in configfs_readdir() local
1625 struct super_block *sb = dentry->d_sb; in configfs_readdir()
1626 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_readdir()
1659 dentry = next->s_dentry; in configfs_readdir()
1660 if (dentry) in configfs_readdir()
1661 inode = d_inode(dentry); in configfs_readdir()
1685 struct dentry * dentry = file->f_path.dentry; in configfs_dir_lseek() local
1701 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_dir_lseek()
1746 struct dentry *parent; in configfs_register_group()
1790 struct dentry *dentry = group->cg_item.ci_dentry; in configfs_unregister_group() local
1791 struct dentry *parent = group->cg_item.ci_parent->ci_dentry; in configfs_unregister_group()
1792 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_unregister_group()
1801 configfs_detach_prep(dentry, NULL); in configfs_unregister_group()
1805 d_inode(dentry)->i_flags |= S_DEAD; in configfs_unregister_group()
1806 dont_mount(dentry); in configfs_unregister_group()
1807 fsnotify_rmdir(d_inode(parent), dentry); in configfs_unregister_group()
1808 d_delete(dentry); in configfs_unregister_group()
1811 dput(dentry); in configfs_unregister_group()
1867 struct dentry *dentry; in configfs_register_subsystem() local
1868 struct dentry *root; in configfs_register_subsystem()
1891 dentry = d_alloc_name(root, group->cg_item.ci_name); in configfs_register_subsystem()
1892 if (dentry) { in configfs_register_subsystem()
1893 d_add(dentry, NULL); in configfs_register_subsystem()
1896 dentry, frag); in configfs_register_subsystem()
1898 BUG_ON(d_inode(dentry)); in configfs_register_subsystem()
1899 d_drop(dentry); in configfs_register_subsystem()
1900 dput(dentry); in configfs_register_subsystem()
1903 configfs_dir_set_ready(dentry->d_fsdata); in configfs_register_subsystem()
1922 struct dentry *dentry = group->cg_item.ci_dentry; in configfs_unregister_subsystem() local
1923 struct dentry *root = dentry->d_sb->s_root; in configfs_unregister_subsystem()
1924 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_unregister_subsystem()
1927 if (dentry->d_parent != root) { in configfs_unregister_subsystem()
1938 inode_lock_nested(d_inode(dentry), I_MUTEX_CHILD); in configfs_unregister_subsystem()
1941 if (configfs_detach_prep(dentry, NULL)) { in configfs_unregister_subsystem()
1947 d_inode(dentry)->i_flags |= S_DEAD; in configfs_unregister_subsystem()
1948 dont_mount(dentry); in configfs_unregister_subsystem()
1949 fsnotify_rmdir(d_inode(root), dentry); in configfs_unregister_subsystem()
1950 inode_unlock(d_inode(dentry)); in configfs_unregister_subsystem()
1952 d_delete(dentry); in configfs_unregister_subsystem()
1956 dput(dentry); in configfs_unregister_subsystem()