diff options
Diffstat (limited to 'fs/btrfs/struct-funcs.c')
-rw-r--r-- | fs/btrfs/struct-funcs.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/btrfs/struct-funcs.c b/fs/btrfs/struct-funcs.c index cf68fcf9b552..c5715a60554c 100644 --- a/fs/btrfs/struct-funcs.c +++ b/fs/btrfs/struct-funcs.c | |||
@@ -95,3 +95,19 @@ void btrfs_set_##name(struct extent_buffer *eb, \ | |||
95 | 95 | ||
96 | #include "ctree.h" | 96 | #include "ctree.h" |
97 | 97 | ||
98 | void btrfs_node_key(struct extent_buffer *eb, | ||
99 | struct btrfs_disk_key *disk_key, int nr) | ||
100 | { | ||
101 | unsigned long ptr = btrfs_node_key_ptr_offset(nr); | ||
102 | if (eb->map_token && ptr >= eb->map_start && | ||
103 | ptr + sizeof(*disk_key) <= eb->map_start + eb->map_len) { | ||
104 | memcpy(disk_key, eb->kaddr + ptr - eb->map_start, | ||
105 | sizeof(*disk_key)); | ||
106 | return; | ||
107 | } else if (eb->map_token) { | ||
108 | unmap_extent_buffer(eb, eb->map_token, KM_USER1); | ||
109 | eb->map_token = NULL; | ||
110 | } | ||
111 | read_eb_member(eb, (struct btrfs_key_ptr *)ptr, | ||
112 | struct btrfs_key_ptr, key, disk_key); | ||
113 | } | ||