Loading fs/configfs/dir.c +29 −34 Original line number Original line Diff line number Diff line Loading @@ -260,25 +260,39 @@ static void init_symlink(struct inode * inode) inode->i_op = &configfs_symlink_inode_operations; inode->i_op = &configfs_symlink_inode_operations; } } static int create_dir(struct config_item *k, struct dentry *d) /** * configfs_create_dir - create a directory for an config_item. * @item: config_itemwe're creating directory for. * @dentry: config_item's dentry. * * Note: user-created entries won't be allowed under this new directory * until it is validated by configfs_dir_set_ready() */ static int configfs_create_dir(struct config_item *item, struct dentry *dentry) { { int error; int error; umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; struct dentry *p = d->d_parent; struct dentry *p = dentry->d_parent; BUG_ON(!item); BUG_ON(!k); error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name); if (unlikely(error)) return error; error = configfs_dirent_exists(p->d_fsdata, d->d_name.name); error = configfs_make_dirent(p->d_fsdata, dentry, item, mode, if (!error) error = configfs_make_dirent(p->d_fsdata, d, k, mode, CONFIGFS_DIR | CONFIGFS_USET_CREATING); CONFIGFS_DIR | CONFIGFS_USET_CREATING); if (!error) { if (unlikely(error)) configfs_set_dir_dirent_depth(p->d_fsdata, d->d_fsdata); return error; error = configfs_create(d, mode, init_dir); configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata); error = configfs_create(dentry, mode, init_dir); if (!error) { if (!error) { inc_nlink(p->d_inode); inc_nlink(p->d_inode); item->ci_dentry = dentry; } else { } else { struct configfs_dirent *sd = d->d_fsdata; struct configfs_dirent *sd = dentry->d_fsdata; if (sd) { if (sd) { spin_lock(&configfs_dirent_lock); spin_lock(&configfs_dirent_lock); list_del_init(&sd->s_sibling); list_del_init(&sd->s_sibling); Loading @@ -286,25 +300,6 @@ static int create_dir(struct config_item *k, struct dentry *d) configfs_put(sd); configfs_put(sd); } } } } } return error; } /** * configfs_create_dir - create a directory for an config_item. * @item: config_itemwe're creating directory for. * @dentry: config_item's dentry. * * Note: user-created entries won't be allowed under this new directory * until it is validated by configfs_dir_set_ready() */ static int configfs_create_dir(struct config_item * item, struct dentry *dentry) { int error = create_dir(item, dentry); if (!error) item->ci_dentry = dentry; return error; return error; } } Loading Loading
fs/configfs/dir.c +29 −34 Original line number Original line Diff line number Diff line Loading @@ -260,25 +260,39 @@ static void init_symlink(struct inode * inode) inode->i_op = &configfs_symlink_inode_operations; inode->i_op = &configfs_symlink_inode_operations; } } static int create_dir(struct config_item *k, struct dentry *d) /** * configfs_create_dir - create a directory for an config_item. * @item: config_itemwe're creating directory for. * @dentry: config_item's dentry. * * Note: user-created entries won't be allowed under this new directory * until it is validated by configfs_dir_set_ready() */ static int configfs_create_dir(struct config_item *item, struct dentry *dentry) { { int error; int error; umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; umode_t mode = S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO; struct dentry *p = d->d_parent; struct dentry *p = dentry->d_parent; BUG_ON(!item); BUG_ON(!k); error = configfs_dirent_exists(p->d_fsdata, dentry->d_name.name); if (unlikely(error)) return error; error = configfs_dirent_exists(p->d_fsdata, d->d_name.name); error = configfs_make_dirent(p->d_fsdata, dentry, item, mode, if (!error) error = configfs_make_dirent(p->d_fsdata, d, k, mode, CONFIGFS_DIR | CONFIGFS_USET_CREATING); CONFIGFS_DIR | CONFIGFS_USET_CREATING); if (!error) { if (unlikely(error)) configfs_set_dir_dirent_depth(p->d_fsdata, d->d_fsdata); return error; error = configfs_create(d, mode, init_dir); configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata); error = configfs_create(dentry, mode, init_dir); if (!error) { if (!error) { inc_nlink(p->d_inode); inc_nlink(p->d_inode); item->ci_dentry = dentry; } else { } else { struct configfs_dirent *sd = d->d_fsdata; struct configfs_dirent *sd = dentry->d_fsdata; if (sd) { if (sd) { spin_lock(&configfs_dirent_lock); spin_lock(&configfs_dirent_lock); list_del_init(&sd->s_sibling); list_del_init(&sd->s_sibling); Loading @@ -286,25 +300,6 @@ static int create_dir(struct config_item *k, struct dentry *d) configfs_put(sd); configfs_put(sd); } } } } } return error; } /** * configfs_create_dir - create a directory for an config_item. * @item: config_itemwe're creating directory for. * @dentry: config_item's dentry. * * Note: user-created entries won't be allowed under this new directory * until it is validated by configfs_dir_set_ready() */ static int configfs_create_dir(struct config_item * item, struct dentry *dentry) { int error = create_dir(item, dentry); if (!error) item->ci_dentry = dentry; return error; return error; } } Loading