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()
59 BUG_ON(sd->s_dentry != dentry); in configfs_d_iput()
70 static int configfs_d_delete(struct dentry *dentry) in configfs_d_delete() argument
136 struct dentry * dentry, void * element, in configfs_make_dirent() argument
147 sd->s_dentry = dentry; in configfs_make_dirent()
148 if (dentry) { in configfs_make_dirent()
149 dentry->d_fsdata = configfs_get(sd); in configfs_make_dirent()
150 dentry->d_op = &configfs_dentry_ops; in configfs_make_dirent()
179 static int create_dir(struct config_item * k, struct dentry * p, in create_dir()
180 struct dentry * d) in create_dir()
217 static int configfs_create_dir(struct config_item * item, struct dentry *dentry) in configfs_create_dir() argument
219 struct dentry * parent; in configfs_create_dir()
231 error = create_dir(item,parent,dentry); in configfs_create_dir()
233 item->ci_dentry = dentry; in configfs_create_dir()
276 struct dentry *parent, in configfs_create_link()
277 struct dentry *dentry) in configfs_create_link() argument
282 err = configfs_make_dirent(parent->d_fsdata, dentry, sl, mode, in configfs_create_link()
285 err = configfs_create(dentry, mode, init_symlink); in configfs_create_link()
287 dentry->d_op = &configfs_dentry_ops; in configfs_create_link()
289 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_create_link()
301 static void remove_dir(struct dentry * d) in remove_dir()
303 struct dentry * parent = dget(d->d_parent); in remove_dir()
333 struct dentry * dentry = dget(item->ci_dentry); in configfs_remove_dir() local
335 if (!dentry) in configfs_remove_dir()
338 remove_dir(dentry); in configfs_remove_dir()
342 dput(dentry); in configfs_remove_dir()
349 static int configfs_attach_attr(struct configfs_dirent * sd, struct dentry * dentry) in configfs_attach_attr() argument
354 dentry->d_fsdata = configfs_get(sd); in configfs_attach_attr()
355 sd->s_dentry = dentry; in configfs_attach_attr()
356 error = configfs_create(dentry, (attr->ca_mode & S_IALLUGO) | S_IFREG, in configfs_attach_attr()
363 dentry->d_op = &configfs_dentry_ops; in configfs_attach_attr()
364 d_rehash(dentry); in configfs_attach_attr()
369 static struct dentry * configfs_lookup(struct inode *dir, in configfs_lookup()
370 struct dentry *dentry, in configfs_lookup() argument
373 struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata; in configfs_lookup()
394 if (strcmp(name, dentry->d_name.name)) in configfs_lookup()
398 err = configfs_attach_attr(sd, dentry); in configfs_lookup()
408 return simple_lookup(dir, dentry, nd); in configfs_lookup()
423 static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex) in configfs_detach_prep() argument
425 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_prep()
470 static void configfs_detach_rollback(struct dentry *dentry) in configfs_detach_rollback() argument
472 struct configfs_dirent *parent_sd = dentry->d_fsdata; in configfs_detach_rollback()
484 struct dentry * dentry = dget(item->ci_dentry); in detach_attrs() local
488 if (!dentry) in detach_attrs()
492 dentry->d_name.name); in detach_attrs()
494 parent_sd = dentry->d_fsdata; in detach_attrs()
501 configfs_drop_dentry(sd, dentry); in detach_attrs()
508 dput(dentry); in detach_attrs()
535 struct dentry *dentry);
540 struct dentry * dentry = dget(group->cg_item.ci_dentry); in detach_groups() local
541 struct dentry *child; in detach_groups()
545 if (!dentry) in detach_groups()
548 parent_sd = dentry->d_fsdata; in detach_groups()
570 dput(dentry); in detach_groups()
588 struct dentry *child, *parent = parent_group->cg_item.ci_dentry; in create_default_group()
739 struct dentry *dentry) in configfs_attach_item() argument
743 ret = configfs_create_dir(item, dentry); in configfs_attach_item()
752 mutex_lock(&dentry->d_inode->i_mutex); in configfs_attach_item()
754 dentry->d_inode->i_flags |= S_DEAD; in configfs_attach_item()
755 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_attach_item()
756 d_delete(dentry); in configfs_attach_item()
772 struct dentry *dentry) in configfs_attach_group() argument
777 ret = configfs_attach_item(parent_item, item, dentry); in configfs_attach_group()
779 sd = dentry->d_fsdata; in configfs_attach_group()
791 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); in configfs_attach_group()
795 dentry->d_inode->i_flags |= S_DEAD; in configfs_attach_group()
797 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_attach_group()
799 d_delete(dentry); in configfs_attach_group()
950 static int configfs_depend_prep(struct dentry *origin, in configfs_depend_prep()
987 static void configfs_depend_rollback(struct dentry *origin, in configfs_depend_rollback()
990 struct dentry *dentry = item->ci_dentry; in configfs_depend_rollback() local
992 while (dentry != origin) { in configfs_depend_rollback()
993 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_depend_rollback()
994 dentry = dentry->d_parent; in configfs_depend_rollback()
1093 static int configfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) in configfs_mkdir() argument
1106 if (dentry->d_parent == configfs_sb->s_root) { in configfs_mkdir()
1111 sd = dentry->d_parent->d_fsdata; in configfs_mkdir()
1128 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_mkdir()
1155 name = kmalloc(dentry->d_name.len + 1, GFP_KERNEL); in configfs_mkdir()
1161 snprintf(name, dentry->d_name.len + 1, "%s", dentry->d_name.name); in configfs_mkdir()
1229 ret = configfs_attach_group(parent_item, item, dentry); in configfs_mkdir()
1231 ret = configfs_attach_item(parent_item, item, dentry); in configfs_mkdir()
1236 configfs_dir_set_ready(dentry->d_fsdata); in configfs_mkdir()
1273 static int configfs_rmdir(struct inode *dir, struct dentry *dentry) in configfs_rmdir() argument
1282 if (dentry->d_parent == configfs_sb->s_root) in configfs_rmdir()
1285 sd = dentry->d_fsdata; in configfs_rmdir()
1297 parent_item = configfs_get_config_item(dentry->d_parent); in configfs_rmdir()
1319 ret = configfs_detach_prep(dentry, &wait_mutex); in configfs_rmdir()
1321 configfs_detach_rollback(dentry); in configfs_rmdir()
1338 item = configfs_get_config_item(dentry); in configfs_rmdir()
1385 struct dentry * new_dentry, * parent;
1394 parent = item->parent->dentry;
1404 d_move(item->dentry, new_dentry);
1421 struct dentry * dentry = file->f_path.dentry; in configfs_dir_open() local
1422 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_dir_open()
1425 mutex_lock(&dentry->d_inode->i_mutex); in configfs_dir_open()
1438 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_dir_open()
1445 struct dentry * dentry = file->f_path.dentry; in configfs_dir_close() local
1448 mutex_lock(&dentry->d_inode->i_mutex); in configfs_dir_close()
1452 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_dir_close()
1467 struct dentry *dentry = filp->f_path.dentry; in configfs_readdir() local
1468 struct configfs_dirent * parent_sd = dentry->d_fsdata; in configfs_readdir()
1476 ino = dentry->d_inode->i_ino; in configfs_readdir()
1483 ino = parent_ino(dentry); in configfs_readdir()
1528 struct dentry * dentry = file->f_path.dentry; in configfs_dir_lseek() local
1530 mutex_lock(&dentry->d_inode->i_mutex); in configfs_dir_lseek()
1538 mutex_unlock(&file->f_path.dentry->d_inode->i_mutex); in configfs_dir_lseek()
1544 struct configfs_dirent *sd = dentry->d_fsdata; in configfs_dir_lseek()
1564 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_dir_lseek()
1581 struct dentry *dentry; in configfs_register_subsystem() local
1602 dentry = d_alloc(configfs_sb->s_root, &name); in configfs_register_subsystem()
1603 if (dentry) { in configfs_register_subsystem()
1604 d_add(dentry, NULL); in configfs_register_subsystem()
1607 dentry); in configfs_register_subsystem()
1609 d_delete(dentry); in configfs_register_subsystem()
1610 dput(dentry); in configfs_register_subsystem()
1613 configfs_dir_set_ready(dentry->d_fsdata); in configfs_register_subsystem()
1631 struct dentry *dentry = group->cg_item.ci_dentry; in configfs_unregister_subsystem() local
1633 if (dentry->d_parent != configfs_sb->s_root) { in configfs_unregister_subsystem()
1640 mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD); in configfs_unregister_subsystem()
1643 if (configfs_detach_prep(dentry, NULL)) { in configfs_unregister_subsystem()
1649 dentry->d_inode->i_flags |= S_DEAD; in configfs_unregister_subsystem()
1650 mutex_unlock(&dentry->d_inode->i_mutex); in configfs_unregister_subsystem()
1652 d_delete(dentry); in configfs_unregister_subsystem()
1656 dput(dentry); in configfs_unregister_subsystem()