diff options
| author | Chris Mason <chris.mason@oracle.com> | 2007-11-06 15:09:29 -0500 | 
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:03:57 -0400 | 
| commit | e644d021e328d3902559e5db687383f2da85993c (patch) | |
| tree | 12fa85275a3333c709ddc03c2f4fd426b97a9dcf /fs/btrfs/struct-funcs.c | |
| parent | f84a8b362d9785ca1fa0598d8a90f35184bd8750 (diff) | |
| download | olio-linux-3.10-e644d021e328d3902559e5db687383f2da85993c.tar.xz olio-linux-3.10-e644d021e328d3902559e5db687383f2da85993c.zip  | |
Fix recursive KM_USER1 usage in btrfs_realloc_node
Signed-off-by: Chris Mason <chris.mason@oracle.com>
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 cf68fcf9b55..c5715a60554 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,				\  #include "ctree.h" +void btrfs_node_key(struct extent_buffer *eb, +		    struct btrfs_disk_key *disk_key, int nr) +{ +	unsigned long ptr = btrfs_node_key_ptr_offset(nr); +	if (eb->map_token && ptr >= eb->map_start && +	    ptr + sizeof(*disk_key) <= eb->map_start + eb->map_len) { +		memcpy(disk_key, eb->kaddr + ptr - eb->map_start, +			sizeof(*disk_key)); +		return; +	} else if (eb->map_token) { +		unmap_extent_buffer(eb, eb->map_token, KM_USER1); +		eb->map_token = NULL; +	} +	read_eb_member(eb, (struct btrfs_key_ptr *)ptr, +		       struct btrfs_key_ptr, key, disk_key); +}  |