btrfs: use struct fscrypt_str instead of struct qstr
While struct qstr is more natural without fscrypt, since it's provided by dentries, struct fscrypt_str is provided by the fscrypt handlers processing dentries, and is thus more natural in the fscrypt world. Replace all of the struct qstr uses with struct fscrypt_str. Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
ab3c5c18e8
Коммит
6db7531882
|
@ -1518,10 +1518,10 @@ int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
|
||||||
/* root-item.c */
|
/* root-item.c */
|
||||||
int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
||||||
u64 ref_id, u64 dirid, u64 sequence,
|
u64 ref_id, u64 dirid, u64 sequence,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
||||||
u64 ref_id, u64 dirid, u64 *sequence,
|
u64 ref_id, u64 dirid, u64 *sequence,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
int btrfs_del_root(struct btrfs_trans_handle *trans,
|
int btrfs_del_root(struct btrfs_trans_handle *trans,
|
||||||
const struct btrfs_key *key);
|
const struct btrfs_key *key);
|
||||||
int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
|
int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
|
||||||
|
@ -1550,23 +1550,23 @@ int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info);
|
||||||
|
|
||||||
/* dir-item.c */
|
/* dir-item.c */
|
||||||
int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
|
int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
|
int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
|
||||||
const struct qstr *name, struct btrfs_inode *dir,
|
const struct fscrypt_str *name, struct btrfs_inode *dir,
|
||||||
struct btrfs_key *location, u8 type, u64 index);
|
struct btrfs_key *location, u8 type, u64 index);
|
||||||
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
|
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path, u64 dir,
|
struct btrfs_path *path, u64 dir,
|
||||||
const struct qstr *name, int mod);
|
const struct fscrypt_str *name, int mod);
|
||||||
struct btrfs_dir_item *
|
struct btrfs_dir_item *
|
||||||
btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
|
btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path, u64 dir,
|
struct btrfs_path *path, u64 dir,
|
||||||
u64 index, const struct qstr *name, int mod);
|
u64 index, const struct fscrypt_str *name, int mod);
|
||||||
struct btrfs_dir_item *
|
struct btrfs_dir_item *
|
||||||
btrfs_search_dir_index_item(struct btrfs_root *root,
|
btrfs_search_dir_index_item(struct btrfs_root *root,
|
||||||
struct btrfs_path *path, u64 dirid,
|
struct btrfs_path *path, u64 dirid,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
|
int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path,
|
struct btrfs_path *path,
|
||||||
|
@ -1647,10 +1647,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry);
|
||||||
int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index);
|
int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index);
|
||||||
int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *dir, struct btrfs_inode *inode,
|
struct btrfs_inode *dir, struct btrfs_inode *inode,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
int btrfs_add_link(struct btrfs_trans_handle *trans,
|
int btrfs_add_link(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
|
struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
|
||||||
const struct qstr *name, int add_backref, u64 index);
|
const struct fscrypt_str *name, int add_backref, u64 index);
|
||||||
int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry);
|
int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry);
|
||||||
int btrfs_truncate_block(struct btrfs_inode *inode, loff_t from, loff_t len,
|
int btrfs_truncate_block(struct btrfs_inode *inode, loff_t from, loff_t len,
|
||||||
int front);
|
int front);
|
||||||
|
@ -1676,7 +1676,6 @@ struct btrfs_new_inode_args {
|
||||||
struct posix_acl *default_acl;
|
struct posix_acl *default_acl;
|
||||||
struct posix_acl *acl;
|
struct posix_acl *acl;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
};
|
};
|
||||||
int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
|
int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
|
||||||
unsigned int *trans_num_items);
|
unsigned int *trans_num_items);
|
||||||
|
|
|
@ -106,7 +106,7 @@ int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans,
|
||||||
* Will return 0 or -ENOMEM
|
* Will return 0 or -ENOMEM
|
||||||
*/
|
*/
|
||||||
int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
|
int btrfs_insert_dir_item(struct btrfs_trans_handle *trans,
|
||||||
const struct qstr *name, struct btrfs_inode *dir,
|
const struct fscrypt_str *name, struct btrfs_inode *dir,
|
||||||
struct btrfs_key *location, u8 type, u64 index)
|
struct btrfs_key *location, u8 type, u64 index)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -208,7 +208,7 @@ static struct btrfs_dir_item *btrfs_lookup_match_dir(
|
||||||
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
|
struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path, u64 dir,
|
struct btrfs_path *path, u64 dir,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
int mod)
|
int mod)
|
||||||
{
|
{
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
@ -227,7 +227,7 @@ struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
|
int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
@ -304,7 +304,7 @@ struct btrfs_dir_item *
|
||||||
btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
|
btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path, u64 dir,
|
struct btrfs_path *path, u64 dir,
|
||||||
u64 index, const struct qstr *name, int mod)
|
u64 index, const struct fscrypt_str *name, int mod)
|
||||||
{
|
{
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
@ -323,7 +323,7 @@ btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
|
||||||
|
|
||||||
struct btrfs_dir_item *
|
struct btrfs_dir_item *
|
||||||
btrfs_search_dir_index_item(struct btrfs_root *root, struct btrfs_path *path,
|
btrfs_search_dir_index_item(struct btrfs_root *root, struct btrfs_path *path,
|
||||||
u64 dirid, const struct qstr *name)
|
u64 dirid, const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
|
struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
|
||||||
int slot,
|
int slot,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_inode_ref *ref;
|
struct btrfs_inode_ref *ref;
|
||||||
unsigned long ptr;
|
unsigned long ptr;
|
||||||
|
@ -42,7 +42,7 @@ struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
|
||||||
|
|
||||||
struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
|
struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
|
||||||
struct extent_buffer *leaf, int slot, u64 ref_objectid,
|
struct extent_buffer *leaf, int slot, u64 ref_objectid,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_inode_extref *extref;
|
struct btrfs_inode_extref *extref;
|
||||||
unsigned long ptr;
|
unsigned long ptr;
|
||||||
|
@ -81,7 +81,7 @@ struct btrfs_inode_extref *
|
||||||
btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
|
btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path,
|
struct btrfs_path *path,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, int ins_len,
|
u64 inode_objectid, u64 ref_objectid, int ins_len,
|
||||||
int cow)
|
int cow)
|
||||||
{
|
{
|
||||||
|
@ -104,7 +104,7 @@ btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
|
||||||
|
|
||||||
static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
|
static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid,
|
u64 inode_objectid, u64 ref_objectid,
|
||||||
u64 *index)
|
u64 *index)
|
||||||
{
|
{
|
||||||
|
@ -174,7 +174,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
|
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root, const struct qstr *name,
|
struct btrfs_root *root, const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, u64 *index)
|
u64 inode_objectid, u64 ref_objectid, u64 *index)
|
||||||
{
|
{
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
|
@ -251,7 +251,7 @@ out:
|
||||||
*/
|
*/
|
||||||
static int btrfs_insert_inode_extref(struct btrfs_trans_handle *trans,
|
static int btrfs_insert_inode_extref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid,
|
u64 inode_objectid, u64 ref_objectid,
|
||||||
u64 index)
|
u64 index)
|
||||||
{
|
{
|
||||||
|
@ -306,7 +306,7 @@ out:
|
||||||
|
|
||||||
/* Will return 0, -ENOMEM, -EMLINK, or -EEXIST or anything from the CoW path */
|
/* Will return 0, -ENOMEM, -EMLINK, or -EEXIST or anything from the CoW path */
|
||||||
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
|
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root, const struct qstr *name,
|
struct btrfs_root *root, const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, u64 index)
|
u64 inode_objectid, u64 ref_objectid, u64 index)
|
||||||
{
|
{
|
||||||
struct btrfs_fs_info *fs_info = root->fs_info;
|
struct btrfs_fs_info *fs_info = root->fs_info;
|
||||||
|
|
|
@ -64,10 +64,10 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_truncate_control *control);
|
struct btrfs_truncate_control *control);
|
||||||
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
|
int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root, const struct qstr *name,
|
struct btrfs_root *root, const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, u64 index);
|
u64 inode_objectid, u64 ref_objectid, u64 index);
|
||||||
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
|
int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root, const struct qstr *name,
|
struct btrfs_root *root, const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, u64 *index);
|
u64 inode_objectid, u64 ref_objectid, u64 *index);
|
||||||
int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
|
int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
|
@ -80,15 +80,15 @@ struct btrfs_inode_extref *btrfs_lookup_inode_extref(
|
||||||
struct btrfs_trans_handle *trans,
|
struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
struct btrfs_path *path,
|
struct btrfs_path *path,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
u64 inode_objectid, u64 ref_objectid, int ins_len,
|
u64 inode_objectid, u64 ref_objectid, int ins_len,
|
||||||
int cow);
|
int cow);
|
||||||
|
|
||||||
struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
|
struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
|
||||||
int slot,
|
int slot,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
|
struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
|
||||||
struct extent_buffer *leaf, int slot, u64 ref_objectid,
|
struct extent_buffer *leaf, int slot, u64 ref_objectid,
|
||||||
const struct qstr *name);
|
const struct fscrypt_str *name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4286,7 +4286,7 @@ int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,
|
||||||
static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *dir,
|
struct btrfs_inode *dir,
|
||||||
struct btrfs_inode *inode,
|
struct btrfs_inode *inode,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_rename_ctx *rename_ctx)
|
struct btrfs_rename_ctx *rename_ctx)
|
||||||
{
|
{
|
||||||
struct btrfs_root *root = dir->root;
|
struct btrfs_root *root = dir->root;
|
||||||
|
@ -4389,7 +4389,7 @@ out:
|
||||||
|
|
||||||
int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *dir, struct btrfs_inode *inode,
|
struct btrfs_inode *dir, struct btrfs_inode *inode,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -4430,12 +4430,10 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
int ret;
|
int ret;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
|
|
||||||
ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
/* This needs to handle no-key deletions later on */
|
/* This needs to handle no-key deletions later on */
|
||||||
|
|
||||||
|
@ -4449,7 +4447,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||||
0);
|
0);
|
||||||
|
|
||||||
ret = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
|
ret = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
|
||||||
&name);
|
&fname.disk_name);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto end_trans;
|
goto end_trans;
|
||||||
|
|
||||||
|
@ -4476,7 +4474,6 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
struct extent_buffer *leaf;
|
struct extent_buffer *leaf;
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
struct qstr name;
|
|
||||||
u64 index;
|
u64 index;
|
||||||
int ret;
|
int ret;
|
||||||
u64 objectid;
|
u64 objectid;
|
||||||
|
@ -4486,7 +4483,6 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
ret = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
/* This needs to handle no-key deletions later on */
|
/* This needs to handle no-key deletions later on */
|
||||||
|
|
||||||
|
@ -4506,7 +4502,8 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
di = btrfs_lookup_dir_item(trans, root, path, dir_ino, &name, -1);
|
di = btrfs_lookup_dir_item(trans, root, path, dir_ino,
|
||||||
|
&fname.disk_name, -1);
|
||||||
if (IS_ERR_OR_NULL(di)) {
|
if (IS_ERR_OR_NULL(di)) {
|
||||||
ret = di ? PTR_ERR(di) : -ENOENT;
|
ret = di ? PTR_ERR(di) : -ENOENT;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -4532,7 +4529,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
* call btrfs_del_root_ref, and it _shouldn't_ fail.
|
* call btrfs_del_root_ref, and it _shouldn't_ fail.
|
||||||
*/
|
*/
|
||||||
if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) {
|
if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) {
|
||||||
di = btrfs_search_dir_index_item(root, path, dir_ino, &name);
|
di = btrfs_search_dir_index_item(root, path, dir_ino, &fname.disk_name);
|
||||||
if (IS_ERR_OR_NULL(di)) {
|
if (IS_ERR_OR_NULL(di)) {
|
||||||
if (!di)
|
if (!di)
|
||||||
ret = -ENOENT;
|
ret = -ENOENT;
|
||||||
|
@ -4549,7 +4546,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
} else {
|
} else {
|
||||||
ret = btrfs_del_root_ref(trans, objectid,
|
ret = btrfs_del_root_ref(trans, objectid,
|
||||||
root->root_key.objectid, dir_ino,
|
root->root_key.objectid, dir_ino,
|
||||||
&index, &name);
|
&index, &fname.disk_name);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_abort_transaction(trans, ret);
|
btrfs_abort_transaction(trans, ret);
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -4562,7 +4559,7 @@ static int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
btrfs_i_size_write(BTRFS_I(dir), dir->i_size - name.len * 2);
|
btrfs_i_size_write(BTRFS_I(dir), dir->i_size - fname.disk_name.len * 2);
|
||||||
inode_inc_iversion(dir);
|
inode_inc_iversion(dir);
|
||||||
dir->i_mtime = current_time(dir);
|
dir->i_mtime = current_time(dir);
|
||||||
dir->i_ctime = dir->i_mtime;
|
dir->i_ctime = dir->i_mtime;
|
||||||
|
@ -4585,7 +4582,7 @@ static noinline int may_destroy_subvol(struct btrfs_root *root)
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
struct qstr name = QSTR_INIT("default", 7);
|
struct fscrypt_str name = FSTR_INIT("default", 7);
|
||||||
u64 dir_id;
|
u64 dir_id;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -4836,7 +4833,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
u64 last_unlink_trans;
|
u64 last_unlink_trans;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
|
|
||||||
if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
|
if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
|
||||||
return -ENOTEMPTY;
|
return -ENOTEMPTY;
|
||||||
|
@ -4852,7 +4848,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
err = fscrypt_setup_filename(dir, &dentry->d_name, 1, &fname);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
/* This needs to handle no-key deletions later on */
|
/* This needs to handle no-key deletions later on */
|
||||||
|
|
||||||
|
@ -4875,7 +4870,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
|
|
||||||
/* now the directory is empty */
|
/* now the directory is empty */
|
||||||
err = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
|
err = btrfs_unlink_inode(trans, BTRFS_I(dir), BTRFS_I(d_inode(dentry)),
|
||||||
&name);
|
&fname.disk_name);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
btrfs_i_size_write(BTRFS_I(inode), 0);
|
btrfs_i_size_write(BTRFS_I(inode), 0);
|
||||||
/*
|
/*
|
||||||
|
@ -5569,7 +5564,6 @@ no_delete:
|
||||||
static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||||
struct btrfs_key *location, u8 *type)
|
struct btrfs_key *location, u8 *type)
|
||||||
{
|
{
|
||||||
struct qstr name;
|
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||||
|
@ -5584,12 +5578,10 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
/* This needs to handle no-key deletions later on */
|
/* This needs to handle no-key deletions later on */
|
||||||
|
|
||||||
di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(BTRFS_I(dir)),
|
di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(BTRFS_I(dir)),
|
||||||
&name, 0);
|
&fname.disk_name, 0);
|
||||||
if (IS_ERR_OR_NULL(di)) {
|
if (IS_ERR_OR_NULL(di)) {
|
||||||
ret = di ? PTR_ERR(di) : -ENOENT;
|
ret = di ? PTR_ERR(di) : -ENOENT;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -5601,7 +5593,7 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||||
ret = -EUCLEAN;
|
ret = -EUCLEAN;
|
||||||
btrfs_warn(root->fs_info,
|
btrfs_warn(root->fs_info,
|
||||||
"%s gets something invalid in DIR_ITEM (name %s, directory ino %llu, location(%llu %u %llu))",
|
"%s gets something invalid in DIR_ITEM (name %s, directory ino %llu, location(%llu %u %llu))",
|
||||||
__func__, name.name, btrfs_ino(BTRFS_I(dir)),
|
__func__, fname.disk_name.name, btrfs_ino(BTRFS_I(dir)),
|
||||||
location->objectid, location->type, location->offset);
|
location->objectid, location->type, location->offset);
|
||||||
}
|
}
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -5631,14 +5623,11 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info,
|
||||||
int ret;
|
int ret;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
|
|
||||||
ret = fscrypt_setup_filename(dir, &dentry->d_name, 0, &fname);
|
ret = fscrypt_setup_filename(dir, &dentry->d_name, 0, &fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
path = btrfs_alloc_path();
|
path = btrfs_alloc_path();
|
||||||
if (!path) {
|
if (!path) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
@ -5660,11 +5649,11 @@ static int fixup_tree_root_location(struct btrfs_fs_info *fs_info,
|
||||||
leaf = path->nodes[0];
|
leaf = path->nodes[0];
|
||||||
ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref);
|
ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref);
|
||||||
if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(BTRFS_I(dir)) ||
|
if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(BTRFS_I(dir)) ||
|
||||||
btrfs_root_ref_name_len(leaf, ref) != name.len)
|
btrfs_root_ref_name_len(leaf, ref) != fname.disk_name.len)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = memcmp_extent_buffer(leaf, name.name, (unsigned long)(ref + 1),
|
ret = memcmp_extent_buffer(leaf, fname.disk_name.name,
|
||||||
name.len);
|
(unsigned long)(ref + 1), fname.disk_name.len);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -6297,7 +6286,6 @@ int btrfs_new_inode_prepare(struct btrfs_new_inode_args *args,
|
||||||
&args->fname);
|
&args->fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
args->name = (struct qstr)FSTR_TO_QSTR(&args->fname.disk_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = posix_acl_create(dir, &inode->i_mode, &args->default_acl, &args->acl);
|
ret = posix_acl_create(dir, &inode->i_mode, &args->default_acl, &args->acl);
|
||||||
|
@ -6380,7 +6368,7 @@ int btrfs_create_new_inode(struct btrfs_trans_handle *trans,
|
||||||
{
|
{
|
||||||
struct inode *dir = args->dir;
|
struct inode *dir = args->dir;
|
||||||
struct inode *inode = args->inode;
|
struct inode *inode = args->inode;
|
||||||
const struct qstr *name = args->orphan ? NULL : &args->dentry->d_name;
|
const struct fscrypt_str *name = args->orphan ? NULL : &args->fname.disk_name;
|
||||||
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
|
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
|
||||||
struct btrfs_root *root;
|
struct btrfs_root *root;
|
||||||
struct btrfs_inode_item *inode_item;
|
struct btrfs_inode_item *inode_item;
|
||||||
|
@ -6615,7 +6603,7 @@ out:
|
||||||
*/
|
*/
|
||||||
int btrfs_add_link(struct btrfs_trans_handle *trans,
|
int btrfs_add_link(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
|
struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
|
||||||
const struct qstr *name, int add_backref, u64 index)
|
const struct fscrypt_str *name, int add_backref, u64 index)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
@ -6771,7 +6759,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||||
struct inode *inode = d_inode(old_dentry);
|
struct inode *inode = d_inode(old_dentry);
|
||||||
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
u64 index;
|
u64 index;
|
||||||
int err;
|
int err;
|
||||||
int drop_inode = 0;
|
int drop_inode = 0;
|
||||||
|
@ -6787,8 +6774,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||||
if (err)
|
if (err)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
err = btrfs_set_inode_index(BTRFS_I(dir), &index);
|
err = btrfs_set_inode_index(BTRFS_I(dir), &index);
|
||||||
if (err)
|
if (err)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -6815,7 +6800,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||||
set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
|
set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
|
||||||
|
|
||||||
err = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
|
err = btrfs_add_link(trans, BTRFS_I(dir), BTRFS_I(inode),
|
||||||
&name, 1, index);
|
&fname.disk_name, 1, index);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
drop_inode = 1;
|
drop_inode = 1;
|
||||||
|
@ -9080,7 +9065,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
int ret2;
|
int ret2;
|
||||||
bool need_abort = false;
|
bool need_abort = false;
|
||||||
struct fscrypt_name old_fname, new_fname;
|
struct fscrypt_name old_fname, new_fname;
|
||||||
struct qstr old_name, new_name;
|
struct fscrypt_str *old_name, *new_name;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For non-subvolumes allow exchange only within one subvolume, in the
|
* For non-subvolumes allow exchange only within one subvolume, in the
|
||||||
|
@ -9102,8 +9087,8 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
old_name = (struct qstr)FSTR_TO_QSTR(&old_fname.disk_name);
|
old_name = &old_fname.disk_name;
|
||||||
new_name = (struct qstr)FSTR_TO_QSTR(&new_fname.disk_name);
|
new_name = &new_fname.disk_name;
|
||||||
|
|
||||||
/* close the race window with snapshot create/destroy ioctl */
|
/* close the race window with snapshot create/destroy ioctl */
|
||||||
if (old_ino == BTRFS_FIRST_FREE_OBJECTID ||
|
if (old_ino == BTRFS_FIRST_FREE_OBJECTID ||
|
||||||
|
@ -9172,7 +9157,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
/* force full log commit if subvolume involved. */
|
/* force full log commit if subvolume involved. */
|
||||||
btrfs_set_log_full_commit(trans);
|
btrfs_set_log_full_commit(trans);
|
||||||
} else {
|
} else {
|
||||||
ret = btrfs_insert_inode_ref(trans, dest, &new_name, old_ino,
|
ret = btrfs_insert_inode_ref(trans, dest, new_name, old_ino,
|
||||||
btrfs_ino(BTRFS_I(new_dir)),
|
btrfs_ino(BTRFS_I(new_dir)),
|
||||||
old_idx);
|
old_idx);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -9185,7 +9170,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
/* force full log commit if subvolume involved. */
|
/* force full log commit if subvolume involved. */
|
||||||
btrfs_set_log_full_commit(trans);
|
btrfs_set_log_full_commit(trans);
|
||||||
} else {
|
} else {
|
||||||
ret = btrfs_insert_inode_ref(trans, root, &old_name, new_ino,
|
ret = btrfs_insert_inode_ref(trans, root, old_name, new_ino,
|
||||||
btrfs_ino(BTRFS_I(old_dir)),
|
btrfs_ino(BTRFS_I(old_dir)),
|
||||||
new_idx);
|
new_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -9220,7 +9205,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
} else { /* src is an inode */
|
} else { /* src is an inode */
|
||||||
ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
|
ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
|
||||||
BTRFS_I(old_dentry->d_inode),
|
BTRFS_I(old_dentry->d_inode),
|
||||||
&old_name, &old_rename_ctx);
|
old_name, &old_rename_ctx);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
|
ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
|
||||||
}
|
}
|
||||||
|
@ -9235,7 +9220,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
} else { /* dest is an inode */
|
} else { /* dest is an inode */
|
||||||
ret = __btrfs_unlink_inode(trans, BTRFS_I(new_dir),
|
ret = __btrfs_unlink_inode(trans, BTRFS_I(new_dir),
|
||||||
BTRFS_I(new_dentry->d_inode),
|
BTRFS_I(new_dentry->d_inode),
|
||||||
&new_name, &new_rename_ctx);
|
new_name, &new_rename_ctx);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = btrfs_update_inode(trans, dest, BTRFS_I(new_inode));
|
ret = btrfs_update_inode(trans, dest, BTRFS_I(new_inode));
|
||||||
}
|
}
|
||||||
|
@ -9245,14 +9230,14 @@ static int btrfs_rename_exchange(struct inode *old_dir,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
|
ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
|
||||||
&new_name, 0, old_idx);
|
new_name, 0, old_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_abort_transaction(trans, ret);
|
btrfs_abort_transaction(trans, ret);
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = btrfs_add_link(trans, BTRFS_I(old_dir), BTRFS_I(new_inode),
|
ret = btrfs_add_link(trans, BTRFS_I(old_dir), BTRFS_I(new_inode),
|
||||||
&old_name, 0, new_idx);
|
old_name, 0, new_idx);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_abort_transaction(trans, ret);
|
btrfs_abort_transaction(trans, ret);
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
|
@ -9337,7 +9322,6 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
int ret2;
|
int ret2;
|
||||||
u64 old_ino = btrfs_ino(BTRFS_I(old_inode));
|
u64 old_ino = btrfs_ino(BTRFS_I(old_inode));
|
||||||
struct fscrypt_name old_fname, new_fname;
|
struct fscrypt_name old_fname, new_fname;
|
||||||
struct qstr old_name, new_name;
|
|
||||||
|
|
||||||
if (btrfs_ino(BTRFS_I(new_dir)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
|
if (btrfs_ino(BTRFS_I(new_dir)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
@ -9364,12 +9348,8 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
old_name = (struct qstr)FSTR_TO_QSTR(&old_fname.disk_name);
|
|
||||||
new_name = (struct qstr)FSTR_TO_QSTR(&new_fname.disk_name);
|
|
||||||
|
|
||||||
/* check for collisions, even if the name isn't there */
|
/* check for collisions, even if the name isn't there */
|
||||||
ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino, &new_name);
|
ret = btrfs_check_dir_item_collision(dest, new_dir->i_ino, &new_fname.disk_name);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (ret == -EEXIST) {
|
if (ret == -EEXIST) {
|
||||||
/* we shouldn't get
|
/* we shouldn't get
|
||||||
|
@ -9462,8 +9442,9 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
/* force full log commit if subvolume involved. */
|
/* force full log commit if subvolume involved. */
|
||||||
btrfs_set_log_full_commit(trans);
|
btrfs_set_log_full_commit(trans);
|
||||||
} else {
|
} else {
|
||||||
ret = btrfs_insert_inode_ref(trans, dest, &new_name, old_ino,
|
ret = btrfs_insert_inode_ref(trans, dest, &new_fname.disk_name,
|
||||||
btrfs_ino(BTRFS_I(new_dir)), index);
|
old_ino, btrfs_ino(BTRFS_I(new_dir)),
|
||||||
|
index);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
}
|
}
|
||||||
|
@ -9486,7 +9467,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
} else {
|
} else {
|
||||||
ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
|
ret = __btrfs_unlink_inode(trans, BTRFS_I(old_dir),
|
||||||
BTRFS_I(d_inode(old_dentry)),
|
BTRFS_I(d_inode(old_dentry)),
|
||||||
&old_name, &rename_ctx);
|
&old_fname.disk_name, &rename_ctx);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
|
ret = btrfs_update_inode(trans, root, BTRFS_I(old_inode));
|
||||||
}
|
}
|
||||||
|
@ -9505,7 +9486,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
} else {
|
} else {
|
||||||
ret = btrfs_unlink_inode(trans, BTRFS_I(new_dir),
|
ret = btrfs_unlink_inode(trans, BTRFS_I(new_dir),
|
||||||
BTRFS_I(d_inode(new_dentry)),
|
BTRFS_I(d_inode(new_dentry)),
|
||||||
&new_name);
|
&new_fname.disk_name);
|
||||||
}
|
}
|
||||||
if (!ret && new_inode->i_nlink == 0)
|
if (!ret && new_inode->i_nlink == 0)
|
||||||
ret = btrfs_orphan_add(trans,
|
ret = btrfs_orphan_add(trans,
|
||||||
|
@ -9517,7 +9498,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
|
ret = btrfs_add_link(trans, BTRFS_I(new_dir), BTRFS_I(old_inode),
|
||||||
&new_name, 0, index);
|
&new_fname.disk_name, 0, index);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_abort_transaction(trans, ret);
|
btrfs_abort_transaction(trans, ret);
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
|
|
|
@ -951,7 +951,7 @@ static noinline int btrfs_mksubvol(const struct path *parent,
|
||||||
struct inode *dir = d_inode(parent->dentry);
|
struct inode *dir = d_inode(parent->dentry);
|
||||||
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
|
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
struct qstr name_str = QSTR_INIT(name, namelen);
|
struct fscrypt_str name_str = FSTR_INIT((char *)name, namelen);
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = down_write_killable_nested(&dir->i_rwsem, I_MUTEX_PARENT);
|
error = down_write_killable_nested(&dir->i_rwsem, I_MUTEX_PARENT);
|
||||||
|
@ -3779,7 +3779,7 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
struct btrfs_path *path = NULL;
|
struct btrfs_path *path = NULL;
|
||||||
struct btrfs_disk_key disk_key;
|
struct btrfs_disk_key disk_key;
|
||||||
struct qstr name = QSTR_INIT("default", 7);
|
struct fscrypt_str name = FSTR_INIT("default", 7);
|
||||||
u64 objectid = 0;
|
u64 objectid = 0;
|
||||||
u64 dir_id;
|
u64 dir_id;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -331,7 +331,7 @@ out:
|
||||||
|
|
||||||
int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
||||||
u64 ref_id, u64 dirid, u64 *sequence,
|
u64 ref_id, u64 dirid, u64 *sequence,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_root *tree_root = trans->fs_info->tree_root;
|
struct btrfs_root *tree_root = trans->fs_info->tree_root;
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
|
@ -403,7 +403,7 @@ out:
|
||||||
*/
|
*/
|
||||||
int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
|
||||||
u64 ref_id, u64 dirid, u64 sequence,
|
u64 ref_id, u64 dirid, u64 sequence,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_root *tree_root = trans->fs_info->tree_root;
|
struct btrfs_root *tree_root = trans->fs_info->tree_root;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
|
|
|
@ -1597,7 +1597,7 @@ static int gen_unique_name(struct send_ctx *sctx,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
struct qstr tmp_name;
|
struct fscrypt_str tmp_name;
|
||||||
|
|
||||||
len = snprintf(tmp, sizeof(tmp), "o%llu-%llu-%llu",
|
len = snprintf(tmp, sizeof(tmp), "o%llu-%llu-%llu",
|
||||||
ino, gen, idx);
|
ino, gen, idx);
|
||||||
|
@ -1757,7 +1757,7 @@ static int lookup_dir_item_inode(struct btrfs_root *root,
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key key;
|
struct btrfs_key key;
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
struct qstr name_str = QSTR_INIT(name, name_len);
|
struct fscrypt_str name_str = FSTR_INIT((char *)name, name_len);
|
||||||
|
|
||||||
path = alloc_path_for_send();
|
path = alloc_path_for_send();
|
||||||
if (!path)
|
if (!path)
|
||||||
|
|
|
@ -1423,7 +1423,7 @@ static int get_default_subvol_objectid(struct btrfs_fs_info *fs_info, u64 *objec
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
struct btrfs_key location;
|
struct btrfs_key location;
|
||||||
struct qstr name = QSTR_INIT("default", 7);
|
struct fscrypt_str name = FSTR_INIT("default", 7);
|
||||||
u64 dir_id;
|
u64 dir_id;
|
||||||
|
|
||||||
path = btrfs_alloc_path();
|
path = btrfs_alloc_path();
|
||||||
|
|
|
@ -1625,7 +1625,6 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
u64 root_flags;
|
u64 root_flags;
|
||||||
unsigned int nofs_flags;
|
unsigned int nofs_flags;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
|
|
||||||
ASSERT(pending->path);
|
ASSERT(pending->path);
|
||||||
path = pending->path;
|
path = pending->path;
|
||||||
|
@ -1645,7 +1644,6 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
memalloc_nofs_restore(nofs_flags);
|
memalloc_nofs_restore(nofs_flags);
|
||||||
if (pending->error)
|
if (pending->error)
|
||||||
goto free_pending;
|
goto free_pending;
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
|
|
||||||
pending->error = btrfs_get_free_objectid(tree_root, &objectid);
|
pending->error = btrfs_get_free_objectid(tree_root, &objectid);
|
||||||
if (pending->error)
|
if (pending->error)
|
||||||
|
@ -1693,7 +1691,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
/* check if there is a file/dir which has the same name. */
|
/* check if there is a file/dir which has the same name. */
|
||||||
dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
|
dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
|
||||||
btrfs_ino(BTRFS_I(parent_inode)),
|
btrfs_ino(BTRFS_I(parent_inode)),
|
||||||
&name, 0);
|
&fname.disk_name, 0);
|
||||||
if (dir_item != NULL && !IS_ERR(dir_item)) {
|
if (dir_item != NULL && !IS_ERR(dir_item)) {
|
||||||
pending->error = -EEXIST;
|
pending->error = -EEXIST;
|
||||||
goto dir_item_existed;
|
goto dir_item_existed;
|
||||||
|
@ -1788,7 +1786,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
ret = btrfs_add_root_ref(trans, objectid,
|
ret = btrfs_add_root_ref(trans, objectid,
|
||||||
parent_root->root_key.objectid,
|
parent_root->root_key.objectid,
|
||||||
btrfs_ino(BTRFS_I(parent_inode)), index,
|
btrfs_ino(BTRFS_I(parent_inode)), index,
|
||||||
&name);
|
&fname.disk_name);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
btrfs_abort_transaction(trans, ret);
|
btrfs_abort_transaction(trans, ret);
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -1820,8 +1818,9 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
ret = btrfs_insert_dir_item(trans, &name, BTRFS_I(parent_inode), &key,
|
ret = btrfs_insert_dir_item(trans, &fname.disk_name,
|
||||||
BTRFS_FT_DIR, index);
|
BTRFS_I(parent_inode), &key, BTRFS_FT_DIR,
|
||||||
|
index);
|
||||||
/* We have check then name at the beginning, so it is impossible. */
|
/* We have check then name at the beginning, so it is impossible. */
|
||||||
BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
|
BUG_ON(ret == -EEXIST || ret == -EOVERFLOW);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -1830,7 +1829,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
|
||||||
}
|
}
|
||||||
|
|
||||||
btrfs_i_size_write(BTRFS_I(parent_inode), parent_inode->i_size +
|
btrfs_i_size_write(BTRFS_I(parent_inode), parent_inode->i_size +
|
||||||
name.len * 2);
|
fname.disk_name.len * 2);
|
||||||
parent_inode->i_mtime = current_time(parent_inode);
|
parent_inode->i_mtime = current_time(parent_inode);
|
||||||
parent_inode->i_ctime = parent_inode->i_mtime;
|
parent_inode->i_ctime = parent_inode->i_mtime;
|
||||||
ret = btrfs_update_inode_fallback(trans, parent_root, BTRFS_I(parent_inode));
|
ret = btrfs_update_inode_fallback(trans, parent_root, BTRFS_I(parent_inode));
|
||||||
|
|
|
@ -598,7 +598,7 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_alloc_one_name(struct extent_buffer *eb, void *start, int len,
|
static int read_alloc_one_name(struct extent_buffer *eb, void *start, int len,
|
||||||
struct qstr *name)
|
struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
|
@ -917,7 +917,7 @@ out:
|
||||||
static int unlink_inode_for_log_replay(struct btrfs_trans_handle *trans,
|
static int unlink_inode_for_log_replay(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *dir,
|
struct btrfs_inode *dir,
|
||||||
struct btrfs_inode *inode,
|
struct btrfs_inode *inode,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -948,7 +948,7 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,
|
||||||
{
|
{
|
||||||
struct btrfs_root *root = dir->root;
|
struct btrfs_root *root = dir->root;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
struct qstr name;
|
struct fscrypt_str name;
|
||||||
struct extent_buffer *leaf;
|
struct extent_buffer *leaf;
|
||||||
struct btrfs_key location;
|
struct btrfs_key location;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -989,7 +989,7 @@ out:
|
||||||
static noinline int inode_in_dir(struct btrfs_root *root,
|
static noinline int inode_in_dir(struct btrfs_root *root,
|
||||||
struct btrfs_path *path,
|
struct btrfs_path *path,
|
||||||
u64 dirid, u64 objectid, u64 index,
|
u64 dirid, u64 objectid, u64 index,
|
||||||
struct qstr *name)
|
struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct btrfs_key location;
|
struct btrfs_key location;
|
||||||
|
@ -1036,7 +1036,7 @@ out:
|
||||||
static noinline int backref_in_log(struct btrfs_root *log,
|
static noinline int backref_in_log(struct btrfs_root *log,
|
||||||
struct btrfs_key *key,
|
struct btrfs_key *key,
|
||||||
u64 ref_objectid,
|
u64 ref_objectid,
|
||||||
const struct qstr *name)
|
const struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1072,7 +1072,7 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_inode *dir,
|
struct btrfs_inode *dir,
|
||||||
struct btrfs_inode *inode,
|
struct btrfs_inode *inode,
|
||||||
u64 inode_objectid, u64 parent_objectid,
|
u64 inode_objectid, u64 parent_objectid,
|
||||||
u64 ref_index, struct qstr *name)
|
u64 ref_index, struct fscrypt_str *name)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct extent_buffer *leaf;
|
struct extent_buffer *leaf;
|
||||||
|
@ -1106,7 +1106,7 @@ again:
|
||||||
ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
||||||
ptr_end = ptr + btrfs_item_size(leaf, path->slots[0]);
|
ptr_end = ptr + btrfs_item_size(leaf, path->slots[0]);
|
||||||
while (ptr < ptr_end) {
|
while (ptr < ptr_end) {
|
||||||
struct qstr victim_name;
|
struct fscrypt_str victim_name;
|
||||||
|
|
||||||
victim_ref = (struct btrfs_inode_ref *)ptr;
|
victim_ref = (struct btrfs_inode_ref *)ptr;
|
||||||
ret = read_alloc_one_name(leaf, (victim_ref + 1),
|
ret = read_alloc_one_name(leaf, (victim_ref + 1),
|
||||||
|
@ -1156,7 +1156,7 @@ again:
|
||||||
base = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
base = btrfs_item_ptr_offset(leaf, path->slots[0]);
|
||||||
|
|
||||||
while (cur_offset < item_size) {
|
while (cur_offset < item_size) {
|
||||||
struct qstr victim_name;
|
struct fscrypt_str victim_name;
|
||||||
|
|
||||||
extref = (struct btrfs_inode_extref *)(base + cur_offset);
|
extref = (struct btrfs_inode_extref *)(base + cur_offset);
|
||||||
|
|
||||||
|
@ -1231,7 +1231,7 @@ next:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
|
static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
|
||||||
struct qstr *name, u64 *index,
|
struct fscrypt_str *name, u64 *index,
|
||||||
u64 *parent_objectid)
|
u64 *parent_objectid)
|
||||||
{
|
{
|
||||||
struct btrfs_inode_extref *extref;
|
struct btrfs_inode_extref *extref;
|
||||||
|
@ -1253,7 +1253,7 @@ static int extref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
|
static int ref_get_fields(struct extent_buffer *eb, unsigned long ref_ptr,
|
||||||
struct qstr *name, u64 *index)
|
struct fscrypt_str *name, u64 *index)
|
||||||
{
|
{
|
||||||
struct btrfs_inode_ref *ref;
|
struct btrfs_inode_ref *ref;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -1305,7 +1305,7 @@ again:
|
||||||
ref_ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
|
ref_ptr = btrfs_item_ptr_offset(eb, path->slots[0]);
|
||||||
ref_end = ref_ptr + btrfs_item_size(eb, path->slots[0]);
|
ref_end = ref_ptr + btrfs_item_size(eb, path->slots[0]);
|
||||||
while (ref_ptr < ref_end) {
|
while (ref_ptr < ref_end) {
|
||||||
struct qstr name;
|
struct fscrypt_str name;
|
||||||
u64 parent_id;
|
u64 parent_id;
|
||||||
|
|
||||||
if (key->type == BTRFS_INODE_EXTREF_KEY) {
|
if (key->type == BTRFS_INODE_EXTREF_KEY) {
|
||||||
|
@ -1373,7 +1373,7 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans,
|
||||||
struct inode *inode = NULL;
|
struct inode *inode = NULL;
|
||||||
unsigned long ref_ptr;
|
unsigned long ref_ptr;
|
||||||
unsigned long ref_end;
|
unsigned long ref_end;
|
||||||
struct qstr name;
|
struct fscrypt_str name;
|
||||||
int ret;
|
int ret;
|
||||||
int log_ref_ver = 0;
|
int log_ref_ver = 0;
|
||||||
u64 parent_objectid;
|
u64 parent_objectid;
|
||||||
|
@ -1767,7 +1767,7 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans,
|
||||||
static noinline int insert_one_name(struct btrfs_trans_handle *trans,
|
static noinline int insert_one_name(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
u64 dirid, u64 index,
|
u64 dirid, u64 index,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_key *location)
|
struct btrfs_key *location)
|
||||||
{
|
{
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
|
@ -1845,7 +1845,7 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_dir_item *di,
|
struct btrfs_dir_item *di,
|
||||||
struct btrfs_key *key)
|
struct btrfs_key *key)
|
||||||
{
|
{
|
||||||
struct qstr name;
|
struct fscrypt_str name;
|
||||||
struct btrfs_dir_item *dir_dst_di;
|
struct btrfs_dir_item *dir_dst_di;
|
||||||
struct btrfs_dir_item *index_dst_di;
|
struct btrfs_dir_item *index_dst_di;
|
||||||
bool dir_dst_matches = false;
|
bool dir_dst_matches = false;
|
||||||
|
@ -2125,7 +2125,7 @@ static noinline int check_item_in_log(struct btrfs_trans_handle *trans,
|
||||||
struct extent_buffer *eb;
|
struct extent_buffer *eb;
|
||||||
int slot;
|
int slot;
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct qstr name;
|
struct fscrypt_str name;
|
||||||
struct inode *inode = NULL;
|
struct inode *inode = NULL;
|
||||||
struct btrfs_key location;
|
struct btrfs_key location;
|
||||||
|
|
||||||
|
@ -3423,7 +3423,7 @@ static int del_logged_dentry(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *log,
|
struct btrfs_root *log,
|
||||||
struct btrfs_path *path,
|
struct btrfs_path *path,
|
||||||
u64 dir_ino,
|
u64 dir_ino,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
u64 index)
|
u64 index)
|
||||||
{
|
{
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
|
@ -3470,7 +3470,7 @@ static int del_logged_dentry(struct btrfs_trans_handle *trans,
|
||||||
*/
|
*/
|
||||||
void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
|
void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_inode *dir, u64 index)
|
struct btrfs_inode *dir, u64 index)
|
||||||
{
|
{
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
|
@ -3509,7 +3509,7 @@ out_unlock:
|
||||||
/* see comments for btrfs_del_dir_entries_in_log */
|
/* see comments for btrfs_del_dir_entries_in_log */
|
||||||
void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
|
void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_inode *inode, u64 dirid)
|
struct btrfs_inode *inode, u64 dirid)
|
||||||
{
|
{
|
||||||
struct btrfs_root *log;
|
struct btrfs_root *log;
|
||||||
|
@ -5244,7 +5244,7 @@ static int btrfs_check_ref_name_override(struct extent_buffer *eb,
|
||||||
u32 this_len;
|
u32 this_len;
|
||||||
unsigned long name_ptr;
|
unsigned long name_ptr;
|
||||||
struct btrfs_dir_item *di;
|
struct btrfs_dir_item *di;
|
||||||
struct qstr name_str;
|
struct fscrypt_str name_str;
|
||||||
|
|
||||||
if (key->type == BTRFS_INODE_REF_KEY) {
|
if (key->type == BTRFS_INODE_REF_KEY) {
|
||||||
struct btrfs_inode_ref *iref;
|
struct btrfs_inode_ref *iref;
|
||||||
|
@ -7447,7 +7447,6 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *log = old_dir->root->log_root;
|
struct btrfs_root *log = old_dir->root->log_root;
|
||||||
struct btrfs_path *path;
|
struct btrfs_path *path;
|
||||||
struct fscrypt_name fname;
|
struct fscrypt_name fname;
|
||||||
struct qstr name;
|
|
||||||
|
|
||||||
ASSERT(old_dir_index >= BTRFS_DIR_START_INDEX);
|
ASSERT(old_dir_index >= BTRFS_DIR_START_INDEX);
|
||||||
|
|
||||||
|
@ -7455,7 +7454,6 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
|
||||||
&old_dentry->d_name, 0, &fname);
|
&old_dentry->d_name, 0, &fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
name = (struct qstr)FSTR_TO_QSTR(&fname.disk_name);
|
|
||||||
/*
|
/*
|
||||||
* We have two inodes to update in the log, the old directory and
|
* We have two inodes to update in the log, the old directory and
|
||||||
* the inode that got renamed, so we must pin the log to prevent
|
* the inode that got renamed, so we must pin the log to prevent
|
||||||
|
@ -7491,7 +7489,7 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
|
||||||
*/
|
*/
|
||||||
mutex_lock(&old_dir->log_mutex);
|
mutex_lock(&old_dir->log_mutex);
|
||||||
ret = del_logged_dentry(trans, log, path, btrfs_ino(old_dir),
|
ret = del_logged_dentry(trans, log, path, btrfs_ino(old_dir),
|
||||||
&name, old_dir_index);
|
&fname.disk_name, old_dir_index);
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
/*
|
/*
|
||||||
* The dentry does not exist in the log, so record its
|
* The dentry does not exist in the log, so record its
|
||||||
|
|
|
@ -87,11 +87,11 @@ int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_log_ctx *ctx);
|
struct btrfs_log_ctx *ctx);
|
||||||
void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
|
void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_inode *dir, u64 index);
|
struct btrfs_inode *dir, u64 index);
|
||||||
void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
|
void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
|
||||||
struct btrfs_root *root,
|
struct btrfs_root *root,
|
||||||
const struct qstr *name,
|
const struct fscrypt_str *name,
|
||||||
struct btrfs_inode *inode, u64 dirid);
|
struct btrfs_inode *inode, u64 dirid);
|
||||||
void btrfs_end_log_trans(struct btrfs_root *root);
|
void btrfs_end_log_trans(struct btrfs_root *root);
|
||||||
void btrfs_pin_log_trans(struct btrfs_root *root);
|
void btrfs_pin_log_trans(struct btrfs_root *root);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче