Lines Matching refs:dentry
53 static void configfs_d_iput(struct dentry * dentry, in configfs_d_iput() argument
56 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_d_iput()
67 if (sd->s_dentry == dentry) in configfs_d_iput()
224 struct dentry * dentry, void * element, in configfs_make_dirent() argument
234 sd->s_dentry = dentry; in configfs_make_dirent()
235 if (dentry) in configfs_make_dirent()
236 dentry->d_fsdata = configfs_get(sd); in configfs_make_dirent()
270 static int configfs_create_dir(struct config_item *item, struct dentry *dentry) in configfs_create_dir() argument
274 struct dentry *p = dentry->d_parent; in configfs_create_dir()
278 error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name); in configfs_create_dir()
282 error = configfs_make_dirent(p->d_fsdata, dentry, item, mode, in configfs_create_dir()
287 configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata); in configfs_create_dir()
288 error = configfs_create(dentry, mode, init_dir); in configfs_create_dir()
291 item->ci_dentry = dentry; in configfs_create_dir()
293 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_create_dir()
343 struct dentry *parent, in configfs_create_link()
344 struct dentry *dentry) in configfs_create_link() argument
349 err = configfs_make_dirent(parent->d_fsdata, dentry, sl, mode, in configfs_create_link()
352 err = configfs_create(dentry, mode, init_symlink); in configfs_create_link()
354 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_create_link()
366 static void remove_dir(struct dentry * d) in remove_dir()
368 struct dentry * parent = dget(d->d_parent); in remove_dir()
397 struct dentry * dentry = dget(item->ci_dentry); in configfs_remove_dir() local
399 if (!dentry) in configfs_remove_dir()
402 remove_dir(dentry); in configfs_remove_dir()
406 dput(dentry); in configfs_remove_dir()
413 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry) in configfs_attach_attr() argument
419 dentry->d_fsdata = configfs_get(sd); in configfs_attach_attr()
420 sd->s_dentry = dentry; in configfs_attach_attr()
423 error = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG, in configfs_attach_attr()
430 d_rehash(dentry); in configfs_attach_attr()
435 static struct dentry * configfs_lookup(struct inode *dir, in configfs_lookup()
436 struct dentry *dentry, in configfs_lookup() argument
439 struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata; in configfs_lookup()
460 if (strcmp(name, dentry->d_name.name)) in configfs_lookup()
464 err = configfs_attach_attr(sd, dentry); in configfs_lookup()
474 if (dentry->d_name.len > NAME_MAX) in configfs_lookup()
476 d_add(dentry, NULL); in configfs_lookup()
492 static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex) in configfs_detach_prep() argument
494 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_prep()
539 static void configfs_detach_rollback(struct dentry *dentry) in configfs_detach_rollback() argument
541 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_rollback()
553 struct dentry * dentry = dget(item->ci_dentry); in detach_attrs() local
557 if (!dentry) in detach_attrs()
561 dentry->d_name.name); in detach_attrs()
563 parent_sd = dentry->d_fsdata; in detach_attrs()
570 configfs_drop_dentry(sd, dentry); in detach_attrs()
577 dput(dentry); in detach_attrs()
604 struct dentry *dentry);
609 struct dentry * dentry = dget(group->cg_item.ci_dentry); in detach_groups() local
610 struct dentry *child; in detach_groups()
614 if (!dentry) in detach_groups()
617 parent_sd = dentry->d_fsdata; in detach_groups()
640 dput(dentry); in detach_groups()
657 struct dentry *child, *parent = parent_group->cg_item.ci_dentry; in create_default_group()
806 struct dentry *dentry) in configfs_attach_item() argument
810 ret = configfs_create_dir(item, dentry); in configfs_attach_item()
819 mutex_lock(&d_inode(dentry)->i_mutex); in configfs_attach_item()
821 d_inode(dentry)->i_flags |= S_DEAD; in configfs_attach_item()
822 dont_mount(dentry); in configfs_attach_item()
823 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_attach_item()
824 d_delete(dentry); in configfs_attach_item()
840 struct dentry *dentry) in configfs_attach_group() argument
845 ret = configfs_attach_item(parent_item, item, dentry); in configfs_attach_group()
847 sd = dentry->d_fsdata; in configfs_attach_group()
859 mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD); in configfs_attach_group()
864 d_inode(dentry)->i_flags |= S_DEAD; in configfs_attach_group()
865 dont_mount(dentry); in configfs_attach_group()
868 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_attach_group()
870 d_delete(dentry); in configfs_attach_group()
1025 static int configfs_depend_prep(struct dentry *origin, in configfs_depend_prep()
1061 struct dentry *root; in configfs_depend_item()
1153 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in configfs_mkdir() argument
1166 sd = dentry->d_parent->d_fsdata; in configfs_mkdir()
1183 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_mkdir()
1210 name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL); in configfs_mkdir()
1216 snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name); in configfs_mkdir()
1284 ret = configfs_attach_group(parent_item, item, dentry); in configfs_mkdir()
1286 ret = configfs_attach_item(parent_item, item, dentry); in configfs_mkdir()
1291 configfs_dir_set_ready(dentry->d_fsdata); in configfs_mkdir()
1328 static int configfs_rmdir(struct inode *dir, struct dentry *dentry) in configfs_rmdir() argument
1337 sd = dentry->d_fsdata; in configfs_rmdir()
1342 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_rmdir()
1371 ret = configfs_detach_prep(dentry, &wait_mutex); in configfs_rmdir()
1373 configfs_detach_rollback(dentry); in configfs_rmdir()
1391 item = configfs_get_config_item(dentry); in configfs_rmdir()
1443 struct dentry * new_dentry, * parent;
1452 parent = item->parent->dentry;
1462 d_move(item->dentry, new_dentry);
1479 struct dentry * dentry = file->f_path.dentry; in configfs_dir_open() local
1480 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_dir_open()
1483 mutex_lock(&d_inode(dentry)->i_mutex); in configfs_dir_open()
1496 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_dir_open()
1503 struct dentry * dentry = file->f_path.dentry; in configfs_dir_close() local
1506 mutex_lock(&d_inode(dentry)->i_mutex); in configfs_dir_close()
1510 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_dir_close()
1525 struct dentry *dentry = file->f_path.dentry; in configfs_readdir() local
1526 struct super_block *sb = dentry->d_sb; in configfs_readdir()
1527 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_readdir()
1566 dentry = next->s_dentry; in configfs_readdir()
1567 if (dentry) in configfs_readdir()
1568 inode = d_inode(dentry); in configfs_readdir()
1589 struct dentry * dentry = file->f_path.dentry; in configfs_dir_lseek() local
1591 mutex_lock(&d_inode(dentry)->i_mutex); in configfs_dir_lseek()
1599 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_dir_lseek()
1605 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_dir_lseek()
1625 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_dir_lseek()
1651 struct dentry *parent; in configfs_register_group()
1681 struct dentry *dentry = group->cg_item.ci_dentry; in configfs_unregister_group() local
1682 struct dentry *parent = group->cg_item.ci_parent->ci_dentry; in configfs_unregister_group()
1686 configfs_detach_prep(dentry, NULL); in configfs_unregister_group()
1690 d_inode(dentry)->i_flags |= S_DEAD; in configfs_unregister_group()
1691 dont_mount(dentry); in configfs_unregister_group()
1692 d_delete(dentry); in configfs_unregister_group()
1695 dput(dentry); in configfs_unregister_group()
1751 struct dentry *dentry; in configfs_register_subsystem() local
1752 struct dentry *root; in configfs_register_subsystem()
1768 dentry = d_alloc_name(root, group->cg_item.ci_name); in configfs_register_subsystem()
1769 if (dentry) { in configfs_register_subsystem()
1770 d_add(dentry, NULL); in configfs_register_subsystem()
1773 dentry); in configfs_register_subsystem()
1775 BUG_ON(d_inode(dentry)); in configfs_register_subsystem()
1776 d_drop(dentry); in configfs_register_subsystem()
1777 dput(dentry); in configfs_register_subsystem()
1780 configfs_dir_set_ready(dentry->d_fsdata); in configfs_register_subsystem()
1798 struct dentry *dentry = group->cg_item.ci_dentry; in configfs_unregister_subsystem() local
1799 struct dentry *root = dentry->d_sb->s_root; in configfs_unregister_subsystem()
1801 if (dentry->d_parent != root) { in configfs_unregister_subsystem()
1808 mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD); in configfs_unregister_subsystem()
1811 if (configfs_detach_prep(dentry, NULL)) { in configfs_unregister_subsystem()
1817 d_inode(dentry)->i_flags |= S_DEAD; in configfs_unregister_subsystem()
1818 dont_mount(dentry); in configfs_unregister_subsystem()
1819 mutex_unlock(&d_inode(dentry)->i_mutex); in configfs_unregister_subsystem()
1821 d_delete(dentry); in configfs_unregister_subsystem()
1825 dput(dentry); in configfs_unregister_subsystem()