diff options
| author | Chris Mason <chris.mason@oracle.com> | 2008-12-02 11:18:37 -0500 | 
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2008-12-02 11:18:37 -0500 | 
| commit | c99e905c945c462085c6d64646dc5af0c0a16815 (patch) | |
| tree | 3aed8630c0778c4a8b26a5d8eb2fba42fbb5e26c | |
| parent | 2a7108ad89e1ea9a30afbbece8b581a0532afd12 (diff) | |
| download | olio-linux-3.10-c99e905c945c462085c6d64646dc5af0c0a16815.tar.xz olio-linux-3.10-c99e905c945c462085c6d64646dc5af0c0a16815.zip  | |
Btrfs: Fix sparse endian warnings in struct-funcs.c
The btrfs macros to access individual struct members on disk were
sending the same variable to functions that expected different types
of endianness.  This fix explicitly creates a variable of the correct
type instead of abusing a single variable for mixed purposes.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
| -rw-r--r-- | fs/btrfs/struct-funcs.c | 17 | 
1 files changed, 12 insertions, 5 deletions
diff --git a/fs/btrfs/struct-funcs.c b/fs/btrfs/struct-funcs.c index cdedbe144d4..8d7f568009c 100644 --- a/fs/btrfs/struct-funcs.c +++ b/fs/btrfs/struct-funcs.c @@ -36,9 +36,14 @@   * The extent buffer api is used to do all the kmapping and page   * spanning work required to get extent buffers in highmem and have   * a metadata blocksize different from the page size. + * + * The macro starts with a simple function prototype declaration so that + * sparse won't complain about it being static.   */  #define BTRFS_SETGET_FUNCS(name, type, member, bits)			\ +u##bits btrfs_##name(struct extent_buffer *eb, type *s);		\ +void btrfs_set_##name(struct extent_buffer *eb, type *s, u##bits val);	\  u##bits btrfs_##name(struct extent_buffer *eb,				\  				   type *s)				\  {									\ @@ -59,14 +64,15 @@ u##bits btrfs_##name(struct extent_buffer *eb,				\  		int unmap_on_exit = (eb->map_token == NULL);		\  		unsigned long map_start;				\  		unsigned long map_len;					\ -		__le##bits res;						\ +		u##bits res;						\  		err = map_extent_buffer(eb, offset,			\  			        sizeof(((type *)0)->member),		\  				&map_token, &kaddr,			\  				&map_start, &map_len, KM_USER1);	\  		if (err) {						\ -			read_eb_member(eb, s, type, member, &res);	\ -			return le##bits##_to_cpu(res);			\ +			__le##bits leres;				\ +			read_eb_member(eb, s, type, member, &leres);	\ +			return le##bits##_to_cpu(leres);		\  		}							\  		p = (type *)(kaddr + part_offset - map_start);		\  		res = le##bits##_to_cpu(p->member);			\ @@ -101,8 +107,9 @@ void btrfs_set_##name(struct extent_buffer *eb,				\  				&map_token, &kaddr,			\  				&map_start, &map_len, KM_USER1);	\  		if (err) {						\ -			val = cpu_to_le##bits(val);			\ -			write_eb_member(eb, s, type, member, &val);	\ +			__le##bits val2;				\ +			val2 = cpu_to_le##bits(val);			\ +			write_eb_member(eb, s, type, member, &val2);	\  			return;						\  		}							\  		p = (type *)(kaddr + part_offset - map_start);		\  |