diff options
-rw-r--r-- | fs/btrfs/inode.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index ad961a598c99..fb74a536add3 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -61,7 +61,7 @@ | |||
61 | #include "props.h" | 61 | #include "props.h" |
62 | 62 | ||
63 | struct btrfs_iget_args { | 63 | struct btrfs_iget_args { |
64 | u64 ino; | 64 | struct btrfs_key *location; |
65 | struct btrfs_root *root; | 65 | struct btrfs_root *root; |
66 | }; | 66 | }; |
67 | 67 | ||
@@ -4977,7 +4977,9 @@ again: | |||
4977 | static int btrfs_init_locked_inode(struct inode *inode, void *p) | 4977 | static int btrfs_init_locked_inode(struct inode *inode, void *p) |
4978 | { | 4978 | { |
4979 | struct btrfs_iget_args *args = p; | 4979 | struct btrfs_iget_args *args = p; |
4980 | inode->i_ino = args->ino; | 4980 | inode->i_ino = args->location->objectid; |
4981 | memcpy(&BTRFS_I(inode)->location, args->location, | ||
4982 | sizeof(*args->location)); | ||
4981 | BTRFS_I(inode)->root = args->root; | 4983 | BTRFS_I(inode)->root = args->root; |
4982 | return 0; | 4984 | return 0; |
4983 | } | 4985 | } |
@@ -4985,19 +4987,19 @@ static int btrfs_init_locked_inode(struct inode *inode, void *p) | |||
4985 | static int btrfs_find_actor(struct inode *inode, void *opaque) | 4987 | static int btrfs_find_actor(struct inode *inode, void *opaque) |
4986 | { | 4988 | { |
4987 | struct btrfs_iget_args *args = opaque; | 4989 | struct btrfs_iget_args *args = opaque; |
4988 | return args->ino == btrfs_ino(inode) && | 4990 | return args->location->objectid == BTRFS_I(inode)->location.objectid && |
4989 | args->root == BTRFS_I(inode)->root; | 4991 | args->root == BTRFS_I(inode)->root; |
4990 | } | 4992 | } |
4991 | 4993 | ||
4992 | static struct inode *btrfs_iget_locked(struct super_block *s, | 4994 | static struct inode *btrfs_iget_locked(struct super_block *s, |
4993 | u64 objectid, | 4995 | struct btrfs_key *location, |
4994 | struct btrfs_root *root) | 4996 | struct btrfs_root *root) |
4995 | { | 4997 | { |
4996 | struct inode *inode; | 4998 | struct inode *inode; |
4997 | struct btrfs_iget_args args; | 4999 | struct btrfs_iget_args args; |
4998 | unsigned long hashval = btrfs_inode_hash(objectid, root); | 5000 | unsigned long hashval = btrfs_inode_hash(location->objectid, root); |
4999 | 5001 | ||
5000 | args.ino = objectid; | 5002 | args.location = location; |
5001 | args.root = root; | 5003 | args.root = root; |
5002 | 5004 | ||
5003 | inode = iget5_locked(s, hashval, btrfs_find_actor, | 5005 | inode = iget5_locked(s, hashval, btrfs_find_actor, |
@@ -5014,13 +5016,11 @@ struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, | |||
5014 | { | 5016 | { |
5015 | struct inode *inode; | 5017 | struct inode *inode; |
5016 | 5018 | ||
5017 | inode = btrfs_iget_locked(s, location->objectid, root); | 5019 | inode = btrfs_iget_locked(s, location, root); |
5018 | if (!inode) | 5020 | if (!inode) |
5019 | return ERR_PTR(-ENOMEM); | 5021 | return ERR_PTR(-ENOMEM); |
5020 | 5022 | ||
5021 | if (inode->i_state & I_NEW) { | 5023 | if (inode->i_state & I_NEW) { |
5022 | BTRFS_I(inode)->root = root; | ||
5023 | memcpy(&BTRFS_I(inode)->location, location, sizeof(*location)); | ||
5024 | btrfs_read_locked_inode(inode); | 5024 | btrfs_read_locked_inode(inode); |
5025 | if (!is_bad_inode(inode)) { | 5025 | if (!is_bad_inode(inode)) { |
5026 | inode_tree_add(inode); | 5026 | inode_tree_add(inode); |